謝 勇,姚遠程,秦明偉
(西南科技大學 信息工程學院,四川 綿陽 621010)
通用串行總線 (Universal Serial Bus,USB)是一個外部總線協議標準,用于規范電腦與外部設備的連接和通訊?;赨SB接口的數據采集卡具有熱插拔、傳輸速度快、通用性強、易擴展和性價比高等優點。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.