石波涌 應(yīng)文威 蔣宇中
(92665部隊1) 常德 415000)(海軍工程大學(xué)2) 武漢 430033)
如今,隨著信息技術(shù)的迅速發(fā)展,數(shù)據(jù)采集和處理技術(shù)廣泛應(yīng)用于雷達(dá)、通信、遙測、遙感等領(lǐng)域。在早期計算機通常采用串口或并口傳輸大量的數(shù)據(jù),占用了非??陀^的系統(tǒng)資源,同時數(shù)據(jù)的傳輸速度也受到了極大的制約。傳統(tǒng)的接口通常采用PCI總線或者是RS-232總線。PCI總線有較高的傳輸速率,可達(dá)132Mbit/s,也可以即插即用,但是它們的擴充槽有限且插拔不方便:RS2232串行總線連接比較方便,但是傳輸速率過低,不易用于高速傳送數(shù)據(jù)和傳送大量數(shù)據(jù)。USB在這一背景下應(yīng)運而生。USB具有終端用戶的易用性、應(yīng)用廣泛性、同步傳輸帶寬、靈活性、健壯性、與PC產(chǎn)業(yè)的一致性和成本低廉等特點,使其迅速在市場中流行[1]。
FT245BM是FTDI(Future Technology Devices IntlLtd)公司的多種快速USB通信接口解決方案之一。不同于市面上的其他一些產(chǎn)品,如Cypress公司的EZ-USB系列芯片,FT245BM的開發(fā)難度較低,大幅縮短了開發(fā)周期,且價格低廉。它無需編寫片內(nèi)固件程序,上層PC機則使用FTDI公司提供的官方驅(qū)動程序。FT245BM芯片的主要功能是在內(nèi)部硬件邏輯的作用下實現(xiàn)USB串行數(shù)據(jù)格式與并行數(shù)據(jù)格式的雙向轉(zhuǎn)換。PC機通過USB接口與FT245BM進行數(shù)據(jù)交換,F T245BM則通過并行方式與下位微控制器通信。因此FT245BM有很大的優(yōu)越性。同時為了提高數(shù)據(jù)的采集性能,考慮到FPGA所具有的速度優(yōu)勢,因此采用高速FPGA控制AD采集外部數(shù)據(jù),并通過與FT245BM的交互將數(shù)據(jù)上傳。
如圖1所示,為本文設(shè)計系統(tǒng)的整體框圖。上層的PC機通過FT245BM與FPGA進行通訊,接收AD采樣的外部信號。整個設(shè)計包括PC機的設(shè)計模塊,FT245BM設(shè)計模塊和FPGA的設(shè)計模塊。PC機的設(shè)計模塊主要實現(xiàn)一個人機交互軟件,其功能包括界面的顯示,對FT245BM的開關(guān)和讀寫控制,以及對數(shù)據(jù)流的控制等功能。FT245BM設(shè)計模塊實現(xiàn)FPGA與PC機的連接。一方面通過USB接口直接與PC機相連,與PC機進行交互:另一方面直接與FPGA相連,通過控制引腳控制數(shù)據(jù)的傳輸。FT245BM附接一片EEPROM,用于存儲FT245BM 設(shè)備參數(shù)信息。FPGA設(shè)計模塊通過設(shè)定的采樣速率,將AD采樣得到的數(shù)據(jù)向上傳輸,到達(dá)PC機。
鑒于精度與價格的權(quán)衡,AD采用TLC5510A芯片。T LC5510A使用 semiflash工藝,是一款CMOS,8位,20MSPS模擬數(shù)字轉(zhuǎn)換器(ADCs)。T LC5510A使用單 5V電源供電,通常只有130mW的功耗。包括內(nèi)部采樣保持電路,并行輸出高阻抗模式和內(nèi)部參考電阻。semiflash工藝降低了功耗,與閃存轉(zhuǎn)換器相比體積更小。
圖1 系統(tǒng)整體框圖
FT245BM內(nèi)部主要由USB收發(fā)器、串行接口引擎(SIE)、USB協(xié)議引擎和先進先出(FIFO)控制器等構(gòu)成[2]。USB收發(fā)器提供 USB1.1/2.0的全速物理接口到USB總線,支持UHCI/OHCI主控制器;串行接口引擎主要用于完成USB數(shù)據(jù)的串/并雙向轉(zhuǎn)換,并按照USB1.1規(guī)范來完成USB數(shù)據(jù)流的位填充/位反填充,以及循環(huán)冗余校驗碼(CRC5/CRC16)的產(chǎn)生和檢錯:USB協(xié)議引擎管理來自USB設(shè)備控制端口的數(shù)據(jù)流:FIFO控制器處理外部接口和收發(fā)緩沖區(qū)間的數(shù)據(jù)轉(zhuǎn)換。FIFO控制器與微控制器(如DSP等)的接口主要通過8根數(shù)據(jù)線D0~D7及讀寫控制線(WR和RD#)來完成。FT245BM內(nèi)含一個128字節(jié)的接收緩沖區(qū)和一個384字節(jié)的發(fā)送緩沖區(qū),均用于USB數(shù)據(jù)與并行I/O口數(shù)據(jù)的交換。
FT245BM與EEPROM相連,EEPROM的主要用途是定制USB設(shè)備的VID,PID,Serial Number,Product Description String等。但即使沒有 EEPROM FT245BM也能正常工作,只不過自動將設(shè)備描述符等設(shè)置為默認(rèn)。其中FT公司默認(rèn)的VID是0x0403,這個VID也是給開發(fā)者調(diào)試所用。EEPROM通過FTDI公司的應(yīng)用軟件可以進行擦寫。
設(shè)計的F T245BM硬件電路采用總線供電模式,同時采用上電復(fù)位的方式,不設(shè)置從機的復(fù)位方式。時鐘電路采用一個 6MHz的晶體及兩個56pF電容組成。電源端增加了去耦和旁路電容以提高電路的抗干擾性能。在PCB板的設(shè)計中,數(shù)據(jù)的走線短并且長度大致相等。D0~D7為雙向數(shù)據(jù)端口,RD#、WR、TXE#、RXF#為控制數(shù)據(jù)讀寫的邏輯管腳,這兩組管腳均與FPGA相連。USBDP與USBDM與USB接口電路中的D-,D+相連,以實現(xiàn)同 USB接口的正常通信。EECS,EESK,EEDATA與EEPROM相連。其中EECS選通EEPROM的工作與否,EESK是EEPROM的時鐘信號接口,EEDATA是傳輸數(shù)據(jù)接口。
FT245BM的設(shè)計中最重要的是對控制時序的掌握,對時序的控制好壞直接影響了數(shù)據(jù)傳輸?shù)男阅?。FT245BM讀時序為,當(dāng)RXF#為低,表示當(dāng)前FIFO接收緩沖區(qū)內(nèi)有數(shù)據(jù),可以執(zhí)行讀操作讀取接收緩沖區(qū)數(shù)據(jù)。在RD#電平由高變低,FIFO控制器將接收緩沖區(qū)中的數(shù)據(jù)輸出到8位數(shù)據(jù)端口上,微控制器此時只需讀取I/O口就可以將數(shù)據(jù)取到內(nèi)部數(shù)據(jù)總線上來,再將RD#信號拉高完成1個字節(jié)數(shù)據(jù)的讀取。當(dāng)將FIFO接收緩沖區(qū)中的數(shù)據(jù)全部取出后,RXF#被拉高表示數(shù)據(jù)為空。在RXF#為高時,禁止從FIFO接收緩沖區(qū)讀取數(shù)據(jù)。
FT245BM 寫時序為,當(dāng) TXE#為低,表示當(dāng)前FIFO發(fā)送緩沖區(qū)空,可以向發(fā)送緩沖區(qū)寫入數(shù)據(jù)。在WR為高電平時,微控制器將8位數(shù)據(jù)D[0…7]送到并行I/O口上,在WR信號電平由高變低時數(shù)據(jù)被寫入發(fā)送緩沖區(qū)中。當(dāng)TXE#為高時,表示當(dāng)前FIFO發(fā)送緩沖區(qū)已滿或者正在寫入上一個字節(jié),此時禁止向發(fā)送緩沖區(qū)中寫入任何數(shù)據(jù)。微控制器向FT245BM寫入數(shù)據(jù)時應(yīng)確保TXE#為低。
FPGA采用Altera公司CycloneⅡ系列產(chǎn)品中的EP2C5。它采用90nm工作制作,工作電為壓1.2V,內(nèi)部具有兩個鎖相環(huán),4068個 LE單元,26個M4K型RAM塊,總RAM容量達(dá)119,808位。EP2C5T144C8的I/O口達(dá)142個,最高工作頻率達(dá)250MHz,是一款高性價比的FPGA產(chǎn)品。
圖2 FPGA算法結(jié)構(gòu)
如圖2所示為FPGA設(shè)計模塊的算法結(jié)構(gòu),分頻器將FPGA時鐘進行分頻產(chǎn)生采樣時鐘,以達(dá)到我們要求的采樣速率。采樣時鐘驅(qū)動FIFO讀取采樣信號,USB讀寫器一方面判斷FIFO滿足特定要求后,通過外部接口向上傳輸數(shù)據(jù),另一方面接收PC向下傳輸?shù)臄?shù)據(jù),用于配置分頻器的系數(shù),改變采樣頻率。分頻器的設(shè)計較簡單,內(nèi)部有一個累加器進行循環(huán)累加,根據(jù)配置的分頻器系數(shù),輸出采樣時鐘[4]。
FIFO的設(shè)計采用Altera帶有的免費的IP core,在QuartusⅡ軟件平臺下,通過Megawizward向?qū)Мa(chǎn)生8×2048位的FIFO。FIFO產(chǎn)生的重要引腳有wrclk(寫信號),rdclk(讀信號),rdreq(讀請求信號),wrreq(寫請求信號),rdempty(讀空間空標(biāo)志),wrempty(寫空間空標(biāo)志),wrfull(寫空間滿標(biāo)志),rdfull(讀空間滿標(biāo)志),wrusedw(寫空間可用數(shù)據(jù)),rdusedw(讀空間可用數(shù)據(jù))。將Megawizward產(chǎn)生的FIFO進行封裝,fifo_read_i指示USB讀寫處理器請求數(shù)據(jù),fifo_read_o表示當(dāng)前FIFO準(zhǔn)備好輸出數(shù)據(jù)。fifo_read_o信號由三個信號確定,當(dāng)reset信號產(chǎn)生時置零:當(dāng) rdusedw[10]為 1,即至少有1024個數(shù)據(jù)時置1:當(dāng)fifo_read_o信號為1且rdempty為1時置0,即數(shù)據(jù)讀完。FIFO的寫時鐘采用FPGA的時鐘,為50MHz,而讀時鐘則采用FT245BM 芯片的時鐘6M。
USB讀寫器內(nèi)部由一個狀態(tài)機實現(xiàn),完成兩個功能。一個功能是判斷FT245BM是否有向下的數(shù)據(jù),若是則將數(shù)據(jù)接收過來配置給分頻器。另一個功能是判斷FPGA中的FIFO是否滿足要求,若是則讀取數(shù)據(jù)向上傳輸,直到將內(nèi)部的FIFO讀空。
如圖3所示,為USB讀寫器的狀態(tài)機。當(dāng)狀態(tài)機處于空閑狀態(tài)時,檢測F T245BM接收緩存中是否有是數(shù)據(jù),若有,則將數(shù)據(jù)接收,作為分頻器的分頻系數(shù):否則跳出狀態(tài),檢測FPGA內(nèi)部FIFO緩存是否滿足條件。若是,則讀取緩存區(qū)中的數(shù)據(jù)直到將FIFO緩存讀空,讀空后自然不滿足讀取條件,跳到空閑狀態(tài):若緩存區(qū)不滿足條件直接跳到空閑狀態(tài)。
圖3 USB讀寫器狀態(tài)機
USB設(shè)備插入PC機時操作系統(tǒng)會請求安裝設(shè)備驅(qū)動程序,FTDI公司為基于FT245BM的USB接口設(shè)備提供了VCP、D2XX(動態(tài)鏈接庫)兩種驅(qū)動程序。選擇不同的驅(qū)動程序,PC機端軟件設(shè)計方法也不同。
選擇安裝VCP驅(qū)動程序時,操作系統(tǒng)將基于FT245BM的USB接口設(shè)備虛擬成為串行通信口,對這一虛擬的串行口的操作就等同于對該USB接口設(shè)備的操作,因此在應(yīng)用程序中可以利用串行通信控件來簡化PC機端軟件的設(shè)計。目前比較成熟的串行通信控件有MSCOMM、SPCOMM、PCCOMM等[3]。但是根據(jù)FTDI公司提供的資料上看VCP的數(shù)據(jù)傳輸數(shù)率只能達(dá)到300kb/s。因此,軟件的設(shè)計是基于FT245BM的第二種設(shè)計思路,即利用D2XX來設(shè)計。
選擇D2XX作為USB接口的設(shè)備驅(qū)動程序,應(yīng)用程序通過 FTD2XX.DLL、FTD2XX.SYS、Window s USBDriver Stack來實現(xiàn)對FT245BM的讀寫。因此,在程序編寫時只需調(diào)用FTD2XX.DLL中的函數(shù),便可完成對USB接口設(shè)備的讀寫操作。FTD2XX.DLL提供了豐富的接口函數(shù)來訪問FT245BM。主要函數(shù)簡介如下:
FT_ListDevice:獲取當(dāng)前PC機上連接的所有的FTDI USB接口設(shè)備的信息:FT_Open,FT_OpenEx:打開FTDI USB接口:FT_Read:從FTDI USB接口讀取數(shù)據(jù):FT_Write:向FTDI USB接口寫入數(shù)據(jù):FT_Close:關(guān)閉FTDI USB接口:FT_SetTimeOut:設(shè)置讀寫延時時間大小:FT_GetDeviceInfoList:獲取USB設(shè)備的列表:FT_GetDeviceInfoDetail:獲取某個USB設(shè)備的詳細(xì)信息:FT_GetStatus:獲取FT245BM中接收緩存和發(fā)送緩存的大小。以上函數(shù)是一些基本函數(shù),另有其它功能的函數(shù)不一一列舉??傊?D2XX提供的函數(shù)齊全,不僅包括對FT245BM芯片的操作,數(shù)據(jù)流控制,而且還能對EEPROM進行操作,例如能對EEPROM進行讀寫,擦除等。EEPROM內(nèi)可存儲了FT245BM產(chǎn)品的詳細(xì)信息,通過FT公司自帶的軟件MProg 3.0a,可以將一些USB設(shè)備的基本參數(shù)下載到EEPROM中。
在軟件的設(shè)計中,選用的開發(fā)平臺為VC++6.0。為了使界面美觀大方,設(shè)計庫選用了微軟提供的MFC。設(shè)計中增開了一條線程,用于讀取USB口的數(shù)據(jù),并將數(shù)據(jù)輸出顯示在程序界面中。當(dāng)然由于數(shù)據(jù)采集量大,若是完全顯示對于系統(tǒng)資源的消耗過大,因此顯示的策略是每隔50ms顯示一次,并采用雙緩存圖形顯示技術(shù)[5],消除圖形顯示的抖動,使得顯示的效果更好。同時程序還附帶完成對USB上傳速率性能的測試。
在本文設(shè)計的采集系統(tǒng)中,無論在AD采集還是FPGA內(nèi)部算法,都不會成為系統(tǒng)采樣速度的瓶頸。一方面原因是所采用AD芯片的轉(zhuǎn)化速率為20MSPS,高于FT245BM 電路的時鐘6M:另一方面原因在于FPGA具有的高速并行的特點,在系統(tǒng)中采用的時鐘頻率為50M,這是能夠滿足要求的。因此,采集系統(tǒng)傳輸性能的瓶頸在FT245BM上。所以,對F T245BM性能的測試能反應(yīng)出整個采集系統(tǒng)的傳輸性能。
測試FPGA上傳數(shù)率的測試,FPGA以不間斷的發(fā)送模式向上位機發(fā)送數(shù)據(jù),上位機同時檢測數(shù)據(jù)的正確性,錯誤則此時數(shù)據(jù)發(fā)送無效。數(shù)據(jù)格式為相鄰數(shù)據(jù)位反。發(fā)送數(shù)據(jù)的單位為Byte,發(fā)送的數(shù)據(jù)大小模式有100Byte,500Byte,1kByte,5kByte,8kByte,10kByte。計算機向FT245BM設(shè)備發(fā)送一個開始字符,該字符同時選定了發(fā)送數(shù)據(jù)大小的模式,FPGA正確收到有效字符之后,發(fā)送該模式大小的數(shù)據(jù)包,計算機接收并檢測其有效性。時間的測量在發(fā)出開始字符后開始計時,直到接收到預(yù)定大小的數(shù)據(jù)包。在上層機中,通過使用機器指令 RDTSC(Read Time Stamp Counter)來讀取CPU的時間戳實現(xiàn)時間的測量,其可達(dá)到納秒級的計時精度。
在下層的FPGA中,對設(shè)計進行略微的修改。為了使得測試數(shù)據(jù)的可控,在FPGA內(nèi)部,斷開與FIFO之前的連接,代之以一個信號源控制器。該信號源控制器的數(shù)據(jù)格式為相鄰數(shù)據(jù)反相。一開始,FPGA處于等待狀態(tài),查詢到FT245BM有數(shù)據(jù)時,通過控制引腳狀態(tài)來接收數(shù)據(jù)。通過預(yù)先定義了一組數(shù)據(jù)標(biāo)志代表發(fā)送不同大小的數(shù)據(jù)包。若接收數(shù)據(jù)為預(yù)先定義的模式標(biāo)志,則進入發(fā)送狀態(tài),發(fā)送數(shù)據(jù)直到發(fā)送完所有預(yù)定的數(shù)據(jù)。
表1 發(fā)送數(shù)據(jù)速率表(Kbyte/s)
表1為發(fā)送數(shù)據(jù)速率表。根據(jù)上述的數(shù)據(jù)結(jié)果顯示,在數(shù)據(jù)傳輸中,數(shù)據(jù)包尺寸較小的情況下,發(fā)送數(shù)率不大,速率大小也不穩(wěn)定,而發(fā)送的數(shù)據(jù)包尺寸較大時,速率趨于恒定,一般能達(dá)到1Mbps以上。數(shù)據(jù)的發(fā)送同系統(tǒng)的繁忙程度有一定得聯(lián)系,因為Windows是基于多線程的操作系統(tǒng),對于不同的優(yōu)先級的進程分配不同的資源和效率,系統(tǒng)越繁忙,發(fā)送數(shù)據(jù)的速率也越慢。因此,測試表明系統(tǒng)的傳輸性能應(yīng)該在1.5M以上。
如圖4所示,為設(shè)計軟件的程序界面圖。左下角的顯示框內(nèi)顯示當(dāng)前設(shè)備的信息,包括Flag,Type,Vendor ID(生產(chǎn)廠商 ID)和Product ID(產(chǎn)品ID),LocID,Serial Number,Description。在右上角有采集波形,停止采集按鈕,主要完成對數(shù)據(jù)的采集工作,接收從FPGA上來的數(shù)據(jù)。通過采樣間隔下拉選框,我們可以設(shè)置采樣頻率,共有5個可選的頻率,分別為50K,1K,10K,100K,1M。
測試條件為溫度21℃,大氣壓0.1Mpa,采樣間隔為500kHz。外部信號峰峰值(Vp-p)2V,頻率為40kHz,偏移2V。在打開設(shè)備之后,點擊“采集波形”,波形顯示如圖5所示。結(jié)果表明,采樣效果良好,穩(wěn)定,滿足我們的要求。
系統(tǒng)設(shè)計包括FT245BM設(shè)計模塊,FPGA的設(shè)計模塊和PC機的設(shè)計模塊。F T245BM模塊主要完成PC機和FPGA的通信。FPGA的設(shè)計模塊負(fù)責(zé)采樣外部信號,并與USB芯片進行交互。PC機的設(shè)計基于F TDI公司開發(fā)的D2XX驅(qū)動和Microsoft公司支持的MFC類庫,利用VC++開發(fā)軟件設(shè)計圖形界面,具有很高的友好性和互動性。測試方案證明,本采集系統(tǒng)的實時傳輸速率可達(dá)到1.5MBps以上。
本系統(tǒng)以FT245BM芯片為中介,完成PC機與FPGA的交互,控制FPGA采集外部信號。結(jié)果表明該系統(tǒng),安全可靠,高速穩(wěn)定,達(dá)到了實用要求。
[1]林秀珍,梁志強.通用串行總線USB及其應(yīng)用[J].現(xiàn)代電子技術(shù),2003(7)
[2]FT245BM data sheet.Future Technology Devices Intl.Ltd,2005:1~24
[3]徐鋒.基于FT245BM的快速USB接口的實現(xiàn)[J].電子工程師,2007(3)
[4]諸振勇,翁木云.FPGA設(shè)計及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2002:112~207
[5]Julio Sanchez.Windows圖形編程[M].羅駿,等譯.北京:清華大學(xué)出版社,2000:15~17