DDS-正弦-Modelsim和MATLAB

    xiaoxiao2021-04-14  32

    ##方案描述:

    设计一个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窗)

    转载请注明原文地址: https://ju.6miu.com/read-669658.html

    最新回复(0)