摘 要:基于直接數字合成器(DDS)技術設計的任意波形發生器中,ROM查找表是DDS模塊的一個重要環節,主要用于存儲系統的波形數據。介紹使用C語言、Matlab和DSP Builder三種方法生成正弦波、三角波、鋸齒波和方波的查找表初始化波形數據,并對每一種方法的程序設計、參數設置以及波形仿真都作了詳細說明,所有波形數據均在GW48-SOPC開發系統中測試通過。
關鍵詞:直接數字合成器;查找表;任意波形發生器;DSP Builder
中圖分類號:TP311 文獻標識碼:B
文章編號:1004-373X(2008)11-172-02
Design of Arbitrary Waveform Generator ROM LUT
XU Danyang,ZHANG Xiaohong,WANG Yong
(Electronic Information Engineering College,Henan University of Science and Technology,Luoyang,471003,China)
Abstract:In the arbitrary waveform generator based on DDS,ROM LUT is an important element of the DDS module,which is used to store waveform data of the system.In the paper,using three methods,including C language,Matlab and DSP Builder,producing the arbitrary waveform initialization data of the sine wave,the triangular wave,the saw-tooth wave and the square-wave.Programming,parameter setting and waveform simulation are described to every method detailedly.All waveform data are verified by GW48-SOPC development system.
Keywords:DDS;LUT;arbitrary waveform generator;DSP Builder
1 引 言
目前,利用FPGA設計任意波形發生器是經常采用的一種方法,其核心是直接數字頻率合成器(DDS)。DDS系統一般包括系統時鐘、頻率預置與調節電路(頻率累加器)、相位累加器、ROM 查找表,輸出的數據通過外接的D/A轉換器和濾波器完成波形輸出。此系統中,ROM中波形數據的設計是完成任意波形的關鍵環節。構成ROM中初始化波形數據文件的格式有兩種:Memory Initialization File(.mif)格式和Hexadecimal(Intel-Format)File(.hex)格式,實際應用中使用其中一種格式的文件即可。本文以圖1所示DDS系統為例,采用三種方法生成正弦波、三角波、矩形波和鋸齒波的ROM查找表。
圖1 直接數字頻率合成器系統
圖1所示系統參數:系統時鐘(FCLK)為166.67 MHz(由FPGA時鐘50 MHz晶振通過PLL 3分頻10倍頻得到);頻率累加器位寬(N)為24位;相位累加器位寬為10位;ROM表數據位寬為8位;ROM表地址為10位。硬件選用GW48-SOPC開發系統,其目標芯片為Altera公司Cyclone系列EP1C6Q240C8。
2 利用C語言生成MIF文件
產生正弦波數據的C程序:
#include\"stdio.h\"
#include\"math.h\"
#define N 1024
void main()
{
FILE *fp;
double y;
int n;
if((fp=fopen(\"sindata.mif\",\"w\"))==NULL)
{printf(\"cannot open this file\\\\");
exit(0);
}
fprintf(fp,\"WIDTH=10;\\\\");
fprintf(fp,\"DEPTH=1024;\\\\");
fprintf(fp,\"ADDRESSRADIX=DEC;\\\\");
fprintf(fp,\"DATARADIX=DEC;\\\\");
fprintf(fp,\"CONTENT BEGIN\\\\");
for(n=0;n<=N-1;n++)
{y=127.5+127.5*sin(n*3.1415926535/128);
if(fmod(n,10)==0)
{fprintf(fp,\"\\\\");}
fprintf(fp,\"%4d:%4.0f;\",n,y);
}
fprintf(fp,\"\\\END;\");
fclose(fp);
}
在TC環境下運行,在Output文件夾下生成SIN101~1文件,運行此文件得到SINDATA.mif文件。文件內容如下:
WIDTH=10;
DEPTH=1024;
ADDRESSRADIX=DEC;
DATARADIX=DEC;
CONTENT BEGIN
0:128;1:131;2:134;3:137;4:140;5:143;6:146;7:149;8:152;9:155;10:158;11:162;12:165;13:167;14:170;15:173;16:176;17:179;18:182;19:185;
…(略去數據)
1020:115;1021:118;1022:121;1023:124;
END;
3 用Matlab生成.mif數據文件
利用Matlab可以生成.mif文件,但此文件不能直接在定制ROM中使用,可以把Matlab計算出來的數據粘貼到QuartusⅡ中生成.mif文件,以三角波為例說明。
圖2 Matlab中三角波波形
Matlab生成三角波數據的程序:
clear
clc
Fs=1023;%只要1 024個值
t=0:0.2/Fs:0.2;
x1=round((sawtooth(2*pi*5*t,0.5)+1)/2*255)′;%三角波歸一化
plot(t,x1),axis([0,0.2,0,255])
len=length(x1)%len=1 024
fid= fopen(′d:\\\\deltarom.mif′,′w′);%為幅度值的存儲準備一個文件
fprintf(fid,′MEMORYINITIALIZATIONRADIX=16;\\\′);
fprintf(fid,′MEMORYINITIALIZATIONVECTOR=\\\′);
for i = 1:len%len=1 024
fprintf(fid,′%x,\\\′,x1(i));%循環將值寫入文件中
end
fclose(fid);
打開Matlab的Workspace中參量X1, 復制里面生成的1 024個數據。在QuartusⅡ中打開ROM數據文件編輯窗,即File\\\\New\\\\Other files\\\\Memory Initialization File,根據DDS設計要求,設置ROM的數據數Number為1 024,數據寬Word size取8位,把Matlab中的波形數據粘貼入.mif數據表格,保存此數據文件即可。若希望生成其他波形數據,只需修改程序中“x1=round((sawtooth(2*pi*5*t,0.5)+1)/2*255)′”語句即可。
4 利用DSP Builder生成波形數據文件
利用DSP Builder生成.mif和.hex格式的波形數據文件是最簡便的方法。在Matlab的Simulink環境中,用圖形方式調用DSP Builder和Simulink庫中的圖形模塊完成設計和仿真,如圖3所示。若仿真正確, DSP Builder可直接生成.hex和.mif文件,在其數據文件目錄中可以找到。只需設置圖3中LUT模塊參數,就可以改變輸出波形類型、幅值和數據文件(.hex或.mif) 大小。
圖3 利用DSP Builder設計信號發生器
根據前述設計要求,在LUT參數選項中,Bus Type:Unsigned Integer;Out:8;LUT Address Wide:10;Matlab Array:127*sawtooth([0:2*pi/(2^10):2*pi],1)+128(鋸齒波公式,使用了歸一算法,保證波形幅值在0~255之間,便于進行D/A轉換)。仿真結果如圖4所示。修改Matlab Array中的式子,即可生成正弦波(圖5)、方波(圖6)、三角波。
圖4 鋸齒波仿真波形
圖5 正弦波仿真波形
圖6 方波仿真波形
正弦波:127*sin( [0:2*pi/(2^10):2*pi] )+128
方波:127*square([0:2*pi/(2^10):2*pi],50)+128
三角波:127*sawtooth([0:2*pi/(2^10):2*pi],0.5)+128
從仿真圖中可以看到,輸出波形在0~255之間,符合8位D/A轉換器DAC0832輸入要求。
5 結 語
生成.hex或.mif文件后,就可以定制ROM元件,很多資料中都有詳細介紹,這里不再詳述。本文介紹的三種方法所生成的波形數據均已在GW48-SOPC開發系統上通過驗證,但推薦采用DSP Builder生成數據文件的方法,因該方法不但參數設置簡便,而且易于進行仿真驗證。總之,不論采用哪種方法生成ROM查找表,都要參照系統芯片類型和D/A轉換器等硬件資源條件完成設計。
參 考 文 獻
[1]鄭亞民,董曉舟.可編程邏輯器件開發軟件QuartusⅡ\\[M\\].北京:國防工業出版社,2006.
[2]潘松,黃繼業,曾毓.SOPC技術實用教程\\[M\\].北京:清華大學出版社,2005.
[3]任勇峰,莊新敏.VHDL與硬件實現速成\\[M\\].北京:國防工業出版社,2005.
[4]求是科技.Matlab 7.0從入門到精通\\[M\\].北京:人民郵電出版社,2006.
[5]余勇,鄭小林.基于FPGA的DDS正弦信號發生器的設計和實現\\[M\\].電子器件,2005,28(3):595-599.
作者簡介 徐丹旸 女,1977年出生,湖南長沙市人,講師(碩士)。研究方向為電子EDA。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。