征战FPGA之使用IP核dds_compiler获取任意频率时钟和正余弦波形

一、前言

上一篇博客中介绍了使用IP核clk_wiz生成任意频率的时钟,但涉及到低频率时钟时采用分频方法有点麻烦,现采用IP核dds_compiler来获取任意频率的时钟而不需要进行分频。DDS(Direct Digital Synthesis,直接数字频率合成)一般用于产生各种频率的波形,包括正弦波、余弦波和三角波等,也可以产生任意频率的时钟,而且频率误差在10Hz以内,本篇文章讲解产生115200的时钟频率(实测频率为115207,误差为7Hz)和9600的时钟频率(实测频率为9600Hz,误差为0);顺带生成各种频率的正余弦波形,频率误差和时钟误差一致。

二、实验过程

1、 首先创建一个空的工程,创建方法这里不详细描写,不熟悉的请自行百度。随后在左上角找到Flow Navigator->PROJECT MANAGER->IP Catalog,并左击即可打开导入IP核的窗口。在Search栏输入dds,并选择我们需要到的IP核。如下图所示。
在这里插入图片描述
2、①、 双击上图中的红圈5中的IP核即可进入IP的配置窗口。在界面中,Configuration->Configuration Options是选择输出,有Phase Generator and SIN COS LUT(相位生成和正余弦LUT查找表),Phase Generator Only(只相位生成)和SIN COS LUT Only(只正余弦LUT查找表),这里选择第一个;Configuration->System Requirements->System Clock是IP核的输入时钟,这里为100MHz,Number of Channels是输出波形的通道数,每个通道的输出频率按输入时钟除以通道数来进行频率等分,这里选择1,Mode of Operation是模式选择,有Standard和Rasterized两种模式,一个区别就是频率分辨率计算方式不同,详细请参考提供的资料,Parameter Selection为参数选择。然后Configuration->System Parameters->Frequency Resolution是一个很重要的参数,即频率分辨率,公式有点复杂,在随后的资料中给出计算方法,这里选择默认值0.4。配置图如下。
在这里插入图片描述
②、 在Implementation->Output->Output Selection中选择最后一个,即输出正余弦,其他的选择默认即可,如下图。
在这里插入图片描述
③、 在Output Frequencies界面中因为只设置了一个输出通道,所以只需设置一个输出时钟频率即可,这里填写0.0096MHz。最后点击OK按键并在随后弹出的窗口中选择Generate即可创建一个IP核dds_compiler。如下图。
在这里插入图片描述在这里插入图片描述
④、 按照上一篇:征战FPGA之使用clk_wiz的IP核获取任意频率时钟提到的方法创建一个.v工程文件和一个.v仿真文件,或者读者自行百度教程创建这两个文件。然后将随后附上的工程里的…\Use_DDS_Clk\Use_DDS_Clk.srcs\sources_1\new\use_dds.v工程文件代码和…\Use_DDS_Clk\Use_DDS_Clk.srcs\sim_1\new\sim_1.v仿真文件代码分别复制到创建的工程文件和仿真文件中即可。

3、①、 这一步进行仿真。在左上角找到Flow Navigation->SIMULATION->Run Simulation,并点击,选择Run Behavioral Simulation即可进入仿真界面,如下图。在这里插入图片描述
②、 在界面中找到Objects窗口,右击o_data[15:0]中的第十五位(最高位),选择Add to Wave Window以查看该位的频率(即时钟的频率)。在Untitled1*窗口中,选中o_data[15:0]的高八位o_data[15:8](必须从高到低,否则波形变形),右击并选择New Virtual Bus,命名为cos。然后右击cos,选择Waveform Style->Analog,再次右击cos,选择Radix->Signed Decimal。如下图所示。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
③、 按照②中的方法将o_data[15:0]的低八位o_data[7:0]设为sin。如下图所示。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
④、 配置完后,修改仿真时间为1s并运行即可得到相应频率的时钟和相应频率的正余弦波形,如下图所示。从波形图可以看出,时钟的频率为9599Hz,误差为1Hz,而且可以显示正余弦波形,频率为9599.7Hz,精度较高,充分发挥了dds的作用。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

三、总结

由上面的测试结果可以得出,使用IP核dds_compiler可以获取较低频的时钟,也即可以得到任意频率的时钟,而且误差可以保证在10Hz以内,最好的甚至可以没有误差,不需要采用分频模块,具有更大的时钟范围空间。dds_compiler还可以生成各种频率的正余弦波形,具有更大的实用性。至此,介绍完了两种生成任意频率时钟的方法,两种方法各有利弊,适合自己的才是最好的;还顺带介绍了使用DDS生成任意频率的正余弦波形,希望对自己以后有帮助。也希望各位读者有问题或建议可以留言交流讨论。

一位大佬的DDS讲解博客:FPGA设计心得(9)基于DDS IP核的任意波形发生器设计
本博客用到的实验工程:Use_DDS_Clk 提取码:9m44
授人以鱼不如授人以渔(dds_compiler使用手册英文版):pg141-dds-compiler.pdf 提取码:pi16

  • 10
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值