##方案描述:
设计一个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窗)