基于FPGA的流水線結(jié)構(gòu)DDS多功能信號發(fā)生器的設(shè)計(jì)與實(shí)現(xiàn)
隨著現(xiàn)代電子技術(shù)的不斷發(fā)展,在通信系統(tǒng)中往往需要在一定頻率范圍內(nèi)提供一系列穩(wěn)定和準(zhǔn)確的頻率信號,一般的振蕩器已不能滿足要求,這就需要頻率合成技術(shù)。DDS是第3代頻率合成器,它采用全數(shù)字技術(shù),具有頻率切換時(shí)間短、頻率精度和分辨率高、輸出相位連續(xù)、易于控制等優(yōu)點(diǎn)。
現(xiàn)場可編程門陣列(FPGA)器件具有工作速度快、集成度高、可靠性高和現(xiàn)場可編程等優(yōu)點(diǎn),并且FPGA支持系統(tǒng)現(xiàn)場修改和調(diào)試,采用FP GA設(shè)計(jì)的DDS具有電路簡單,性能穩(wěn)定等特點(diǎn),也能滿足絕大多數(shù)通信系統(tǒng)的使用要求。而在DDS相位累加器的設(shè)計(jì)當(dāng)中,傳統(tǒng)的累加器采用多位全加器直接相加的方式來實(shí)現(xiàn),但隨著頻率控制字位數(shù)的增加,系統(tǒng)的實(shí)時(shí)性會大幅降低。針對這一問題,本文提出了一種流水線結(jié)構(gòu)的相位累加器,該結(jié)構(gòu)能夠縮短運(yùn)算時(shí)間,提高整個(gè)系統(tǒng)的實(shí)時(shí)性。
本文介紹了DDS的基本原理,闡述了基于流水線結(jié)構(gòu)的累加器的設(shè)計(jì)方案及具體的設(shè)計(jì)方法,采用嵌入式邏輯分析儀分析了正弦波、方波、鋸齒波和三角波等波形,并給出了計(jì)算機(jī)仿真和實(shí)驗(yàn)結(jié)果,最后總結(jié)了該系統(tǒng)的特點(diǎn)。
1 DDS基本原理
如圖1所示,基本的DDS結(jié)構(gòu)一般由4個(gè)模塊構(gòu)成,分別是相位累加器、波形存儲器ROM,D/A轉(zhuǎn)換器和低通濾波器LPF。
系統(tǒng)時(shí)鐘fc為基準(zhǔn)頻率源,K為頻率控制字,通過改變K的數(shù)值可以改變DDS的輸出頻率,在fc上升沿到來時(shí),相位累加器會對頻率控制字K進(jìn)行相位累加,累加結(jié)果即是波形存儲器ROM中幅值的地址數(shù)據(jù),經(jīng)過尋址,幅值由ROM輸出到D/A轉(zhuǎn)換器中,D/A轉(zhuǎn)換器將由二進(jìn)制編碼的數(shù)字信號轉(zhuǎn)換為模擬信號輸出,該模擬信號再經(jīng)過低通濾波器的濾波就可以得到平滑的波形曲線。
DDS的輸出頻率為:
fo=(K/2N)fc (1)
式中:N為相位累加器的位數(shù);fc作為基準(zhǔn)頻率源一般是給定的數(shù)值,因此,決定DDS輸出頻率的因素分別是頻率控制字K和相位累加器的位數(shù)N。當(dāng)K取最小值1時(shí),DDS的輸出頻率即是它的最小分辨率:
fo=fc/2N (2)
2 流水線相位累加器的設(shè)計(jì)
相位累加器是DDS的重要組成部分,在基準(zhǔn)時(shí)鐘控制下,它用來實(shí)現(xiàn)線性數(shù)字信號的逐級累加,信號范圍從0加到累加器的滿偏值,由此得到相應(yīng)的相位數(shù)據(jù),而相位累加器的頻率就是DDS輸出信號的頻率。在通常的電路優(yōu)化設(shè)計(jì)中,累加器模塊采用超前進(jìn)位加法器,這種結(jié)構(gòu)克服了串行進(jìn)位引起的時(shí)間滯后,很大程度上提高了加法器的運(yùn)算速度,但仍有不足。為了提高DDS頻率轉(zhuǎn)換速度和實(shí)時(shí)性,本文提出了一種流水線結(jié)構(gòu)來優(yōu)化DDS的相位累加器。
FPGA的結(jié)構(gòu)特點(diǎn)很適合采用流水線設(shè)計(jì),以Altera低成本系列CycloneⅡ?yàn)槔粌H有最多達(dá)68 416個(gè)邏輯單元(LE),每個(gè)LE均含有1個(gè)四輸入查找表LUT、1個(gè)可編程觸發(fā)器等。設(shè)計(jì)中可將1個(gè)算術(shù)操作分解成一些小規(guī)模的基本操作配置到LUT中,將進(jìn)位和中間值存儲在寄存器中,在下一個(gè)時(shí)鐘內(nèi)繼續(xù)運(yùn)算,整個(gè)系統(tǒng)只需要極少或不需要額外的資源成本。
流水線結(jié)構(gòu)的基本原理是將整個(gè)電路劃分為若干個(gè)流水線級,每級之間設(shè)置寄存器鎖存上一級輸出的數(shù)據(jù);每一級只完成數(shù)據(jù)處理的一部分,一個(gè)時(shí)鐘周期完成一級數(shù)據(jù)處理,然后在下一個(gè)時(shí)鐘到來時(shí)將處理后的數(shù)據(jù)傳遞給下一級。第一組數(shù)據(jù)進(jìn)入流水線后,經(jīng)過1個(gè)時(shí)鐘周期傳到第二級,同時(shí)第二組數(shù)據(jù)進(jìn)入第一級,數(shù)據(jù)隊(duì)列依次前進(jìn)。每組數(shù)據(jù)都要經(jīng)過所有的流水線級后才能得到最后的計(jì)算結(jié)果,但對整個(gè)流水線而言,每個(gè)時(shí)鐘都能計(jì)算出一組結(jié)果,所以平均計(jì)算一組數(shù)據(jù)只需要一個(gè)時(shí)鐘周期的時(shí)間,這樣就大大提高了數(shù)據(jù)處理速度。圖2為在QuartusⅡ開發(fā)環(huán)境下用原理圖輸入法搭建的流水線相位累加器結(jié)構(gòu)圖。該結(jié)構(gòu)由四級流水線構(gòu)成,每一級流水線的輸入字節(jié)為8位,分別由8位數(shù)據(jù)鎖存器,8位數(shù)據(jù)全加器,1位數(shù)據(jù)鎖存器構(gòu)成,整個(gè)系統(tǒng)可實(shí)現(xiàn)32位輸入控制字的相位累加功能。根據(jù)流水線相位累加器的工作原理,首先將32位輸入控制字a由低位到高位平均分為4段,每一段為8位,分別以a[0..7]到a[24..32]來命名。將a[0..7]作為第一級的輸入控制字輸入到8位數(shù)據(jù)鎖存器reg8中,在時(shí)鐘信號clk上升沿到來之時(shí),reg8暫存的控制字會送入到8位數(shù)據(jù)全加器adder8中與另一個(gè)加法數(shù)和進(jìn)位信號進(jìn)行全加運(yùn)算。另一個(gè)加法數(shù)是來自本級運(yùn)算結(jié)果的反饋,為保持時(shí)鐘節(jié)拍的一致性,該反饋先輸入到另一個(gè)reg8中暫存,然后在時(shí)鐘上升沿到來之時(shí)輸入到全加器進(jìn)行運(yùn)算;進(jìn)位信號來自第四級,該信號也是先暫存在一個(gè)1位數(shù)據(jù)鎖存器reg1中再輸入到全加器中進(jìn)行運(yùn)算。
第一級流水線經(jīng)過全加器之后得出運(yùn)算結(jié)果sum[0..7]和進(jìn)位信號,sum[0..7]作為本級的輸出,它是整個(gè)累加結(jié)果的最低8位,而進(jìn)位信號經(jīng)過一個(gè)reg1之后作為下一級全加器的輸入。
第二級流水線的輸入信號是a[8..15],因?yàn)樯弦患壒灿蓛杉墧?shù)據(jù)鎖存器構(gòu)成,所以在做全加運(yùn)算之前先分別將輸入信號和本級的反饋信號經(jīng)過2次數(shù)據(jù)鎖存,然后再與來自上一級的進(jìn)位信號進(jìn)行全加運(yùn)算,運(yùn)算之后的結(jié)果作為本級的輸出sum[8..15],同時(shí)產(chǎn)生進(jìn)位信號參與下一級的運(yùn)算。第三級與第四級的工作原理同上,系統(tǒng)每增加一級流水線結(jié)構(gòu),鎖存器也會隨之增加一級。
圖3為在QuartusⅡ環(huán)境下得到的四級流水線仿真波形,時(shí)鐘信號的頻率是200 MHz,占空比為50 %,偏移量為0。為觀察方便,輸入控制字a和累加結(jié)果sum均用無符號十進(jìn)制數(shù)來表示,且輸入控制字設(shè)定為32,由波形圖可見,該系統(tǒng)可以實(shí)現(xiàn)32位的相位累加。
3 任意波形發(fā)生器的設(shè)計(jì)及實(shí)現(xiàn)
DDS可以根據(jù)ROM中存儲數(shù)據(jù)的不同產(chǎn)生多種波形。在QuartusⅡ開發(fā)環(huán)境下搭建DDS系統(tǒng)模型需要訂制波形存儲器ROM,根據(jù)所需精度的不同,ROM中存儲的采樣點(diǎn)數(shù)也不同。當(dāng)所需波形數(shù)據(jù)非常簡單時(shí),可以在QuartusⅡ中定制ROM時(shí)直接將數(shù)據(jù)寫入新建的mif文件,然后保存即可,當(dāng)所需波形數(shù)據(jù)較為復(fù)雜時(shí),可以通過Matlab來自動生成所需波形的幅度數(shù)據(jù),然后再通過調(diào)用mif文件來達(dá)到預(yù)期目標(biāo)。以256個(gè)點(diǎn)的正弦波為例加以分析說明。
產(chǎn)生正弦波的Matlab程序如下:
width定義的是位寬,depth是深度,也就是將來生成的mif文件含有多少個(gè)存儲單元,在此處,設(shè)定了數(shù)據(jù)寬度為8位,存儲單元數(shù)為256,將來在QuartusⅡ中定制ROM時(shí)也要相應(yīng)地將存儲單元數(shù)設(shè)定為256,根據(jù)DDS的基本原理,隨著設(shè)計(jì)點(diǎn)數(shù)的增加,所得的波形數(shù)據(jù)會更加準(zhǔn)確,通過D/A轉(zhuǎn)化后在示波器上觀測的波形也越精準(zhǔn),但所需ROM的存儲空間將會呈指數(shù)增長,所以要根據(jù)實(shí)際的需要來綜合考慮存儲單元的個(gè)數(shù)。將上述指令在Matlab環(huán)境中運(yùn)行之后就能夠得到所需mif文件。
在mif文件生成之后需要將此文件添加進(jìn)入DDS系統(tǒng)的ROM中,然后進(jìn)行全局的編譯,編譯通過后就可以進(jìn)行工程的下載。具體的波形可以通過示波器來分析,或者使用Quartus Ⅱ自帶的嵌入式邏輯分析儀來分析。在使用嵌入式邏輯分析儀分析和觀察時(shí),采樣信號要根據(jù)DDS的時(shí)鐘信號來確定,待測信號設(shè)定為DDS的輸出信號,當(dāng)工程下載到FPGA芯片后,待測信號通過USB-BLASTER反饋至嵌入式邏輯分析儀中,選擇不同的數(shù)據(jù)類型,可以觀察到以十進(jìn)制數(shù)據(jù)表示的數(shù)字信號或者以實(shí)際波形表示的模擬信號。
圖4為在在嵌入式邏輯分析儀中觀察到的正弦曲線。由波形圖可以看出,該設(shè)計(jì)方案可以實(shí)現(xiàn)正弦信號發(fā)生器的功能。按照相同的方法,修改產(chǎn)生mif文件的Matlb運(yùn)算指令可以獲得方波,鋸齒波,三角波等波形。
圖5~圖7為能產(chǎn)生方波,鋸齒波和三角波波形的工程文件下載到FPGA芯片后通過嵌入式邏輯分析儀得到的波形圖。由波形圖可以看出,該系統(tǒng)能夠?qū)崿F(xiàn)任意波形發(fā)生器的功能。
4 結(jié)語
本文將流水線相位累加器引進(jìn)到DDS的設(shè)計(jì)中,利用電子設(shè)計(jì)自動化技術(shù)進(jìn)行系統(tǒng)設(shè)計(jì),并從嵌入式邏輯分析儀分析和觀察了相應(yīng)的波形,仿真和硬件實(shí)驗(yàn)驗(yàn)證了設(shè)計(jì)方案的正確性。該系統(tǒng)具有結(jié)構(gòu)簡單、運(yùn)行速度快和占用芯片資源少等特點(diǎn)。隨著ROM查找表的擴(kuò)大以及越來越多的直接計(jì)算波形數(shù)據(jù)的方法不斷被提出,對DDS整體實(shí)時(shí)性的要求也越來越高,尤其像目前較為流行的cordic算法及改進(jìn)的其它插值算法,由于算法本身隨著級數(shù)的增多,整個(gè)系統(tǒng)的頻率轉(zhuǎn)換效率就會降低,而流水線相位累加器結(jié)構(gòu)可以很好地解決這一問題。
評論