技術(shù)分享 | FPGA中block ram的特殊用法列舉
發(fā)布時(shí)間2020-10-27
分享
在FPGA中block ram是很常見(jiàn)的硬核資源,合理的利用這些硬件資源一定程度上可以優(yōu)化整個(gè)設(shè)計(jì),節(jié)約資源利用率,充分開(kāi)發(fā)FPGA芯片中的潛在價(jià)值,本文根據(jù)前人總結(jié)的一些用法,結(jié)合安路科技FPGA做簡(jiǎn)單總結(jié),說(shuō)明基本原理。
基本原理如下:
以1K*9bit雙端口配置模式為例,一個(gè)bram9k,可以當(dāng)作兩個(gè)512*9k rom
將A端口的地址最高位固定接0,B端口的地址最高位固定接1,則通過(guò)A端口只能訪問(wèn)0~511的地址空間,通過(guò)B端口只能訪問(wèn)512~1023地址空間,互不沖突,相當(dāng)于兩個(gè)小容量的rom
用法二:用作并行數(shù)據(jù)的多周期延時(shí)
基本原理如下:
將bram例化成簡(jiǎn)單雙端口模式,并將寫端口固定使能為寫,讀端口固定使能為讀。
將ram模式配置成 “讀優(yōu)先模式”,每次在寫某個(gè)地址之前會(huì)先把該地址的數(shù)據(jù)輸出
用一個(gè)模長(zhǎng)為N(N=4)的計(jì)數(shù)器,反復(fù)向ram中寫數(shù)據(jù),會(huì)得到一個(gè)延時(shí)為N+1的輸出數(shù)據(jù)
如下圖:

用法三:用作高速大規(guī)模計(jì)數(shù)器
基本原理如下:
以9Kbit bram為例,設(shè)置成雙端口,1k*9bit模式
A端口doa[7:0]是低8bit 計(jì)數(shù)器輸出,doa[8]是進(jìn)位信號(hào),給到B端口的使能
B端口dob[7:0]是高8bit計(jì)數(shù)器輸出。
由于B端口數(shù)據(jù)有一個(gè)周期延時(shí),將A端口數(shù)據(jù)延時(shí)一個(gè)周期之后與B端口構(gòu)成16bit計(jì)數(shù)器
也即一個(gè)9Kbit bram可以構(gòu)造成一個(gè)16bit的計(jì)數(shù)器
設(shè)計(jì)原型是兩個(gè)8bit的計(jì)數(shù)器級(jí)聯(lián)構(gòu)造16bit計(jì)數(shù)
rom初始化文件
addr | vaule |
0 | 1 |
1 | 2 |
2 | 3 |
3 | 4 |
… | … |
254 | 255 |
255 | 256 |
256 | 0 |
… | 0 |
1023 | 0 |

用法四:構(gòu)造高速?gòu)?fù)雜的狀態(tài)機(jī)
一般狀態(tài)機(jī)原理框圖如下:

基于rom的狀態(tài)機(jī)原理如下:

首先明確 狀態(tài)劃分,狀態(tài)跳轉(zhuǎn)條件,狀態(tài)輸出
將現(xiàn)態(tài)輸出與輸入給到rom_a的地址端,初始化值為輸出值
將現(xiàn)態(tài)輸出與跳轉(zhuǎn)條件給到rom_b的地址端,初始化值為次態(tài)輸出
若狀態(tài)不多,可以將rom_a與rom_b合并成一個(gè)真雙口的rom
關(guān)于更多細(xì)節(jié)請(qǐng)參考如下相關(guān)文檔:
1. 《基于FPGA的數(shù)字信號(hào)處理》 高亞軍 電子工業(yè)出版社
2. EF2_datahseet_V3.9