DDS信号发生器原理与vivado仿真
DDS信号发生器原理与vivado仿真
1. DDS简介
DDS信号发生器采用直接数字频率合成(Direct Digital Synthesis,简称DDS)技术,把信号发生器的频率稳定度、准确度提高到与基准频率相同的水平,并且可以在很宽的频率范围内进行精细的频率调节。采用这种方法设计的信号源可工作于调制状态,可对输出电平进行调节,也可输出各种波形。
2. 原理
DDS信号产生的理论基础是“奈奎斯特采样定理”。在定理中可知当抽样频率大于等于模拟信号最高频率两倍时,就可以从离散序列无失真的信号中恢复出原始模拟信号。DDS信号发生原理是对模拟信号进行抽样。当一个抽样过程已经发生且抽样值已经量化完成,从量化数值重建原始模拟信号。基本的DDS结构主要由相位累加器、波形量化数据存储器、D/A转换器组成。其中相位累加器和波形量化数据存储器称为数控振荡器,是DDS结构中的数字部分。DDS基本结构原理如下图所示。
图中,相位累加器是由N位加法器与N位累加寄存器构成,它是DDS模块中一个极其重要的部分。在参考频率时钟的驱动下,DDS模块开始工作;当每来一个参考时钟时,累加器就把频率控制字FW与寄存器输出的值进行累加,将相加后的结果再输入到寄存器中,而累加寄存器就将在上一个参考时钟作用时产生的数据通过反馈的方式输送到累加器中。这样,在时钟的作用下,就可以不停的对频率控制字进行累加。此时,用相位累加器输出的数据作为地址在波形存储器中通过查找地址所对应的幅值表,就可以完成其从相位到幅值之间的转化。在DDS模块中,输出频率的公式为:
由上式可以看出,在参考信号与累加器的位数给定时,信号最终的输出频率主要由频率控制字决定。故当频率控制字变化时,输出频率也跟着变化,从而可以实现调频的基本功能。
3. DDS代码
module DDS(input clk,input rst_n,input [31:0]fword,input [10:0]pword,output [11:0]DA
);reg [31:0] r_fword;reg [11:0] r_pword;reg [31:0] cnt;wire [11:0] rom_addr;always@(posedge clk or negedge rst_n)beginif(!rst_n) beginr_fword <= 0;r_pword <= 0;endelse beginr_fword <= fword;r_pword <= pword;endendalways@(posedge clk or negedge rst_n)if(!rst_n)cnt <= 32'd0;elsecnt <= cnt +r_fword;assign rom_addr = cnt[31:20] + r_pword;blk_mem_gen_0 blk_mem_gen_1 (.clka(clk), // input wire clka.addra(rom_addr), // input wire [11 : 0] addra.douta(DA) // output wire [11 : 0] douta
);endmodule
其中blk_mem_gen_0例化模块为在vivado中调用的 “rom” IP核,设置如下两图所示。
ROM的初始化coe文件可以由波形数据生成器或者matlab产生,保存至工程目录下,并在ROM中将初始化文件选择为生成的coe文件。
4. 测试文件
`timescale 1ns/1nsmodule DDS_tb;reg clk;reg rst_n;reg [31:0] fword;reg [10:0] pword;wire [11:0] DA;DDS DDS0 (.clk (clk),.rst_n (rst_n),.fword (fword),.pword (pword),.DA (DA) );initial clk = 1;always #5 clk = ~clk;initial beginrst_n = 0;fword = 42955;pword = 256;#201;rst_n = 1;end endmodule
5. 仿真结果
在vivado中点击 Run Simulation——Run Behavioral Simulation,选中DA,设置为模拟信号,如下图所示。
点击上方运行
测试文件中,输入时钟设置为100M,频率控制字为42955,相位控制字为256,由上面的输出频率计算公式计算频率为=42955x100000000/2^32=1000.12Hz,周期为1ms,对波形进行测量,得到周期约为1ms,如下图所示。
6. 总结
由仿真结果可知,与预期效果一致,证明模块正确无误。有兴趣的读者可以将上面部分再加上DAC模块和低通滤波模块,就可以得到DDS信号发生器。
DDS信号发生器原理与vivado仿真相关推荐
- DDS信号发生器原理与经典DDS信号发生器设计方案
DDS信号发生器采用直接数字频率合成(Direct Digital Synthesis,简称DDS)技术,把信号发生器的频率稳定度.准确度提高到与基准频率相同的水平,并且可以在很宽的频率范围内进行精细 ...
- 基于vivado DDS ip核的DDS信号发生器(可调频调相)
基于Vivado DDS ip核的DDS信号发生器: 在Vivado软件中调出DDS ip核进行设置,很多参数可以参考xilinx官方手册,比较重要的是System Clock系统时钟和Phase W ...
- 基于FPGA的DDS信号发生器(vivado版本)
一.设计目标 根据DDS技术原理,在vavido上编写DDS信号源硬件逻辑语言,实现频率.幅度.波形可调的信号源发生器. 频率调节分为11个档位,分别是:1Hz.10Hz.100Hz.500Hz.1k ...
- 国产紫光FPGA实现DDS信号发生器(ModelSim仿真)
简介 本文主要根据利用紫光同创软件联合ModelSim对DDS信号发生器进行仿真.前序步骤(DDS实现过程)见 国产紫光FPGA实现DDS信号发生器_窃听龙吟的博客-CSDN博客 该博客. 一.创建仿 ...
- 基于FPGA的简易DDS信号发生器的设计与验证
基于FPGA的简易DDS信号发生器的设计与验证 一,理论介绍 补充:举例理解 二,代码实现 1,实验目标 2,MATLAB代码 3,verilog代码及实现思路 一,理论介绍 DDS 是直接数字式频率 ...
- 基于FPGA的简易 DDS 信号发生器的设计
文章目录 前言 一.pandas是什么? 二.ROM 内波形数据写入 1.MIF 2.DDS 模块参考代码 波形仿真 前言 DDS 是直接数字式频率合成器(Direct Digital Synthes ...
- FPGA—DDS信号发生器笔记
使用软件: Vivado DDS信号发生器 基本原理 DDS基本原理 DDS模块 ROM IP的使用 波形数据存储器 代码及仿真 verilog代码 仿真代码(Fword有值,Pword=0时) 仿真 ...
- 国产紫光FPGA实现DDS信号发生器
前言 随着信息技术的迅速发展,FPGA作为半定制电路具有可重复编程.计算能力强等优势,进入人们的视野,并在未来将发挥出越来越重要的作用. 作为电子专业的大三学生,我们小组在老师的带领下对现有国产FPG ...
- FPGA--简易DDS信号发生器 (内涵DDS与CORDIC IP核详解)附源码
学习内容 简易DDS信号发生器的设计与验证,产生所需的正弦波.方波锯齿波,并进行verilog验证. 实现功能 可以通过按键控制来输出不同的波形. 开发环境 xilinx spartan6开发板.IS ...
最新文章
- Lowest Common Multiple Plus ——ACM
- 北京大学c语言试题及答案,北大网络教育(计算机专业)C程序设计作业答案
- 20155327实践二
- linux服务器调优列表,2018-10-24(linux服务器常见的各种参数调优)
- 对已经add的文件不在跟踪
- c++ 状态模式(state)
- 试题10 最大子阵(枚举)
- python输出excel能够识别的utf-8格式csv文件
- list.files: List the Files in a Directory/Folder
- sqlite使用手册
- 全国青少年编程等级考试scratch三级真题2021年12月(含题库答题软件账号)
- java调用存储过程 sql server,Sql Server的存储过程与Java代码相连接调用(二)
- 微信小程序让凌乱的代码整齐好看紧凑
- LiveQing流媒体RTMP推流服务-如何获直播流地址 HLS/HTTP-FLV/WS-FLV/WebRTC/RTMP视频流地址
- 世界上还是好人多啊!
- centos7:在linux世界里,一切皆文件
- java判断一个字符串是否为需要的格式日期格式
- DNF体验服辅助/稳定/脚本/搬砖/
- hilink互联技术_华为隐藏够深,HiLink技术颠覆互联模式!
- GMV从5w日增到1000w,夏日经济下它是如何成为直播间的新宠?