系列文章目錄:FPGA原理與結(jié)構(gòu)(0)——目錄與傳送門
一、BRAM簡介
? ? ? ? 大家對于RAM應該并不陌生,RAM就是一張可讀可寫的存儲表,它經(jīng)常被拿來與ROM進行對比,相比之下,ROM只可讀。而在FPGA中,RAM一般可以分成兩種,一種是使用LUT資源組成的分布式RAM(DRAM),另一種就是塊RAM(BRAM),這里我們討論的是BRAM,關于DRAM的內(nèi)容,可以閱讀:FPGA原理與結(jié)構(gòu)——分布式RAM(Distributed RAM,DRAM)。
? ? ? ? BRAM就是嵌入在FPGA中的整塊的RAM資源,是FPGA中重要的存儲資源。在早期的FPGA架構(gòu)中,基本上只使用基于查找表和觸發(fā)器的邏輯塊實現(xiàn)用戶電路,可用作存儲要素的就只有邏輯塊中的觸發(fā)器。因此很難在芯片上保存大量數(shù)據(jù),而有這樣需求的應用需要在FPGA上連接外部存儲器。但是在很多情況下,F(xiàn)PGA和外部存儲器的帶寬會成為系統(tǒng)的瓶頸,從而限制整體性能。因此商用的FPGA架構(gòu)在發(fā)展中開始集成高效的片上存儲器。這就是我們BRAM的由來。
二、BRAM的特性和分布
? ? ? ? 在xilinx 7系類的FPGA里,一個BRAM的大小是36Kb,它也可以被拆分成2個獨立的18Kb BRAM來使用,這就是xilinx 7系類里RAM的最小實現(xiàn)形式了。也就是說使用的BRAM在使用的時候必須是整塊進行使用的,一塊BRAM最小就是18Kb。舉個例子,我們需要存儲40Kb的資源,就需要使用:一塊36Kb的RAM+一塊18Kb的RAM,這樣就造成了14Kb的資源浪費。
? ? ? ? 兩個相鄰的RAM還可以組合來構(gòu)成更大的RAM。
? ? ? ? 每塊36Kb的RAM根據(jù)深度和位寬的不同,可以配置成如下形式(深度×位寬):32K x 1, 16K x 2, 8K x 4, 4K x 9, 2K x 18, 1K x 36, or 512 x 72(簡單雙端口模式下,后面會詳細說)。
? ? ? ? 每塊18Kb的RAM根據(jù)深度和位寬的不同,可以配置成如下形式(深度×位寬):16K x 1, 8K x2 , 4K x 4, 2K x 9, 1K x 18 or 512 x 36(簡單雙端口模式下,后面會詳細說)。
? ? ? ? 根據(jù)FPGA型號的不同,每塊FPGA中蘊含的BRAM資源數(shù)量也是不一樣的,用戶可以根據(jù)自己的需求和成本選擇最適合自己的型號,我們以下圖為例,這只是xilinx的一部分型號對應的BRAM資源,可以看到不同的device對應的BRAM數(shù)量和分布情況有所不同。
? ? ? ? ?在如今xilinx的FPGA中普遍使用的是ASMBL架構(gòu),所以BRAM在FPGA也是按列分布的。
三、BRAM的使用?
? ? ? ? BRAM的作用是非常巨大的,也是具有一定復雜性的,BRAM可以被配置成RAM,ROM或者FIFO,我們一個一個來討論。
1、RAM
? ? ? ? 首先就是最直觀的RAM的情況,但是就算是用作RAM,也有著許多不同的工作模式:
(1)Single Port :單口 RAM
? ? ? ? 讀寫共用一個地址總線,在同一個端口,但是不能同時進行
?(2)Simple dual port:簡單雙口 RAM
?????????一個寫通道,一個讀通道,通過A端口寫入數(shù)據(jù)的同時可以通過B端口讀出數(shù)據(jù)
?(3)True Dual Port:真雙口 RAM
?????????兩個通道都支持讀寫,互相獨立。A端口和B端口可同時讀寫數(shù)據(jù)
?2、ROM
? ? ? ? ?ROM其實也非常好理解,甚至是BRAM應用中最簡單的部分,因為ROM可以理解成只具備讀功能,不具備寫功能的RAM。
(1)Single Port :單口 ROM
? ? ? ? 不能寫入,只有一個端口用于數(shù)據(jù)讀
(2)Dual port:雙端口 ROM
? ? ? ? 不可寫,但是有2個端口用于讀,兩個端口讀取數(shù)據(jù)的位寬可以不同,但是必須是整數(shù)倍關系
3、FIFO
????????FIFO是英文First In First Out 的縮寫,是一種先進先出的數(shù)據(jù)緩存器,與普通存儲器的區(qū)別是沒有外部讀寫地址線,使用簡單,缺點就是只能順序讀、寫入數(shù)據(jù),其數(shù)據(jù)地址由內(nèi)部讀寫指針自動加1完成,不能像普通存儲器那樣可以由地址線決定讀取或?qū)懭肽硞€指定的地址。
????????FIFO的作用:
????????????????(1)不同時鐘域之間的數(shù)據(jù)傳輸;
????????????????(2)對不同寬度的數(shù)據(jù)位寬轉(zhuǎn)換;
????????????????(3)數(shù)據(jù)緩存
????????根據(jù)FIFO工作的時鐘域,可以將FIFO分為:
????????(1)同步FIFO:讀時鐘和寫時鐘為同一個時鐘,在時鐘沿來臨時同時發(fā)生讀寫操作。
?????????????? 作用:位寬轉(zhuǎn)換或數(shù)據(jù)緩存。
????????(2)異步FIFO:讀寫時鐘不一致,讀寫操作是互相獨立的。
?????????????? 作用:多比特數(shù)據(jù)跨時鐘域。
?四、7系類BRAM的一些額外特性
1、可選輸出寄存器
????????BRAM的輸出還內(nèi)嵌了個寄存器,我們打拍輸出的時候可以使用它,這樣就能省下SLICE上的寄存器資源,而且就算我們使用SLICE的FF資源,會引入一個較大的時延,這樣做還能降低時延問題。
2、BRAM的級聯(lián)?
? ? ? ? 在xilinx的FPGA里,2塊相鄰的BRAM可以在不消耗CLB資源的情況下就級聯(lián)形成更大的RAM。任意兩個相鄰的BRAM都可以進行級聯(lián)文章來源:http://www.zghlxwxcb.cn/news/detail-714120.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-714120.html
到了這里,關于FPGA原理與結(jié)構(gòu)(8)——塊RAM(Block RAM,BRAM)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!