在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2770|回复: 1

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

[复制链接]
发表于 2017-2-21 10:34:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

十一、四通道幅频相可调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 串口接收模块接口功能描述


小梅哥

芯航线电子工作室

关于
发表于 2017-2-22 10:30:40 | 显示全部楼层
本帖下半部分见链接http://bbs.eetop.cn/thread-622740-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-27 03:47 , Processed in 0.019925 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表