FPGA設(shè)計(jì)中,BRAM是一項(xiàng)非常關(guān)鍵的內(nèi)置存儲(chǔ)資源,F(xiàn)PGA開發(fā)需要熟練使用BRAM,今天再復(fù)習(xí)一下BRAM的知識(shí),包括BRAM的定義、組成、應(yīng)用等等。
(資料圖片)
一、BRAM介紹
1、BRAM的定義
RAM是Random Access Memory,也就是隨機(jī)訪問數(shù)據(jù)存儲(chǔ)器,RAM的內(nèi)部是一個(gè)一個(gè)小內(nèi)存單元(可以看成是一個(gè)小格子)組成。
每個(gè)內(nèi)存單元都對應(yīng)一個(gè)地址編號(hào)。
當(dāng)我們需要讀寫數(shù)據(jù)時(shí),就訪問對應(yīng)的內(nèi)存單元地址,很快地把數(shù)據(jù)寫入或者讀取出來。
BRAM是Block RAM,也就是FPGA中專用RAM資源,固定分布在FPGA內(nèi)部的特定位置。
分布式RAM(Distributed RAM或DRAM)是由FPGA的LUT邏輯資源組合而成。
2、BRAM的組成
BRAM在FPGA實(shí)際對應(yīng)的資源是RAMB36E1和RAMB18E1。
(1)RAMB36E1
RAMB36E1是一種具有36KB容量的Block RAM,由兩個(gè)獨(dú)立的18KB BRAM(Block RAM,RAMB18E1)組成。
一個(gè)36K的Block Memory可以配置成4種情形:
全部用于配置成36KB的BRAM;全部用于配置成36KB的FIFO;配置成18KB的BRAM和18KB的BRAM;配置成18KB的BRAM和18KB的FIFO;這里需要注意的是,不能配置成兩個(gè)18KB的FIFO,因?yàn)橐粋€(gè)Block Memory中間有一個(gè)FIFO Logic結(jié)構(gòu),它用于生成FIFO控制信號(hào),包括讀/寫地址等,由于它只有1個(gè)且不能共享,所以最多只能配置一個(gè)FIFO。
(2)RAMB18E1
RAMB18E1是一種具有18KB容量的Block RAM,是Xilinx FPGA重要的內(nèi)置Block RAM配置模塊,提供高速的同步存儲(chǔ)訪問能力。
(3)FPGA的BRAM數(shù)量
BRAM資源是FPGA中非常重要的資源,不同型號(hào)FPGA芯片的BRAM數(shù)量不一樣,以xilinx kintex 7系列為例。
(4)FPGA的BRAM性能
不同F(xiàn)PGA型號(hào),是否嵌入輸出寄存器,決定了BRAM運(yùn)行的時(shí)鐘頻率上限。
二、BRAM的應(yīng)用
1、ROM
BRAM可以實(shí)現(xiàn)ROM功能,只支持讀不支持寫,只需在定義IP和調(diào)用IP時(shí),初始化ROM值即可。
(1)單端口ROM(Single-port ROM)
只有一個(gè)端口可讀,應(yīng)用于程序代碼存儲(chǔ)、初始化ROM。
(2)雙端口ROM(Dual-port ROM)
有兩個(gè)獨(dú)立的讀數(shù)據(jù)端口,常用于在兩個(gè)處理器/系統(tǒng)之間共享的單 ROM。
2、RAM
(1)單端口RAM(Single-port RAM)
只有一個(gè)端口,這個(gè)端口支持讀數(shù)據(jù)或者寫數(shù)據(jù)。
(2)簡單雙端口ROM(Simple Dual-port RAM)
有兩個(gè)端口A和B,A端口支持寫,B端口支持讀。
(3)真雙端口ROM(Simple Dual-port RAM)
有兩個(gè)端口A和B,每個(gè)端口都支持讀和寫。
3、FIFO
FIFO可以通過BRAM來實(shí)現(xiàn)先進(jìn)先出功能,有兩種類型:同步fifo和異步fifo。
三、總結(jié)
BRAM是FPGA內(nèi)部專用的存儲(chǔ)資源,性能優(yōu)異但數(shù)量有限,每一個(gè)BRAM是36Kb大小,也可以配置成2個(gè)18Kb的BRAM,BRAM可以用來實(shí)現(xiàn)多種不同位寬和深度的RAM/ROM/FIFO,在FPGA中應(yīng)用非常廣泛和靈活。
使用BRAM可以實(shí)現(xiàn)FPGA芯片內(nèi)部的高速緩存、流水線等功能。合理利用這一硬件資源可以顯著優(yōu)化FPGA設(shè)計(jì)。
標(biāo)簽: