基于FPGA的简易 DDS 信号发生器的设计
文章目录
- 前言
- 一、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 信号发生器的设计相关推荐
- 基于FPGA的简易DDS信号发生器的设计与验证
基于FPGA的简易DDS信号发生器的设计与验证 一,理论介绍 补充:举例理解 二,代码实现 1,实验目标 2,MATLAB代码 3,verilog代码及实现思路 一,理论介绍 DDS 是直接数字式频率 ...
- 基于FPGA的简易DDS信号发生器的设计(一)
写这篇文章的本意不是为了探讨AD9767怎么使用,因为9767的控制实在是太简单了,准备好数据直接输出即可,和网上大多数的并行DA输出基本上一模一样,更麻烦的反而是硬件方面.发文的原因是最近一位很细心 ...
- 基于 FPGA 的便携式 DDS 信号发生器与示波器
基于 FPGA 的便携式 DDS 信号发生器与示波器 项目来源:2019年第三届全国大学生FPGA创新设计竞赛 一.设计概述 1.1 设计目的 利用赛灵思公司 A7 系列板卡 EG01.AD9226 ...
- FPGA之简易DDS信号发生器设计
文章目录 前言 一.DDS信号发生器 1.DDS是什么 2.DDS工作原理 二.模块代码 1.调用rom模块储存波形图 2.按键控制模块 2.按键消抖模块 3.DDS生成模块 4.顶层模块 5.RTL ...
- 基于FPGA的双通道DDS信号发生器
硬件:FPGA开发板 ,AD9767双通道DA转换器 软件:ISE,Matlab,Modelsim 最终效果:输出方波,正弦波,三角波以及锯齿波,可以通过按键改变输出波形的频率,频率在1Hz-1MHz ...
- 基于FPGA实现的DDS双通道信号发生器
文章目录 前言 一.DDS是什么? 二.设计步骤 1.DDS的基本结构 1.相位累加器 2.相位调制器 3.ROM数据表的生成 2.对各结构的代码实现 1.DDS顶层代码` 2.DDS主要发生模块 3 ...
- 简易DDS信号发生器记录
简易DDS信号发生器 学习资料:野火 升腾Pro<FPGA Verilog开发实战指南--基于Xilinx Artix7>2021.11.16 1. 理论知识 DDS 是直接数字式频率合成 ...
- matlab样本序列的时域波形,基于MATLAB的简易声音信号频谱分析仪设计
基于MATLAB的简易声音信号频谱分析仪设计 汉宁窗时域波形曲线图 汉宁窗频域特性曲线图 在MATLAB中,生成汉宁窗的函数是hanning.使用该函数进行频谱修正时,先生成一个和待修正的样本具有相同 ...
- 基于FPGA的简易数字频率计+上板测试(小梅哥AC620FPGA开发板)
基于FPGA的简易数字频率计+上板测试(小梅哥AC620FPGA开发板 目录 主要架构 1.计数模块 2.数码显示模块 3.控制信号模块 4.分频模块 例化模块 上板测试图 附:74HC595移位寄存 ...
最新文章
- VR/AR会是微信后马化腾进军的战场吗
- Python数据类型中的字典-创建和基本操作
- 线程池的使用(线程池重点解析)
- 机器人动力学(Basic Newton-Euler Mechanics)
- npm/cnpm install是啥意思
- 小辣椒p60手机怎么样_奇葩对决!3600元的格力手机与3599元的小辣椒V19,谁更强?...
- 4 种方法!检查字符串是否为合法的日期格式
- FISCO BCOS Solidity 智能合约 返回json对象、字典mapping、结构体
- 手机QQ2009(塞班第三版)聊天记录提取完全代码
- html audio解决浏览器无法播放问题
- 苹果雪豹操作系统正式版_苹果为旧机型发布iOS 12.4.2;macOS 10.14.6发布了,Catalina还远吗?...
- SPARC架构下的反汇编(一)——SPARC简介
- 咸鱼CAD笔记—CAD快捷键
- Django框架学习--4--分布式路由ORM基础
- 【触想智能】工业平板电脑触摸屏选择分析
- thingsboard往kafka推送数据
- 为什么要使用kafka消息队列
- SQL 中的 IFNULL和NULLIF
- hdu 4541 Ten Googol
- 发布半年之后,QQ 物联做得到底怎么样了?
热门文章
- 湖北武汉劳务员培训劳务管理五条新举措建筑七大员培训
- Excel的常用查询函数一(Index与match联合查询)
- Python爬取童程童美TTS网站知识点图片
- 使用React创建一个web3的前端
- animate.css插件指南
- android视频用什么组件,一个简单的移动端视频组件的实现
- 用计算机弹精灵宝可梦音乐,《精灵宝可梦》图鉴402:可以演奏出优美音乐的精灵——音箱蟀...
- 青少年CTF-WEB-Queen
- c语言调用calculate函数,关于c语言中int calculate函数求解。谢谢
- 手机算不算计算机系统,现在的手机是不是和电脑一样是组装机