Vivado关于dds IP核实现任意频率的正余弦波输出

目录
一、dds IP核的创建与参数配置
1、创建dds IP核
2、参数配置
3、可编程输入设置
4、详细的设置
5、输出频率设置
6、配置总结
7、输出增量和对应频率总结
二、相关数据计算
1、DDS输出波形频率fout、相位增量∆Θ、频率分辨率∆f、相位位宽BΘ(n)相关函数计算
2、举例
三、 工程实现
四、dds IP核内部架构简介
1、dds IP核核心架构
2、DDS编译器核心的标准模式使用相位截断
五、DDS IP相关资料

一、dds IP核的创建与参数配置

1、创建dds IP核
首先创建工程后在左边打开IP catalog ,输入dds找到dds IP核,双击DDS compiler打开dds IP核,进行配置;
2、参数配置

图1.2.1 dds IP核参数配置

(1)Component Name 可以修改IP核名字

(2)Configuration options 配置选项:这里我们选择phase generator and sin cos LUT

(3)system clock(系统时钟) 125MHz(范围0.01—1000MHZ);通过奈奎斯特定理可知,最大输出的频率为62.5MHz,实际测得输出最大频率为62.3576MHz,当输出的频率超过30MHz的时候频率就开始不稳定;要想输出更大的频率,可以通过增加系统时钟来实现;

(4)Number of channels(通道数选择) 1;最多可以选择16个通道输出,本项目为实现任意可调频率输出只用到单通道输出即可;

(5)Frequency per channel (每通道频率) 125MHz;通过系统时钟除以通道数得到每通道的频率;

(6)Parameter selection (参数选择) system parameters;系统参数,为了更精确的输出任意频率,选择系统参数模式;

(7)Spurious free dynamic range(伪动态自由范围) 48(决定输出正余弦数据位宽n,范围为6*(n-1)~6*n,后面选择正弦或者余弦输出时位宽为8位,如果正余弦同时输出则位宽为16位,正弦为高8位,余弦为低8位)

(9)Frequency resolution(频率分辨率) 0.02910383045673370361328125(决定相位位宽,由相位位宽函数可得出频率分辨率,分辨率越精确,可调输出频率越精确,相位位宽函数在后面讲到)

(10)Noise shaping(噪声整形):控制是否相位截断、抖动或泰勒级数校正使用;

3、可编程输入设置

图1.3.1 dds IP核参数配置

(1)Phase increment programmability(相位增量可编程性)
Fixed(固定模式);固定输出频率,不可任意调整;
Programmable(可编程模式);根据设计需求选择相位增量可编程模式,通过频率输出函数可知,输入不同相位增量时可输出不同频率,频率输出函数后面讲到;
Streaming(流水模式);

(2)Phase offset programmability
None(无);选择无相位偏移;
Fixed(固定模式);固定相位偏移;
Programmable(可编程模式);可以调整波形相位;
Streaming(流水模式);

(3)Output selection(输出选择)
Sine and cosine(正弦和余弦);如果用到正弦和余弦同时输出,则高8位表示正弦输出,低8位表示余弦输出;
Sine(正弦);选择正弦输出即可;
Cosine (余弦);

(4)Polarity (极性)没用上,不用选;
Negative sine(负极性正弦);
Negative cosine(负极性余弦);

(5)Implementation options(实现选项)
Memory type(内存类型:它控制SIN/COS查找表的实现):auto默认选择自动、distribution rom(分布rom)、block rom(块rom)
Optimization goal(优化目标:选择控制实现决策的目标是最高速度还是最低资源):auto默认选择自动、area(区域)、speed(速度)
DSP48 use(控制相位累加器和后续添加阶段(相位偏移或抖动噪声添加)的实现):minimal(默认最小)、maximal(最大)

4、详细的设置

图1.4.1 dds IP核参数配置

本页默认即可,在AXI Channel options下可以选择 output tready(输出正余弦数据有效信号)输出引脚;

Latency options(延迟选项:选择延迟是由GUI自动配置还是手动配置)
Auto (默认自动);
Configurable (手动);

Control signals(控制信号)
ACLKEN (时钟使能信号) ARESETN(复位信号,低有效)

5、输出频率设置

图1.5.1 dds IP核参数配置

Channel(通道) output frequency(输出频率)
根据之前选择为单通道输出,为了输出任意频率之前选择相位增量可编程模式,输出频率由相位增量决定,这里不设置输出频率;

6、配置总结

图1.6.1 dds IP核参数配置

Summary 总结,可以看到之前的各种配置参数;

7、输出增量和对应频率总结

图1.7.1 dds IP核参数配置

Additional summary 额外的总结,可以通过之前输入的输出频率看到每个通道数对应的16进制的相位增量,以及理论输出的频率,如果之前选择了相位偏移,还可以看到16进制的相位偏移增量以及相位增量值;

二、相关数据计算

1、DDS输出波形频率fout、相位增量∆Θ、频率分辨率∆f、相位位宽BΘ(n)相关函数计算
DDS输出波形频率fout是系统时钟频率fclk、相位累加器中的相位数据位宽BΘ(n) 和相位增量值∆Θ 的函数:

相位增量值∆Θ是输出波形频率fout、系统时钟频率fclk、相位累加器中的相位数据位宽BΘ(n) 的函数:

如果DDS核是时分多路复用做多个通道,那么每个通道的有效时钟频率减少。对于C个通道,所需相位增量为:

根据系统时钟频率fclk和相位累加器中的相位数据位宽BΘ(n) 可以得到频率分辨率∆f的函数:

相位位宽BΘ(n)是系统时钟频率fclk和频率分辨率∆f取对数的函数:

2、举例
系统时钟频率为125MHz,想要调整输出的频率为14.7456MHz,相位位宽设置为32位;

则fclk=125MHz,fout=14.7456MHz,BΘ(n)=32;通过上述函数计算出来的∆Θ值取四舍五入,再转换为16进制数后得到1E32F0EE,将该16进制数通过创建的dds IP核输入后,通过创建好的工程输出到外部通过示波器测得输出值;

三、工程实现

将创建好的dds IP核例化到创建的dds_wave模块当中,将dds IP核输出的信号sin_reg[7:0]给到sin输出;
assign sin = {~sin_reg[7],sin_reg[6:0]};

这里为什么要将最高位取反呢?因为如果不取反得到的就不是标准的正弦波,通过仿真可以看到输出结果,在我们改变相位增量时,对应的输出波形频率也发生了改变,由于外部没有DAC的情况,无法通过示波器测得输出的正弦波,本次工程主要是要实现任意频率的输出,因此就提取sin[7]来作为输出可以反映整个波形的频率;

图3.1.1 正弦输出仿真

四、dds IP核内部架构简介

1、dds IP核核心架构

图4.1.1 dds核心架构

DDS IP核核心架构:内部主要由相位发生器和正余弦查找表构成,相位发生器由一个累加器和一个可选的加法器组成相位偏移量的加法。当核心被定制时,相位增量(PINC)和相位偏移(POFF)可以独立配置为固定,可编程(使用配置通道)或流(使用输入相位通道)。

2、DDS编译器核心的标准模式使用相位截断

图4.2.1相位截断DDS (DDS核心简化图)

通过输入一个相位增量Δθ,积分器(D1和A1分量)计算相位斜率,通过查找表T1映射到一个正弦(可能是复数)。Q1是一个切片器,可以把高精度的相位切片至低精度的相位。量化器Q1的输入是高精度的相位,然后输出量化后精度较低的相位。然后该信号出现在查找表的地址端口,实现相位空间到时间的映射。
查找表的深度和宽度分别影响信号的相角分辨率和振幅分辨率。
直接数字合成器使用具有适当查找表的寻址方案来形成任意频率正弦信号的样本。如果需要模拟输出,DDS将这些样本提供给数字-模拟转换器(DAC)和低通滤波器,以获得具有特定频率结构的模拟波形。当然,样本也通常直接用于数字领域。查找表传统上存储均匀间隔的余弦波和正弦波的样本。

五、DDS IP相关资料

更多关于dds IP核的设置与使用可以查找相关文档;

Vivado关于dds IP核实现任意频率的正余弦波输出相关推荐

  1. Vivado调用DDS IP核实现扫频信号

    一.实验目的 1.熟悉 FPGA 硬件开发平台. 2.学习 DDS IP 核的调用和配置. 3.熟悉 Vivado 的操作流程. 4.掌握 Verilog HDL 的基本语言逻辑. 二.实验仪器 FP ...

  2. 【FPGA】 十二、Vivado DDS IP核实现扫频信号

    文章目录 前言 一.DDS IP核概述 二.DDS IP核配置 三.调用DDS IP核 总结 前言 在我前面的工程中,都是一些比较通用的设计工程,没有用到哪一家的IP核,所以代码具有很好的移植性:今天 ...

  3. 3.3 调用IP核实现多数表决器

    调用IP核实现多数表决器 1 使用74x138实现多数表决器的设计 2 构建新工程并调用IP核 该文档的MOOC的视频教程 数字电路中译码器三输入的译码器可以实现任意三输入的逻辑函数,所以三变量的多数 ...

  4. 征战FPGA之使用clk_wiz的IP核获取任意频率时钟

    一.前言 clk时钟在FPGA开发中具有举足轻重的作用,不管是串口UART,HDMI还是对各种视频编码芯片的驱动等都用到了clk.最近也在学习FPGA的跨时钟域,因此想着先学习一下FPGA的时钟生成. ...

  5. FPGA设计心得(9)基于DDS IP核的任意波形发生器设计

    博文目录 写在前面 正文 设计要求 IP核配置 定制输出数据位宽 定制相位位宽(或频率分辨率) 输出频率 输出正余弦选择以及数据格式 其他设置 电路设计 行为仿真 参考资料 交个朋友 写在前面 数据手 ...

  6. vivado 使用DDS IP方法

    网上一些代码写的不是很清楚,在我学习的时候造成了很大困扰,因此我将我学习过程中的一点想法以及代码放在这里,对于不明白如何使用DDS乃至IPcore的初学者朋友,这篇文章也许能帮助到你. 生成DDS I ...

  7. Silex Insight 在 FPGA 中为 ChaCha20-Poly1305 IP 核实现了 100Gbps

    Silex Insight 表示,它的 ChaCha20-Poly1305 硬件加密引擎实现了破纪录的速度,在 ASIC 中管理 800Gbps,在 FPGA 中管理 100Gbps.其符合RFC75 ...

  8. 【FPGA】调用IP核实现心形波

    心形函数 具体的matlab代码: % 定义匿名函数 a= 16; f=@(x)real(abs(x)^(2/3) + 0.9*sqrt(3.3-x^2) * sin(a*pi*x));%把离散的整数 ...

  9. 浅谈DDS IP核之频率控制字与相位控制字

    1.概述 本文是用于记录vivado中DDS IP核输出任意频率,与任意相位的关键点,即频率控制字与相位控制字的设置. 2.参考文档 <pg141-dds-compiler> <基于 ...

最新文章

  1. linux tmux离线安装,linux环境下安装tmux
  2. labview生成HTML报表,LabVIEW201
  3. 全球及中国磁性分离滑轮行业竞争战略及未来产销需求预测报告2022版
  4. 注册demo,使用jQuery异步验证账号是否存在
  5. 设置DIV半透明CSS代码:
  6. Kali Linux 网络扫描秘籍 第四章 指纹识别(三)
  7. java mp4转码 h264_10分钟学会Jave视频转码avi--gt;mp4(h264编码格式)!_Java_七九推...
  8. MyBatis的分页插件PageHelper的使用
  9. 如何将pdf文件转换成可以编辑的文档
  10. 怎么给批处理(bat)添加注释
  11. opencv实际案例(一)银行卡号的识别
  12. java使用极光推送_java使用第三方推送-极光推送
  13. uniapp实现设备对接wifi功能
  14. flex横向纵向间距,自适应排列
  15. 普通云硬盘,高性能云硬盘和SSD云硬盘三者之间有什么区别?
  16. 常见编程错误及解决方法,避免踩雷
  17. 有没有可以测试手速的软件,我的第一个Mac小程序 — 手速测试器
  18. java安装_Java编程语言的历史和未来
  19. Java代码是如何运行的?
  20. 软件测试工程师的职业发展路线?

热门文章

  1. Lua语法 垃圾回收collectgarbage
  2. 全栈工程师到底有什么用
  3. 关联式容器使用char*充当key或者value的时候
  4. 台式计算机怎么查是32位还是64位,如何判断电脑是32位还是64位
  5. SVDNet for Pedestrian retrieval
  6. Netty入门-第二话
  7. 关于“强人老大为什么做不好CEO”现象的领导力作业案例回答
  8. vue 根据文件格式显示不同的图标
  9. 江南大学物联网大创项目
  10. 基于C#实现的巧移火柴棍(火柴棍移动)