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