DDS-正弦-Modelsim和MATLAB

##方案描述:

  • 设计一个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窗)
这里写图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值