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开发等相关项目,可联系们。附件中的资料这里无法上传,可去公司网站搜索下载。

相关文章
|
9月前
|
存储 API 异构计算
LabVIEWCompactRIO 开发指南30 目标间通信
LabVIEWCompactRIO 开发指南30 目标间通信
53 3
LabVIEWCompactRIO 开发指南30 目标间通信
|
4月前
|
存储 安全 前端开发
端到端加密:确保数据传输安全的最佳实践
【10月更文挑战第12天】端到端加密(E2EE)是确保数据传输安全的重要手段,通过加密技术保障数据在传输过程中的隐私与完整性,防止第三方窃听和篡改。本文介绍E2EE的工作原理、核心优势及实施步骤,并探讨其在即时通讯、文件共享和金融服务等领域的应用,强调了选择加密协议、密钥管理、数据加密及安全接口设计的重要性,旨在帮助企业和开发者有效保护用户数据,满足数据保护法规要求。
|
网络协议 前端开发 应用服务中间件
前后台的网络数据传输
主要是围绕浏览器的工作展开,包括浏览器处理用户的交互、发送网络请求、收到网络响应之后的处理与渲染等等
4372 0
|
7月前
|
消息中间件 数据采集 Dubbo
中间件数据传输与集成
【7月更文挑战第6天】
111 1
|
数据格式 UED 网络架构
一对一直播系统源码,影响数据传输的网络七层结构
一对一直播系统源码,影响数据传输的网络七层结构
|
前端开发 数据挖掘 5G
云无线接入网络的前向回传感知设计 | 带你读《5G系统关键技术详解》之十一
云无线接入网络(C-RAN,Cloud Radio Access Network)是第五代(5G,Fifth Generation)无线蜂窝网络的新兴范例,传统的物理层基站(BS,Base Station)传输和接 收基础设施使用云计算技术进行虚拟化。
云无线接入网络的前向回传感知设计  | 带你读《5G系统关键技术详解》之十一
|
9月前
|
存储 网络协议 安全
LabVIEWCompactRIO 开发指南8 消除不必要的驱动因素
LabVIEWCompactRIO 开发指南8 消除不必要的驱动因素
52 3
|
Java 大数据 调度
如何编写分布式的数据传输
如何编写分布式的数据传输
1690 0

热门文章

最新文章