写这篇文章的本意不是为了探讨AD9767怎么使用,因为9767的控制实在是太简单了,准备好数据直接输出即可,和网上大多数的并行DA输出基本上一模一样,更麻烦的反而是硬件方面。发文的原因是最近一位很细心的朋友发现AD9767的输出有些问题,本人调试觉得也很有意思,所以发出来分享一下。
本文还是意思一下先讲解9767的使用,下一篇文章着重分析一下9767设计时的一个软件bug。

硬件条件

FPGA:XC7A35T
DA芯片:AD9767

软件设计

DDS设计基本原理
此次设计所使用的DA芯片为ADI公司的AD9767,主要参数包括10-14位可调位数输出,最高125M的输出频率,单片拥有两个并行通道输出,每通道最多由14位并行数据控制输出。下图所示为AD9767的框图:

介绍完DA芯片,FPGA就不多介绍了,接下来介绍基本原理。
我们知道9767是一个14位的并行DA芯片,所以本次设计将会通过在ROM中存储需要输出的波形(正弦波、方波、三角波)数据,然后FPGA输出对应控制ROM输出的地址信号,再将ROM的输出数据提供给9767的方法,达到DDS输出的效果。本设计给AD9767提供的时钟源固定为50MHz(系统主频),每一次时钟的上升沿相位累加器都会对频率输入字(FWORD)进行累加,设累加器的位数为N,那么计数范围从0-(2的N次方-1),也就是说对于我们输出的波形,分辨率为1/2的N次方。每一次累加的值(FWORD)实际上就是步长,所以最终得到Fout的频率为FWORD × (1/2N) × 50MHz。除开频率控制字之外,还附加了相位控制字,这一点很好理解,只需要在相位累加器的输出结果基础上在加上对应的相偏数据,就可以得到相位偏移的波形了。以下是DDS波形发生的整体框图。如果输出的波形不是方波,可以在最后的信号输出可以再加一个低通滤波器滤除高频信号,使得输出曲线更加平滑。

上图中之所以在字的输入端需要加入寄存器是为了寄存数据以防止在进行数据转换的过程中外界数据突然改变。OK,了解完设计原理后,接下来就是代码设计的思路了。根据上述的计算公式,那么在已知输出频率以及输入的时钟频率的情况下,我们可以得到FWORD的计算公式为:

根据奈奎斯特采样定律,每一个周期至少需要有两个点数,所以FWORD的设置应该小于2N-1才行。

此外,值得注意的是,频率累加器的位数为32位,如果将这个32位全部给到ROM中,问题倒是不大,但是比较吃资源,所以我们为了节省资源,采用12位地址的ROM,只需要将32位累加器的高12位输入到ROM中即可。这样子的结果就是累加器的低20变化时,ROM的地址线是不变的,只有经过220计数后才会变1,相当于是给9767的时钟频率进行了一个220的分频。不理解的朋友没关系,因为在最后我们计算的时候其实是不用管这个20的,因为我们需要的结果就是232的计数后能够让一个周期走完,而内部是如何运作的,完全可以当成一个黑匣子来看。

好了,介绍完理论部分之后就可以开始写代码了,代码部分其实相当简单,只需要每个时钟周期都给频率字计数器+FWORD的值即可,频率字计数器是一个32位的寄存器,我们将它的高12位输入给ROM作为数据寻址的地址,再将ROM的14位数据输出给AD9767即可,代码较为简单,将14位数据准备好通给AD9767之后,DA芯片就会随着时钟信号,将对应的电流输出,经过滤波电路以及运放后即可得到电压。需要程序文件的下篇文章会一起附上。
基于FPGA的简易DDS信号发生器的设计(二)

基于FPGA的简易DDS信号发生器的设计(一)相关推荐

  1. 基于FPGA的简易DDS信号发生器的设计与验证

    基于FPGA的简易DDS信号发生器的设计与验证 一,理论介绍 补充:举例理解 二,代码实现 1,实验目标 2,MATLAB代码 3,verilog代码及实现思路 一,理论介绍 DDS 是直接数字式频率 ...

  2. 基于FPGA的简易 DDS 信号发生器的设计

    文章目录 前言 一.pandas是什么? 二.ROM 内波形数据写入 1.MIF 2.DDS 模块参考代码 波形仿真 前言 DDS 是直接数字式频率合成器(Direct Digital Synthes ...

  3. 基于 FPGA 的便携式 DDS 信号发生器与示波器

    基于 FPGA 的便携式 DDS 信号发生器与示波器 项目来源:2019年第三届全国大学生FPGA创新设计竞赛 一.设计概述 1.1 设计目的 利用赛灵思公司 A7 系列板卡 EG01.AD9226 ...

  4. FPGA之简易DDS信号发生器设计

    文章目录 前言 一.DDS信号发生器 1.DDS是什么 2.DDS工作原理 二.模块代码 1.调用rom模块储存波形图 2.按键控制模块 2.按键消抖模块 3.DDS生成模块 4.顶层模块 5.RTL ...

  5. 基于FPGA的双通道DDS信号发生器

    硬件:FPGA开发板 ,AD9767双通道DA转换器 软件:ISE,Matlab,Modelsim 最终效果:输出方波,正弦波,三角波以及锯齿波,可以通过按键改变输出波形的频率,频率在1Hz-1MHz ...

  6. 基于FPGA实现的DDS双通道信号发生器

    文章目录 前言 一.DDS是什么? 二.设计步骤 1.DDS的基本结构 1.相位累加器 2.相位调制器 3.ROM数据表的生成 2.对各结构的代码实现 1.DDS顶层代码` 2.DDS主要发生模块 3 ...

  7. 简易DDS信号发生器记录

    简易DDS信号发生器 学习资料:野火 升腾Pro<FPGA Verilog开发实战指南--基于Xilinx Artix7>2021.11.16 1. 理论知识 DDS 是直接数字式频率合成 ...

  8. matlab样本序列的时域波形,基于MATLAB的简易声音信号频谱分析仪设计

    基于MATLAB的简易声音信号频谱分析仪设计 汉宁窗时域波形曲线图 汉宁窗频域特性曲线图 在MATLAB中,生成汉宁窗的函数是hanning.使用该函数进行频谱修正时,先生成一个和待修正的样本具有相同 ...

  9. 基于FPGA的简易数字频率计+上板测试(小梅哥AC620FPGA开发板)

    基于FPGA的简易数字频率计+上板测试(小梅哥AC620FPGA开发板 目录 主要架构 1.计数模块 2.数码显示模块 3.控制信号模块 4.分频模块 例化模块 上板测试图 附:74HC595移位寄存 ...

最新文章

  1. 时尚经典 体验云桌办公经典时尚办公方式
  2. html5摒弃的标记,全新改进的HTML5表单创建
  3. div模拟textarea文本框,输入文字高度自适应,且实现字数统计和限制
  4. 一文搞懂物联网Modbus通讯协议
  5. mongodb查询优化
  6. python绘制子图去掉x轴坐标值_python – 关闭图形的所有子图的轴
  7. Mac下IntelliJ IDEA常用快捷键
  8. 求和函数计算机语言,在 Excel 中,计算求和的函数是 ____。
  9. 华为关闭telnet命令_华为交换机关闭Telnet、开启SSH服务命令
  10. 广州房价与数据分析岗薪资分析
  11. 分享个短视频竞品分析报告
  12. 智慧工厂 VR 拆解零件 —— Hightopo 3D 虚实现实可视化系统
  13. volte的sip信令流程_VOLTE-SIP代码详解及SIP流程图解
  14. Google 搜索服务退出中国
  15. 【视频分享】尚学堂---数据结构和算法
  16. DP分类题目 转载 《志当存高远》大神的 没有冒犯的意思 只是拿过来学习的
  17. 计算机上的游戏怎么不见了怎么办,电脑自带小游戏消失怎么找回?高手教你找回电脑自带小游戏...
  18. 微信小程序开发分析总结
  19. 国产软件不背黑锅,4款强大又实用的电脑软件,用了舍不得卸载
  20. 根据sitemap一键推送给百度收录的python小脚本

热门文章

  1. Java培训机构哪家好,不靠谱的有哪些
  2. wlan测试仪软件,MT8860C WLAN 测试仪
  3. 蓄电池内阻测试仪分析软件,进口蓄电池内阻测试仪
  4. matlab里颜色直方图的画法
  5. java long string 转换_Java long 转成 String的实现
  6. [论文阅读] Action Semantics Network: Considering the Effects of Actions in Multiagent System
  7. 通过语言包,让云豹短视频源码实现国际化运营
  8. 多线程比串行进程多出的优势在哪里
  9. linux清除大文件命令,linux du df命令清除不要的大文件
  10. 税务会计实务【13】