原创 【博客大赛】DDS的逻辑实现

2015-4-27 14:51 2384 12 14 分类: FPGA/CPLD 文集: ALTERA FPGA

这篇文章是看博客大赛中小墨的下面博文后写成的:http://bbs.ednchina.com/BLOG_ARTICLE_3028795.HTM

感谢小墨同学无私奉献了原始工程。

 

最近有点时间,看了小墨的文章,并将其文章附件中的工程下载下来跑了下。由于小墨采用的是Verilog编写的代码,个人更喜欢VHDL代码,也是为了加深理解他的工程,就将其改成了VHDL版本,逻辑实现功能并未有实质改变。

 

此外,由于我手上没有带DAC的板子,所以就去掉了DAC部分,也没有按钮控制输入接口,故将其该由虚拟JTAG来控制频率字、相位字以及波形选择。虚拟JTAG控制平台如下图所示:

1(1).jpg

 

通过“FWord”、“PWord”和“WaveSel”三个按钮以及参数输入窗口对DDS进行控制。

将工程修改完成后,下载到我的EP2C5的板子上,跑出来的效果分别如下所示:

1(1).jpg

上图是通过虚拟JTAG平台控制选择方波,注意频率字这时候设置的非常大,也就是说方波的频率很高,系统时钟我用的是100MHz,这里是为了效果显示,频率字不得不设置较大,否则SignalTap II很难显示周期性变化的波形,以下其它波形类似。

1(1).jpg

以上是正弦波

1(1).jpg

上图为三角波

1(1).jpg
上图为锯齿波
 
 
 
我们注意到上面虽然四种波形频率控制已经实现了,但是相位控制均为0,我在试图控制改变正弦波相位的时候,发现波形错乱,如下图所示:
1(1).jpg
目前该问题原因待查,故这里先不将由瑕疵的工程上传,只记录问题。
-------------------我是华丽丽的分割线------------------
问题似乎已经找到了,在加入相位控制字的时候,没有考虑到ROM地址加上偏移后会超出8-bit地址范围,所以需要判断是否超出,否则会误读下一帧的数据。
修改前代码为:
when sin_wave => rom_addr <= fre_add_sig + pword_sig;--正弦波
修改后代码应该为:
when sin_wave => 
                 if(fre_add_sig + pword_sig)<256 then
                    rom_addr <= fre_add_sig + pword_sig;--正弦波
                 else rom_addr <= (fre_add_sig + pword_sig)-256;
                 end if;
 
其它波形续进行类似修改。

文章评论2条评论)

登录后参与讨论

用户1002262 2015-5-5 08:42

谢谢分享!

飞言走笔 2015-5-4 10:47

非常好非常好
相关推荐阅读
coyoo 2024-12-03 12:20
比较器检测模拟脉冲说明(四)
概述 说明(三)探讨的是比较器一般带有滞回(Hysteresis)功能,为了解决输入信号转换速率不够的问题。前文还提到,即便使能滞回(Hysteresis)功能,还是无法解决SiPM读出测试系统需要解...
coyoo 2024-11-16 13:54
不同ADC采样同一前端模拟信号时转换用时差异分析
概述 同一组前端模拟信号接入由不同型号ADC组成的模数转换电路时,采样后在FPGA中发现采样用时差异较大。本文主要分析这个时间差异形成的原因,并记录该差异产生对系统造成的影响。系统数字化简介 项目前端...
coyoo 2024-11-10 13:04
ALTERA Cyclone 10器件的使用-7:FPGA片内RAM资源利用率思考
概述 项目使用的FPGA目标器件为Cyclone 10 GX系列规模最大一颗料,由于功能升级增加了功能模块更多,发现器件片内RAM不够使用了。为了探索片内RAM使用的利用率问题,从代码RTL级与编译软...
coyoo 2024-11-10 12:30
转知乎:幽灵般的人体成像技术-PET
幽灵般的人体成像技术——PET - 知乎...
coyoo 2024-11-09 10:26
AD9633默认情况下调试记录(二)
概述 所谓默认情况,即如器件手册中图2所标示那样。对应AD9633的调试,除了涉及到ADC自身,还需要兼顾前端驱动器,系统中AD9633驱动器使用了差分运算放大器,这里不在赘述,笔者已有相关文章论述。...
coyoo 2024-11-07 10:40
AD9633默认情况下调试记录(一)
AD9633在旁路SPI接口时如何在FPGA逻辑中确认字边界概述 AD9633与FPGA之间的LVDS接口初调试,ADC可以通过SPI接口对其内部寄存器进行各项配置。在SPI接口未调通之前,对LVDS...
我要评论
2
12
关闭 站长推荐上一条 /2 下一条