##方案描述:
- 设计一个DDS,50MHz的时钟速率,输出波形频率为1MHz,输出数据格式为2补码
- 波表ROM由MATLAB生成,8bit地址,10bit量化
- 相位累加器为32bit
- 使用Modelsim对工程进行前仿真
##DDS:
关于DDS设计请参考笔者另一篇博客,《DDS-正弦-SignalTap和MATLAB》
http://blog.csdn.net/proton_boke/article/details/68924006
##Modelsim测试代码:
/*-----------------------------------------------------
Author : madezhuang Communication University of China
Technology blogs : http://blog.csdn.net/proton_boke
Email address : mdz800@cuc.edu.cn
module function :
Simulation of DDS design files wave
Data : 2017-04-13
Version : 1.0
-----------------------------------------------------*/
`timescale 1ns/1ns
module DDS_sin_TB;
//------------------------------
//clock generate module
reg CLK;
reg RST;
reg FWEN;
wire CLKOUT;
wire [9:0] RD;
localparam Period = 20; //50MHz
initial
begin
CLK =0;
forever #(Period/2)
CLK = ~CLK;
end
task task_RST;
begin
RST = 1;
repeat(2)@(negedge CLK);
RST = 0;
end
endtask
task task_FWEN;
begin
FWEN = 0;
repeat(2)@(negedge CLK);
FWEN = 1;
end
endtask
//--------------------------------
//Export the RD waveform data to the RD_data.txt
integer i;
integer w_file;
initial
begin
w_file = $fopen("RD.txt");
for(i=0; i<=511; i=i+1)
begin
#10;
$fdisplay(w_file,"%d",RD);
if(i == 512)
$fclose(w_file);
else
;
end
end
//--------------------------------
//system initialization
task task_sysint;
begin
end
endtask
//--------------------------------
//tsetbench of the RTL
initial
begin
task_sysint;
task_RST;
task_FWEN;
end
//--------------------------------
//the target component instantiation
dds_sin u_dds_sin
(
//global clock
.CLK (CLK) ,
.RST (RST) ,
//user face
.FWEN (FWEN) , // inputfrequency word update enable
.RD (RD) , // read data
.CLKOUT (CLKOUT) // Accumulator overflow flag
);
endmodule
###Modelsim仿真结果显示
##将Modelsim中的数据导入至MATLAB分析:
此处用代码的方式进行数据导出,所用代码如下
//--------------------------------
//Export the RD waveform data to the RD_data.txt
integer i;
integer w_file;
initial
begin
w_file = $fopen("RD.txt");
for(i=0; i<=511; i=i+1)
begin
#10;
$fdisplay(w_file,"%d",RD);
if(i == 512)
$fclose(w_file);
else
;
end
end
利用文件编辑器Utradit文件编辑器,选择需要的数据,保存为.m文件。之后就可以在matlab中对此文件进行调用。
##利用MATLAB代码分析来自Modelsim中的数据:
此处仅仅给出,加窗前后,信号的时域与频域的波形
###第一次波形(未加窗)
###第二次波形(加kaiser窗)