文獻標識碼: A
文章編號: 0258-7998(2010)09-0112-03
實時數(shù)據(jù)的采集以及顯示等都會涉及到PC機和下位機間的數(shù)據(jù)傳輸,而傳輸數(shù)據(jù)中的丟點問題是實時數(shù)據(jù)采集中必須解決的問題。傳統(tǒng)的數(shù)據(jù)采集系統(tǒng)由于傳輸速度低或者安裝不方便等問題已不能滿足科研和生產(chǎn)過程的需求。輸入的實時數(shù)據(jù)是帶有幀頭的8位串行數(shù)據(jù)流,直接與CY7C68013A的GPIF(General programmable interface)接口對接不能保證數(shù)據(jù)完整不丟失,并且無法在數(shù)據(jù)中加入幀識別信息。在這種情況下采用FPGA完成此部分邏輯功能。通過FPGA對實時數(shù)據(jù)進行相應(yīng)的調(diào)整再交給CY7C68013A傳送到上位機中。
1 系統(tǒng)硬件電路設(shè)計
1.1 系統(tǒng)結(jié)構(gòu)和數(shù)據(jù)流程
本系統(tǒng)采用FPGA xc2s50-144完成整個系統(tǒng)的數(shù)據(jù)采集的處理,采用具有微處理器的USB接口CY7C68013A,通過USB接口將FPGA處理后的數(shù)據(jù)實時地傳輸?shù)接嬎銠C上。當PC機發(fā)出數(shù)據(jù)采集、讀取數(shù)據(jù)等控制命令時,控制命令通過CY7C68013A傳送給FPGA,由FPGA啟動A/D芯片進行A/D轉(zhuǎn)換。A/D轉(zhuǎn)換后將串行數(shù)據(jù)流和時鐘發(fā)送到FPGA中,F(xiàn)PGA通過判斷幀頭截取有效數(shù)據(jù)并將數(shù)據(jù)轉(zhuǎn)換成8位的并行數(shù)據(jù)并緩存至FPGA內(nèi)部設(shè)計的FIFO中,由上位機通過USB接口芯片CY7C68013A以GPIF主控模式將數(shù)據(jù)傳送至上位機中。系統(tǒng)總體設(shè)計圖如圖1所示。
1.2 USB接口芯片
CY7C68013A是Cypress公司的FX2系列產(chǎn)品,可提供480 Mb/s的傳輸速率。CY7C68013A提供了一種獨特架構(gòu),使USB接口和應(yīng)用環(huán)境直接共享FIFO,而且微控制器可以不參與數(shù)據(jù)傳輸,但允許它以FIFO或RAM的方式訪問這些共享FIFO,CY7C68013A的內(nèi)部FIFO緩沖區(qū)中有四個端點,它們可以通過設(shè)置相應(yīng)的EPxFIFOCFG(x是端點號)寄存器被配置為2倍、3倍或4倍緩沖區(qū)。雙緩沖區(qū)可以允許一個數(shù)據(jù)包在被8051訪問的同時,另一個進行USB數(shù)據(jù)傳輸。3或4緩沖區(qū)則允許在2個或3個緩沖區(qū)被訪問的同時,由另一個進行USB數(shù)據(jù)傳輸。這樣就可以把數(shù)據(jù)包可用的時間延遲減至最小,從而增加帶寬的吞吐量。CY7C68013A共有三種工作模式:分別為普通端口模式、GPIF模式和從屬FIFO模式。這三種工作模式由寄存器選擇決定。本設(shè)計中采用GPIF主控模式,GPIF在連接到外部邏輯設(shè)備時,可充當“內(nèi)部”控制,可以作為CY7C68013A端點FIFO的內(nèi)部主控制器。
1.3 硬件連接圖
使用GPIF方式對FIFO芯片進行讀寫工作并使用PORTB雙向FIFO數(shù)據(jù)線,使外圍電路像普通FIFO一樣對FX2中端點2、4、6、8的數(shù)據(jù)緩沖區(qū)進行讀寫。當CY7C68013A工作在GPIF模式時,由PC機上發(fā)出控制命令給USB,CY7C68013A提供FPGA的片選、讀數(shù)據(jù)時鐘等信號。接口連線圖如圖2所示。
2 軟件設(shè)計
2.1 固件程序的設(shè)計
固件的作用是輔助硬件來完成預(yù)期的設(shè)備功能,固件主要工作如下:
(1)寄存器初始化工作,按照需要設(shè)置特殊功能寄存器的初值;
(2)輔助硬件完成設(shè)備的枚舉過程,對主機的設(shè)備請求作出適當?shù)捻憫?yīng);
(3)完成中斷處理、數(shù)據(jù)接收和發(fā)送以及對外圍電路的控制。
在固件程序中,按照FIFO的時序圖完成GPIF波形設(shè)計,并生成波形描述符文件GPIF.c供設(shè)備功能程序main.c調(diào)用。生成的GPIF.c會初始化波形設(shè)計用到的寄存器,包括配置接口的設(shè)計,在TD_Init()中初始化函數(shù),配置好使用的端點類型,傳輸數(shù)據(jù)包的大小。在TD_Poll()中設(shè)置好GPIF的讀數(shù)據(jù)傳輸,通過main.c中對TD_Poll()的重復(fù)調(diào)用,完成USB的大數(shù)據(jù)量傳輸。
2.2 GPIF波形圖
根據(jù)FPGA編寫的時序,利用Cypress公司配置的GPIF Designer畫出相應(yīng)的時序圖,如圖3所示。
在數(shù)據(jù)讀時序狀態(tài)設(shè)計中,在S3狀態(tài),讓讀使能REN低電平有效。在S4中判斷FPGA內(nèi)FIFO 的空標志是否有效,有效后開始進行FIFO的讀傳輸,OE用來控制數(shù)據(jù)出現(xiàn)在數(shù)據(jù)總線上的時間。數(shù)據(jù)總線在S5時拉高是數(shù)據(jù)有效(activate),GPIF按字節(jié)將數(shù)據(jù)讀到FIFO中,同時TC計數(shù)器會減一。在狀態(tài)6時,以計數(shù)器的值來判斷一幀數(shù)據(jù)是否完成傳輸。如果沒有完成,則不斷循環(huán),讀完所有數(shù)據(jù)為止;如果讀完了所有數(shù)據(jù)后,則不再經(jīng)過中間其他任何狀態(tài),直接跳到狀態(tài)7(IDLE),表示完成一幀數(shù)據(jù)的傳輸。設(shè)計中在S4、S6設(shè)定決策點。
2.3 USB驅(qū)動設(shè)計
USB功能驅(qū)動程序采用Cypress公司的通用驅(qū)動程序ezusb.sys,ezusb.sys驅(qū)動的開發(fā)工具為DDK,驅(qū)動程序開發(fā)工作包括:開發(fā)環(huán)境設(shè)置(VC編譯環(huán)境)、驅(qū)動程序設(shè)計、安裝文件(INF文件)設(shè)計。驅(qū)動程序減少了USB設(shè)備硬件處理數(shù)據(jù)的細節(jié),為應(yīng)用程序訪問USB硬件設(shè)備提供相應(yīng)接口。
用戶編寫應(yīng)用程序只要調(diào)用它提供的接口函數(shù)及其所需要傳遞的參數(shù)來實現(xiàn)所需的功能。應(yīng)用程序用CreateFile()函數(shù)打開設(shè)備并且創(chuàng)建與設(shè)備的連接,然后用DeviceIoControl()函數(shù)或ReadFile()與WriteFile()函數(shù)從驅(qū)動程序中讀寫數(shù)據(jù)和向驅(qū)動程序?qū)懭霐?shù)據(jù)。當應(yīng)用程序退出時,用CloseHandle()函數(shù)關(guān)閉設(shè)備。這一過程將產(chǎn)生對應(yīng)于此設(shè)備對象的IRP與驅(qū)動程序設(shè)備類成員函數(shù),如表1所示。
2.4 應(yīng)用程序設(shè)計
應(yīng)用程序是系統(tǒng)與用戶的接口,它通過動態(tài)鏈接庫調(diào)用通用驅(qū)動程序完成對外設(shè)的控制和通信。本系統(tǒng)的應(yīng)用程序開發(fā)使用的是Visual Basic6.0中文版本。本系統(tǒng)的工作過程為:首先是查找設(shè)備打開設(shè)備句柄,然后調(diào)用動態(tài)鏈接庫發(fā)送控制命令啟動系統(tǒng),當檢測到設(shè)備后進行數(shù)據(jù)的讀取命令,調(diào)用動態(tài)鏈接庫的函數(shù)關(guān)閉設(shè)備句柄。系統(tǒng)的應(yīng)用程序界面如圖4所示。
3 系統(tǒng)整體檢測
3.1 FPGA邏輯正確性檢測
利用FPGA內(nèi)部累加器模擬ADC轉(zhuǎn)換后的串行數(shù)據(jù)以及相應(yīng)的時鐘,利用Cypress公司提供的Control Panel 發(fā)出控制命令直接給接口芯片,并讀取FPGA內(nèi)部產(chǎn)生的數(shù)據(jù),觀察其中的數(shù)據(jù)與設(shè)定的FPGA中發(fā)出的數(shù)據(jù)是否相同,以驗證FPGA內(nèi)部邏輯的正確性。相應(yīng)地利用示波器監(jiān)測FPGA內(nèi)部的時鐘信號,驗證其正確性。
3.2 數(shù)據(jù)傳輸數(shù)據(jù)檢測
數(shù)據(jù)傳輸檢測中增加FPGA內(nèi)部累加器產(chǎn)生的數(shù)據(jù)包的數(shù)量,采用Bus Hound 記錄總線狀態(tài)變化,在得到的結(jié)果中觀察Bus Hound中的數(shù)據(jù)形式并查看VB讀數(shù)軟件中的數(shù)據(jù)文件,觀察得到的數(shù)據(jù)文件數(shù)據(jù)總量以及大小都正確,再打開應(yīng)用程序中的數(shù)據(jù)文件所示的波形,從而驗證了數(shù)據(jù)傳輸?shù)恼_性。
4 本系統(tǒng)中對傳輸速度改進方面的分析
本系統(tǒng)中主要需要體現(xiàn)數(shù)據(jù)的實時性傳輸,在數(shù)據(jù)的處理部分與USB部分提高數(shù)據(jù)傳輸速度。主要通過以下方面使速度得到提高:
(1)在數(shù)據(jù)處理部分利用FPGA截取數(shù)據(jù)的有效部分,并將串行數(shù)據(jù)變成并行數(shù)據(jù),以利于數(shù)據(jù)更快、更準確的傳輸。
(2)為了保證數(shù)據(jù)不丟失,在FPGA內(nèi)部增加內(nèi)部FIFO,使數(shù)據(jù)在提交的同時也可以傳輸。
(3)在USB的固件部分,使用AUTO傳輸方式,數(shù)據(jù)直接經(jīng)過USB2.0核、FIFO、GPIF Master以及NandFlash這條高速路徑傳輸,而不經(jīng)過低速的8051核,從而可以達到較高數(shù)據(jù)傳輸速度。
(4)在固件的端點設(shè)置中,使用多緩沖機制,通過改變EPxCFG配置寄存器中的BUF0、BUF1位的值,就可以設(shè)置緩沖數(shù)。
(5)使用GPIF方式進行傳輸,在GPIF波形的延時,提高GPIF波形的執(zhí)行頻率,也可以提升讀取速度。
在進行系統(tǒng)整體性能的測試中,發(fā)現(xiàn)如果加快FPGA的數(shù)據(jù)輸出速度,則在讀出的波形中會有部分丟包的現(xiàn)象,經(jīng)過分步重新測試,發(fā)現(xiàn)在FPGA的內(nèi)部FIFO中,如果寫時鐘與讀時鐘的差距太大,就會造成丟點或者錯點的現(xiàn)象,所以USB的GPIF產(chǎn)生的讀波形應(yīng)該與FPGA的寫入速度相平衡,整體重新進行調(diào)試后,滿足了實時顯示并且穩(wěn)定的條件。
本文利用FPGA和USB接口芯片CY7C68013實現(xiàn)了采樣數(shù)據(jù)的高速傳輸。特別是在調(diào)試過程中為了保證數(shù)據(jù)的正確性,提出了適合于通用驅(qū)動程序的塊傳輸同步控制信號。在上下位機的協(xié)調(diào)控制下數(shù)據(jù)能夠高速有效地傳輸。多次試驗證明,此系統(tǒng)運行穩(wěn)定,能夠滿足工作環(huán)境復(fù)雜、傳輸速度要求高的場合。
參考文獻
[1] EZ-USB FX2 technical reference manual version 2.0 [M/CD].Cypress Semionductor Corp data book,2001.
[2] 錢峰.EZ-USB FX2 單片機原理、編程及應(yīng)用[M].北京:北京航空航天大學出版社,2005.
[3] 時向衛(wèi).Win2000/XP USB 設(shè)備驅(qū)動程序研究與設(shè)計[J]. 計算機工程與設(shè)計,2008,29(21):5563-5564.
[4] 趙卉.基于USB接口的無線數(shù)據(jù)傳輸系統(tǒng)設(shè)計[J].微計算機信息,2008,24(8-2):107-108.
[5] 王偉.基于USB2.0 的高速數(shù)據(jù)采集與傳輸系統(tǒng)的研究[D].長春:吉林大學,2007.