差別之1
block ram 的輸出需要時鐘,distributed ram在給出位址後既可輸出資料。
差別之2
distributed ram使用更靈活友善些
差別之3
block ram有較大的存儲空間,distributed ram浪費LUT 資源
補充:
1,實體上看,block ram是fpga中定制的ram資源,distributed ram就是用邏輯單元拼出來的。
2,較大的存儲應用,建議用block ram ; 零星的小ram,一般就用distributed ram。但這隻是個一般原則,具體的使用得看整個設計中資源的備援度和性能要求
3,distributed ram可以是純組合邏輯,即給出位址馬上出資料,也可以加上register變成有時鐘的ram。而block ram一定是有時鐘的。
原文位址:塊RAM與分布式RAM的差別
塊RAM 和 分布式RAM
① Xilinx 的FPGA結構主要由CLB、IOB、IR、Block RAM組成,其中CLB是最最重要的資源。
② 以V5為例,1個CLB包括的2個Slice,每個Slice包括4個6輸入查找表,4個FlipFlop和相關邏輯。在這裡需要注意的是Slice分兩種,SliceM和SliceL,它們都包括前面的東西,但是很特别的是SliceM還增加了基于查找表的分布式RAM和移位寄存器。
③ 每個CLB中都包含SliceL,但并不是每個CLB中都包含SliceM,整個一塊V5晶片中SliceM和SliceL的比例為1:3。SliceM的放置有一定的規則,這裡不做闡述。
④ Xilinx的FPGA中有 分布式RAM 和 Block RAM 兩種存儲器。用分布式RAM 時其實要用到其所在的SliceM,是以要占用其中的邏輯資源;而Block RAM 是單純的存儲資源,但是要一塊一塊的用,不像分布式RAM 想要多少bit都可以。
⑤ 使用者申請存儲資源,FPGA先提供Block RAM ,當Block RAM 數量不夠時再用分布式RAM補充。
以下分析基于xilinx 7系列
CLB是xilinx基本邏輯單元,每個CLB包含兩個slices,每個slices由4個(A,B,C,D)6輸入LUT和8個寄存器組成。
同一CLB中的兩片slices沒有直接的線路連接配接,分屬于兩個不同的列。每列擁有獨立的快速進位鍊資源。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CM1MzM1kjMjNTYmljMlV2YxYzXzQTO1gTMxMzLcJTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
slice分為兩種類型 SLICEL, SLICEM . SLICEL可用于産生邏輯,算術,ROM。 SLICEM除以上作用外還可配置成分布式RAM或32位的移位寄存器。每個CLB可包含兩個SLICEL或者一個SLICEL與一個SLICEM.
7系列的LUT包含6個輸入 A1 -A6 , 兩個輸出 O5 , O6 .
可配置成6輸入查找表,O6此時作為輸出。或者兩個5輸入的查找表,A1-A5作為輸入 A6拉高,O5,O6作為輸出。
一個LUT包含6個輸入,邏輯容量為2^6bit,為實作7輸入邏輯需要2^7容量,對于更多輸入也一樣。每個SLICES有4個LUT,256bit容量能夠實作最多8bit輸入的邏輯。為了實作此功能,每個SLICES還包括3個MUX(多路選擇器)
F7AMUX 用于産生7輸入的邏輯功能,用于連接配接A,B兩個LUT
F7BMUX 用于産生7輸入的邏輯功能, 用于連接配接C,D兩個LUT
F8MUX 用于産生8輸入的邏輯功能, 用于連接配接4個LUT
對于大于8輸入的邏輯需要使用多個SLICES, 會增加邏輯實作的延時。
一個SLICES中的4個寄存器可以連接配接LUT或者MUX的輸出,或者被直接旁路不連接配接任何邏輯資源。寄存器的置位/複位端為高電平有效。隻有CLK端能被設定為兩個極性,其他輸入若要改變電平需要插入邏輯資源。例如低電平複位需要額外的邏輯資源将rst端輸入取反。但設為上升/下降沿觸發寄存器不會帶來額外消耗。
分布式RAM
SLICEM可以配置成分布式RAM,一個SLICEM可以配置成以下容量的RAM
多bit的情況需要增加相應倍數的LUT進行并聯。
分布式RAM和 BLOCK RAM的選擇遵循以下方法:
1. 小于或等于64bit容量的的都用分布式實作
2. 深度在64~128之間的,若無額外的block可用分布式RAM。 要求異步讀取就使用分布式RAM。資料寬度大于16時用block ram.
3. 分布式RAM有比block ram更好的時序性能。 分布式RAM在邏輯資源CLB中。而BLOCK RAM則在專門的存儲器列中,會産生較大的布線延遲,布局也受制約。
移位寄存器(SLICEM)
SLICEM中的LUT能在不使用觸發器的情況下設定成32bit的移位寄存器, 4個LUT可級聯成128bit的移位寄存器。并且能夠進行SLICEM間的級聯形成更大規模的移位寄存器。
MUX
一個LUT可配置成4:1MUX.
兩個LUT可配置成最多8:1 MUX
四個LUT可配置成16個MUX
同樣可以通過連接配接多個SLICES達成更大規模設計,但是由于SLICE沒有直接連線,需要使用布線資源,會增加較大延遲。