小梅哥-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次方,这是为什么?
解答:
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfageh
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01