摘 要:隨著電子設(shè)計(jì)和通信測(cè)試的飛速發(fā)展,一些具有特定頻率、特殊規(guī)律的信號(hào)在設(shè)計(jì)和測(cè)試過(guò)程中不可或缺,而市場(chǎng)上出售的信號(hào)發(fā)生器往往由于各種因素不能滿(mǎn)足設(shè)計(jì)要求,使用FPGA器件設(shè)計(jì)的信號(hào)發(fā)生器可以勝任不同要求的任意信號(hào)發(fā)生器。
Altera DSP_builder是一款基于Matlab的系統(tǒng)級(jí)設(shè)計(jì)工具,依賴(lài)于Matlab/Simulink進(jìn)行圖形化系統(tǒng)設(shè)計(jì)和功能仿真,其最大特點(diǎn)在于可以通過(guò)signalCompiler直接將設(shè)計(jì)生成的模型文件(.mdl)轉(zhuǎn)換成硬件描述語(yǔ)言VHDL,進(jìn)而在QuartusII等軟件上做更復(fù)雜精確地仿真,并生成.sof文件下載到芯片上使用。開(kāi)發(fā)過(guò)程不涉及任何編程,圖形化設(shè)計(jì)界面一目了然,是一種方便快捷的設(shè)計(jì)方式。
關(guān)鍵詞:FPGA;DSP_builder;DDS;SignalCompile
1 DDS設(shè)計(jì)
1.1 基本原理
直接數(shù)字頻率合成(Direct Digital Frequency Synthesis ,簡(jiǎn)稱(chēng)DDS)是以采樣定理為基本原理,根據(jù)相位間隔對(duì)正弦信號(hào)進(jìn)行取樣、量化、編碼,然后儲(chǔ)存在EEPROM中構(gòu)成一個(gè)正弦查詢(xún)表,通過(guò)查表法產(chǎn)生波形。本設(shè)計(jì)基于DDS的基本原理,在時(shí)鐘脈沖fc的控制下,對(duì)輸入頻率控制字K進(jìn)行累加,當(dāng)累加滿(mǎn)量時(shí)產(chǎn)生溢出。相位累加器的輸出對(duì)應(yīng)于該合成周期信號(hào)的相位,并且這個(gè)相位是在0~2π范圍內(nèi)周期性的變化。相位累加器位數(shù)為N,對(duì)應(yīng)于2π的相位, 最大輸出為2N-1,累加一次就輸出一個(gè)相應(yīng)的相位碼,將這個(gè)相位碼作為查找表地址,通過(guò)查表得到正弦信號(hào)的幅度輸出,然后經(jīng)高速D/A轉(zhuǎn)換成模擬量并通過(guò)低通濾波器濾除不需要的取樣分量,輸出頻譜純凈的正弦波信號(hào)。
1.2 系統(tǒng)設(shè)計(jì)
1.2.1系統(tǒng)總體設(shè)計(jì)
下圖為在Matlab/DSP_builder11.0平臺(tái)建立DDS的Simulink模型:
系統(tǒng)模型圖
系統(tǒng)的三個(gè)輸入分別任頻率控制字輸入Freqword、相位控制字Phaseword、信號(hào)輸入控制模塊input。Input通過(guò)乘法器product模塊控制信號(hào)輸出,相位累加器模塊由deiay模塊、Parallel Adder Subtractor模塊和Phaseword1模塊組成,相位調(diào)制模塊由Parallel Adder Subtractor1模塊和Bus Conversion組成,其中加法器使用Pipeline,內(nèi)部包含寄存器,最后由DDSout輸出波形。
把輸出的8位數(shù)字信號(hào)接入高速DA轉(zhuǎn)換模塊,就可以用示波器觀察輸出波形。
1.2.2正弦查找表模塊設(shè)計(jì)
正弦查找表有多種設(shè)計(jì)方式,本設(shè)計(jì)采用調(diào)用Altera DSP_builder元件庫(kù)中的LUT模塊實(shí)現(xiàn),取相位調(diào)制高6位作為查找表地址。正弦查找表部分還可以調(diào)用ROM模塊實(shí)現(xiàn),在使用ROM模塊時(shí),需要先編寫(xiě)查找表.mif或.hex文件,然后在ROM設(shè)置中指定文件位置即可。
以下是Matlab生成正弦查找表的代碼:
width=8; %數(shù)據(jù)寬度8位;
depth=2^width;
N=0:1:depth-1;
s=sin(pi*N/depth); %計(jì)算0~pi/2的Sin值;
fidc=fopen('dds1.mif','wt'); %以"wt"的形式打開(kāi),\n為換行
% 寫(xiě)入 dds.mif %
fprintf(fidc,'width=%d;\n',width);
fprintf(fidc,'depth=%d;\n',depth);
fprintf(fidc,'address_radix=uns;\n');
fprintf(fidc,'data_radix = uns;\n');
fprintf(fidc,'content begin\n');
for(x=1:depth);
fprintf(fidc,'%d:%d;\n',x-1, round( (depth/2-1)*sin(pi*(x-1)/(depth/2)) + depth/2) );
end
fprintf(fidc,'end;');
fclose(fidc);
2 系統(tǒng)仿真
設(shè)置相位控制字0,頻率控制字9000000,信號(hào)輸入控制125,用Matlab Sinulink對(duì)電路進(jìn)行系統(tǒng)級(jí)功能仿真,觀察到系統(tǒng)輸出波形如下:
3 硬件實(shí)現(xiàn)
雙擊原理圖中的SignalCompiler工具,在彈出對(duì)話框中設(shè)置參數(shù),點(diǎn)擊Compile,DSP_builder將自動(dòng)調(diào)用QuartusII進(jìn)行編譯。過(guò)程中會(huì)自動(dòng)創(chuàng)建QuartusII工程并綜合適配,生成QuartusII能識(shí)別的VHDL源程序。在QuartusII中打開(kāi)工程,編譯通過(guò),分配管腳。生成的.sof文件可下載到FPGA芯片,將輸出的數(shù)字信號(hào)接入高速DA轉(zhuǎn)換模塊就可以觀察到輸出波形。
4 結(jié)束語(yǔ)
在本設(shè)計(jì)中,由于設(shè)計(jì)信號(hào)發(fā)生器的全部基本組件模塊都已經(jīng)存在,我們僅僅需要逐一連接并設(shè)置好參數(shù)即可,簡(jiǎn)單直觀的實(shí)現(xiàn)了一個(gè)較為復(fù)雜的電子系統(tǒng)。在更為復(fù)雜的設(shè)計(jì)中,還可以通過(guò)SubsystemBuilder調(diào)用編寫(xiě)好的VHDL源程序。SignalCompile工具直接把設(shè)計(jì)的.mdl文件轉(zhuǎn)換為VHDL語(yǔ)言,從而使設(shè)計(jì)過(guò)程不涉及編程,操作更簡(jiǎn)單,過(guò)程更直觀,更容易查找修正設(shè)計(jì)中的錯(cuò)誤。使用DSP_builder的設(shè)計(jì)極大簡(jiǎn)化開(kāi)發(fā)過(guò)程,縮短設(shè)計(jì)周期,提高開(kāi)發(fā)效率,值得我們?cè)陂_(kāi)發(fā)過(guò)程中加以利用。
作者簡(jiǎn)介
王志強(qiáng)(1991-),男,湖北省宜昌市,職稱(chēng):學(xué)生,學(xué)歷:本科,研究方向:電子信息工程。