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