赞
踩
rom读取地址=频率控制字+相位累加器+相位控制字。DDS数字电路原理如图:
频率控制字改变rom地址增量,相位控制字改变rom地址偏移量。两者关系如图:
信号发生器输出信号频率与DDS时钟频率关系如下。
相位控制字寄存器位宽与rom位宽保持一致。
这里相位累加器位数为 N 位(N 的取值范围实际应用中一般为 24~32),相当于把正弦信号在相位上的精度定义为 N 位,所以其分辨率为1/2^n。
N越大信号输出频率精度越高,输出频率下限值越低。
相位控制字改变信号初相位置。
module dds_test( input clk , input rst_n , input [31:0] f_word , input [11:0] p_word , output [15:0] data_out //rom输出位宽 ); reg [31:0] r_f_word ; //频率控制字寄存器 reg [11:0] r_p_word ; //相位控制字寄存器 位宽与rom位宽保持一致 reg [31:0] acc ; //相位累加寄存器 reg [7:0] address_rom ; //rom地址寄存器 假设rom地址位宽为8位 //同步寄存器 always @(posedge clk or negedge rst_n) if(!rst_n) r_f_word <= 32'b0 ; else r_f_word <= f_word ; always @(posedge clk or negedge rst_n) if(!rst_n) r_p_word <= 12'b0 ; else r_p_word <= p_word ; always @(posedge clk or negedge rst_n) if(!rst_n) acc <= 32'b0; else acc <= acc + r_f_word ; always @(posedge clk or negedge rst_n) if(!rst_n) address_rom <= 12'b0; else address_rom <= acc[31:24] + r_p_word; //rom列化 dist_mem_gen_0 dist_mem_gen_0_inst ( .a(address_rom), // input wire [7 : 0] a .spo(data_out) // output wire [15 : 0] spo ); endmodule
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。