当前位置:   article > 正文

DDS原理与FPGA实现_fpga dds实现 csdn

fpga dds实现 csdn

DDS信号发生器原理

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 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/355864
推荐阅读
相关标签
  

闽ICP备14008679号