为了处理依据LabVIEWFPGA模块的DMAFIFO深度设定不妥带来的数据不接连问题,结合LabVIEWFPGA的编程特色和DMA FIFO的作业原理,提出了一种设定FIFO深度的办法。对FIFO不同深度的试验标明,选用该办法设定的FIFO深度能够比较好地满意体系对数据接连传输的要求。研讨成果对深化翻开研讨和工程规划具有必定的指导意义。
导言
数据进入FPGA的速率高于传出的速率,继续的传输会形成数据的溢出,断续的传输可能会形成数据不接连。运用依据LabVIEW FPGA的DMA FIFO作为主控核算机和FPGA之间的缓存,若DMAFIFO深度设置的适宜,FIFO不会溢出和读空,那么就能完结数据输出FPGA是接连的。
本文在介绍了LabVIEW FPGA模块程序规划特色的根底上,结合DMA FIFO的作业原理,提出了一种设定FIFO深度的办法,处理了FIFO溢出、读空的问题,完结了数据的接连传输。试验成果标明该办法正确、可行,程序规划满意体系对数据传输接连性的要求。
1 LabVIEW FPGA模块
LabVIEW FPGA是LabVIEW的一个子模块,运用该模块能够经过图形化的编程对NI公司RIO(Reconfigurable I/O)设备上的FPGA进行装备。图形化的程序直接在硬件上完结,经过对RIO设备上的I/O接口的操控,能够灵敏地对I/O信号进行剖析和处理,表现出比固定I/O硬件愈加优异的特性。运用LabVIEWFPGA模块开发出来的体系具有开发周期短、结构模块化、晋级便利等长处。例如,图1标明了一个用LabVIEW FPGA模块规划的程序,在FPGA上完结方波发生器。该方波发生器经过数字接口DIO_1输出方波,其占空比和周期可调。LabVIEW FPGA模块在程序的规划与完结上都展示出了极大的灵敏性。
1.1 LabVIEW FPGA程序开发流程
运用LabVIEW FPGA模块开发运用程序的流程如图2所示。首要创立FPGA vi,之后用FPGA设备仿真器在主控核算机上运转程序,重复地调试、修正,直至程序正确无误。然后编译FPGA vi,并把程序下载到FPGA上。FPGA部分的程序完结后,再依据需求在主控核算机上创立用户界面程序Host vi,终究就完结整个体系的规划。
FPGA设备仿真器的翻开办法是:首要在“项目浏览器”窗口中的翻开“我的电脑”子菜单,右击子菜单中的“FPGA Target”并在方便菜单中挑选“Execute vion”下一级子菜单中的“Development Computer with Simulated I/O”。然后再在FPGA vi中点击“Run”按钮,这时程序在FPGA的设备仿真器上运转。
1.2 开发FPGA vi
发运用程序的第一步是创立用于装备PXIe-5641R板载FPGA的程序。在FPGA vi中能够完结算法逻辑,包含信号同步,定制数字通讯协议,板载操控和预警处理判定机制等功用。经过LabVIEW FPGA模块,可运用LabVIEW开发环境和许多相似的功用。可是因为FPGA不支持浮点操作,所以LabVIEW FPGA模块较之LabVIEW完好Windows版开发软件缺少了一些操作符和剖析函数。别的,因为PXIe-5641R板卡没有硬盘和操作体系,因而不支持文件I/O和ActiveX功用。LabVIEW FPGA模块的函数面板如图3所示。
硬件目标不管是FPGA设备仍是FPGA仿真器,都能够拜访LabVIEW FPGA函数。仿真器运用RIO设备的I/O接口,可在主机处理器上履行逻辑算法。查验vi规划中的一些简单性过错,防止不必要的重复编译,尤其是在程序比较大的时分可节约很多的时刻,进步编程功率。也可运用仿真器验证vi的履行流程,但无法验证硬件确实定性,若需求验证硬件功能确实定性,有必要对FPGA vi进行编译。与其他FPGA开发工具相同,依据运用程序的杂乱程度和核算机资源的不同,编译过程可能要花上几分钟到几个小时的时刻。
1.3 开发Host vi
在FPGA vi完结调试、编译、下载到板卡之后,就需求在主控核算机上创立一个用户界面程序Host vi。在用户界面运用程序中能够完结一些实时性要求不高的操作,例如装备体系参数,办理数据等。Host vi经过FPGA接口函数与FPGA vi进行通讯,以及处理中止。FPGA接口函数面板会在装置LabVIEW FPGA模块之后,主动添加到LabVIEW的函数面板中。LabVIEW函数面板中的FPGA接口函数面板如图4所示。
2 不同时钟域的数据接连传输
本文中的中频信号生成体系是将主控核算机模仿生成的数据经过FPGA送到AD9857发送出去。数据进入FPGA的速率为52 MB/s,因为核算机的非实时性出现断续的办法,其实践的速率要低一些;数据传出FPGA时,其数据位宽为16 b,输出频率为10 MHz,固其继续传输速率为20 MB/s。数据进入FPGA的速率高于出FPGA的速率,这就形成数据在不一起钟域之间传输的问题。为了防止数据的溢出和确保数据接连性,本文运用DMA FIFO作为主控核算机与FPGA之间的缓存。它的存储空间包含两部分:一是主控核算机部分,主控核算机拓荒一块内存作为FIFO缓存;二是FPGA部分,FIFO占用部分Block Memory资源作为缓存。二者一起组成一个完好的FIFO,经过PXIe总线传递数据。FIFO的传输机制是:主控核算机首要把一个数组的数据存入作为FIFO缓存的内存中;DMA操控器会主动查询FPGA上的FIFO剩下空间,当满意缓存剩下空间大于数据块容量的条件时,操控器经过PXIe总线把整个数据块一起送入FPGA上的FIFO中;FPGA FIFO再将数据次序送出。
若在主控核算机向FIFO两次写入数据的距离期间,FIFO中的数据坚持不被读空,就能确保输出FPGA的数据是接连的。而适宜的FIFO深度是FIFO不被读空的根底,所以确认FIFO深度的设定办法是数据在不一起钟域之间完结接连传输的要害。
3 FIFO深度的设定办法
3.1 FPGA FIFO深度的设定
DMA操控器将数据从主控核算机内存整块的传送到FPGA的FIFO缓存中,所以FIFO的深度要大于数据块的巨细。LabVIEW FPGA里块存储FIFO是以2 KB巨细来运用的。DMA FIFO运用RIO设备可获取的内置RAM来存储数据信息,该存储空间与内存读/写是同享的。所以要留一部分RAM空间进行内存的读/写,FIFO的最大值为RAM容量减去16 KB。PXIe-5641R的RAM的容量是1 098 KB,所以,FPGAFIFO的深度设定规模为2~1 082 KB。
另一方面,实践上LabVIEW为了能使FPGA高效运转,对Block Memory办法FIFO的巨细作了规则,其巨细只能为2M-1(数据由FPGA传向主控核算机)或2M+5(数据由主控核算机传向FPGA),M为数据的地址宽度;当设定值不是这些规范值时,LabVIEW会主动的扩大到距其最近的一个规范值。这样就确认了FPGAFIFO的深度,可是还不能确保数据能够接连输出。
3.2 主控核算机FIFO深度的设定
因为对主控核算机内存部分FIFO的读/写是以数组办法断续进行的。所以,数组的长度和两次写入的距离时刻是能否确保数据接连性的重要参数,一起考虑到数据输出FPGA是接连且频率固定的。依据FIFO不读空的准则估测:当写入内存的数组的长度N与数据写入内存的时刻T和数据输出FPGA的频率F之间满意如下的联络时,就能做到数据的接连传输:
N/T》F (1)
鉴于主控核算机操作体系的非实时性,需求将主控核算机FIFO深度D的巨细设定为N的若干倍;经过很多试验并与NI工程师评论,确认当FIFO的深度D的巨细为N的3~5倍时,可彻底满意数据接连传输的要求。
3.3 试验验证
数据写入内存的时刻与主控核算机运转速度以及数组的巨细有关。表1所示的是数组长度和写入内存的时刻与输出数据接连性之间联络的试验成果。其间,均匀写入内存时刻指的是同一个数组循环履行写入操作10万次得到的均匀成果。输出FPGA的速率为10 MHz。
当数组长度较小时,单位时刻内写入到内存中的数据较少,内存里的数据不能满意FPGA FIFO读取数据的需求,鄙人一组数据抵达之前内存里的数据现已读空,故输出的数据不能接连。当数组长度增大之后,单位时刻写入到内存的数据量也随之增大,内存里的数据能够满意FP-GA FIFO读取数据的需求,在内存读空之前把下一组数据送入了内存,所以输出的数据能够坚持接连性。试验成果验证了上述估测公式的正确性。
4 数据接连传输的LabVIEW完结
在本文中体系软件包含两部分:Host vi和FPGAvi,二者是独立而又有联络的两个部分。Host vi运转于主控核算机上,FPGA vi运转于FPGA上,二者经过FIFO来传输数据。
4.1 FPGA程序规划
运用图形化的编程环境LabVIEW FPGA模块来界说FPGA逻辑,除了具有上述的长处以外,LabVIEW作为一种并行结构的编程言语,非常适用于FPGA的并行结构,能够非常便利地完结多线程并行使命。
当FPGA vi开端运转时,从Host vi读取数据的FIFO需求必定的初始化时刻,时刻长度与FIFO的深度成正比。在初始化期间FIFO输出一系列的无效默认值。为了不让无效值进入到下一级的运算中,在DMA办法的FIFO之前加了一个FIFO函数——Get Number of Element to Read,该函数用于取得FIFO内有用数据的数量。当有用数据的数量大于0时,再开端进行下一级运算。考虑到FPGA有限的硬件资源和FPGA FIFO最小值的约束,将数据的地址宽度设为M=11,依据上文剖析DMA FIFO的深度设为2M+5=2 053 KB。
4.2 主控核算机程序规划
Host vi是体系程序的另一部分部分,它具有树立硬件目标(FPGA)、与硬件通讯和图形显现等功用。主控核算机程序图如图6所示,首要要树立与之进行通讯的硬件目标,即FPGA;其次装备体系时钟、输出形式;再次创立FIFO,设置其在主控核算机部分的FIFO深度;然后从电子表格读取数据,并循环查询FIFO剩下空间的巨细,当剩下空间大于数组长度时,数据写入FIFO当没有满意的空间时,数据保留到下一个循环,满意条件后再写入FIFO;最终封闭FIFO运用,处理过错。
当输入数组长度分别为300和1 000,形状如图7所示的波形时,输出数据的波形如图8所示。因为AD9857上变频的原因,使得输出波形在输入的矩形包络中带有载波,载波频率为60 MHz。依据表1中的数据能够得出结论:此处的编程和上述试验的成果是共同的,即FPGA输出频率为10 MHz,数组长度大于500时,体系数据的输出是接连。一起此成果也标明本文中的LabVIEW程序完结了数据的接连传输。
5 结语
经过设定适宜的FIFO深度,完结了数据的接连传输,为后续的工程规划奠定了根底。该设定FIFO深度的办法也对其他运用LabVIEW FPGA模块的工程规划具有必定的参考价值。