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