某些fpga终端,包含板载的、可以动态随机访问的存储块(dram),这些存储块可以在fpgavi中直接访问,速率非常高。
dram可以用来缓存大批量的数据,而且速度可以非常快。针对一些特殊应用,比如:瞬时带宽非常高,而且有要保存原始数据的时候,就可以用dram做一个大的fifo缓冲。
dram的大小每块板卡可能不同,一般在皇冠最新app版本官网中对应板卡的说明中都会标明dram的大小(如果有dram的话)。比如,pxie-7966r就有512m的dram空间。
/zixunimg/eepwimg/sine.ni.com/nips/cds/view/p/lang/zhs/nid/210272

pxie-7966r拥有512m的板载内存(ddr2)
不同的板卡板载内存大小不同,同时ddr系列也可能不同,7976r拥有高达2gb的板载缓存,且为ddr3,容量更大且速度更快。
/zixunimg/eepwimg/sine.ni.com/nips/cds/view/p/lang/zhs/nid/212692

pxie-7976r拥有2gb的板载内存(ddr3)
本文将以pxie-7966r为例,手把手教大家使用drambank。
fpga存储器项使用dram
步骤一:将fpga终端添加到项目中
配置之前,先将fpga终端添加到项目中,在fpga终端的属性对话框中选择“mode”labviewfpgamemories,如下图。

dram配置mode
步骤二:配置为labviewfpgamemory
在labviewfpga中memory的主要特点是可以用来按地址存储索引数据,与fifo的先进先出而言,各有自己的适用范围。
把dram配置成memory之后,可以在fpga终端上面,“右键”创建memory,并在弹出的对话框中的“implementation”中选择“dram”;在drambank中可以选择是bank0还是bank1,对于7966r而言,每个bank有256m。

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

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

配置drambank的数据类型
步骤四:访问dram
memory中的数据访问是依据地址访问的,具体读写方式可以参考帮助文档。由于memory中访问是依据地址来操作的,因此,在程序中可以将一段地址以“环形”方式反复读写,这个也是在缓存数据时候经常用到的。比如:在fpga中实现“参考触发”方式的数据采集,就需要缓存一部分数据,并以环形fifo的方式进行读写,保证缓冲区中的数据是最新的一段。
使用dram进行编程,以下为示例,提供参考:分别是环形方式写数据到fifo中和环形方式读取fifo中的数据。

读取dram数据

向dram写入数据
或者也可以在范例查找器中直接搜索,参考范例如下

drammemory使用范例
参考链接:
在niflexrio中使用dram
/zixunimg/eepwimg/www.ni.com/white-paper/14571/zhs/
访问dram(fpga模块)
/zixunimg/eepwimg/zone.ni.com/reference/zhs-xx/help/371599n-0118/lvfpgaconcepts/fpg...
高效使用dram和nicompactrio
/zixunimg/eepwimg/zone.ni.com/reference/zhs-xx/help/373197k-0118/cserieshelp/dram_u...