摘 要: 针对软件无线电系统中数据实时处理和高速传输的要求,设计了一种基于NI PCI Express接口的高速数据传输方案。利用NI公司的数字I/O卡以及配套驱动开发软件搭建开发平台。信号调理设备和微机间的数据通过PCI Express接口以DMA方式进行传输。数字I/O卡的32通道双向并行数据传输速率高达50 Mb/s。该方案实现了灵活的数据传输控制、精确的时钟同步以及可靠的数据容错功能。工程实践验证了该方案的有效性和可靠性。
关键词: 数据采集;NI PCI Express;高速数据传输;DMA;实时处理
软件无线电系统只在天线到A/D转换和D/A转换环节的射频段存在模拟信号,其中频和基带的处理全部采用数字逻辑运算实现,数据处理量大,实时性要求较高。某些情况下高速传输又是实时处理的前提,因此,软件无线电实现的关键是需要有高速的数据处理与传输设备。为了将数据处理结果通过数据采集设备实时传送给微机,信号调理设备和微机之间必须具有高速的互联总线。作为第三代高性能I/O总线,PCI Express接口具有双通道、高带宽、传输快、低功耗以及传输可靠等优点,正逐渐取代原有PCI接口。PCI Express2.0标准实现了x1的单向速率5 Gb/s,因此PCI Express总线接口特别适合于高速的数据传送。同时,现在绝大多数电脑可以使用直接内存访问DMA(Direct Memory Access)传送方式,它使用专门的硬件把数据直接传送到计算机内存,从而提高了系统的数据吞吐量。采用这种方式后,处理器不需要控制数据的传送,因此它就可以用来处理更复杂的工作。因此,基于PCI Express总线并采用DMA方式进行数据传输可以充分发挥PCI Express总线高速的优势[1-2]。
美国国家仪器NI(National Instruments)公司在信号调理和数据采集领域有着丰富的产品生产和设计经验,已经成功为各行业的用户提供了优秀的解决方案。其中基于PCI Express接口系列的数字I/O卡可以满足高速数据传输的要求。作为某软件无线电系统的子课题,本文基于该系列硬件和配套的软件进行开发,实现了信号调理设备和微机之间进行实时高速数据传输的功能。实践表明,该方案无论在数据传输还是实时控制方面都有较好的性能,对于搭建应用越来越广泛的高速数据传输平台具有一定的借鉴意义[3]。
1 NI PCIe-6537数字I/O卡简介
NI PCIe-6537是NI公司生产的一款高速数字I/O系列数据采集卡[4],具有32个可进行双向并行数据传输的通道(Port0~Port3,每个Port由8个通道组成)和6个可编程函数接口PFI(Programmable Function Interface),即PFI0~PFI6,并行速率可达50 MHz;支持同步输出,时钟各项指标精度高,可以接受外部时钟作为工作时钟源;所有通道和接口具有独立的ADC,保证了良好的动态性能;支持多种同步、异步握手模式,其中包含丰富的定时和事件触发功能;板载2 048个32 bit基于FIFO的内存单元,可以作为信号调理设备和计算机之间进行DMA传输的高速缓存,并且具有错误检测及自我恢复机制。该数字I/O卡可以实现高速的双向数据传输,具有灵活的控制功能,并可以通过控制可编程函数接口保证数据传输的可靠性。板卡结构如图1所示。
随着数据采集硬件、计算机和软件复杂程度的增加,好的驱动软件就显得尤为重要。合适的驱动软件可以最佳地结合灵活性和高性能,同时还能极大地降低开发数据采集程序所需的时间。NI公司为其数据采集卡开发了丰富的应用软件和驱动。本方案采用NI专有的Measurement Studio开发软件和DAQ驱动。为了让用户能开发出完整的数据采集和控制程序,NI提供了可以支持C、Visual C++、Visual Basic和C#调用驱动函数的应用软件Measurement Studio。结合工程项目需要,本方案采用C#作为调用驱动函数的语言,同时使用HP DL180机架式服务器,以保证稳定、高效的数据传输和存取性能。
2 基于NI PCIe-6537数字I/O卡高速数据传输设计
NI PCIe-6537数字I/O卡具有高速的数据传输能力,Measurement Studio和Visual Studio安装融合之后的开发环境中包含了丰富的驱动函数,可以满足实际工程各种应用需求。但是由于其内部封装不可见,用户必须使用专门的驱动函数进行设计。本方案分为数据采集部分和控制信号输出部分的设计,功能实现程序以C#动态链接库(DLL)的形式提供给项目主程序使用。图2给出了数据采集和控制信号输出流程图,下面以此为基础介绍本方案各部分功能的设计。
2.1 数据采集的主要功能及其设计方案
本方案使用25 Mb/s的传输速率同时进行双向数据传输,使用Port0、Port1和Port2 3个端口共计24条数据通道用来进行连续数据采集。为保证数据传输过程中的时钟和数据精确同步,采用可编程函数接口PFI5接收外部时钟作为板卡工作时钟。下面首先对定时设置进行简要说明。定时设置参数与工作模式和采样长度有关,在初始化设备资源之前就要设置完毕。对于连续工作模式,采样长度一般为计算机内存中缓冲区的大小,实际中取较大的值即可;对于有限采样工作模式,采样长度与当前传输数据长度有关,若下一次的采样长度与当前采样长度不同,就要重新设置定时参数。根据项目要求,设定调理设备每20 ms发一包数据,数据采集部分的定时参数相应设置为连续工作模式。每包数据到达的同时还有一个和包长度相同的握手信号(Pause Trigger)到达板卡,即以握手信号的有无和长短决定是否接收数据和接收数据的长度,这里用PFI1接收触发信号。由于设置为连续工作模式,因此所有的参数只需设置一次,服务器程序即可对相应设备资源进行初始化,之后通过C#事件触发的方式自动进入循环接收数据包的状态,同时可以通过委托把数据包实时传递给主调函数。
在对数据进行高速采集的同时,应考虑实际工作中不可预知的软硬件错误。错误一般有两种类型:一种是由微机未能及时从板卡FIFO中读取数据造成FIFO溢出,从而造成数据包传输出错;另一种情况是由于信号调理设备由众多设备组成,如果其中某个环节发生传输延误,导致某一包数据未能连续传输,进而造成FIFO采集不到完整的数据包。实际中经过反复测试发现,虽然错误的种类可能会比较多,但是对于服务器来说,错误检测只能依赖于包头数据检测。因此,针对可能出现的软硬件错误,制定解决方案如下:在数据包的固定位置插入一个标志数据,每一包数据接收完毕之后对标志数据进行检测,如果标志数据正确,则可以认为当前数据包已正确接收;如果标志数据出错,则立即清空FIFO,直到检测结果正确为止。另外,由于数据传输速率较高,有效数据只占20 ms中的小部分时间,从而保证板卡FIFO有充足的时间自我清空。
2.2 发送控制信号方案设计
为了控制信号调理设备,服务器还需要通过PCI Express卡发送控制信号给信号调理设备,本方案使用Port3的8条数据通道输出控制信号,时钟通过PFI4接口输出给信号调理设备。由于控制信号只在必要的情况下发出,因此相应的定时参数设置为有限工作模式。设定控制信号精度为16 bit,并且不同控制信号有着不同功能。本方案使用Port3的高4位标识不同功能的控制信号,低4位传输控制信号,每个控制信号在4个时钟周期内输出给信号调理设备。与数据采集部分类似,板卡输出控制信号时需要一个握手信号(Date Active Event),外部信号调理设备根据该握手信号决定是否接收控制信号以及信号长度。但与数据采集部分不同的是,由于控制部分为有限工作模式,每次发送控制信号均需要重新初始化设备资源,因此会造成一定的时延。实际测试发现,如果某段时间内发送控制信号过多或者过于频繁,这种时延就会造成控制信号发送错误。经过反复试验证明,每次控制信号发送完毕之后暂不释放硬件资源,重新初始化时只需用一条语句重新设置定时参数,大大降低了时延并保证了控制信号输出的可靠性。
3 高速数据传输方案实现和测试
本文设计的高速数据传输方案为某软件无线电系统的重要组成部分。因此,本文以该系统在实际当中的运行结果对设计方案进行测试,下面分别介绍测试平台并说明测试结果。
3.1 高速数据传输方案测试平台
硬件平台为HP DL180 机架式服务器、NI PCIe-6537数字I/O卡以及信号调理设备;操作系统为Windows Server 2003 R2(32 bit);软件平台为Visual Studio 2005.NET、Measurement Studio 2009和DAQ 9.1.7。
其中,Visual Studio和Measurement Studio版本必须一致,操作系统和DAQ驱动软件的版本需要一致。并且由于驱动软件的限制,Windows Server 2003操作系统下可用内存资源受到限制[5]。
3.2 高速数据传输方案实现结果
系统数据采集和控制信号的传输速率均为25 Mb/s,数据循环采集的收包间隔时间为20 ms、包长为10 016、数据为32 bit整形数。图3为软件界面显示的某时刻数据采集结果。其中,包循环号表示信号调理设备发送数据包的编号,收包计数表示数字I/O卡成功接收并验证正确的数据包,计数差值正常情况下为上述两个指标的差值,丢包计数为发生错误的数据包。数据接收结果显示,该时刻已接收2 610包数据并且所有数据包均正确无误。控制信号定为如下十六进制数:0x400D和0x400F,每个十六进制数在4个时钟周期内发送完毕。在FPGA中,用SignalTap II观察信号调理设备发送的数据,如图4所示。其中,pc_clk、pc_control和pc_data分别为PCIe-6537输出给FPGA的时钟、握手信号和输出信号。设备长期运行结果表明,本设计可以通过PCIe-6537实现FPGA与服务器之间稳定的高速数据传输。
数据采集接口是计算机系统与外部数据联系的一个桥梁,设计的关键是提高数据采集系统的速度和可靠性。本文以某软件无线电系统的实际需求出发,充分利用PCI Express接口通过DMA传输方式实现了信号调理设备与服务器之间进行高速数据传输的功能。方案通过对NI PCIe-6537数字I/O卡性能的了解和挖掘,以及对驱动函数的合理调用,保证了数据传输的高效率和可靠性。实际应用中还可以根据工程需要实现更多的功能。同时,NI公司基于PCI Express接口的高速数据I/O卡在高速数据通信以及实时信号处理领域有着良好的应用前景,而本方案作为一个典型案例,对工程实践人员有较好的参考价值。
参考文献
[1] BUDRUK R, ANDERSON D, SHANLEY T. PCI Express系统体系结构标准教材[M].田玉敏,王崧,张波,等,译.北京:电子工业出版社,2005.
[2] 许军,李玉山.PCI Express总线技术研究[J].计算机工程与科学,2006,28(5):20~40.
[3] NI.数据采集技术文摘[EB/OL].http://sine.ni.com,2010-09-01.
[4] NI.PCI Express接口的50M数字I/O[EB/OL].http://sine.ni.com,2010-09-01.
[5] NI.NI-DAQmx Specifications[EB/OL].http://sine.ni.com,2010-09-01.