DDS发生器的FPGA设计

DDS发生器基于FPGA设计,利用查找表和频率控制字实现相位累加,从而生成连续的正弦波。频率控制字决定了相位累加器的增量,影响输出频率。通过设置不同频率控制字,可实现不同频率输出。MATLAB生成正弦查找表并保存为COE文件,FPGA中使用IP核配置RAM,双端口输入,位宽12,深度4096,加载COE文件。仿真验证了设计的正确性。
摘要由CSDN通过智能技术生成

DDS发生器的实质就是一个查找表,即通过地址对应寄存器里的值然后输出。

通俗来讲就是:将一个正弦周期等分成N份,存放到深度为N的rom里,然后通过地址的变换,来对应输出rom里面的值。

这里就会有疑问:地址是怎么变化的? 则提出几个词:频率控制字、相位控制字、相位累加字

相位累加字=相位累加字+频率控制字,地址=相位累加字+相位控制字。

频率控制字是什么?怎么用?

比如我rom存2048个数字,那我要确保全部取到,则对于寄存器地址[0:2047]里面的值全部要取,不能跳过。由上面的公式可以看出,如果频率控制字取1,则相位累加字以1的速度递增,则能取到所有值。如果频率控制字取0.5,则每个值输出两次(当然不能取0.5,打个比方)。

同理,现在我们将相位累加字位宽设为[20:0],将相位累加字的前11位做为地址,后10位用来累加。 此时我频率控制字若为2^11,则时钟每来1次,则地址加1,也就是每个值取一次。频率控制字若为2^10,则时钟每来2次,则地址加1,也就是每个值取1次。以此类推。 

下面是matlab和fpga的代码

1.生成正弦查找表,并保存到coe文件

clear all ;
N=4096 ;
amp=2048 ;
phase=(0:4095)/4096*2*pi ;
sinvalue=round(cos(phase)*amp);
sinvalue(sinvalue<-2047)=-2047 ;
sinvalue(sinvalue>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值