徐宇寶,張曉東
(皖西學(xué)院 機(jī)械與電子工程學(xué)院, 安徽 六安 237012)
基于FPGA的任意波形發(fā)生器設(shè)計(jì)探究
徐宇寶,張曉東
(皖西學(xué)院 機(jī)械與電子工程學(xué)院, 安徽 六安 237012)
本文對(duì) FPGA芯片實(shí)現(xiàn)的DDS結(jié)構(gòu)中數(shù)字部分與接口部分進(jìn)行了設(shè)計(jì),將ROM改成RAM,可以實(shí)現(xiàn)對(duì)波形數(shù)據(jù)的更新.在對(duì)單片機(jī)控制的基礎(chǔ)之上,通過DDS技術(shù)的運(yùn)用并利用FPGA芯片.以DDS模塊為核心的任意波形產(chǎn)生系統(tǒng)的形成得以實(shí)現(xiàn).波形種類齊全、帶寬高、頻率分辨率高等是這種波形的主要特點(diǎn),這是這些特點(diǎn)的存在,可以使得信號(hào)的調(diào)相功能得以實(shí)現(xiàn).
DDS;FPGA;RAM;任意波形發(fā)生器
當(dāng)前社會(huì)信息技術(shù)發(fā)展迅猛,人們對(duì)于信息的交換(也就是通信)依賴性也越來越高,在這種背景下,提高通信的質(zhì)量變成非常迫切的事情.想要提高當(dāng)今通信的質(zhì)量,就需要在通信的過程中著手,信號(hào)的發(fā)生、信號(hào)的傳輸和信號(hào)的處理是通信的幾個(gè)主要過程,但是最重要的過程是信號(hào)的發(fā)生,如果沒有可以進(jìn)行利用的信號(hào)產(chǎn)生,那么信號(hào)的傳輸和信號(hào)的處理也都變的毫無意義[1].想要產(chǎn)生好的信號(hào)源,就需要有好的信號(hào)發(fā)生源,這樣可以降低在信號(hào)傳輸過程和處理過程中發(fā)生錯(cuò)誤的概率,從源頭上避免信號(hào)發(fā)生階段的錯(cuò)誤,就可以減少信號(hào)接收端出現(xiàn)錯(cuò)誤的情況.因此,需要我們有一個(gè)技術(shù)質(zhì)量非常高的信號(hào)發(fā)生器,基于 FPGA的任意波發(fā)生器就是很適合的.
當(dāng)前可以實(shí)現(xiàn)可變頻信號(hào)的方法非常多,比如改變傳統(tǒng) LC震蕩電路中電感的值,就可以產(chǎn)生出不一樣的頻率值,但是這種方法卻存在著輸出頻率不準(zhǔn)確,帶寬不足等缺點(diǎn).還有一種方法就是晶體震蕩電路,通常人們習(xí)慣稱之為晶振,在晶體電路中晶體決定著頻率,在以往人們通過實(shí)驗(yàn)得出它的頻率穩(wěn)定度可以達(dá)到 10﹣6量級(jí),這樣我們就不需要擔(dān)心頻率輸出不穩(wěn)定問題,但是又一個(gè)難題擺在了我們面前,在晶體電路中晶體決定著頻率,如果不能很好地制作晶振,就會(huì)導(dǎo)致頻率被固定,不可以進(jìn)行調(diào)整,這樣就只能產(chǎn)生一種單一頻率的信號(hào),這肯定是不符合信號(hào)實(shí)用性要求的.通過以上分析,我們可以看出這兩種方法都不是很好,但是不必?fù)?dān)心,隨著當(dāng)前電子技術(shù)的發(fā)展的提高,以及在制作大規(guī)模集成電路工藝上的進(jìn)步,出現(xiàn)了新的DDS技術(shù),這為我們提供了新的選擇[2].
DDS工作原理如圖一所示.
圖1 基本DDS結(jié)構(gòu)原理圖
相位累加器是 DDS技術(shù)的核心,它的作用就和一個(gè)計(jì)數(shù)器相似,當(dāng)一個(gè)時(shí)鐘信號(hào)到來,就可以使相位累加器的輸出得到增加,增加的是一個(gè)步長的相位增加量,如圖1,頻率控制字決定了相位增加量的大小.在儲(chǔ)存器中有通過數(shù)據(jù)表形式保存的信號(hào)波形相位,它包含著相位信息,也就是待產(chǎn)生信號(hào)的一個(gè)周期的幅度.相位累加器中輸出信號(hào)的信息可以從數(shù)據(jù)表中讀出,這種信息是當(dāng)前相位累加器輸出信號(hào)相位值對(duì)應(yīng)的幅度數(shù)據(jù),并將這種數(shù)據(jù)通過DAC的轉(zhuǎn)換功能變成模擬信號(hào)波形進(jìn)行輸出,相位累加器通過線性相位累加的方式進(jìn)行疊加,當(dāng)達(dá)到滿量程時(shí)就可以進(jìn)行一次計(jì)數(shù)溢出,輸出信號(hào)的頻率受溢出速率決定.想要使相位累加器有更高的溢出率,就要調(diào)高頻率控制字內(nèi)的相位增加量,這樣才可以得到更高的信號(hào)輸出頻率.
基于 DDS的基本原理并通過 FPGA實(shí)現(xiàn)的任意波發(fā)生器,想要任意波的任意性得以實(shí)現(xiàn)必須改變 DDS的基本結(jié)構(gòu),可以通過將 ROM改寫成RAM,這樣可以利用 RAM的接口電路實(shí)現(xiàn)波形數(shù)據(jù)的更新,這樣就可以使任意波發(fā)生器的任意性得以實(shí)現(xiàn)[3].FPGA中實(shí)現(xiàn)的各電路中的模塊連接如圖2所示,我們結(jié)合圖 2來對(duì)控制部分、相位累加器、波形RAM等進(jìn)行分析.
圖2 FPGA實(shí)現(xiàn)的電路示意
4.1 控制模塊的設(shè)計(jì)
DDS于單片機(jī)的接口問題需要通過控制模塊來解決,在 FPGA的實(shí)現(xiàn)中,對(duì)3個(gè)模塊進(jìn)行了主要設(shè)計(jì),分別是輸入寄存器模塊、地址選擇模塊、地址鎖存模塊.這三個(gè)模塊各有各的作用,接受單片機(jī)頻率控制字需要通過輸入寄存模塊來完成,單片機(jī)在FPGA各模塊進(jìn)行工作時(shí)依據(jù)不同地址的選擇在地質(zhì)選擇模塊內(nèi)完成,對(duì)于單片機(jī)PO口地址和數(shù)據(jù)線復(fù)用問題的解決是在地址鎖存模塊內(nèi)完成.在進(jìn)行輸入寄存模塊的設(shè)計(jì)的時(shí)候,DDS要采用32位的相位累加器,單片機(jī)要選擇8位的,這樣單片機(jī)可以分四次寫入四個(gè)字節(jié)來形成一個(gè)頻率控制字.而地址選擇模塊的設(shè)計(jì)相對(duì)輸入寄存模塊的設(shè)計(jì)就簡單許多了,直接選用一個(gè)3—8的譯碼器就可以使地址選通的功能得以實(shí)現(xiàn).因?yàn)榈刂锋i存模塊的PO口既是數(shù)據(jù)口也是地址總線的低8位,所以要選用51系列單片機(jī)作為單片機(jī),在使用時(shí)就可以實(shí)現(xiàn)地址信號(hào)從分時(shí)復(fù)用的地址/數(shù)據(jù)總線的分離[4].
4.2 相位累加器的設(shè)計(jì)
結(jié)合FPGA本身的特性,并滿足任意波發(fā)生器的要求,即頻率分辨率達(dá)到10MHz,輸出的最大頻率要達(dá)到15MHz,所以要采用40MHz,32bit的相位累加器的系統(tǒng)時(shí)鐘來設(shè)計(jì)任意波發(fā)生器.本設(shè)計(jì)在采用EP1C3T144C8的FPGA器件,并直接用32bit累加器的時(shí)候,通過仿真實(shí)驗(yàn),可以看出這種情況下只能使系統(tǒng)時(shí)鐘最大達(dá)到約25MHz,不能達(dá)到40MHz,這肯定是和我們的設(shè)計(jì)不相符的,所以我們必須對(duì)相位累加器的結(jié)構(gòu)進(jìn)行改進(jìn),使之能夠達(dá)到我們要求的更高的工作速度.想要達(dá)到更高的工作速度,我們可以用一種在時(shí)序電路設(shè)計(jì)中常用的設(shè)計(jì)方法,就是流水線結(jié)構(gòu)法,通過流水線結(jié)構(gòu)來實(shí)現(xiàn)的累加器運(yùn)行過程是這樣的,現(xiàn)將一個(gè)位數(shù)很長的加法拆分成N比較短的加法,并在N個(gè)時(shí)鐘周期內(nèi)做完這個(gè)過程,然后進(jìn)行結(jié)果的輸出,在采用這種流水線結(jié)構(gòu)后使得加法器的字長變的更短了,這對(duì)于FPGA提高其工作頻率具有重大意義[5].
下面我們來詳細(xì)的對(duì)累加器流水結(jié)構(gòu)的實(shí)現(xiàn)進(jìn)行分析,將一個(gè)字長為N的累加器進(jìn)行拆分,分成m個(gè)n位的累加器來工作,這樣拆分后的累加器的字長就變?yōu)榱薔=m×n.因?yàn)檫@m個(gè)n位的累加器之間是存在進(jìn)位關(guān)系,所以這就造成了在一個(gè)周期內(nèi)全部完成,這樣的情況下就可以運(yùn)用流水的思想,將高位的累加器晚一個(gè)時(shí)鐘周期做累加,其對(duì)于低位累加器是延時(shí)的,這樣低位累加器在高位累加器進(jìn)行累加的時(shí)候已經(jīng)計(jì)算出了進(jìn)位值,在低位累加器進(jìn)行結(jié)果的輸出時(shí)也要延時(shí),這是為了保證和高位累加器的結(jié)果同時(shí)輸出,這樣也可以使結(jié)果輸出的準(zhǔn)確性得到保證.這個(gè)過程最終得出的結(jié)果是,一個(gè)值在進(jìn)入累加器以后需要在m個(gè)延時(shí)以后才可以使得高位累加器計(jì)算出結(jié)果,在高位累加器計(jì)算出結(jié)果之后才可以完成最后的結(jié)果輸出.這樣通過m級(jí)延時(shí)才可以得到結(jié)果,但是不會(huì)對(duì)DDS相位累加器的工作產(chǎn)生影響,除了在過程中的m個(gè)延時(shí)以內(nèi),結(jié)果不會(huì)有變化,但其工作速度卻得到了很大的提高.通過流水線結(jié)構(gòu)對(duì)相位累加器進(jìn)行設(shè)計(jì)的時(shí)候,使m=8,n=4,這樣就可以使其工作效率達(dá)到最高值,大約是70MHz,超過了40MHz,符合我們的設(shè)計(jì)要求.
4.3 波形RAM的設(shè)計(jì)
在進(jìn)行波形RAM設(shè)計(jì)的時(shí)候,要先使波形RAM的深度和字長得到確定,波形RAM的字長應(yīng)該和任意波發(fā)生器設(shè)計(jì)中DAC選擇的字長一樣,都是 8位的,波形RAM選擇的地址線位數(shù)和相位累加器的輸出最高位數(shù)一樣,也是12位的.
面對(duì)普通的DDS和任意波發(fā)生器不同,還要使波形RAM滿足設(shè)計(jì)要求,即具有兩個(gè)讀寫的端口這一情況,我們可以運(yùn)用2套地址系統(tǒng)來更好地進(jìn)行RAM內(nèi)容的更新(也就是RAM的寫操作)和輸出波形幅度量(也就是RAM的讀操作).我們根據(jù)FPGA的特點(diǎn),可以選擇EP1C3T144C8芯片內(nèi)部的雙口 RAM來完成這個(gè)功能的實(shí)現(xiàn).雙口 RAM示意圖如圖3所示.
圖3 雙口RAM示意
因?yàn)樾酒瑑?nèi)部的雙口具有 2組地址線,也就數(shù)讀地址和寫地址,所以數(shù)據(jù)線也有倆組,就是讀數(shù)據(jù)線和寫數(shù)據(jù)線,這樣對(duì)于完成波形 RAM的設(shè)計(jì)相對(duì)來說就簡單許多了,將寫數(shù)據(jù)線、寫地址線與單片機(jī)的數(shù)據(jù)線、地址線進(jìn)行連接,這樣就可以通過單片機(jī)來實(shí)現(xiàn)RAM數(shù)據(jù)的更新工作.將讀地址線與相位累加器的輸出相連,將讀數(shù)據(jù)線與數(shù)據(jù)輸入相連,這樣就可以在讀數(shù)據(jù)線上進(jìn)行波形幅度量化數(shù)據(jù)的輸出.
5.1 波形數(shù)據(jù)的生成
波形數(shù)據(jù)的生成總體流程圖如圖 4所示.因?yàn)橄挛挥布到y(tǒng)的波形RAM是波形點(diǎn)的幅度數(shù)據(jù)最終的儲(chǔ)存位置,由 2.3波形 RAM的儲(chǔ)存深度設(shè)計(jì)為 4096個(gè)單元,這樣的每個(gè)單元的字長是 8bits,這樣對(duì)于一個(gè)周期內(nèi)的 4096個(gè)采樣點(diǎn)來說,要將這些個(gè)波形點(diǎn)的數(shù)據(jù)進(jìn)行量化,最終要量化為0~255的整數(shù).
5.2 波形幅度數(shù)據(jù)及頻率參數(shù)的處理
通過上述的過程可以使波形的 4096個(gè)點(diǎn)的數(shù)據(jù)生成,并進(jìn)行儲(chǔ)存,但是由于 4096個(gè)點(diǎn)的波形數(shù)據(jù)是雙精度的,所以必須對(duì)這些數(shù)據(jù)進(jìn)行處理來滿足其傳輸和儲(chǔ)存的需要.因?yàn)樵诹硪粋€(gè)操作界面上,對(duì)信號(hào)輸出頻率值也是雙精度類型的,因此對(duì)于頻率參數(shù)也要進(jìn)行數(shù)據(jù)處理.
圖4 波形數(shù)據(jù)生成總體流程圖
本文對(duì)基于 DDS技術(shù)與 FPGA的任意波發(fā)生器的波形數(shù)據(jù)生成方法進(jìn)行了研究,對(duì)DDS工作原理進(jìn)行了簡單的介紹,對(duì) FPGA實(shí)現(xiàn)的波形數(shù)據(jù)接收模塊設(shè)計(jì)進(jìn)行了分析,主要包括控制模塊的設(shè)計(jì)、相位累加器的設(shè)計(jì)、波形 RAM的設(shè)計(jì)三種方法,這樣對(duì)于波形發(fā)生器性能的提高具有很大的意義.當(dāng)前我國對(duì)于任意波發(fā)生器的研究生產(chǎn)還沒有真正形成產(chǎn)業(yè)鏈,當(dāng)期國內(nèi)的成熟產(chǎn)品大多是PC儀器插片,獨(dú)立儀器相對(duì)來說還很少,我國的任意波發(fā)生器比國外同類產(chǎn)片還存在相當(dāng)大的差距,因?yàn)椋M(jìn)行基于 FPGA的任意波形發(fā)生器設(shè)計(jì)研究是非常急迫的事情.我們要通過對(duì)國外先進(jìn)技術(shù)的研究分析來改進(jìn)我國的技術(shù),這樣才可以盡快的使我國技術(shù)落后的狀況得到改善.
〔1〕鄧耀華,吳黎明,張力鍇.基于FPGA的雙DDS任意波發(fā)生器設(shè)計(jì)與雜散噪聲抑制方法[J].儀器儀表學(xué)報(bào),2009,30(11):2255-2261.
〔2〕何存富,周進(jìn)節(jié),鄭陽.超聲導(dǎo)波任意波形脈沖激勵(lì)源的設(shè)計(jì)與實(shí)現(xiàn)[J].測控技術(shù),2011,30(10): 96-102
〔3〕韓旭,鄭磊.基于FPGA的任意波形發(fā)生器的設(shè)計(jì)與實(shí)現(xiàn)[J].電子測量技術(shù),2013,11(7):824.
〔4〕張嚴(yán),洪遠(yuǎn)泉.基于FPGA的任意波形發(fā)生器設(shè)計(jì)與研究[J].現(xiàn)代電子技術(shù),2013,34(10):157-162.
〔5〕唐建東.基于FPGA的任意波形發(fā)生器設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù),2010,9(5):37-39.
TN9ll
A
1673-260X(2014)08-0037-03