基于FPGA的數據采集系統的設計與實現
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,定義了若干延時函數供程序調用。本文引用地址:http://www.104case.com/article/195052.htm
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程序如下(非關鍵的程序限于篇幅,就省略了):
評論