DDS发生器的verilog实现(三)
前面讲解了正弦波发生器和DDS基础知识,这篇文章主要讲解如何在fpga上实现DDS发生器,同时对上一篇的文章进行补充。
确定频率控制字的DDS发生器
首先对初始条件做一假设:相位累加寄存器的位宽为n=32位,用来存储离散正弦波的RAM规格为256*8bit,使用的采样频率fc=50Mhz,要求DDS输出波形的频率为f0=1Mhz。则可以通过前面的公式f0 = fc * M / 2^n,可以计算出频率控制字M = 85899345,直接在正弦波发生器的代码上进行修改即可:
module ex_dds(
input wire clk, //50Mhz
input wire rst_n,
output wire [7:0] o_wave
);
parameter FRQ_W = 32'd85899346;//频率控制字M,现在要求目标频率为1Mhz,相位累加器为32位,所以M=85899346;
reg [31:0] phase_sum;
wire [7:0] addr;
//相位累加器
always @(posedge clk)begin
if(!rst_n)
phase_sum <= 32'd0;
else
phase_sum <= phase_sum + FRQ_W;
end
assign addr = phase_sum[31:24];
sp_ram_256x8 sp_ram_256x8_inst (
.clka(clk), // input clka
.wea(1'b0), // input [0 : 0] wea
.addra(addr), // input [7 : 0] addra
.dina(8'd0), // input [7 : 0] dina

本文详细介绍了如何在FPGA上实现DDS发生器,包括确定频率控制字以调整输出频率,以及通过初始相位控制字实现任意相位起点的正弦波输出。通过Verilog代码示例和Modelsim仿真结果展示了频率变化和初始相位调整的效果。
最低0.47元/天 解锁文章
2848

被折叠的 条评论
为什么被折叠?



