谢 勇,姚远程,秦明伟
(西南科技大学 信息工程学院,四川 绵阳 621010)
通用串行总线 (Universal Serial Bus,USB)是一个外部总线协议标准,用于规范电脑与外部设备的连接和通讯。基于USB接口的数据采集卡具有热插拔、传输速度快、通用性强、易扩展和性价比高等优点。LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种基于图形程序的虚拟仪器编程语言,在测试与测量、数据采集、仪器控制、数字信号分析等领域获得了广泛的应用。
文中介绍了一种基于USB2.0[1]和LabVIEW[2]的高速数据采集系统设计,详细描述了系统硬件和软件设计实现方案。
本系统由软件设计和硬件电路两部分构成,系统总体结构如图1所示。软件设计主要包括上位机PC程序设计,其中底层驱动程序基于NI-VISA设计[3],用户应用程序由Lab VIEW开发,驱动程序的功能如同上位机应用程序和下位机硬件之间通信的桥梁。
硬件电路由FPGA、USB2.0控制器和ADC器件构成[4]。其中USB2.0控制器芯片采用Cypress公司的EZ-USB FX2芯片,FPGA芯片选用了Xilinx公司的Virtex-4系列的XC4VSX55,ADC器件采用AD公司的AD9430。USB2.0控制器部分负责FPGA与上位机PC间的双向通信;FPGA部分作为系统的主控制器,负责接收并解析上位机PC传递的控制指令,同时FPGA将下位机采集的数据通过USB接口传送到上位机PC处理;AD9430完成前端模拟信号的高速采集。
AD9430是AD公司的一款12位单芯片采样模数转换器(ADC),专门针对高性能、低功耗和易用性进行了优化。AD9430的转换速率最高可达210 MSPS,具有杰出的动态性能,适合宽带载波和宽带系统使用。芯片上集成了全部必需功能,包括采样保持(T/H)与基准电压源,可提供完整的信号转换解决方案。AD9430要求采用3.3 V电源供电及差分ENCODE时钟信号,以便充分发挥其工作性能。数字输出为TTL/CMOS兼容或LVDS兼容,支持二进制补码或偏移二进制格式。
图1 系统总体结构图Fig.1 Whole structure chart of system
本系统采用FPGA生成AD9430的采样时钟和工作模式寄存器的配置。前端模拟信号经过AD9430采样量化为数字信号后送入FPGA内部生成的FIFO做缓存处理,避免了采样数据率和USB接口传输数据率不匹配而发生数据丢失。FIFO的深度是由读写FIFO的时钟以及所需连续传输数据块的大小来决定的,本设计FIFO深度为1 024,数据总线位宽为16 bit。
EZ-USB FX2有3种接口方式:Ports、slaveFIFO和GPIF。在本系统中采用的是slaveFIFO模式,在该模式下,FX2芯片内部FIFO能自动向USB提交包,外部控制器可以将数据连续传输到FIFO中,而不需要FX2固件程序的干预,较好地解决了USB高速模式的带宽瓶颈问题。在slaveFIFO模式下,EZ-USB FX2与FPGA主控制器的接口电路如图2所示。
其中IFCLK为接口时钟,为了保持系统良好的时钟同步性,设计中采用FPGA通过DCM分频生成40 MHz时钟。FLAGA-FLAGD为FIFO标志管脚,用于映射端点的空、满;SLOE用于使能数据总线FD的输出,当SLOE信号有效时,才能从FIFO读数据;SLRD和SLWR分别作为FIFO的同步读、写选通信号,当SLRD或SLWR信号有效时,才能在IFCLK的驱动下读写FIFO;FD [15:0]为16位双向数据总线,负责上下位机之间数据的传输;FIFOADR[1:0]用于选择当前操作的端点缓冲区,其中“00”表示选择 EP2,“10”表示选择 EP6。
系统软件设计主要包括USB固件程序、USB驱动程序、FPGA控制程序以及LabVIEW应用程序4个部分。
USB固件程序开发主要包括如下几个部分,首先定义USB设备的描述符:VID为0x04B4,PID为0x1002。然后设定EZ-USB FX2的工作模式为slaveFIFO模式,FIFO工作时钟IFCLK由FPGA分频产生;配置EP2为OUT端点,上位机指令通过OUT端点下传给FPGA解析,配置EP6为IN端点,下位机采集的数据通过IN端点上传到上位机PC,端点数据总线宽度为16 bit,数据缓冲区大小为2048字节;同时配置FLAGA为端口EP2空标志,配置FLAGC为端口EP6满标志。Cypress公司为了简化和加快用户使用EZ-USB FX2芯片进行USB外设的开发过程,提供了一个完整的固件程序的框架[5-6],本设计的主要固件程序如下:
USB设备的驱动程序是开发USB外设的一个关键,它在整个系统中处于上位机应用程序和USB固件程序之间。它的主要作用是使上位机操作系统能够识别USB设备,并建立起上位机和下位机USB设备之间的通讯。
本设计通过配置NI-VISA直接开发USB驱动程序[7],极大降低了设计难度和开发时间,同时设计的驱动程序可以实现下位机USB设备和上位机LabVIEW应用程序无缝连接。设计中采用了比较成熟的NI-VISA 5.0版本,配置NI-VISA的步骤如下:
1)使用Driver Development Wizard(驱动程序开发向导)创建INF文档;
2)安装INF文档,并安装使用INF文档的USB设备;
3)使用NI-VISA Interactive Control(NI-VISA互动控制工具)对设备进行测试,以证实USB设备已正确安装,并获得USB设备的各属性值。
FPGA作为外部主控制器,负责产生EZ-USB FX2工作在slaveFIFO模式所需的控制信号。FPGA通过监测EZ-USB FX2内部FIFO的空满标志,生成对应的读写信号来操作FIFO,实现采集数据的传输。
在slaveFIFO模式下,EZ-USB FX2有两种传输方式:同步和异步。同步方式可以实现更高的传输速度,所以被本设计采用。在同步方式下,传输时钟IFCLK由FPGA提供,当SLOE和SLRD为低电平且SLWR为高电平时,一个IFCLK周期完成一个数据的读操作;当SLWR为低电平且SLOE和SLRD为高电平时,一个IFCLK周期完成一个数据的写操作。USB接口芯片的控制信号由VHDL硬件描述语言开发并映射到FPGA中运行。FPGA读、写EZ-USB FX2内部FIFO的时序仿真结果分别如图3、图4所示。
图2 FPGA与EZ-USB FX2连接图Fig.2 Connection diagram of FPGA and EZ-USB FX2
图3 FPGA读FIFO仿真波形Fig.3 Simulation waveform of FPGA reading FIFO
图4 FPGA写FIFO仿真波形Fig.4 Simulation waveform of FPGA writing FIFO
在LabVIEW软件平台下,用户利用创建和调用子程序的方法编写程序,使创建的程序模块化,程序结构简单、直观,易于调试和维护。而且应用程序的界面美观、逼真,人机界面更友好。一个LabVIEW程序分为3部分:前面板、框图程序和图标/接线端口。前面板用于模拟真实仪器的前面板;框图程序是利用图形语言对前面板上的控件对象进行控制;图标/接线端口用于把LabVIEW程序定义成一个子程序模块,从而实现模块化编程。
LabVIEW程序的程序框图如图5所示。整个应用程序的主框架使用了WHILE循环不断的查询主机状态。设计中采用了LabVIEW的事件结构编程。事件驱动的编程允许用户通过前面板的操作,或是其他的异步事件来驱动LabVIEW程序的运行。本设计中采用前面板的用户按钮操作作为事件驱动源。同时关闭程序也作为一个事件分支,避免了程序死锁问题的发生。在“开始采集”事件中通过直接调用VISA函数子VI来读写USB设备,实现上位机控制指令的下传和下位机采集数据的上传。
LabVIEW程序主要工作流程:用户在操作应用程序前面板界面时,点击开始采集按钮就会触发程序的开始采集事件分支。在该分支中程序首先通过 “VISA打开”VI打开USB设备,然后通过“VISA写入”VI将上位机十六进制的控制指令 “0101”通过USB接口发送到下位机,FPGA完成指令的接收和解析。下位机接收到采集指令后开始往EZUSB FX2芯片的FIFO中写入采集的数据,上位机则通过“VISA读取”VI开始接收下位机上传的数据。采集到的数据通过“数据显示”VI显示在前面板,同时利用LabVIEW灵活的数据文件存储方式,将采集到的数据存储为二进制格式的文件保存起来以便后续处理。用户完成采集过程后,关闭VISA,结束程序运行。
图5 LabVIEW程序框图Fig.5 Block diagram of LabVIEW program
系统的硬件电路和软件程序开发完成后,通过软硬件联合测试以验证系统传输系能。测试步骤如下:首先通过NIVISA配置好EZ-USB FX2的驱动程序,用EZ-USB Control Panel软件完成固件程序下载。如图6前面板所示,上位机检测到的USB设备的VID为0x04B4,PID为0x1002,这与在固件程序中的设定一致,说明通过NI-VISA完成了USB设备的驱动程序设计。USB设备和上位机PC正确连接后即可进行数据采集。然后在前面板设置采集长度为512字节,单击“开始采集”按钮,下位机采集的数据显示在图6中数据显示VI中。采集的数据为十六进制数表示的0000~00FF,与下位机FPGA写入USB芯片内部FIFO的数据完全一致,证明系统数据传输的可靠性。通过总线数据监测软件BusHound实时测试,本设计的数据传输速度高达30 MByte/s。
图6 LabVIEW程序前面板Fig.6 Front panel of LabVIEW program
本系统软件、硬件均已调试通过,并已应用于实际项目中,运行良好。实践证明,本系统结合USB和LabVIEW各自优点完成设计,降低了开发USB设备驱动程序的难度,缩短了研制周期,而由LabVIEW开发的人机界面更友好、美观。同时本系统硬件集成度高,成本低,结构灵活便于扩展,具有更强的实用和推广价值。
[1]罗伟林.基于USB2.0的高速数据采集系统 [D].哈尔滨:哈尔滨工业大学,2008.
[2]杨乐平,李海涛,杨磊.LabVIEW 程序设计与应用[M].北京:电子工业出版社,2005.
[3]National Instruments.USB Instrument Control Tutorial[EB/OL].[2003]http://www.ni.com.Nov.
[4]曹辉,刘波,姜秀杰.基于USB与FPGA的多路总线通信接口的设计与实现[J].导弹与航天运载技术,2009,4(302):18-22.CAO Hui,LIU Bo,JIANG Xiu-jie.Design and implementation of a multi-channel bus interface based on USB and FPGA[J].Missiles and Space Vehicles,2009,4(302):18-22.
[5]钱峰.EZ-USB FX2单片机原理、编程及应用[M].北京:北京航空航天大学出社,2006.
[6]Cypress Semiconductor Corporation. EZ-USB FX2 Technical Reference Manual[S].USA,2002.
[7]余志荣, 杨莉.基于NI-VISA与LabVIEW 的USB接口应用设计[J].单片机与嵌入式系统应用,2007(1):66-69.YU Zhi-rong,YANG Li.Design of USB interface based on NI-VISA and LabVIEW[J].Microcontroller and Embedded Systems,2007(1):66-69.