一. 概述
Xilinx FPGA有三种可以用来做片上存储(RAM,ROM等等)的资源,第一个就是Flip Flop;第二种就是SLICEM里面LUT;第三种就是Block RAMs资源。
在用Vivado建立工程的时候选择器件的时候就可以看到这些资源的多少。如下图所示。
这里面的LUT资源是所有的LUT资源,包括SLICEL和SLICEM里面,如果大家想获得其中SLICEM的LUT资源多少,需要查看相关器件手册。如果大家想要了解底层,SLICEM中的LUT是如何形成RAM等资源的原理,大家可以回顾文章《初识FPGA CLB之LUT实现RAM》。
FlipFlop即触发器资源,一个FlipFlop即一个1bit的触发器。
不同系列的器件,一个Block RAMs的内存大小不一样。例如7系列的FPGA器件当中一个Block RAM的内存大小为36Kbits,然后一个Block RAM可以被配置成两个独立的18Kbits大小RAM。一个Block RAM同样也可以被配置成32Kx1,16Kx2,8Kx4,4Kx9,2Kx18,1Kx36,512x72大小的双端口RAM(例如8Kx4表示输入输出数据端口为4bit,每4bit一个地址,8K大小的地址)。
二. 不同资源的利用方式
不同的资源有对应的利用方式。
我们在Verilog里面定义的reg,在综合映射的时候就是映射成了FlipFlop资源。例如利用二维的reg去描述一个RAM,综合出来所利用的资源就是FlipFlop。
如下所示,定义了一个2维的存储空间mem,数据位宽为22(D_WL),地址大小为26(DEPTH)。
上面的代码综合后利用的资源信息如下。可以看到上面我们定义的mem的大小为
D_WL*DEPTH=22*26=572bit
可以看到正好用了572个FF(FlipFlop)。
如果想要利用SLICEM里面的LUT来做RAM/ROM,其例化方式可以在Vivado的Language Templates工具里面找到对应的方法。如下所示,对应的名字为Distributed RAM/ROM。可以看到有不同数据位宽的RAM/ROM的定义方法。
如果想利用Block RAMs资源,其例化方式也可以在Vivado的Language Templates工具里面找到对应的方法。
如果想形成内存更大的RAM/ROM,就需要例化多个上述基本的RAM/ROM,然后自己通过控制逻辑将他们组合起来。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)