文章目录

  • 前言
  • 一、pandas是什么?
  • 二、ROM 内波形数据写入
    • 1.MIF
    • 2.DDS 模块参考代码
  • 波形仿真

前言

DDS 是直接数字式频率合成器(Direct Digital Synthesizer)的英文缩写,是一项关键的数字化技术。与传统的频率合成器相比, DDS 具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。作为设计人员,我们习惯称它为信号发生器,一般用它产生正弦、锯齿、方波等不同波形或不同频率的信号波形,在电子设计和测试中得到广泛应用


提示:以下是本篇文章正文内容,下面案例可供参考

一、pandas是什么?

DDS 技术是一种全新的频率合成方法,其具有低成本、低功耗、高分辨率和快速转换时间等优点, 对数字信号处理及其硬件实现有着很重要的作用。DDS 的基本结构主要由相位累加器、相位调制器、波形数据表 ROM、 D/A 转换器等四大结构组成,其中较多设计还会在数模转换器之后增加一个低通滤波器。 DDS 结构示意图

上图是不含低通滤波器的 DDS 结构示意图,图中主要包括相位累加器、相位调制器、波形存储器、数模(D/A)转换器等四大结构。接下来我们会结合 DDS 结构示意图,为大家讲解一下 DDS 的工作原理。在讲解之前,先来对其中各参数做一下说明。系统时钟 CLK 为整个系统的工作时钟,频率为 fCLK;频率字输入 F_WORD,一般为整数,数值大小控制输出信号的频率大小,数值越大输出信号频率越高,反之,输出信号频率越低,后文中用 K 表示;相位字输入P_WORD,为整数,数值大小控制输出信号的相位偏移,主要用于相位的信号调制,后文用 P 表示;设输出信号CLK_OUT,频率为 fOUT。

图中所展示的四大结构中,相位累加器是整个 DDS 的核心,在这里完成相位累加,生成相位码。相位累加器的输入为频率字输入 K,表示相位增量,设其位宽为 N,满足等式K = 2N * fOUT / fCLK 。其在输入相位累加器之前,在系统时钟同步下做数据寄存,数据改变时不会干扰相位累加器的正常工作。相位调制器接收相位累加器输出的相位码, 在这里加上一个相位偏移值 P, 主要用于信号的相位调制, 如应用于通信方面的相移键控等, 不使用此部分时可以去掉, 或者将其设为一个常数输入, 同样相位字输入也要做寄存。波形数据表 ROM 中存有一个完整周期的正弦波信号。假设波形数据 ROM 的地址位宽为 12 位,存储数据位宽为 8 位,即 ROM 有 212 = 4096 个存储空间,每个存储空间可存储 1字节数据。将一个周期的正弦波信号,沿横轴等间隔采样 212 = 4096 次,每次采集的信号幅度用 1 字节数据表示,最大值为 255,最小值为 0。将 4096 次采样结果按顺序写入 ROM的 4096 个存储单元, 一个完整周期正弦波的数字幅度信号写入了波形数据表 ROM 中。波形数据表 ROM 以相位调制器传入的相位码为 ROM 读地址,将地址对应存储单元中的电压幅值数字量输出。D/A 转 换 器 将 输 入 的 电 压 幅 值 数 字 量 转 换 为 模 拟 量 输 出 , 就 得 到 输 出 信 号CLK_OUT。输出信号 CLK_OUT 的信号频率 fOUT = K * fCLK / 2N。当 K = 1 时,可得 DDS 最小分辨率为: fOUT = fCLK / 2N,此时输出信号频率最低。根据采样定理, K 的最大值应小于 2N /2。

对于 N 位的相位累加器,它对应的相位累加值为 2N,如果正弦 ROM 中存储单元的个数也是 2N 的话,这个问题就很好解决,但是这对 ROM 的对存储容量的要求较高。在实际操作中,我们使用相位累加值的高几位对 ROM 进行寻址,也就是说并不是每个系统时钟都对 ROM 进行数据取,而是多个时钟读取一次,因为这样能保证相位累加器溢出时,从正ROM 表中取出正好一个正弦周期的样点。因此,相位累加器每计数 2N 次,对应一个正弦周期。而相位累加器 1 秒钟计数 fCLK次,在 k=1 时, DDS 输出的时钟频率就是频率分辨率。频率控制字 K 增加时,相位累加器溢出的频率增加,对应 DDS 输出信号 CLK_OUT 频率变为 K 倍的DDS 频率分辨率。

二、ROM 内波形数据写入

1.MIF

我们设计的 DDS 简易信号发生器想要实现正弦波、方波、三角波和锯齿波 4 种波形的输出,需要事先在波形数据表 ROM 中存入 4 种波形信号各自的完整周期波形数据。 ROM作为只读存储器,在进行 IP 核设置时需要指定初始化文件, 我们将波形数据作为初始化文件写入其中,文件格式为 MIF 文件。使用 MatLab 绘制 4 种信号波形,对波形进行等间隔样,以采样次数作为 ROM 存储地址,将采集的波形幅值数据做为存储数据写入存储地址对应的存储空间。

2.DDS 模块参考代码

代码如下(示例):

//********************************************************************//
//fre_add:相位累加器
always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)fre_add <=  32'd0;elsefre_add <=  fre_add + FREQ_CTRL;//rom_addr:ROM读地址
always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)rom_addr <= 14'd0;elsecase(wave_select)sin_wave:beginrom_addr_reg    <=  fre_add[31:20] + PHASE_CTRL;rom_addr        <=  rom_addr_reg;end     //正弦波squ_wave:beginrom_addr_reg    <=  fre_add[31:20] + PHASE_CTRL;rom_addr        <=  rom_addr_reg + 14'd4096;end     //方波tri_wave:beginrom_addr_reg    <=  fre_add[31:20] + PHASE_CTRL;rom_addr        <=  rom_addr_reg + 14'd8192;end     //三角波saw_wave:beginrom_addr_reg    <=  fre_add[31:20] + PHASE_CTRL;rom_addr        <=  rom_addr_reg + 14'd12288;end     //锯齿波default:beginrom_addr_reg    <=  fre_add[31:20] + PHASE_CTRL;rom_addr        <=  rom_addr_reg;end     //正弦波endcase//********************************************************************//

波形仿真

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

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

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

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

    写这篇文章的本意不是为了探讨AD9767怎么使用,因为9767的控制实在是太简单了,准备好数据直接输出即可,和网上大多数的并行DA输出基本上一模一样,更麻烦的反而是硬件方面.发文的原因是最近一位很细心 ...

  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. VR/AR会是微信后马化腾进军的战场吗
  2. Python数据类型中的字典-创建和基本操作
  3. 线程池的使用(线程池重点解析)
  4. 机器人动力学(Basic Newton-Euler Mechanics)
  5. npm/cnpm install是啥意思
  6. 小辣椒p60手机怎么样_奇葩对决!3600元的格力手机与3599元的小辣椒V19,谁更强?...
  7. 4 种方法!检查字符串是否为合法的日期格式
  8. FISCO BCOS Solidity 智能合约 返回json对象、字典mapping、结构体
  9. 手机QQ2009(塞班第三版)聊天记录提取完全代码
  10. html audio解决浏览器无法播放问题
  11. 苹果雪豹操作系统正式版_苹果为旧机型发布iOS 12.4.2;macOS 10.14.6发布了,Catalina还远吗?...
  12. SPARC架构下的反汇编(一)——SPARC简介
  13. 咸鱼CAD笔记—CAD快捷键
  14. Django框架学习--4--分布式路由ORM基础
  15. 【触想智能】工业平板电脑触摸屏选择分析
  16. thingsboard往kafka推送数据
  17. 为什么要使用kafka消息队列
  18. SQL 中的 IFNULL和NULLIF
  19. hdu 4541 Ten Googol
  20. 发布半年之后,QQ 物联做得到底怎么样了?

热门文章

  1. 湖北武汉劳务员培训劳务管理五条新举措建筑七大员培训
  2. Excel的常用查询函数一(Index与match联合查询)
  3. Python爬取童程童美TTS网站知识点图片
  4. 使用React创建一个web3的前端
  5. animate.css插件指南
  6. android视频用什么组件,一个简单的移动端视频组件的实现
  7. 用计算机弹精灵宝可梦音乐,《精灵宝可梦》图鉴402:可以演奏出优美音乐的精灵——音箱蟀...
  8. 青少年CTF-WEB-Queen
  9. c语言调用calculate函数,关于c语言中int calculate函数求解。谢谢
  10. 手机算不算计算机系统,现在的手机是不是和电脑一样是组装机