FPGA存储器项
- 更新时间2025-03-06
- 阅读时长5分钟
单时钟域内使用FPGA应用的主要数据存储方式为存储器项。
LabVIEW FPGA模块具有两种类型的存储器项:
- VI定义的存储器项:使用VI定义的存储器项和存储器名称控件创建可重用子VI并避免资源冲突。在可重入FPGA VI中使用VI定义的存储器项时,LabVIEW为每个VI的实例创建独立的FIFO的副本。
- 终端范围的存储器项:如需存储器项可见并可通过项目浏览器窗口配置,使用终端范围的存储器项。终端范围的存储器项按名称被静态捆绑至项目中的相应项,意味着更新项目的项将影响程序框图中存储器项的全部实例。终端范围的存储器项在项目浏览器窗口中同一终端下的任意FPGA VI内均可用。如使用终端范围的存储器项并想要将其发送给另一用户,必须发送整个项目。否则FPGA VI将显示为断开。
下列程序框图为使用存储器方法节点读取和写入存储器项的方法,该节点配置用于终端范围的存储器项。该VI由内存读取数据、递增数据并使用新数据覆盖同一内存位置的值。
存储器实现选项
使用存储器属性对话框指定实现存储器项的方式。展开执行下拉菜单显示可用的存储器项,如下列示意图所示。
存储器块
存储器块(通常也被称为块随机访问内存、块RAM或BRAM)是用于数据存储的内部FPGA资源。使用存储器块的存储器项相对于其他存储器项采用高速时钟速率编译。存储器块可被配置为读写访问或双端口读取访问。或者使用通过存储器块实现的存储器项在一个时钟域内写入数据,从另一个时钟域读取数据。在上述操作中,每个存储器项仅使用一个写入方节点和一个读取方节点。存储器块不占用FPGA资源。除非需要使用其他类型存储器的特有特性,否则请优先考虑使用存储器块。
![]() | 警告 当在多时钟域使用块内存实现存储器项时, 可同时从同一地址读取和写入数据。但可能导致读取不正确的数据。 |
读取延迟周期的值增加将增加内部流水线层级,同时也会增加编译设计的最大频率。可在存储器属性对话框的常规页面,为使用存储器块实现的存储器项指定读取延迟周期的值。请参考下列表格,判定设计使用的读取延迟周期的数量。
读取延迟周期 | 推荐使用 | 最大频率的影响 | |
---|---|---|---|
0 | 使用查找表实现存储器时可用 | 无更改 | |
1 | 如需要尽可能快的获取有效数据,但没有足够的FPGA资源以使用查找表,此时选择该设置 | 无更改 | |
2(默认) | 多数应用的最大频率的推荐设置 | 增加 | |
3 | 需要存储大量数据时的推荐设置 | 增加 | |
![]() | 提示 如Xilinx编译报告显示应用程序使用超过一个存储器块,使用该设置。 |
LUT(查找表)
LUT(即分布式RAM)由FPGA上硬连线的逻辑门组成。由于LUT可用作逻辑资源或存储器,因为LUT将消耗FPGA资源。在下列情况下使用查找表:
- 在单周期定时循环中访问该存储器,且需要在用户调用节点的同一时钟周期读取存储器项的数据。
- 可用存储器块数量有限
动态RAM (DRAM)
DRAM是某些FPGA终端的外部可用存储器形式。DRAM提供大量的存储空间。但由于DRAM位于FPGA外部,应用不能在单个时钟周期内从DRAM获取数据。DRAM还需要连续的访问,意味着每次仅能使用一个命令访问内存。连续访问不能使用确定性时序,且根据等待访问DRAM的命令数量,可能增加应用的执行时间。
DRAM可用时,用其存储无法存储在FPGA上的大型数据。如DRAM不可用于终端,存储器属性对话框的实现下拉菜单中不会列出DRAM选项。