基于FPGA的DDS实现原理

本文深入探讨了DDSDirectDigitalSynthesis的工作原理,详细解释了如何通过控制相位和频率来生成不同波形。重点介绍了频率控制字和相位控制字的作用,以及它们在实现波形频率变化中的应用。

嗯。。。最近画了个FPGA开发板练练手。。。希望一切的努力最后都能有所收获吧。

DDS Direct Digital Synthesis,即直接数字合成器,可以用来生成频率范围很宽的各种波形。其原理图如下所示:

比较重要的两个参数是相位控制字和频率控制字,一个用来控制初相位,一个来控制频率。那么这是如何做到的呢

我们假设有一个基波,它一个周期有64个采样点,那么怎么把它的频率变成两倍呢?由于采样的周期不变,那么如果采样点是原来的一半不就可以了。那么根据采样原理,假如原理采样点分别是1,2,3.。。。64.那么要想使得频率增加一倍,我们的采样点就得变成1,3,5,。。。63 这样相同的时间可以采集两倍的波形还能最大程度保持波形的完整。显然要想使它频率变成4倍,采样点变成1,5,9,。。。61 更高频率的可以类推。那么要使它频率变成原来的一半呢?很简单,只要采样点变成1,1,2,2,3,3,。。。,64,64即可。

那么频率控制字是如何做到的呢?其实和累加器原理差不多。还是以这个例子为例,加入我们要生成这个64个采样点的基波,常规做法是不是生成一个ROM,然后随着时钟信号的边沿去访问ROM。很一般的做法:

reg [5:0] count;
always@(posedge clk)
    count<=count+1'b1;

通过count寄存器作为地址去遍历ROM,那么两倍呢?是不是地址只要跳着就行

reg [5:0] count;
always@(posedge clk)
    count<=count+2'd2;//频率加倍

同理,对于倍速更高的类似就行,但是这么做并不通用,加入我要降低频率怎么办,我还得加个计数器。有什么办法可以两者兼得呢?很简单,增加位宽。

假设现在位宽增加到了8位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值