天天看點

FPGA block RAM和distributed RAM差別(以及xilinx 7系列CLB資源)

差別之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沒有直接的線路連接配接,分屬于兩個不同的列。每列擁有獨立的快速進位鍊資源。

FPGA block RAM和distributed RAM差別(以及xilinx 7系列CLB資源)

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

FPGA block RAM和distributed RAM差別(以及xilinx 7系列CLB資源)

        多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間的級聯形成更大規模的移位寄存器。

FPGA block RAM和distributed RAM差別(以及xilinx 7系列CLB資源)

    MUX

       一個LUT可配置成4:1MUX.

       兩個LUT可配置成最多8:1 MUX

       四個LUT可配置成16個MUX

FPGA block RAM和distributed RAM差別(以及xilinx 7系列CLB資源)

   同樣可以通過連接配接多個SLICES達成更大規模設計,但是由于SLICE沒有直接連線,需要使用布線資源,會增加較大延遲。