1695|1

6807

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

FPGA 之 DDS简易 原理阐述 [复制链接]

本帖最后由 Jacktang 于 2019-4-12 09:06 编辑

DDS(Direct Digital Synthesizer) 即数字合成器 ,可以通过修改FWORD(频率控制字) 和 PWORD(相位控制字) 来较容易实现


频率、相位、以及幅度的控制,在通信领域运用较为广泛。其原理图如下图所示





下面以代码的形式来解释此图的原理


假设Clk 时钟频率为100MHZ 周期为10ns ,假设 data 可以组成32点正弦波信号


always@(posedge Clk)


time <= time +1'b1 ;


case(time)


0 :data =  0


1:data =  1


2:data = 2.5


3:data = 3.7


此处省略


31:data =0 ;


可知 : 一个正弦波周期为 32*10 即 320ns 频率为 1/320 * 10^9 hz ,要想使其变为周期为160ns 的正弦波 我们知道 每隔10ns 输出一个点 ,要想周期为160ns 则需输出 160/10 个点 即16个点 ,我们怎么控制系统输出16个点呢? 仔细想一想就知道只需要将 time <= time + 1 ;改为 time <= time + 2 即可 ;而time <= time + B正好对应的就是累加器的电路图 ,完全是DDS的思想 。


为了进一步理解DDS原理 , 仍以代码的形式进行理解 。


一般情况下 FWORD为32位 ,ROM为位宽11位  即2048个点来构成正弦波 ,也就是说一个固定的正弦波周期为2048*10ns ,要想生成频率为Fout 的正弦波只能更改要显示的正弦波的点数,怎么改变正弦波要显示的点数呢?只能通过time ,根据不同的需求来进行隔点采样 ,这样就可以得出 Fout = Fclk *2^N / B ;


上述公式可以这么理解 ,已知输出一个点所需时间为1/Fclk ,那么要输出多少个点才可以控制有个正弦波周期为1/Fout 呢 ?


即可以通过改变B值 ,来求出输出的点数 ,即 1/Fclk  * (实际输出点数) = 1/Fout ;而实际输出点数为 2^N /B (简单的数学知识


可以这么理解 一共输出2^N个点每隔B个点输出一个总共输出几个点? 就可以简单的理解了) 所以可得 : Fout = Fclk *2^N /B ;


而相位控制字相当于位便宜一个由2048个点组成的正弦波如果其实地址+1024的话 相当于翻转了180度 。通过更改相位控制字可以改变你要从哪个起始点开始显示 ,即改变了你要显示正弦波的相位 。

最新回复

学习了!  详情 回复 发表于 2019-4-12 14:07
点赞 关注
 

回复
举报

280

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
学习了!
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表