FPGA 上有两种RAM, BLock Ram 和 Distributed Ram。
Block Ram:
1、bram是FPGA 中定制的ram资源。位置是固定的,例如BRAM就是一列一列分布的,这就可能造成用户逻辑和BRAM之间的route延时比较长。举个最简单的例子,在大规模FPGA中,如果用光所有的BRAM,性能一般会下降,甚至出现route不通的情况,就是这个原因。灵活的运用BRAM和distributed RAM可以有效利用FPGA资源,提升性能。如果需要用较多的BRAM,合理规划布局也可以提升性能,可以使用Planahead进行布局规划。
2、bram 的输出需要时钟
3、较大的存储应用,建议用bram;零星的小ram,一般就用dram。但这只是个一般原则
Distributed Ram:
1、dram就是用逻辑单元拼出来的,会浪费LUT 资源。
2、dram可以是纯组合逻辑,即给出地址马上出数据,也可以加上register变成有时钟的ram。
在Xilinx FIFO CORE的使用时,有两种RAM可供选择,Block memory和Distributed memory。差别在于,前者是使用FPGA中的整块双口RAM资源,而后者则是拼凑起FPGA中的查找表形
xilinx spartan3an系列fpga: |
有两种方式使用Block RAM。法一:使用IP core generator; 法二: 使用verilog 或者VHDL自己写一个模块。
猛然发现,我要实现的不是RAM,而是一个可以单次写一个,单次读多个的一个寄存器组。