隨著嵌入式技術(shù)的飛速發(fā)展,,對嵌入式系統(tǒng)的應(yīng)用需求也呈現(xiàn)出不斷增長的態(tài)勢,,因此,嵌入式技術(shù)也相應(yīng)地取得了重要的進展,,系統(tǒng)設(shè)備不斷向高速化,、集成化、低功耗的方向發(fā)展?,F(xiàn)場可編程門陣列FPGA經(jīng)過近20年的發(fā)展,,到目前已成為實現(xiàn)數(shù)字系統(tǒng)的主流平臺之一。 FPGA具有單片機和DSP無法比擬的優(yōu)勢,,相對于單片機和DSP工作需要依靠其上運行的軟件進行,,F(xiàn)PGA全部的控制邏輯是由延時更小的硬件來完成的。
通用串行總線(USB)是現(xiàn)代數(shù)據(jù)傳輸?shù)陌l(fā)展趨勢,,是解決計算機與外設(shè)連接瓶頸的有效手段,,USB2.O版本在原先的版本基礎(chǔ)上實現(xiàn)許多技術(shù)上的飛躍與進步。USB2.0協(xié)議規(guī)范有以下主要優(yōu)點:1)速度快,,接口的傳輸速度高達(dá)480Mh/s,,遠(yuǎn)大于PCI接口的132 Mb/s的傳輸速度;2)連接簡單,,所有的USB外設(shè)利用通用的電纜可簡單方便地連入PC機中,,安裝過程高度自動化;3)支持多設(shè)備連接,,USB接口支持多個不同設(shè)備采用“級聯(lián)”方式來連接外設(shè),。
故為了將數(shù)據(jù)采集系統(tǒng)設(shè)計更加符合高速化和集成化的趨勢,采用了FPGA和USB2.0組合的方案來進行,。
1 數(shù)據(jù)采集系統(tǒng)的框架與硬件設(shè)計方案
系統(tǒng)硬件設(shè)計部分中,,在完成系統(tǒng)時鐘源,、電源等必要電路的設(shè)計基礎(chǔ)上,重點就是完成系統(tǒng)內(nèi)各個部件的接口電路的設(shè)計,,通過這部分的設(shè)計,,基本的硬件平臺就建立起來了。系統(tǒng)部件間的硬件電路接口設(shè)計如圖1所示,。
圖1 系統(tǒng)部件間的硬件電路接口設(shè)計
A/D芯片在此選用了德州儀器公司的10位串行接口芯片TLV1572,,8管腳的SOIC封裝,它外部較少的管腳不僅能夠很方便地實現(xiàn)與其他器件連接,,而且它體積小,,可以節(jié)省很多布線資源,如圖2所示,。TLV1572的最高采樣速率為1.25 MS/s,,其積分非線性誤差I(lǐng)NL<±1LSB,可以采用3 V或5 V的供電方式,。
圖2 A/D芯片及周邊電路
由于大部分USB1.1的芯片都需要微控制器參與數(shù)據(jù)從端點FIFO到應(yīng)用環(huán)境的轉(zhuǎn)移,,微控制器在里面扮演了搬運者的角色,那么顯然微控制器本身的工作頻率就極大地限制了數(shù)據(jù)傳輸帶寬的進一步提高,,微控制器將成為制約整個系統(tǒng)速度提高的瓶頸,。
故在此選用的是Cypress Semiconductor公司的EZ-USBFX2(CY7C68013A)USB2.0芯片,它集成了USB2.0收發(fā)器,,串行接口引擎SIE和可編程的外圍接口,。該芯片的另一大優(yōu)點就是提供了一種獨特架構(gòu),使USB接口和應(yīng)用環(huán)境直接共享Slave FIFOs,,微控制器無需參與數(shù)據(jù)傳輸,,這樣就極大地提高了系統(tǒng)數(shù)據(jù)傳輸速率,如圖3所示,。
圖3 EZ-USB FX2芯片的內(nèi)部結(jié)構(gòu)
由于FPGA的I/O管腳數(shù)目眾多,,它在和A/D芯片及USB2.0芯片相連時,能夠按照優(yōu)化布線資源的方式進行PCB布局設(shè)計,,具體的連接方法在圖1中已經(jīng)給出,。
2 數(shù)據(jù)采集系統(tǒng)軟件設(shè)計方案
FPGA軟件設(shè)計方案中采用了自頂向下的設(shè)計方法,運用Verilog HDL語言來設(shè)計數(shù)字系統(tǒng),,分別完成數(shù)字系統(tǒng)內(nèi)部各個子模塊的設(shè)計,。數(shù)據(jù)采集系統(tǒng)結(jié)構(gòu)及模塊間的連接示意圖如圖4所示。
圖4 數(shù)據(jù)采集系統(tǒng)結(jié)構(gòu)及模塊間的連接示意圖
由圖4可見,,系統(tǒng)主要由3個模塊組成。它們分別是A/D接口adc.v模塊,、USB接口usb.v模塊以及頂層top.v模塊,,其中在頂層top.v模塊中,,完成了對其他兩個模塊的調(diào)用,使它們拼接成為一個完整的系統(tǒng),。其中鎖相環(huán)PLL_1和PLL_2分別給ade.v模塊和usb.v模塊提供時鐘源,。
2.1 FPGA控制A/D芯片接口的軟件設(shè)計
在adc.v模塊中,需要完成FPGA對TLV1572的接口邏輯代碼的設(shè)計,,其實質(zhì)就是在TLV1572的時序分析的基礎(chǔ)上來設(shè)計邏輯代碼,,使得FPGA能夠按照其時序要求完成對A/D芯片的各種控制,包括提供給TLV1572的串行時鐘信號信號ADC_CLK,、CS片選信號ADC_CSn以及從TLV1572中讀取出轉(zhuǎn)換完成的串行數(shù)據(jù)S_DATA,。
TLV1572的時序圖如圖5所示。
圖5 TLV1572的時序圖
從時序圖可見,,A/D芯片的轉(zhuǎn)化過程是在當(dāng)CS為低電平后,,由SCLK的上升沿發(fā)起的,輸出的頭六位二進制數(shù)字均為“0”,,此時A/D芯片正處于采樣階段,,數(shù)字無效,這六位無效的二進制數(shù)之后,,A/D轉(zhuǎn)換完成后的二進制數(shù)據(jù)在SCLK的上升沿被送到總線上,,這時,作為系統(tǒng)主控制芯片的FPGA應(yīng)當(dāng)去采樣總線上的數(shù)據(jù),,得到轉(zhuǎn)換后的結(jié)果,。
2.2 FPGA控制USB2.0芯片的軟件設(shè)計
在usb.v模塊中,需要完成FPGA對CY7C68013A的接口邏輯代碼的設(shè)計和異步FIFO模塊的設(shè)計,。其中,,對CY7C68013A的接口邏輯代碼主要是完成對CY7C68013A芯片的端點FIFO的各種控制,包括16位的數(shù)據(jù)信號FIFO_DATA[15:0],、2位端點FIFO選擇信號FIFO_ADDR[1:0],、端點FI-FO滿標(biāo)志位信號FIFO_Full、端點FIFO寫使能信號FIFO_WR_en,。因為adc.v模塊和芯片外部的CY7C68013A工作在不同的時鐘域內(nèi),,故異步FIFO模塊設(shè)計部分設(shè)計的目的除了是要完成從ade.v模塊讀取過來數(shù)據(jù)的緩沖,另外就是需要解決異步時鐘域數(shù)據(jù)傳輸可能出現(xiàn)的亞穩(wěn)態(tài)問題,。
具體來說,,F(xiàn)PGA在工作時需要不斷向CY7C68013A的端點FIFO寫入數(shù)據(jù),而FPGA與CY7C68013A之間的工作模式屬于同步方式,,兩者都由PLL _2模塊提供40 MHz的時鐘信號進行工作,,那么它們之間的關(guān)系就是同步Slave FIFO的寫操作,由FPGA向CYTC68013A中寫入數(shù)據(jù),。
在Verilog HDL程序設(shè)計中,,需要設(shè)計一個狀態(tài)機來完成同步Slave FIFO寫的時序,,寫時序如下;1)IDLE:當(dāng)寫事件發(fā)生時,,進狀態(tài)1,;2)狀態(tài)1:使FIFOADR[1:0]指向IN FIFO,進狀態(tài)2,;3)狀態(tài)2:如果端點FIFO滿,,在當(dāng)前狀態(tài)等待,否則進狀態(tài)3,;4)狀態(tài)3:驅(qū)動數(shù)據(jù)到數(shù)據(jù)線上,,使SLWR有效,持續(xù)一個IFCLK周期,,進狀態(tài)4,;5)狀態(tài)4:如需傳輸更多的數(shù),進狀態(tài)2,,否則進入IDLE狀態(tài),。
該狀態(tài)轉(zhuǎn)換的狀態(tài)圖如圖6所示。
圖6 狀態(tài)轉(zhuǎn)換的狀態(tài)圖
2.3 FPGA的頂層模塊的設(shè)計
由圖4可知,,top.v模塊是FPGA整個系統(tǒng)的頂層模塊,,它通過頂層調(diào)用的方式把adc.v和usb.v兩個模塊組合成一個完整的系統(tǒng),系統(tǒng)與外界進行通信是通過top.v這個模塊對外的各個接口來實現(xiàn)的,,具體到器件層面,,就表現(xiàn)為由top.v文件定義的FPGA的相關(guān)的管腳來和A/D與USB2.0芯片進行數(shù)據(jù)的交換、控制信息以及時鐘信號的傳遞,。這種自頂向下的設(shè)計方法,,不僅符合人的思維邏輯,也大大地簡化了大規(guī)模邏輯電路的設(shè)計工作,,使人們從繁瑣的自底向上的底層設(shè)計中解放出來,,以一種系統(tǒng)級的思維模式設(shè)計電路。這是自頂向下設(shè)計方法的巨大優(yōu)勢之一,。頂層top.v模塊是通過例化的方式來調(diào)用adc.v模塊和usb.v模塊的以及PLL模塊,。
2.4 USB2.0芯片的固件程序設(shè)計
在USB的體系中,無論是其本身的規(guī)范還是各種廠家所提供的芯片資料,,關(guān)于主機對USB的檢測都稱之為枚舉Enumeration(and ReNumer-ation),,即枚舉(與重新枚舉)。固件在這發(fā)揮了無法替代的作用,。應(yīng)該說所有基于微控制器及其外圍電路的功能設(shè)備的正常工作都離不開固件的參與,,固件的作用就是輔助硬件,或者說是控制硬件來完成預(yù)期的設(shè)備功能。沒有固件的參與和控制,,硬件設(shè)備只是芯片的簡單堆砌,,無法實現(xiàn)預(yù)期的功能。
CY7C68013A內(nèi)部集成了增強型的8051內(nèi)核,,它與8051指令集二進制是兼容的,那么就可以選擇匯編或者高級語言C51來編寫固件代碼,,兩者各有優(yōu)缺點,,適用的環(huán)境也不同。本設(shè)計中采用C51來編寫固件程序,,關(guān)于開發(fā)C51語言的Keil μVision 2開發(fā)編譯環(huán)境在此不再贅述,。
Cypress公司為了簡化和加速用戶使用CY7C68013A芯片進行USB外設(shè)的開發(fā)過程,特別設(shè)計了一個完整的固件程序的框架,。這個框架可以執(zhí)行CY7C68013A芯片的初始化,、USB標(biāo)準(zhǔn)設(shè)備請求的處理和USB掛起電源管理服務(wù)。用戶只需要提供一個USB描述符表,,添加其他端點接收和發(fā)送數(shù)據(jù)的通信代碼,,以及控制外圍電路的程序代碼。
在Keil μVision 2集成開發(fā)環(huán)境下,,新建工程后,,需要將工程代碼復(fù)制到工程目錄中并添加至工程列表中,開發(fā)固件程序需要幾個重要的文件依次為:1)fw.c,,框架程序的代碼,。2)periph.c,用戶函數(shù)掛鉤的相關(guān)定義,,外圍設(shè)備的控制文件,。在上節(jié)中,主程序fw.c調(diào)用的TD_lnit()函數(shù)即在此定義出來,。3)dscr.a51,,USB描述符表,上節(jié)中關(guān)于描述符的定義在這個文件中給出,。4)EZUSB.lib,,EZ-USB函數(shù)庫目標(biāo)代碼。5)USBJmpTb.OBJ,,EZ-USB中斷向量和跳轉(zhuǎn)表,。6)FX2.h,程序運行所需要的一些宏定義,。7)fx2regs.h,,CY7C68013A相關(guān)的寄存器定義及位屏蔽的宏定義。8)syncdly.h,定義了若干延時函數(shù)供程序調(diào)用,。
3 Modelsim環(huán)境下仿真與結(jié)果
ModelSim是Model Technology(Mentor Graphics的子公司)的HDL硬件描述語言的仿真軟件,,該軟件可以用來實現(xiàn)對設(shè)計的VBDL、Verilog HDL或是兩種語言混合的程序進行仿真,,同時也支持IEEE常見的各種硬件描述語言標(biāo)準(zhǔn),。
目前需要對adc.v模塊進行功能仿真,以此驗證該模塊的功能的正確性,。仿真測試的方法就是給adc.v這個模塊的s_data數(shù)據(jù)輸入端,,即A/D芯片的串行數(shù)據(jù)的輸出端,加載一組測試數(shù)據(jù),,每16個為一組測試數(shù)據(jù),,模擬在真實環(huán)境下從A/D芯片讀取出來的二進制數(shù)據(jù),然后在adc.v模塊的輸出端,,即并行的16位寬的data_out端口觀察是否與給定的測試數(shù)據(jù)相一致,。假如一致,則模塊的功能是正確的,。假如有個別位的數(shù)據(jù)不一致,,則需要檢查模塊的代碼是否存在問題。在編輯器中編寫Testbench程序如下(非關(guān)鍵的程序限于篇幅,,就省略了):
由上面的程序可以看見,,給s_data端加載的一組16位二進制數(shù)據(jù)為“0000-0011_0110_1011”。在ModelSim環(huán)境下,,將待測試的文件與該測試文件放在同一個工程下,,設(shè)置好相關(guān)參數(shù)后運行仿真可以得到如下仿真波形,如圖7所示,。
圖7 仿真波形
由圖7可見,,從data_out這個并行的數(shù)據(jù)端口讀出的數(shù)據(jù)正是在Testbench仿真測試文件中給定的那一組測試數(shù)據(jù),仿真得到的結(jié)果是正確的,。
4 數(shù)據(jù)采集系統(tǒng)的實驗
在FPGA控制A/D芯片接口的軟件設(shè)計中,,是通過FPGA內(nèi)部的邏輯電路實現(xiàn)了分頻,并將分頻后的信號作為A/D芯片工作的采樣時鐘,,經(jīng)過測試,,得知A/D芯片的采樣頻率為1.08 MHz,通過信號發(fā)生器,,將輸入的模擬信號設(shè)為10 kHz,、幅度為3 V的正弦波,采樣轉(zhuǎn)換后的數(shù)據(jù)上傳到上位機中,,顯示的波形如圖8所示,。
圖8 10KHZ信號輸入時得到的波形
在同等條件下,,把輸入的模擬信號的頻率調(diào)整為5 kHz。A/D芯片的采樣頻率仍然為1.08 MHz,。得到的顯示波形如圖9所示,。
圖9 5 kHz信號輸入時得到的波形
由圖8和圖9可知,在對模擬信號采樣時,,當(dāng)采樣率不變時,,輸入模擬信號的頻率越低,相對地就提高了采樣點,、減小了采樣間隔,,在圖形中就越能體現(xiàn)出原始模擬信號的信息,得到的波形就更加的理想,。
5 結(jié)束語
本文在研究了FPGA和USB2.0技術(shù)的基礎(chǔ)上,提出了數(shù)據(jù)采集系統(tǒng)的總體設(shè)計方案,,以FPGA和USB2.0為技術(shù)核心,,設(shè)計了硬件電路和軟件代碼并在ModelSim環(huán)境下通過了仿真測試。該系統(tǒng)不僅能夠?qū)崿F(xiàn)一般用途的數(shù)據(jù)采集,,還實現(xiàn)了系統(tǒng)的高速化,、集成化和低功耗工作,為便攜化數(shù)據(jù)采集系統(tǒng)提供了一種設(shè)計思路,。