DDS信号发生器的实现(内含代码资料)
本案例节选明德扬深圳FPGA培训班。
一、功能描述
本工程实现DDS直接数字式频率合成器,利用正弦波相位线性增加的特点,产生正弦波和余弦波。本工程主要由3部分组成:相位累加器,相位幅度转换,数模转换器DAC(FPGA外部实现)。其中,相位累加器的高10比特用于ROM的索引地址。
二、波形调制说明
模块将一个正弦波采样1024个点,然后保存到内部一个8比特、1024深度的ROM当中,通过改变时序和相位控制字,即可生成不同频率的波形。 生成波形的公式是: FO=TCLK*FCW/655360 上面公式中,TCLK是指本模块的工作时间,FCW是相位控制字,FO即是生成的信号频率。
相位控制字FCW可以改变每次步进数M。如果FCW=128,则模块内部累加器每次加128,则经过M=16’hffff/128=512个时钟,就可以循环一个周期,也就是512个时钟完成一个正弦波输出。假如FCW为256,则代表1024/4=128个时钟周期就输出一个正弦波。
三、应用举例
设定是FCW=128,CLK=50M的时钟频率,由公式计算得出F0=10KHZ。实际测量出一个波形时间为10332000ps,最终波形的频率为10KHZ。 如果是FCW=128,CLK=5M的时钟频率,由公式计算得出F0=1KHZ。输出实际测量一个波形时间为51898054ps,最终波形的频率为1KHZ。
如果是FCW=128,CLK=100M的时钟频率,由公式计算得出F0=0.2MHZ。输出实际测量一个波形时间为5167188ps,最终波形的频率为0.2MHZ。 以此类推,通过对频率控制字的改变来控制波形频率。
四、平台效果图
五、实现过程
首先根据所需要的功能,工程顶层的输入输出信号列表。
信号名 | I/O | 位宽 | 说明 |
clk | I | 1 | 系统工作时钟50M |
rst_n | I | 1 | 系统复位信号,低电平有效 |
da_clk | O | 1 | 输出D/A工作时钟 |
cos | O | 8 | 输出cos波形信号 |
sin | O | 8 | 输出sin波形信号 |
我们可以把工程划分成三个模块,分别是Sin相位转波形模块和Cos相位转波形模块和相位累加器模块。
1. 相位累加器模块
本模块根据设置好的相位控制字FCW来进行相位累加,以此控制波形的相位,sum <= sum + fcw;对相位不断累加,然后将累加的sum数据实时传到另外两个模块中去 以此本模块实现了相位累加,并将数据传输给其它模块的功能。
本模块信号列表如下:
信号名 | I/O | 位宽 | 说明 |
clk | I | 1 | 相位累加时钟 |
rst_n | I | 1 | 系统复位信号,低电平有效 |
fcw | I | 16 | 相位控制字 |
sum | O | 16 | 相位累加数据 |
2.Sin相位转波形模块
本模块实际上是一个RAM,事先将相位和相应相位上的幅值关系写入,然后通过从相位累加模块传来的相位累加数据sum进行查表,得到对应的幅值,以此当一个sin波的相位全部转换一遍后即可得到一个完整的sin波形。
信号列表如下:
信号名 | I/O | 位宽 | 说明 |
address | I | 10 | 系统复位信号,低电平有效 |
clock | I | 1 | RAM工作时钟 |
q | O | 8 | 输出sin数据 |
3. Cos相位转波形模块
本模块实际上是一个RAM,事先将相位和相应相位上的幅值关系写入,然后通过从相位累加模块传来的相位累加数据sum进行查表,得到对应的幅值,以此当一个cos波的相位全部转换一遍后即可得到一个完整的cos波形。
信号列表如下:
信号名 | I/O | 位宽 | 说明 |
address | I | 10 | 系统复位信号,低电平有效 |
clock | I | 1 | RAM工作时钟 |
q | O | 8 | 输出cos数据 |
DDS信号发生器的实现(内含代码资料)相关推荐
- 基于FPGA的DDS信号发生器
基于FPGA的DDS信号发生器 两个礼拜前就像写这个文档了,但是一直鸽到现在,主要是人摆了.还有个技术上的原因是,我想用串口屏显示波形,在串口调试助手上返回的数据是对的,但是发到串口屏上啥反应 ...
- ## ***电池SOC仿真系列-基于扩展卡尔曼(EKF)算法的SOC估计(内含代码等资料)***
## ***电池SOC仿真系列-基于扩展卡尔曼(EKF)算法的SOC估计(内含代码等资料)*** ## 1 研究背景 电池的荷电状态(SOC)代表的是电池当前的剩余容量,数值定义是电池剩余电量与电池额 ...
- CASE_05 基于FPGA的DDS信号发生器
该系类博客序言和资源简介可浏览该博客:PREFACE FPGA经典案例序言 快速了解该系列博客的内容与可用 资源. 目录 1 简介 2 DDS原理与方案 2.1 方案一:基于CORD ...
- 基于 FPGA 的便携式 DDS 信号发生器与示波器
基于 FPGA 的便携式 DDS 信号发生器与示波器 项目来源:2019年第三届全国大学生FPGA创新设计竞赛 一.设计概述 1.1 设计目的 利用赛灵思公司 A7 系列板卡 EG01.AD9226 ...
- 简易DDS信号发生器记录
简易DDS信号发生器 学习资料:野火 升腾Pro<FPGA Verilog开发实战指南--基于Xilinx Artix7>2021.11.16 1. 理论知识 DDS 是直接数字式频率合成 ...
- 【小梅哥FPGA进阶教程】第十一章 四通道幅频相可调DDS信号发生器
十一.四通道幅频相可调DDS信号发生器 本文由山东大学研友袁卓贡献,特此感谢 实验目标 实现多通道可调信号发生器 实验平台 芯航线FPGA核心板.ADDA模块 实验现象 实现基于FPGA的多通道可调信 ...
- 基于FPGA的简易DDS信号发生器的设计与验证
基于FPGA的简易DDS信号发生器的设计与验证 一,理论介绍 补充:举例理解 二,代码实现 1,实验目标 2,MATLAB代码 3,verilog代码及实现思路 一,理论介绍 DDS 是直接数字式频率 ...
- 两波形相位差的计算值_波形相位频率可调DDS信号发生器(设计分享)
本文为明德扬原创及录用文章,转载请注明出处! 1.1 总体设计 1.1.1 概述 学习了明德扬至简设计法和明德扬设计规范,本人设计了一个基于FPGA的可调频调相而且可以输出不同波形的DDS信号发生器. ...
- FPGA—DDS信号发生器笔记
使用软件: Vivado DDS信号发生器 基本原理 DDS基本原理 DDS模块 ROM IP的使用 波形数据存储器 代码及仿真 verilog代码 仿真代码(Fword有值,Pword=0时) 仿真 ...
最新文章
- 需要排序的最短子数组的长度——是一个排序好的数组,中间某一部分被打乱了,让你找出打乱的那个子数组...
- ps高级磨皮的7个步骤
- c语言输入一个数存数组,//从键盘上输入若干整数,并将其存入数组中,并统计输入数据的个...
- java ee 的使用方法_改善Java EE生产支持技能的8种方法
- 转载——CVE-2019-0807
- 【jupyter】notebook屏蔽warning信息输出
- 软件测试java三角形形状判定,软件测试技术基础实验——Junit 安装与 三角形问题的测试...
- 我需要完全理解这部分代码才能确保它能够正常工作,如果由我来修复代码中的问题,我是不会这么写的,因此希望你也不要这么来写(转)...
- (回溯法)和为n的所有不增正整数和式分解算法
- 火狐插件 Katalon Recorder 生成 python 等语言 代码
- 基于大数据的数据挖掘算法-大数据
- Android 签名文件
- 大数据开发都需要什么技术?
- uniapp 静态图片不显示
- linux中目录权限777,Linux文件和目录的777、755、644权限解释
- 天龙mysql_天龙八部游戏数据库mysql安装.doc
- 这学期她选修了英语计算机和驾驶三门课程,选出最合适的翻译这个学期她选修了英语、计算机和驾驶三门课程...
- 群晖同步数据到天翼网盘
- 移动网维嘉忆网络基础设施介绍手稿笔记
- 记一次IOS打包报错