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