[原创] 【小梅哥FPGA进阶教程】第十一章 四通道幅频相可调DDS信号发生器 上

芯航线跑堂   2017-2-21 10:08 楼主
十一、四通道幅频相可调DDS信号发生器

本文由山东大学研友袁卓贡献,特此感谢
实验目标
实现多通道可调信号发生器
实验平台
芯航线FPGA核心板、ADDA模块
图片1.jpg
图片2.jpg
实验现象
实现基于FPGA的多通道可调信号发生器,其中频率、相位以及幅值均可通过PC端串口发送数据对应调节,并可实现4路信号的同步。
实验原理及设计过程
经过前面小梅哥基础课程的学习,相信已经对FPGA的设计有了一定程度的了解,现在提出一个相对综合的工程应用来深入了解FPGA的设计思路以及工程思想等。
针对以上预期实验现象可以分析出最少需要DDS模块、TLC5620控制模块、串口接收模块以及控制模块。
DDS原理与实现
DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现频率、相位以及幅度的数控调制,广泛应用于通信领域。
DDS 的基本结构图如图1所示。
图片3.jpg
图1 DDS基本结构图
由图1可以看出,DDS主要由相位累加器、相位调制器、波形数据表以及 D/A 转换器构成。
其中相位累加器由 N位加法器与N位寄存器构成。每来一个时钟,加法器就将频率控制字与累加寄存器输出的相位数据相加,相加的结果又反馈至累加寄存器的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。即在每一个时钟脉冲输入时,相位累加器便把频率控制字累加一次。
相位累加器输出的数据就是合成信号的相位。相位累加器的溢出频率,就是 DDS输出的信号频率。用相位累加器输出的数据,作为波形存储器的相位采样地址,这样就可以把存储在波形存储器里的波形采样值经查表找出,完成相位到幅度的转换。波形存储器的输出送到 D/A 转换器,由 D/A 转换器将数字信号转换成模拟信号输出。
DDS信号流程示意图如图2所示。
图片4.jpg
图2 DDS原理流程图
这里相位累加器位数为N位(N的取值范围实际应用中一般为24~32),相当于把正弦信号在相位上的精度定义为N位,所以其分辨率为 图片4-1.jpg
若DDS的时钟频率为 图片5.jpg ,频率控制字fword为 1,则输出频率为 图片6.jpg ,这个频率相当于“基频”。若fword为 B,则输出频率为 图片7.jpg
因此理论上由以上三个参数就可以得出任意的 图片6-1.jpg 输出频率。且可得出频率分辨率由时钟频率和累加器的位数决定。当参考时钟频率越高,累加器位数越高,输出频率分辨率就越高。
从上式分析可得,当系统输入时钟频率 图片7-1.jpg 不变时,输出信号频率由频率控制字M所决定,由上式可得: 图片8.jpg 。其中B为频率字且只能取整数。为了合理控制ROM的容量此处选取ROM查询的地址时,可以采用截断式,即只取32位累加器的高M位。这里相位寄存器输出的位数一般取10~16位。
在本设计中参考时钟 图片8-1.jpg 频率为50 MHz,相位累加器位数N取32位,频率控制字位数M 取12位。
经过以上的分析,可以得出DDS模块的端口模块图如图3所示。
图片9.jpg
图3 DDS模块接口示意图
其中,每个端口的功能描述如表1所示。
图片10.jpg

表1 DDS模块功能描述
新建DDS_Module.v保存至rtl文件夹下。从图3以及表1就得到了端口列表:
图片11.jpg
以下只需按照图1进行编写。相位累加器此处即为一个32bit的加法器。
图片12.jpg
查找表地址生成,此处即为12bit的加法器。这里直接截取32位累加器结果中的高12位作为ROM的查询地址,这样产生的误差会对频谱纯度有影响,但是对波形的精度的影响是可以忽略的。
图片13.jpg
DA数据输出时钟模块使能,通过选择器来进行控制。
图片14.jpg
现在只需要例化存有波形文件的ROM即可。其中单端口的ROM主要配置数据如图4所示,其初始化文件选为已经生成的正弦mif文件。此处mif位宽为10,深度为4096。
图片15.jpg
图4 ROM主要配置参数
这样例化到DDS_Module中即为如下内容。
图片16.jpg
本模块编译无误后,点击RTL Viewer后可以看到如图5所示的模块逻辑电路图,可与DDS原理图对比。这里有两个选择器的原因是加了使能端的缘故,如果将使能端去掉即可看到如图6所示的电路图
图片17.jpg
图5 DDS模块设计逻辑电路图
图片18.jpg
图6 DDS模块简化逻辑电路图
设置此文件为顶层进行功能仿真。激励文件中除了产生正常的时钟以及模块例化调用,还需使能模块以及设置自加字。此处简化将Fword设置为固定值’d5000,。
图片19.jpg
编译无误后设置好仿真脚本并进行仿真,可以看到如图7所示的功能仿真波形文件,可以看出波形数据正常。放大仿真开始位置,可以看出输出DA时钟使能设计也正常。初始值为’d511也就是’h1ff,与初始化mif文件一致。
图片20.jpg
图7 DDS模块功能仿真波形
图片21.jpg
图8 DDS模块部分放大波形文件
这样一个DDS模块即设计完成,这里可以自行修改Pword的值进行观察波形相位是否发生相应变化。
数模转换器(DAC)控制模块设计
这里采用DAC芯片为芯航线AD/DA模块上的TLC5620。其中TLC5620模块的设计与实现在基础课第17讲已经详细阐述,此处不再对本部分进行解释。其模块接口示意图9所示,其接口对应的功能描述如表2所示。
图片22.jpg
图9 DA模块端口接口示意图
图片23.jpg
表2 DA模块接口功能描述
多通道数据输出实现
本节需实现的是多通道的信号发生器。而此处的ADDA模块最多支持四通道,这里就要轮询控制各个通道并输入相应的控制字。将此模块命名为DAC_4CH,其模块接口示意图如图10所示。
图片24.jpg
图10 DAC通道选择模块接口示意图
其每个接口功能描述如表3所示。
图片25.jpg
表3 DAC通道选择模块接口功能描述
由以上表分析可知其端口列表如下:
图片26.jpg
这里在调用TLC5620时,直接将其转换使能信号UpdateDone信号置1来简化控制。
图片27.jpg
实现轮询,就是在时钟上升沿到来时,每当一次TLC5620转换完成后,就开始选通下一个通道。
图片28.jpg
在选通对应通道后,DDS产生的数据只需给控制字即可。
图片29.jpg
由基础课程可知TLC5620控制字的构成是两位的通道选择字、电压增益选择字以及八位数据位。因此直接采取位拼接方式即可。
图片30.jpg
串口命令接收与解析
这里使用的串口接收模块波特率为9600,具体实现方式在基础课程的第12讲已经阐述,此处不再详细解释。其模块接口示意图如图11所示,接口对应功能描述如表4所示。

图片31.jpg
图11 串口接收模块接口示意图
图片32.jpg
表4 串口接收模块接口功能描述
如有更多问题,欢迎加入芯航线 FPGA 技术支持群交流学习:472607506
小梅哥
芯航线电子工作室
关于学习资料,小梅哥系列所有能够开放的资料和更新(包括视频教程,程序代码,教程文档,工具软件,开发板资料)都会发布在我的云分享。(记得订阅)链接:http://yun.baidu.com/share/home? ... are#category/type=0
赠送芯航线AC6102型开发板配套资料预览版下载链接:链接:http://pan.baidu.com/s/1slW2Ojj 密码:9fn3
赠送SOPC公开课链接和FPGA进阶视频教程。链接:http://pan.baidu.com/s/1bEzaFW 密码:rsyh





此内容由EEWORLD论坛网友芯航线跑堂原创,如需转载或用于商业用途需征得作者同意并注明出处

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复