distributed ram && block ram

xilinx spartan3an系列fpga:
       一個CLB包含4個SLICE,其中左邊兩個SLICE可用於存儲、移位寄存器和邏輯配置,稱爲SLICEM;右邊的兩個SLICE只能用於邏輯組合,稱爲SLICEL。每個SLICE中有2個LUT,2個存儲單元,多路複用器,進位鏈等。一個LUT和一個存儲單元稱爲一個LOGIC CELL,因此通常一個SLICE等效於2.25個LOGIC CELL。


1、bram 的輸出需要時鐘,dram在給出地址後既可輸出數據。
2、bram有較大的存儲空間,是fpga定製的ram資源;而dram是邏輯單元拼出來的,浪費LUT資源
3、dram使用更靈活方便些
補充:

1、較大的存儲應用,建議用bram;零星的小ram,一般就用dram。但這只是個一般原則,具體的使用得看整個設計中資源的冗餘度和性能要求
2、dram可以是純組合邏輯,即給出地址馬上出數據,也可以加上register變成有時鐘的ram。而bram一定是有時鐘的。
3、如果要產生大的FIFO或timing要求較高,就用BlockRAM。否則,就可以用Distributed RAM。
在Xilinx Asynchronous FIFO CORE的使用時,有兩種RAM可供選擇,Block memory和Distributed memory。差別在於,前者是使用FPGA中的整塊雙口RAM資源,而後者則是拼湊起FPGA中的查找表形成。


   - 問 -
分佈式和Block RAM的區別

- 答 -
CLB單元生成的distribute ram ,CLB是FPGA的基本單元,block ram也是基本單元,但分佈ram要由CLB單元生成。由CLB生成分佈式ram,消耗邏輯資源。而block ram則固定在fpga內,無論使用與否都存在於那裏。當block ram不夠用時可以用邏輯資源生成分佈式ram。

- 問 -
分佈式RAM是如何產生的?

- 答 -
這裏以Virtex4爲例說明:一個CLB由4個Slice組成,這4個Slice又分SliceM和SliceL,其中M是Memory的首字母,L是Logic的首字母,比較SliceM和SliceL,他們的區別就是SliceM的查找表具有RAM和ROM的功能,而SliceL的則不具備。所以SliceM比SliceL多的功能就是做存儲器和移位。這樣就很清楚了:SliceM可實現Distribut RAM,而Distribut RAM是由SliceM中的LUT實現。CLB的結構下所示:

                         Matric -------SliceM(2) SliceL(3)--------Y1
                         Switch ------ SliceM(0) SliceL(1)--------Y0
                                                | |
                                                | |
                                               X0 X1
這裏XNYM,X--列,N--列號,Y--行,M--行號,Xilinx FPGA內部結構是一種陣列結構。

- 問 -
請問SliceM除了可實現Distribut RAM之外還能實現什麼功能?
SliceM實現Distribut RAM時使用SliceM中的SRL16存儲單元麼?

- 答 -
如果看SliceM的圖,是看不到裏面有專麼這個SRL16的。其實SRL16就是一個基於查找表結構的移位寄存器。而SRL16以primitive形式存在而已。在userguide中,也畫了SRLC16的圖,它就是一個查找表。比較SliceM和SliceL,他們的區別就是SliceM的查找表具有RAM和ROM的功能,而SliceL的則不具備。所以SliceM比SliceL多的功能就是做存儲器和移位。“SliceM實現Distribut RAM時使用SliceM中的SRL16存儲單元麼?” 因爲SRL16用的就是LUT,所以,如果這個LUT作爲Distribute RAM使用了,則就不能再作爲SRL16使用了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章