基于FPGA的任意波形發(fā)生器設(shè)計與實現(xiàn)
3 系統(tǒng)軟件設(shè)計與實現(xiàn)
3.1 固件程序設(shè)計
CY7C68013內(nèi)嵌有8051微處理器,用于控制芯片的工作狀態(tài)設(shè)置,寫入微處理器的程序文件稱為固件程序(Firmware),為了便于維護(hù)和移植,一般采用單片機的C語言編寫。主要有以下幾種功能:a.初始化工作,包括設(shè)置一些特殊功能寄存器的初值以實現(xiàn)所需的設(shè)備屬性或者功能,例如開中斷、使能端點、配置端口等。b.輔助硬件完成設(shè)備的重新列舉過程,包括模擬設(shè)備的斷開與重新連接,對接收到的設(shè)置包進(jìn)行分析判斷,從而對主機的設(shè)備請求作出適當(dāng)?shù)捻憫?yīng),完成主機對設(shè)備的配置任務(wù)。c.對中斷的處理。d.?dāng)?shù)據(jù)的接收和發(fā)送。e.外圍電路的控制。固件程序的流程如圖4所示。
3.2 FPGA程序設(shè)計
在本系統(tǒng)中FPGA作為主控制器,提供USB控制、DA控制、SRAM控制、I2C控制及全局時鐘控制等功能模塊。這里重點介紹USB接口控制模塊。固化程序?qū)Y7C68013A設(shè)置為Slave FIFO工作模式,需要FPGA提供FIFO端口的讀寫操作控制時序。CY7C68013A為每個端口提供了”空”標(biāo)志、”滿”標(biāo)志和”可編程級”標(biāo)志。FPGA檢測這些信號,用于控制讀寫的過程,F(xiàn)PGA再完成這些端口FIFO的操作時序控制。USB控制器的狀態(tài)轉(zhuǎn)移如圖5所示,控制器工作在五個狀態(tài)中,上電復(fù)位后工作在IDLE狀態(tài),當(dāng)讀/寫事件發(fā)生時進(jìn)入狀態(tài)1;在狀態(tài)1中根據(jù)讀/寫事件使能FIFOADR[1:0]指向相應(yīng)FIFO并進(jìn)入狀態(tài)2;在狀態(tài)2,如果FIFO空/滿,在當(dāng)前狀態(tài)等待,否則進(jìn)入狀態(tài)3;在狀態(tài)3中,驅(qū)動數(shù)據(jù)總線,完成讀/寫操作,進(jìn)入狀態(tài)4;在狀態(tài)4中,如需傳輸更多數(shù)據(jù),進(jìn)入狀態(tài)2,否則進(jìn)入狀態(tài)IDLE。本系統(tǒng)采用Verilog HDL硬件描述語言實現(xiàn)了FIFO的讀寫時序,并在ALTERA公司提供的QuartusII8.0開發(fā)工具中綜合編譯并映射到FPGA中運行。
4 結(jié)果及分析
在設(shè)計結(jié)果中,最后的波形圖是使用泰克公司的TDSl012型示波器得到的。經(jīng)過實際的測試,該信號發(fā)生器產(chǎn)生的波形精度高、失真小,完全滿足設(shè)計的要求。圖6是產(chǎn)生的正弦波、鋸齒波的波形結(jié)果。
評論