基于FPGA軟核的高速數據采集系統設計
(1)在沒(méi)有來(lái)自PC機的控制命令情況下,如果FIFO_RD_EN=1,則FD[15:0]的數據傳輸方向為從FPGA到USB接口芯片(圖6表示為FD_OUT[15:0]),即數據從FIFO輸出至USB接口芯片;如果此時(shí)FIFO_RD_EN=0,則FD[15:0]呈高阻態(tài)。
(2)當有來(lái)自PC機的控制命令時(shí),FD[15:0]的數據傳輸方向為從USB接口芯片到FPGA(圖6表示為FD_IN[15:0]),即PC機的控制命令寫(xiě)入到USB接口芯片,再傳輸到FPGA內部命令分析器中。此時(shí),命令分析器會(huì )根據命令控制ADC_START信號,進(jìn)而控制ADC數據采集的啟停。
無(wú)論在上述哪種情況下,如果FIFO_CLEAR=0、 FIFO_WR_EN=1且FIFO_FULL=0時(shí),FIFO_WR_CLK都有相應的時(shí)鐘信號輸入,此時(shí)ADC轉換完成的數據隨寫(xiě)時(shí)鐘通過(guò)ADC_DATA[11:0]寫(xiě)入FIFO中。
3.3 USB接口控制單元
USB接口控制單元主要完成兩種功能:(1)通過(guò)USB接口芯片實(shí)現把數據傳輸到PC機。此時(shí)FIFO中的數據先寫(xiě)入EP6,當EP6寫(xiě)滿(mǎn)時(shí),USB接口芯片自動(dòng)將數據打包傳輸到PC機。(2)協(xié)助FIFO控制單元接收來(lái)自PC機的命令數據。此時(shí)命令數據從PC機通過(guò)USB接口傳輸到EP2,然后讀取EP2的數據到FIFO控制單元的命令分析器中。USB接口控制單元狀態(tài)機工作如下:
(1)當FPGA上電或者復位后,狀態(tài)機進(jìn)入空閑狀態(tài)(IDEL)。
(2)在空閑狀態(tài)下,當EP2不空(EP2_EMPTY=0)時(shí),進(jìn)入讀命令狀態(tài)(READ_COMMAND),此時(shí)令EP_ADDR[1:0]=00,FD[15:0]的傳輸方向由EP2指向FPGA,控制單元從EP2中讀出PC機傳來(lái)的控制命令。
(3)隨后進(jìn)入存儲命令狀態(tài)(SOTRE_COMMAND),控制單元把傳來(lái)的控制命令存儲到FIFO控制單元內部的指令分析器中。同時(shí)控制單元置FIFO_CLEAR=1,即把FIFO控制單元內的FIFO數據清空,以準備存儲新的ADC轉換數據。任務(wù)完成后回到空閑狀態(tài)。
(4)優(yōu)先處理PC機通過(guò)EP2傳來(lái)的命令,因此優(yōu)先查看EP2的空狀態(tài)。在空閑狀態(tài)下,當EP2為空(EP2_EMPTY=1)且FIFO控制單元內FIFO不為空(FIFO_EMPTY=0)且EP6不滿(mǎn)(EP6_FULL=0)時(shí),進(jìn)入寫(xiě)數據狀態(tài)(WRITE_DATA)。在寫(xiě)數據狀態(tài)下,EP_ADDR[1:0]=10,控制單元選中CY7C68013的EP6,FD[15:0]方向由FPGA指向EP6,同時(shí)FIFO_RD_CLK產(chǎn)生一個(gè)周期時(shí)鐘,FIFO_RD_EN置為高電平,一個(gè)數據從FIFO控制單元內FIFO中讀出。
(5)隨后進(jìn)入傳輸數據狀態(tài)(TRANS_DATA)。在該狀態(tài)下,令SLWR=0,數據從FIFO控制單元內FIFO寫(xiě)入CY7C68013的EP6中。任務(wù)完成后進(jìn)入空閑狀態(tài)。
USB接口控制單元狀態(tài)機示意圖如圖7所示。
4 USB接口芯片程序設計
4.1 USB固件程序
固件程序是一種嵌入在硬件設備中的軟件,通過(guò)執行固件程序,硬件設備可以完成各種特定的功能。在本設計中,CY7C68013芯片的固件程序是整個(gè)系統傳輸的控制核心,主要完成以下五種功能:(1)CY7C68013芯片的初始化;(2)輔助硬件完成設備的重新枚舉;(3)中斷處理;(4)數據接收與發(fā)送;(5)對外圍電路進(jìn)行控制。
Cypress公司為提高用戶(hù)的開(kāi)發(fā)效率,提供了EZ-USB FX2LP開(kāi)發(fā)套件,其中包含了一個(gè)完整的固件程序架構[3]。該架構主要包含了EZ-USB FX2LP芯片的設備初始化、處理標準USB設備請求與電源管理等服務(wù)功能。用戶(hù)在開(kāi)發(fā)時(shí),只需使用Keil uVision3在固件架構下提供相應的USB描述符以及編寫(xiě)外部設備功能程序代碼。固件架構流程圖如圖8所示。
主函數是固件架構流程的具體實(shí)現。主函數首先對內部狀態(tài)變量進(jìn)行初始化,隨即調用TD_Init()進(jìn)行用戶(hù)設備初始化,TD_Init()函數運行完成后,使能中斷,隨后進(jìn)入主循環(huán)。
4.2 USB驅動(dòng)程序設計
USB驅動(dòng)程序位于固件程序與應用程序之間,是USB設備與PC機的通信接口。Cypress公司為用戶(hù)設計了一款通用驅動(dòng)程序包(ezusb.sys),可以完成應用程序與USB接口的通信與控制任務(wù)。本設計即使用該通用驅動(dòng)程序。
5 應用程序設計
應用程序通過(guò)USB驅動(dòng)程序與USB接口進(jìn)行通信。本設計使用LabVIEW設計應用程序。LabVIEW為用戶(hù)提供了簡(jiǎn)單、直觀(guān)、易學(xué)的圖形編程法,相比于傳統的編程語(yǔ)言,LabVIEW能大量地節省開(kāi)發(fā)時(shí)間。用戶(hù)通過(guò)LabVIEW應用程序可以進(jìn)行對數據采集系統的控制,而且采集到的數據在控制界面中實(shí)時(shí)顯示。
本文介紹了一款較為通用、基于USB2.0接口的高速數據采集系統設計方法,通過(guò)FPGA軟核在數據采集系統中的應用,解決了硬件電路設計繁瑣復雜的問(wèn)題,而且便于開(kāi)發(fā)者對產(chǎn)品進(jìn)行修改優(yōu)化,可以大幅度地縮短產(chǎn)品的開(kāi)發(fā)時(shí)間。本系統通過(guò)了硬軟件的聯(lián)合調試,系統工作正常,穩定性良好。
參考文獻
[1] Xilinx Corporation. Spartan-3AN FPGA family data sheet. 2009.
[2] Cypress Semiconductor Corporation. EZ-USB FX2 CY7C68013 technical reference manual version2.2. 2003.
[3] 錢(qián)峰.EZ-USB FX2單片機原理、編程及應用[M].北京:北京航空航天大學(xué)出版社,2006.
評論