手把手教你FPGA存储器项使用DRAM

FPGA中的存储块DRAM

某些FPGA终端,包含板载的、可以动态随机访问的存储块(DRAM),这些存储块可以在FPGA VI中直接访问,速率非常高。

DRAM可以用来缓存大批量的数据,而且速度可以非常快。针对一些特殊应用,比如:瞬时带宽非常高,而且有要保存原始数据的时候,就可以用DRAM做一个大的FIFO缓冲。

DRAM的大小每块板卡可能不同,一般在官网中对应板卡的说明中都会标明DRAM的大小(如果有DRAM的话)。比如,PXIe-7966R就有512M的DRAM空间。
http://sine.ni.com/nips/cds/view/p/lang/zhs/nid/210272
PXIe-7966R拥有512M的板载内存(DDR2)
PXIe-7966R拥有512M的板载内存(DDR2)

不同的板卡板载内存大小不同,同时DDR系列也可能不同,7976R拥有高达2GB的板载缓存,且为DDR3,容量更大且速度更快。
http://sine.ni.com/nips/cds/view/p/lang/zhs/nid/212692
PXIe-7976R拥有2GB的板载内存(DDR3)
PXIe-7976R拥有2GB的板载内存(DDR3)

本文将以PXIe-7966R为例,手把手教大家使用DRAM Bank。

FPGA存储器项使用DRAM

步骤一:将FPGA终端添加到项目中
配置之前,先将FPGA终端添加到项目中,在FPGA终端的属性对话框中选择“Mode” LabVIEW FPGA Memories,如下图。
DRAM配置Mode
DRAM配置Mode

步骤二:配置为LabVIEW FPGA Memory
在LabVIEW FPGA中Memory的主要特点是可以用来按地址存储索引数据,与FIFO的先进先出而言,各有自己的适用范围。
把DRAM配置成Memory之后,可以在FPGA终端上面,“右键”创建Memory,并在弹出的对话框中的“Implementation”中选择“DRAM”;在DRAM bank中可以选择是Bank0还是Bank1,对于7966R而言,每个Bank有256M。
对参数进行配置
对参数进行配置

步骤三:设置Memory参数
1)设置需要的点数
系统会依据设置的值计算出一个实际分配的元素数目,同时可以关注剩余的DRAM大小有多少。
2)设置Data type
可以设置Memory的数据类型。数据类型可以选择的各种常用的数据类型,同时也可以设置为“Customer Control”,特别要注意的是“数据的最大位宽”。
Data type参数设置
Data type参数设置

DRAM中每个访问单元是独立的,设置的元素个数相同,数据类型不同的时候,配置的Memory在DRAM Bank中占用的空间是相同的。所以,为了能够最大限度的使用DRAM中的空间,可以在这里设置Customer Control,然后选择一个含有两个U64元素的簇(2个U64刚好占用128位带宽),如下图所示。
配置DRAM Bank的数据类型
配置DRAM Bank的数据类型

步骤四:访问DRAM
Memory中的数据访问是依据地址访问的,具体读写方式可以参考帮助文档。由于Memory中访问是依据地址来操作的,因此,在程序中可以将一段地址以“环形”方式反复读写,这个也是在缓存数据时候经常用到的。比如:在FPGA中实现“参考触发”方式的数据采集,就需要缓存一部分数据,并以环形FIFO的方式进行读写,保证缓冲区中的数据是最新的一段。

使用DRAM进行编程,以下为示例,提供参考:分别是环形方式写数据到FIFO中和环形方式读取FIFO中的数据。
读取DRAM数据
读取DRAM数据
向DRAM写入数据
向DRAM写入数据

或者也可以在范例查找器中直接搜索,参考范例如下
DRAM Memory使用范例
DRAM Memory使用范例

参考链接
在NIFlexRIO中使用DRAM
http://www.ni.com/white-paper/14571/zhs/
访问DRAM(FPGA模块)
http://zone.ni.com/reference/zhs-XX/help/371599N-0118/lvfpgaconcepts/fpg...
高效使用DRAM和NI CompactRIO
http://zone.ni.com/reference/zhs-XX/help/373197K-0118/cserieshelp/dram_u...

文章来源: NI卓越工程师微信公众号(微信号:NI_ELP)