基于FPGA的數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
2.3 FPGA的頂層模塊的設(shè)計(jì)
由圖4可知,top.v模塊是FPGA整個(gè)系統(tǒng)的頂層模塊,它通過(guò)頂層調(diào)用的方式把a(bǔ)dc.v和usb.v兩個(gè)模塊組合成一個(gè)完整的系統(tǒng),系統(tǒng)與外界進(jìn)行通信是通過(guò)top.v這個(gè)模塊對(duì)外的各個(gè)接口來(lái)實(shí)現(xiàn)的,具體到器件層面,就表現(xiàn)為由top.v文件定義的FPGA的相關(guān)的管腳來(lái)和A/D與USB2.0芯片進(jìn)行數(shù)據(jù)的交換、控制信息以及時(shí)鐘信號(hào)的傳遞。這種自頂向下的設(shè)計(jì)方法,不僅符合人的思維邏輯,也大大地簡(jiǎn)化了大規(guī)模邏輯電路的設(shè)計(jì)工作,使人們從繁瑣的自底向上的底層設(shè)計(jì)中解放出來(lái),以一種系統(tǒng)級(jí)的思維模式設(shè)計(jì)電路。這是自頂向下設(shè)計(jì)方法的巨大優(yōu)勢(shì)之一。頂層top.v模塊是通過(guò)例化的方式來(lái)調(diào)用adc.v模塊和usb.v模塊的以及PLL模塊。
2.4 USB2.0芯片的固件程序設(shè)計(jì)
在USB的體系中,無(wú)論是其本身的規(guī)范還是各種廠家所提供的芯片資料,關(guān)于主機(jī)對(duì)USB的檢測(cè)都稱之為枚舉Enumeration(and ReNumer-ation),即枚舉(與重新枚舉)。固件在這發(fā)揮了無(wú)法替代的作用。應(yīng)該說(shuō)所有基于微控制器及其外圍電路的功能設(shè)備的正常工作都離不開固件的參與,固件的作用就是輔助硬件,或者說(shuō)是控制硬件來(lái)完成預(yù)期的設(shè)備功能。沒有固件的參與和控制,硬件設(shè)備只是芯片的簡(jiǎn)單堆砌,無(wú)法實(shí)現(xiàn)預(yù)期的功能。
CY7C68013A內(nèi)部集成了增強(qiáng)型的8051內(nèi)核,它與8051指令集二進(jìn)制是兼容的,那么就可以選擇匯編或者高級(jí)語(yǔ)言C51來(lái)編寫固件代碼,兩者各有優(yōu)缺點(diǎn),適用的環(huán)境也不同。本設(shè)計(jì)中采用C51來(lái)編寫固件程序,關(guān)于開發(fā)C51語(yǔ)言的Keil μVision 2開發(fā)編譯環(huán)境在此不再贅述。
Cypress公司為了簡(jiǎn)化和加速用戶使用CY7C68013A芯片進(jìn)行USB外設(shè)的開發(fā)過(guò)程,特別設(shè)計(jì)了一個(gè)完整的固件程序的框架。這個(gè)框架可以執(zhí)行CY7C68013A芯片的初始化、USB標(biāo)準(zhǔn)設(shè)備請(qǐng)求的處理和USB掛起電源管理服務(wù)。用戶只需要提供一個(gè)USB描述符表,添加其他端點(diǎn)接收和發(fā)送數(shù)據(jù)的通信代碼,以及控制外圍電路的程序代碼。
在Keil μVision 2集成開發(fā)環(huán)境下,新建工程后,需要將工程代碼復(fù)制到工程目錄中并添加至工程列表中,開發(fā)固件程序需要幾個(gè)重要的文件依次為:1)fw.c,框架程序的代碼。2)periph.c,用戶函數(shù)掛鉤的相關(guān)定義,外圍設(shè)備的控制文件。在上節(jié)中,主程序fw.c調(diào)用的TD_lnit()函數(shù)即在此定義出來(lái)。3)dscr.a(chǎn)51,USB描述符表,上節(jié)中關(guān)于描述符的定義在這個(gè)文件中給出。4)EZUSB.lib,EZ-USB函數(shù)庫(kù)目標(biāo)代碼。5)USBJmpTb.OBJ,EZ-USB中斷向量和跳轉(zhuǎn)表。6)FX2.h,程序運(yùn)行所需要的一些宏定義。7)fx2regs.h,CY7C68013A相關(guān)的寄存器定義及位屏蔽的宏定義。8)syncdly.h,定義了若干延時(shí)函數(shù)供程序調(diào)用。本文引用地址:http://m.butianyuan.cn/article/195052.htm
3 Modelsim環(huán)境下仿真與結(jié)果
ModelSim是Model Technology(Mentor Graphics的子公司)的HDL硬件描述語(yǔ)言的仿真軟件,該軟件可以用來(lái)實(shí)現(xiàn)對(duì)設(shè)計(jì)的VBDL、Verilog HDL或是兩種語(yǔ)言混合的程序進(jìn)行仿真,同時(shí)也支持IEEE常見的各種硬件描述語(yǔ)言標(biāo)準(zhǔn)。
目前需要對(duì)adc.v模塊進(jìn)行功能仿真,以此驗(yàn)證該模塊的功能的正確性。仿真測(cè)試的方法就是給adc.v這個(gè)模塊的s_data數(shù)據(jù)輸入端,即A/D芯片的串行數(shù)據(jù)的輸出端,加載一組測(cè)試數(shù)據(jù),每16個(gè)為一組測(cè)試數(shù)據(jù),模擬在真實(shí)環(huán)境下從A/D芯片讀取出來(lái)的二進(jìn)制數(shù)據(jù),然后在adc.v模塊的輸出端,即并行的16位寬的data_out端口觀察是否與給定的測(cè)試數(shù)據(jù)相一致。假如一致,則模塊的功能是正確的。假如有個(gè)別位的數(shù)據(jù)不一致,則需要檢查模塊的代碼是否存在問(wèn)題。在編輯器中編寫Testbench程序如下(非關(guān)鍵的程序限于篇幅,就省略了):
評(píng)論