小梅哥-DDS原理和代码详解

小梅哥-DDS原理和代码详解

一.DDS是什么?

DDS(Direct Digital Synthesis):是一种信号产生器。

二.DDS公式原理及结构图

2.1频率控制字控制输出频率的原理

DDS主要通过频率控制字(FWORD)和相位控制字(PWORD)来对信号的频率和相位进行改变。输出频率的公式为,其中B是FWORD,Fclk为系统时钟。公式这么写的原理推导如下:

2.2相位控制字控制输出相位的原理

由DDS结构图可知频率控制字对频率进行改变后,将其和相位控制字进行了相加,然后通过相位控制字的值改变输出波形相位。原理如下:

三.代码部分及其详细解释

module DDS(

clk,

reset,

Fword,

Pword,

data

);

input clk;

input reset;

input [31:0]Fword;//取32位是因为想让频率范围调整范围变大,对应2的32次方。

input [11:0]Pword;//采样点是4096个,所以需要0-4095位,4095就需要12位。

output [13:0]data;//输出是14位,因为数模转换模块是14位的。

reg [31:0]Fword_r;

reg [11:0]Pword_r;

reg [31:0]Freg_acc;

reg [11:0]Rom_addr;

ROM ROM(

.clka(clk),

.addra(Rom_addr),

.douta(data)

);

//频率控制字的寄存器

always@(posedge clk or posedge reset)

if(!reset)

Fword_r<=0;

else

Fword_r<=Fword;

//相位控制字的寄存器

always@(posedge clk or posedge reset)

if(!reset)

Pword_r<=0;

else

Pword_r<=Pword;

//相位累加寄存器

always@(posedge clk or posedge reset)

if(!reset)

Freg_acc<=0;

else

Freg_acc<=Freg_acc+Fword_r;

//波形地址获取

always@(posedge clk or posedge reset)

if(!reset)

Rom_addr<=0;

else

Rom_addr<=Freg_acc[31:20]+Pword_r;

endmodule

代码中的Rom_addr<=Freg_acc[31:20]+Pword_r;中Freg_acc[31:20]取前12位的原因如下:

四.疑惑与问题

小梅哥在testbench验证输出频率是否正确时使用的公式是(其中的2^N是指采样点数)小梅哥视频使用的正弦信号采样点是4096(2^12),但是在计算时确把2^N带入2^32次方,这是为什么?

解答:

相关推荐

十大广告设计软件榜中榜
365体育手机版中国官方网站

十大广告设计软件榜中榜

09-15 👁️ 4065
13元大写怎么写
365bet电脑版

13元大写怎么写

08-10 👁️ 285
为什么要让孩子玩拼图?阿尔瓦罗·西扎:伟大成就缘于儿时拼图
365体育手机版中国官方网站

为什么要让孩子玩拼图?阿尔瓦罗·西扎:伟大成就缘于儿时拼图

07-12 👁️ 3970