我是按野火教学dds视频写的两个正弦波,然后再乘法器中相乘,别的啥也没有,为什么下面就是平的啊?应该是上下对称才对啊!
程序很简单啊
module dds_ctrl
(
input wire sys_clk,
input wire sys_rst_n,
output wire [7:0] dac_data_0,
output wire [7:0] dac_data_1,
output wire [15:0] dac_data_mul
);
parameter F_WORD0 = 32'd429497; //需要400k
parameter F_WORD1 = 32'd42949673; //需要100k
reg [31:0] fre_add0;
reg [31:0] fre_add1;
reg [11:0] rom_addr_reg0;
reg [11:0] rom_addr_reg1;
always@(posedge sys_clk or negedge sys_rst_n) //fre_add
if (sys_rst_n == 1'b0)
fre_add0 <= 32'd0;
else
fre_add0<= fre_add0 + F_WORD0;
always@(posedge sys_clk or negedge sys_rst_n) //rom_addr_reg
if (sys_rst_n == 1'b0)
rom_addr_reg0 <= 12'd0;
else
rom_addr_reg0 <= fre_add0[31:20] ; // 高12位加相位输入字
always@(posedge sys_clk or negedge sys_rst_n) //fre_add
if (sys_rst_n == 1'b0)
fre_add1 <= 32'd0;
else
fre_add1<= fre_add1 + F_WORD1;
always@(posedge sys_clk or negedge sys_rst_n) //rom_addr_reg
if (sys_rst_n == 1'b0)
rom_addr_reg1 <= 12'd0;
else
rom_addr_reg1 <= fre_add1[31:20]; // 高12位加相位输入字
//rom 表例化到下面
rom_01 rom_01_inst (
.address (rom_addr_reg0 ),
.clock ( sys_clk ),
.q ( dac_data_0 )
);
rom_01 rom_01_inst_1 (
.address ( rom_addr_reg1),
.clock ( sys_clk),
.q ( dac_data_1 )
);
mul mul_inst (
.dataa ( dac_data_0),
.datab (dac_data_1),
.result ( dac_data_mul )
);
应该是modelsim里面波形信号的数据类型设置错误。