LabVIEWCompactRIO 开发指南32 确保无损数据传输

简介: LabVIEWCompactRIO 开发指南32 确保无损数据传输

LabVIEWCompactRIO 开发指南32


确保无损数据传输


如果无损数据传输很重要,或者如果要将数据从多个I/O通道传输到同一DMA FIFO,则必须能够监控DMA机制的状态并对发生的任何故障做出反应。在FPGADMA写入节点上,超时通常表示DMA缓冲器已满。当它变为真时,应该监视并锁定它。必须从FPGA端执行此操作,因为仅从主机采样此寄存器不足以捕获快速转换。检测到超时事件后,还需要从中恢复。图5.24提供了检测和处理DMA FIFO超时情况的示例。


b8ee7d90be4342c3fc7d590b08f8dd99.png


图5.24.检测溢出并从中恢复


在此图中,DMA FIFO的超时事件在FPGA VI上受到监控。当发生超时事件时,超时寄存器设置为True。一旦超时寄存器设置为True,它被锁存,直到主机VI清除缓冲区并将复位寄存器设置为True。RT主机VI上的超时情况通过读取剩余元素来刷新缓冲区。一旦缓冲器被清除,复位寄存器将设置为true,FPGA VI上的采集将恢复。通过使用这种处理DMAFIFO超时事件的方法,可以检测缓冲区溢出并从中恢复,从而避免因缺少数据点而创建的bug。


避免缓冲区溢出


如果收到缓冲区溢出,则需要增加主机上的DMA FIFO缓冲区大小、在主机上读取更大的缓冲区或在主机上更频繁地读取。请记住,许多控制和监视应用程序只需要最新的数据,因此丢失数据对于系统来说可能不是问题,只要它在调用时返回最新的数据。


如果遇到缓冲区溢出,可以使用DMA配置调用增加主机FIFO缓冲区,如图5.25所示。对于FPGA到RT的传输,经常发生溢出,因为主机FIFO缓冲器(而不是FPGAFIFO缓冲器)不够大。通过FIFO属性页设置的DMAFIFO的大小仅决定占用FPGA内存的FPGAFIFO缓冲区的大小。默认情况下,主机FIFO缓冲区大小为10,000个或FPGAFIFO缓冲区大小的两倍,以较大者为准。


d3e36acfb38acaaa8c2840e31e2ee043.png


图5.25.增加主机上的DMA FIFO大小


增加缓冲区的大小有助于减少由偶发事件(如总线和主机处理器争用)引起的缓冲区溢出情况。但是,如果平均传输速率高于系统可以承受的速率,则无论缓冲区的大小如何,数据最终都会溢出缓冲区。使用适当大小的缓冲区减少缓冲区溢出情况的一种方法,是尝试一次读取大量数据,这样可以降低每个数据单元的开销,从而提高整体吞吐量。


CompactRIOWaveform Reference Library


如果应用需要使用DMA FIFO来从FPGA传输模拟数据,可以利用NI开发的CompactRIO波形参考库来快速开始应用开发。该参考应用程序介绍了CompactRIO波形数据采集VI和示例源代码,并支持三角积分和SAR(扫描)模块。

2353a335e1fe4b88cbce8b51198d83b8.png



图5.26.使用CompactRIOWaveform参考库API的连续采集


CompactRIO波形参考库包含一个类似NI-DAQmx的API,该API在LabVIEW实时中执行,并将原始模拟数据转换为波形数据类型。波形数据类型使得向UI显示多个I/O通道以及与常见的数据记录API接口(如技术数据管理流(TDMS))变得容易。API还会根据配置的比例将数据转换为适当的工程单位。


349e9cef2a68e0383daaa8e67cf7852b.png


图5.27.使用CompactRIO波形参考AP


该库包括一个FPGA VI,需要稍微修改该VI,以参考系统中使用的I/O模块。对于大多数应用,只需要修改FPGA VI。此VI旨在在使用DMA FIFO时提供最佳流性能,包括用于监控和处理缓冲区溢出情况的机制。每当使用DMA FIFO从一个或多个模拟通道流式传输数据时,请使用此FPGA VI模板作为开始。


可以在NI开发人员专区白皮书NICompactRIO波形参考库中找到更多信息包括安装文件。


DeltaSigmaAcquisition.lvpj和SARAcquisition.lvpj在

安装库后可在\Program Files\National Instruments\LabVIEW[Version]\user.lib\cRIOWfm\_exampleProjects中找到。


其他参考资料


■ How DMATransfers Work


■ BestPractices for DMA Applications


有关在FPGA目标上使用DMA FIFO的更多信息,请参阅LabVIEW帮助文档TransferringData Using Direct Memory Access。


通过中断同步FPGA和主机VI


LabVIEW FPGA具有中断,允许主机VI等待FPGA引发指定的中断,从而同步FPGA和主机VI。FPGA VI可以阻塞,直到主机确认中断。这样就无需持续检查FPGA寄存器的状态以查看是否已设置给定标志,并且在未引发中断时降低了CPU使用率。在单核主机上,与轮询和睡眠方法相比,可以实现相对良好的延迟并降低CPU负载。图5.28中的示例显示了如何在FPGA上实现中断。此示例称为同步中断方法,可在NI示例查找器中找到。

7de28573fa409323301700528cd40a7f.png




图5.28.用于发送中断的LabVIEW FPGA编程结构


中断提供简单的代码和简单的API,但应该注意以下事项:


■处理主机侧的中断通常涉及5μs至50μs的开销。此响应延迟可能是可以接受的,具体取决于应用程序或事件的频率。


■如果不希望FPGA VI在中断被确认之前阻塞,则应添加单独的FPGAloop来发送中断。


■中断不是多核目标上延迟最低的选项。通过专用于CPU内核来持续监控FPGA寄存器(无休眠),可以获得最快的响应时间。


其他参考资料


■ UsingInterrupts on the FPGA to Synchronize the FPGA and Host


■ SynchronizingFPGA VIs and Host VIs Using Interrupts


需要说明的是,上述的例程和文档,都是可以下载的,双击即可打开,其中压缩文件是可以采用粘贴复制的方式,拷贝到硬盘上。这不是图片,各位小伙伴看到后尝试一下,这个问题就不用加微信咨询了。有关LabVIEW编程、LabVIEW开发等相关项目,可联系们。附件中的资料这里无法上传,可去公司网站搜索下载。

相关文章
|
7月前
|
存储 API 异构计算
LabVIEWCompactRIO 开发指南30 目标间通信
LabVIEWCompactRIO 开发指南30 目标间通信
48 3
LabVIEWCompactRIO 开发指南30 目标间通信
|
7月前
|
存储 异构计算 Windows
LabVIEWCompactRIO 开发指南29 数据通信
LabVIEWCompactRIO 开发指南29 数据通信
50 4
|
7月前
|
网络协议 安全 数据挖掘
LabVIEWCompactRIO 开发指南12 LabVIEWCompactRIO 开发指南12 第四章网络通信的最佳实践
LabVIEWCompactRIO 开发指南12 LabVIEWCompactRIO 开发指南12 第四章网络通信的最佳实践
45 2
|
7月前
|
监控 安全 异构计算
LabVIEWCompactRIO 开发指南10 LabVIEWFPGA看门狗和故障保护
LabVIEWCompactRIO 开发指南10 LabVIEWFPGA看门狗和故障保护
54 3
|
7月前
|
存储 网络协议 安全
LabVIEWCompactRIO 开发指南8 消除不必要的驱动因素
LabVIEWCompactRIO 开发指南8 消除不必要的驱动因素
48 3
|
7月前
|
监控 Linux API
LabVIEWCompactRIO 开发指南15 托管和监控网络发布的共享变量
LabVIEWCompactRIO 开发指南15 托管和监控网络发布的共享变量
79 0
LabVIEWCompactRIO 开发指南15 托管和监控网络发布的共享变量
|
7月前
|
异构计算
LabVIEWCompactRIO 开发指南第六章44 同步模块
LabVIEWCompactRIO 开发指南第六章44 同步模块
40 1
|
7月前
|
异构计算
LabVIEWCompactRIO 开发指南第六章41 同步模块
LabVIEWCompactRIO 开发指南第六章41 同步模块
53 1
|
7月前
|
测试技术 异构计算
LabVIEWCompactRIO 开发指南26 同步循环
LabVIEWCompactRIO 开发指南26 同步循环
41 2
|
7月前
|
测试技术 C++ 异构计算
LabVIEWCompactRIO 开发指南34 在模拟模式下调试
LabVIEWCompactRIO 开发指南34 在模拟模式下调试
54 1