DDS发生器的verilog实现(三)

本文详细介绍了如何在FPGA上实现DDS发生器,包括确定频率控制字以调整输出频率,以及通过初始相位控制字实现任意相位起点的正弦波输出。通过Verilog代码示例和Modelsim仿真结果展示了频率变化和初始相位调整的效果。
摘要由CSDN通过智能技术生成

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
 
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值