在设备或FIFO架构间使用FIFO传输数据
- 更新时间2025-05-20
- 阅读时长4分钟
FIFO可用于在FPGA VI的不同代码间、FPGA终端上的VI间及设备间传输数据。FIFO是一种以其接收到元素的顺序保存元素,并提供先入先出访问机制的数据架构。
下列示意图演示了通过FIFO的元素的动作。
通过下列方式使用FIFO传输数据:
- 在一个时钟域的并行循环间
- 时钟域间
- 点对点终端间
- 主控计算机和FPGA间
通过FIFO属性对话框创建和配置FIFO。
除通过VI定义的FIFO外,全部FIFO在项目中均具有相应的项。因此如使用通过VI定义FIFO外的FIFO,并将FPGA VI发送给另一用户时,必须发送整个项目。否则,该FPGA VI不能运行。
通过下列流程图判定最适合应用的FIFO配置。
注: 通过FPGA终端属性对话框的常规页面的终端信息组件,获取FPGA终端支持的内存块的数量信息。
下图为用于在同一个FPGA VI的两个单周期定时循环间传输数据的终端范围的FIFO。单周期定时循环位于两个不同的时钟域内。顶层循环使用80 MHz时钟,底层循环使用40 MHz时钟。在该范例中, 位于80 MHz时钟域内的FPGA I/O节点通过设备获取温度读数。FIFO方法节点写入数据至FIFO。如FIFO中的空元素不能立即写入数据,节点超时。应中止循环并设置写入超时?为TRUE。位于40 MHz时钟域的FIFO方法节点读取该数据,然后传输数据至“小于零?”函数。如温度小于零,函数设置设备结冰?显示控件为TRUE。如不能立即读取数据,FIFO方法节点超时。循环将终止并设置读取超时?显示控件的值为TRUE。
注: 如FIFO方法节点包含一个超时输入参数,节点位于单周期定时循环内时必须连线参数至一个零常量。
数据传输任务
通过下列方式传输数据:
- 在单个FPGA终端间—使用上述FIFO类型在VI间传输数据、传输数据至单个VI的循环或从单个VI传输数据至循环或在时钟域间传输数据。
- 终端范围的FIFO—如要FIFO在项目浏览器窗口可见并可配置,使用终端范围的FIFO。终端范围的FIFO在项目中具有相应的项。更新项目项将影响FIFO的全部实例。在项目浏览器窗口中,同一FPGA终端下的任意VI内的终端范围的FIFO均可用。如使用终端范围的FIFO并想要将其发送给另一用户,必须发送整个项目。否则FPGA VI将显示为断开。
- 通过VI定义FIFO—使用通过VI定义FIFO和FIFO名称控件,创建可重入子VI及避免资源冲突。在可重入FPGA VI中配置VI定义的FIFO时,LabVIEW为每个VI的实例创建独立的FIFO的副本。
- 在主机和FPGA间—使用直接内存访问(DMA) FIFO在主机和FPGA间传输大型的数据。该FIFO类型直接访问内存以从FPGA终端VI传输数据至主控VI,反之亦然。DMA FIFO在主机和FPGA终端上均分配内存,但仍用作单个FIFO。DMA FIFO通过在主机和FPGA间使用前面板输入控件和显示控件,提供了性能优势。
- 在两个点对点终端间—使用点对点FIFO在点对点终端间传输数据,无需通过主机发送数据。点对点数据流可用于在FPGA终端和非FPGA终端间传输数据,但终端必需支持使用点对点数据流架构。点对点的FIFO在项目中具有相应的项。
注: 如包含多个至同一FIFO的读取或写入,FIFO可作为共享资源。如要防止数据丢失和抖动,应避免同时发送读取或写入请求至单个FIFO。