技术分享 | fpga中block ram的特殊用法列举-凯发官网入口
发布时间2020-10-27
在fpga中block ram是很常见的硬核资源,合理的利用这些硬件资源一定程度上可以优化整个设计,节约资源利用率,充分开发fpga芯片中的潜在价值,本文根据前人总结的一些用法,结合安路科技fpga做简单总结,说明基本原理。
基本原理如下:
以1k*9bit双端口配置模式为例,一个bram9k,可以当作两个512*9k rom
将a端口的地址最高位固定接0,b端口的地址最高位固定接1,则通过a端口只能访问0~511的地址空间,通过b端口只能访问512~1023地址空间,互不冲突,相当于两个小容量的rom
基本原理如下:
将bram例化成简单双端口模式,并将写端口固定使能为写,读端口固定使能为读。
将ram模式配置成 “读优先模式”,每次在写某个地址之前会先把该地址的数据输出
用一个模长为n(n=4)的计数器,反复向ram中写数据,会得到一个延时为n 1的输出数据
如下图:
基本原理如下:
以9kbit bram为例,设置成双端口,1k*9bit模式
a端口doa[7:0]是低8bit 计数器输出,doa[8]是进位信号,给到b端口的使能
b端口dob[7:0]是高8bit计数器输出。
由于b端口数据有一个周期延时,将a端口数据延时一个周期之后与b端口构成16bit计数器
也即一个9kbit bram可以构造成一个16bit的计数器
设计原型是两个8bit的计数器级联构造16bit计数
rom初始化文件
addr | vaule |
0 | 1 |
1 | 2 |
2 | 3 |
3 | 4 |
… | … |
254 | 255 |
255 | 256 |
256 | 0 |
… | 0 |
1023 | 0 |
一般状态机原理框图如下:
基于rom的状态机原理如下:
首先明确 状态划分,状态跳转条件,状态输出
将现态输出与输入给到rom_a的地址端,初始化值为输出值
将现态输出与跳转条件给到rom_b的地址端,初始化值为次态输出
若状态不多,可以将rom_a与rom_b合并成一个真双口的rom
关于更多细节请参考如下相关文档:
1. 《基于fpga的数字信号处理》 高亚军 电子工业出版社
2. ef2_datahseet_v3.9