基于FPGA的任意波形發(fā)生器設(shè)計(jì)與實(shí)現(xiàn)
摘要:本文提出了一種基于可編程邏輯器件(FPGA)芯片EP2C20F484的任意波形發(fā)生器的設(shè)計(jì)方法。完成了在FPGA的控制下,USB接口控制模塊、SRAM控制模塊、DA轉(zhuǎn)換模塊等協(xié)同工作的硬件設(shè)計(jì)、固件設(shè)計(jì)以及軟件設(shè)計(jì),并給出了實(shí)驗(yàn)結(jié)果。實(shí)驗(yàn)結(jié)果表明,此任意波形發(fā)生器能夠按照要求輸出相應(yīng)波形,達(dá)到了設(shè)計(jì)要求。
關(guān)鍵詞:EP2C20F484;AD9726;任意波形發(fā)生器;USB2.O
0 引言
在腐蝕領(lǐng)域和電鍍行業(yè),常常需要使用任意波形的電流電壓信號(hào)進(jìn)行生產(chǎn)和測試。任意波形是指頻率可變、幅值可變、相位可變的正弦波形和其他波形,如三角波形、鋸齒波、特殊波形等。目前任意波形發(fā)生器大多采用直接數(shù)字頻率合成(DDS)技術(shù),即將波形的數(shù)字量信號(hào)存儲(chǔ)于存儲(chǔ)器中,嵌入式主機(jī)以一定的速率依次將存儲(chǔ)器單元中的波形數(shù)據(jù)逐個(gè)發(fā)送給D/A轉(zhuǎn)換器,合成為需要的波形。
隨著微處理器日益廣泛的應(yīng)用和大規(guī)模集成電路技術(shù)的發(fā)展,出現(xiàn)了大量能夠產(chǎn)生多種波形且性能穩(wěn)定的任意波形發(fā)生器,但大多數(shù)方案都是基于串行或并行總線進(jìn)行數(shù)據(jù)的傳輸,這種方案雖然成本較低,但系統(tǒng)的實(shí)時(shí)性較差,難以滿足復(fù)雜波形的大數(shù)據(jù)量的傳輸要求。我們?cè)O(shè)計(jì)了一種基于FPGA芯片的任意波形發(fā)生器,充分利用了FPGA強(qiáng)大的邏輯功能,實(shí)現(xiàn)了利用單片F(xiàn)PGA芯片控制整個(gè)系統(tǒng)的方案。同時(shí)選擇USB2.0接口芯片CY7C68013,它能較好地與FPGA芯片合作,完成系統(tǒng)預(yù)先設(shè)計(jì)的功能,使總體電路簡單,成本低廉,產(chǎn)生的波形信號(hào)精度較高。數(shù)字波形數(shù)據(jù)從上位機(jī)通過USB總線直接存儲(chǔ)在SRAM數(shù)據(jù)存儲(chǔ)器中,通過FPGA控制,將波形數(shù)據(jù)讀出,送入后向通道進(jìn)行D/A轉(zhuǎn)換和放大處理后得到所需的模擬信號(hào)波形。與傳統(tǒng)的發(fā)生器在ROM或FLASH存儲(chǔ)波形數(shù)據(jù)的方法相比,具有更大的靈活性。
1 系統(tǒng)總體結(jié)構(gòu)及工作過程
波形發(fā)生器以FPGA為核心,它控制著整個(gè)系統(tǒng)的讀、寫、輸出等操作,系統(tǒng)框圖如圖l所示。上位機(jī)將數(shù)字波形數(shù)據(jù)通過USB2.O總線送到數(shù)據(jù)存儲(chǔ)器中,數(shù)據(jù)存儲(chǔ)器循環(huán)地將波形數(shù)據(jù)發(fā)送到DAC電路,由DDS電路產(chǎn)生相應(yīng)的DAC刷新時(shí)鐘(0~1MHz,步進(jìn)0.02Hz),DAC輸出波形經(jīng)緩沖放大、低通濾波、放大輸出。輸出的波形頻率為0.1Hz(DC)~1MHz(-3dB),頻率分辨率為0.01Hz。
本系統(tǒng)主要由五部分組成:
(1)上位機(jī)。主要功能是利用仿真軟件(如CVI、MATLAB、VB等)產(chǎn)生所需波形數(shù)據(jù),并通過USB接口下載到波形發(fā)生器中,其次就是存儲(chǔ)USB2.0接口芯片的驅(qū)動(dòng)程序。
(2)USB2.0接口控制器芯片。本設(shè)計(jì)使用的是Cvpress Semiconductor公司的EZ-USB FX2系列芯片CY7C68013AE。
(3)數(shù)據(jù)存儲(chǔ)芯片SRAM??紤]到成本的因素,本系統(tǒng)采用ISSI公司的IS6lLV25616-10T。
(4)D/A轉(zhuǎn)換芯片。本設(shè)計(jì)使用的是AD9726,該芯片控制信號(hào)簡單,D/A轉(zhuǎn)換速度快,因此將系統(tǒng)的硬件設(shè)計(jì)大為簡化,也減輕了系統(tǒng)軟件設(shè)計(jì)的工作量。
(5)FPGA控制芯片。本設(shè)計(jì)使用的是Altera公司的Cyclone II系列型號(hào)為EP2C20F484的FPGA。EP2C20F484以90nm工藝技術(shù)為基礎(chǔ),提供了18,752個(gè)邏輯單元(LE),并具有一整套最佳的功能,包括嵌入式18位×18位乘法器、專用外部存儲(chǔ)器接口電路、4kbit嵌入式存儲(chǔ)器塊、鎖相環(huán)(PLL)和高速差分I/O能力等。
2 系統(tǒng)功能及硬件實(shí)現(xiàn)
2.1 USB傳輸模塊
CY7C68013有2種接口方式:Slave FIFOs和可編程接口GPIF。當(dāng)FPGA與其相連時(shí),只需要利用CY7C68013作為一個(gè)USB2.0數(shù)據(jù)通道來實(shí)現(xiàn)與主機(jī)的高速通信。
Slave FIFOs方式是從機(jī)方式,外部控制器可像普通FIFO一樣對(duì)CY7C68013的多層緩沖FIFO進(jìn)行讀寫。CY7C68013的Slave FIFOs工作方式可設(shè)為同步或異步;工作時(shí)鐘可選為內(nèi)部產(chǎn)生或外部輸入,其它控制信號(hào)也可靈活地設(shè)置為高有效或低有效。電路連接圖如圖2所示。
IFCLK是同步時(shí)鐘信號(hào),F(xiàn)LAGA、FLAGB和FLAGC是CY7C68013內(nèi)部FIFO的狀態(tài)標(biāo)志,EP2C20F484通過通用I/O口獲得CY7C68013內(nèi)部FIFO的空、半滿(由用戶設(shè)定半滿閾值)和滿這三個(gè)狀態(tài)信號(hào),ISLCS、SLOE、SLRD、SLWR對(duì)CY7C680l3進(jìn)行讀寫操作控制,F(xiàn)D[15:0]是數(shù)據(jù)線,ADD[1:0]是選擇4個(gè)FIFO的地址線。其工作過程為:PC機(jī)通過USB向FPGAP發(fā)送波形數(shù)據(jù)時(shí),USB通過請(qǐng)求方式通知FPGA讀取波形數(shù)據(jù),F(xiàn)PGA首先查看空、半滿和滿這三個(gè)狀態(tài)信號(hào),選擇一個(gè)FIFO,然后控制USB接收適當(dāng)大小的數(shù)據(jù),以保證數(shù)據(jù)不會(huì)溢出,并存入SRAM中。
2.2 DAC功能模塊
從總體工作過程分析可知,從USB接口下載的波形數(shù)據(jù)存儲(chǔ)在SRAM中,SRAM循環(huán)輸出數(shù)據(jù)到DAC芯片,根據(jù)DDS原理產(chǎn)生模擬波形。具體電路如圖3所示。
IS6lLV25616是256k×16高速CMOS工藝3.3V單電源供電的靜態(tài)隨機(jī)存儲(chǔ)器(SRAM),在FPGA控制下存儲(chǔ)從USB下載的數(shù)據(jù),并將數(shù)據(jù)循環(huán)輸出到DAC芯片。AD9726是一款16位高性能LVDS DAC,具有出色的噪聲與雜散性能以及真16位直流線性度。它采用CMOS工藝制造,并利用專有開關(guān)技術(shù)來增強(qiáng)動(dòng)態(tài)性能。該器件具有較寬的滿量程電流調(diào)節(jié)范圍(2mA至20mA),能夠以較低功耗水平工作。其電流輸出配置簡便,可以用于各種單端或差分電路拓?fù)浣Y(jié)構(gòu)。
3 系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)
3.1 固件程序設(shè)計(jì)
CY7C68013內(nèi)嵌有8051微處理器,用于控制芯片的工作狀態(tài)設(shè)置,寫入微處理器的程序文件稱為固件程序(Firmware),為了便于維護(hù)和移植,一般采用單片機(jī)的C語言編寫。主要有以下幾種功能:a.初始化工作,包括設(shè)置一些特殊功能寄存器的初值以實(shí)現(xiàn)所需的設(shè)備屬性或者功能,例如開中斷、使能端點(diǎn)、配置端口等。b.輔助硬件完成設(shè)備的重新列舉過程,包括模擬設(shè)備的斷開與重新連接,對(duì)接收到的設(shè)置包進(jìn)行分析判斷,從而對(duì)主機(jī)的設(shè)備請(qǐng)求作出適當(dāng)?shù)捻憫?yīng),完成主機(jī)對(duì)設(shè)備的配置任務(wù)。c.對(duì)中斷的處理。d.?dāng)?shù)據(jù)的接收和發(fā)送。e.外圍電路的控制。固件程序的流程如圖4所示。
3.2 FPGA程序設(shè)計(jì)
在本系統(tǒng)中FPGA作為主控制器,提供USB控制、DA控制、SRAM控制、I2C控制及全局時(shí)鐘控制等功能模塊。這里重點(diǎn)介紹USB接口控制模塊。固化程序?qū)Y7C68013A設(shè)置為Slave FIFO工作模式,需要FPGA提供FIFO端口的讀寫操作控制時(shí)序。CY7C68013A為每個(gè)端口提供了”空”標(biāo)志、”滿”標(biāo)志和”可編程級(jí)”標(biāo)志。FPGA檢測這些信號(hào),用于控制讀寫的過程,F(xiàn)PGA再完成這些端口FIFO的操作時(shí)序控制。USB控制器的狀態(tài)轉(zhuǎn)移如圖5所示,控制器工作在五個(gè)狀態(tài)中,上電復(fù)位后工作在IDLE狀態(tài),當(dāng)讀/寫事件發(fā)生時(shí)進(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ū)動(dòng)數(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硬件描述語言實(shí)現(xiàn)了FIFO的讀寫時(shí)序,并在ALTERA公司提供的QuartusII8.0開發(fā)工具中綜合編譯并映射到FPGA中運(yùn)行。
4 結(jié)果及分析
在設(shè)計(jì)結(jié)果中,最后的波形圖是使用泰克公司的TDSl012型示波器得到的。經(jīng)過實(shí)際的測試,該信號(hào)發(fā)生器產(chǎn)生的波形精度高、失真小,完全滿足設(shè)計(jì)的要求。圖6是產(chǎn)生的正弦波、鋸齒波的波形結(jié)果。