当前位置: 首页 > news >正文

vivado DDS学习

     实现DDS通常有两种方式,一种是读取ROM存放的正弦/余弦信号的查表法,另一种是用DDS IP核。这篇学习笔记中,我们要讲解说明的是VIVADO DDS IP核的应用。 目前本篇默认Phase Generator and SIN/COS LUT(DDS)的standard模式,至于其他模式,目前没有研究使用过,没有话语权,以后研究明白再来续写。

一、DDS IP配置

        下面的配置说明都是本人参考技术手册加上自己的理解,可能会有误解的地方,追求原汁原味的知识点的话还是去看技术手册。

Configuration Tab

Configuration Options:

        1.Phase Generator and SIN/COS LUT

        2.Phase Generator only

        3.SIN/COS LUT only

               从配置选项的名字就能够清晰的看出每种选项代表的功能,但是有必要注意的是 Phase Generator and SIN/COS LUT才是DDS。

                Phase Generator:如上图所示,Phase Generator由一个accumulator和一个可选的adder组成,以提供相位偏移的附加。在制定IP核时,相位增量(PINC)和相位偏移(POFF)可以被配置为fixed、programmable(用config 通道)或者streaming(用phase通道)三种模式。          

                SIN/COS LUT:当仅配置为SIN/COS LUT,不生成Phase Generator时PHASE_IN信号通过phase通道输入,并使用look-up table(LUT)转化为sine和cosine信号。IP核可以配置为仅sine输出,仅cosine输出或两者(正交)都输出,每个输出都可以独立配置为反向输出。可使用可选的Taylor series correction(泰勒级数校正)增加精度。

                Phase Generator and SIN/COS LUT:Phase Generator与SIN/COS LUT一起使用可以组合成为phase truncated DDS(相位截位DDS)或Taylor series correction DDS(泰勒级数校正DDS),也可以在两个块之间添加一个可选的dither generator组合成phase dithered DDS(相位抖动DDS)。

System Clock:DDS核心的时钟频率。其实就是输出信号的采样率

Number of Channels:最多支持16个通道,这些通道时间被复用,这降低了每个信道的有效时钟频率。开启多个通道相当于降低采样率

Mode of Operation:有standard和rasterized两种模式选择。(目前默认讲解standard

Frequency per Channel (Fs):由于分时复用,每个信道的有效时钟是System clock除以Number of Channels

Parameter Selection:DDS关键参数可以使用System parameters来指定,这些参数针对系统架构师(频域参数),也可以使用Hardware parameters,主要针对硬件工程师(时域参数)。这个条件下
Phase Generator和SIN/COS LUT仅根据Hardware parameters指定。

        System parameters:如上图System parameters界面,

                1.Spurious Free Dynamic Range(SFDR):DDS产生信号的质量,用于设置输出宽度以及内部总线宽度和各种实现决策。

                2.Frequency Resolution设置最小频率分辨率,并用于确定相phase accumulator及其相关的相位增量(PINC)和相位偏移(POFF)值所使用的相位宽度(Phase Width)。值越小,分辨率越高,需要更大的累加器。通过选择Noise Shaping可以使Phase Width增加,频率分辨率比指定的更高,

                3.Noise Shaping控制是否使用相位截位(phase truncation)、抖动(dithering)或Taylor series correction(泰勒级数校正)。None:Phase truncation DDS。Dithering:相位抖动用于改善SFDR,但代价是增加本底噪声。Taylor Series Corrected:相位截位中丢弃的bit对Sine/cosine进行插值。Auto:根据SFDR等System parameters自动确定Noise Shaping。

        Hardware parameters:如上图Hardware parameters界面。

                1.Phase Width:设置m_axis_phase_tdata中PHASE_OUT字段的宽度。

                2.Output Width:只有在选择DDS或SIN/COS LUT部件时才启用,因为Phase

                 Generator不需要它,用来设置在m_axis_data_tdata中设置SINE和COSINE字段的宽

                度。它提供的SFDR取决于Noise Shaping 的选项,计算方式如图:

Implementation Tab

Phase Increment Programmability:选择设置PINC值的方法。
Phase Offset Programmability:选择设置POFF值的方法。
对于这些选项在上面介绍 Phase Generator时提到过,现在再来细说一下。
        Programmable:使用CONFIG通道更改PINC和POFF,对于 configuration inputs(s_axis_config_t*),输入和输出的延时是不固定的。建议当DDS的频率和相位在不同的操作模式之间切换时使用。
顺势,我们讲讲 CONFIG Channel。
        要对CONFIG通道进行编程,必须进行N次传输,其中N是通道的数量。 按顺序从通道0开始的每个通道在每次传输时都包含 PINC或(和)POFF值。在最后一次传输时,对于通道(N-1)必须断言TLAST,如果不这样做,将导致event_s_config_tlast_missing或event_s_config_tlast_unexpected输出断言一个时钟周期。数据包只有在完成时才被视为收到。只有在完全接收到它时,它才有资格用于挂起同步事件( 同步事件在这里不说了,没有仔细研究过)。如图3-18所示,在第一个编程周期中,不正确地应用了TLAST,因此触发了事件输出。
第二个编程周期显示了TLAST的正确应用。
当核心配置为单通道操作时,不需要TLAST,并且引脚不存在于CONFIG通道上。
        再讲CONFIG Channel TDATA Structure。
        当CONFIG通道为每个通道提供PINC和POFF值时,每个字段被符号扩展,以适应字节边界,也就是以8bit为单位。例如,对于11位的phase width,PINC将占用10:0位,而POFF将占用26:16位。因此s_axis_config_tdata的总体值为31:0。以下配置的示例宽度结构如图3-19所示:
Streaming:使用PHASE通道更改PINC和POFF,对于 streaming inputs( s_axis_phase_t* ),输入和相关的输出有最小的延迟。建议当DDS的频率和相位需要经常改变时使用。
顺势,我们讲讲 Input PHASE Channel。
输入Phase通道用于DDS编译器执行一个动态功能,如相位或频率调制,每个输入样本都会有一个输出样本的应用程序。事实上,在输入和输出之间存在一对一的关系意味着输出Phase通道上的 TREADY无效会导致输入Phase通道上的TREADY也无效( 两者延时根据内部buffer的容量决定)。同样,Phase通道上输入数据的TVALID无效会导致输出通道上的TVALID无效。
        再讲Input PHASE Channel TDATA Structure。
        当Phase_Width = 11时,s_axis_phase_tdata的结构如图3-20所示:

Resync:选中后,s_axis_phase通道有一个RESYNC字段。当断言这个位元时,重置通道上积累的相位。在这个周期的累积相位的值是伴随RESYNC断言的PINC值加上POFF值。如图所示。
Output_Selection:DDS可以在m_axis_data_tdata总线中有一个SINE和COSINE字段,或者只有这两个字段中的一个。图3-22显示了三种配置的TDATA内部结构;quadratureoutputs, cosine only and sine only。例如,图中显示了一个11位的输出,符号扩展到16位,<<<表示符号扩展。

Detailed Implementation Tab

ARESETn:当选中时,IP核有一个 aresetn (active-Low同步复位)端口。aresetn必须拉低 至少两个周期来复位IP核。
至此,重要的配置就讲到这,后面如有技术深耕,再回来补充。接下来讲述一个实际使用的例子。

举例:

DDS IP核配置如下:
按照以上配置,就产生了一个系统时钟(采样率)是100M,单通道,相位输出位宽32bit,sine(16bit)和cosine(16bit)同时输出,用phase通道对PINC和POFF进行配置,带有aresetn的DDS。
dds_compiler_0 your_instance_name (.aclk(aclk),                                // input wire aclk.aresetn(aresetn),                          // input wire aresetn.s_axis_phase_tvalid(s_axis_phase_tvalid),  // input wire s_axis_phase_tvalid.s_axis_phase_tdata(s_axis_phase_tdata),    // input wire [63 : 0] s_axis_phase_tdata.m_axis_data_tvalid(m_axis_data_tvalid),    // output wire m_axis_data_tvalid.m_axis_data_tdata(m_axis_data_tdata),      // output wire [31 : 0] m_axis_data_tdata.m_axis_phase_tvalid(m_axis_phase_tvalid),  // output wire m_axis_phase_tvalid.m_axis_phase_tdata(m_axis_phase_tdata)    // output wire [31 : 0] m_axis_phase_tdata
);
计算输出频率的公式如图。
根据这个公式,按照我们举例生成的DDS要是想生成一个1M的信号,则需要输入PINC=1*2^32/100='h28F_5C29,POFF根据需求来设置。

拓展延申

如果在此基础上,要求改变系统的采样率为2400M,要求输出一个600M的信号要怎么做呢?系统时钟不可能直接提供一个2400的时钟,DDS IP核最高接受1000M的时钟,但是FPGA也没法使用这么快的时钟。怎么办呢? 采用多个此DDS同时输出信号来提高采样率
第一个问题,提高采样率。
一个DDS的采样率是100M,要并行24路才能达到2400M的采样率。
第二个问题,输出600M信号。
按照上面的计算公式,DDS要输出600M,PINC=600*2^32/100='h6_0000_0000。
第三个问题,24路如何输出一个连续信号?
其实就是把每个阶段的相位增量(PINC)平均分给24个DDS,DDS从第1个开始依次输出的信号相位为PINC+POFF,PINC+POFF+POFF,PINC+POFF+POFF+POFF……一直到第24个DDS。如下图,24个DDS输出24个点。
附上代码:
genvar i;
generatefor(i=0; i<channal; i=i+1)begin:channal_i       always @(posedge clk or posedge rst)beginif(rst)beginPINC[i] <= 'h0;    POFF[i] <= 'h0;    s_axis_phase_tvalid[i] <= 1'b0;end    else beginPINC[i] <= PINC_adjust;POFF[i] <= (PINC_adjust/channal)*i;      s_axis_phase_tvalid[i] <= 1'b1;         endend dds_compiler_0 dds_compiler_0 (.aclk(clk),                                .aresetn(aresetn),                          .s_axis_phase_tvalid(s_axis_phase_tvalid[i]),  .s_axis_phase_tdata({POFF[i],PINC[i]}),    .m_axis_data_tvalid(m_axis_data_tvalid[i]),.m_axis_data_tdata({sine[i],cosine[i]}), .m_axis_phase_tvalid(m_axis_phase_tvalid[i]), .m_axis_phase_tdata(m_axis_phase_tdata[i]) );end
endgenerate

相关文章:

vivado DDS学习

实现DDS通常有两种方式&#xff0c;一种是读取ROM存放的正弦/余弦信号的查表法&#xff0c;另一种是用DDS IP核。这篇学习笔记中&#xff0c;我们要讲解说明的是VIVADO DDS IP核的应用。 目前本篇默认Phase Generator and SIN/COS LUT&#xff08;DDS&#xff09;的standard模式…...

微信小程序(十六)slot插槽

注释很详细&#xff0c;直接上代码 上一篇 温馨提醒&#xff1a;此篇需要自定义组件的基础&#xff0c;如果不清楚请先看上一篇 新增内容&#xff1a; 1.单个插槽 2.多个插槽 单个插糟 源码&#xff1a; myNav.wxml <view class"navigationBar custom-class">…...

gtest 单元测试

文章目录 前言一、Google Test介绍1.1 gtest源码下载编译1.2 常用API介绍1.3 gtest运行参数介绍 二、Google Mock参考资料 前言 Google Test&#xff08;简称gtest&#xff09;是一个开源的C单元测试框架。和常见的测试工具一样&#xff0c;gtest提供了单体测试常见的工具和组…...

掌握assert的使用:断言在错误检查和调试中不可或缺

断言在错误检查和调试中不可或缺 一、简介二、断言的基本语法和用法三、错误检查与断言四、 调试与断言五、避免滥用断言六、总结 一、简介 断言是一种在程序中用于检查特定条件是否满足的工具。一般用于验证开发者的假设&#xff0c;如果条件不成立&#xff0c;就会导致程序报…...

概念杂记--到底啥是啥?(数据库篇)

文章目录 1.聚集索引&#xff08;clustered index&#xff09;2.非聚集索引&#xff08;Non-clustered index&#xff09;3.聚集索引和非聚集索引区别&#xff1f;4.覆盖索引&#xff08;covering index&#xff09;5、复合索引 &#xff08;Composite Index&#xff09;6.索引…...

Ubuntu20.4 Mono C# gtk 编程习练笔记(四)

连续实时绘图 图看上去不是很清晰&#xff0c;KAZAM录屏AVI尺寸80MB&#xff0c; 转换成gif后10MB, 按CSDN对GIF要求&#xff0c;把它剪裁缩小压缩成了上面的GIF&#xff0c;图像质量大不如原屏AVI&#xff0c;但应该能说明原意&#xff1a;随机数据随时间绘制在 gtk 的 drawin…...

1 月 26日算法练习

文章目录 九宫幻方穿越雷区走迷宫 九宫幻方 小明最近在教邻居家的小朋友小学奥数&#xff0c;而最近正好讲述到了三阶幻方这个部分&#xff0c;三阶幻方指的是将1~9不重复的填入一个33的矩阵当中&#xff0c;使得每一行、每一列和每一条对角线的和都是相同的。 三阶幻方又被称…...

今日AI大热潮,明日智能风向标

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

03 SB实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)

1.1 自动展示所有信息 需求描述: 进入新闻首页portal/findAllType, 自动返回所有栏目名称和id 接口描述 url地址&#xff1a;portal/findAllTypes 请求方式&#xff1a;get 请求参数&#xff1a;无 响应数据&#xff1a; 成功 {"code":"200","mes…...

Abaqus许可分析工具

在当今的知识产权保护和许可管理领域&#xff0c;一款高效、精准的许可分析工具对于企业来说至关重要。Abaqus许可分析工具凭借其强大的功能和卓越的性能&#xff0c;成为了企业优化知识产权许可管理的得力助手。 一、Abaqus许可分析工具的核心优势 1.全面性&#xff1a;Abaqus…...

【开发工具】从eclipse到idea的过度

背景 随着eclipse相比以前性能慢了不少&#xff0c;idea在开发工具领域越战越猛&#xff0c;市场份额也逐年增加&#xff0c;其体验得了软件工程师的热爱。 概要 本文只是做了一个简要的记录&#xff0c;简单描述下本人从eclipse到idea的过度的心态。 正文 在大厂都会研发自…...

【QT+QGIS跨平台编译】之十一:【libzip+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、libzip介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libzip介绍 libzip是一个开源C库,用于读取,创建和修改zip文件。 libzip可以从数据缓冲区,文件或直接从其他zip归档文件直接复制的压缩数据中添加文件。在不关闭存档的情况下所做的更改可以还原…...

openlayers+vue实现缓冲区

文章目录 前言一、准备二、初始化地图1、创建一个地图容器2、引入必须的类库3、地图初始化4、给地图增加底图 三、创建缓冲区1、引入需要的工具类库2、绘制方法 四、完整代码总结 前言 缓冲区是地理空间目标的一种影响范围或服务范围,是对选中的一组或一类地图要素(点、线或面…...

(大众金融)SQL server面试题(3)-客户已用额度总和

今天&#xff0c;面试了一家公司&#xff0c;什么也不说先来三道面试题做做&#xff0c;第三题。 那么&#xff0c;我们就开始做题吧&#xff0c;谁叫我们是打工人呢。 题目是这样的&#xff1a; DEALER_INFO经销商授信协议号码经销商名称经销商证件号注册地址员工人数信息维…...

c语言笔记

1. c语言部分算法列举 1.1 找数 二分查找&#xff08;前提是数据必须有序&#xff09; 1.2 求极值 1.3 数组逆序 1.4 排序法&#xff08;***重点***&#xff09; 1.4.1 选择排序法 1.4.2 冒泡排序法 1.4.3 插入排序法 2. 字符型数组 2.1 使用格式 char s[10]; …...

6轴机器人运动正解-逆解控制【1】——三种控制位姿的方式

概览&#xff1a; 通过运动学正解控制机器人运动通过运动学逆解控制机器人运动一个简单的物体搬运&#xff08;沿轨迹运动&#xff09; 后续会陆续更新&#xff08;本例仅供学习交流用&#xff09; 一、6轴机器人 二、运动正解控制 通过修改各个轴的角度&#xff0c;实现末…...

c# Microsoft UI Automation

Microsoft UI Automation&#xff08;UIA&#xff09;是一种用于自动化Windows应用程序用户界面&#xff08;UI&#xff09;的框架。它允许开发人员编写自动化测试脚本、辅助技术应用程序和其他需要与应用程序交互的工具。以下是一些关于Microsoft UI Automation的重要信息&…...

C#-前后端分离连接mysql数据库封装接口

C#是世界上最好的语言 新建项目 如下图所示选择框红的项目 然后新建 文件夹 Common 并新建类文件 名字任意 文件内容如下 因为要连接的是mysql数据库 所以需要安装 MySql.Data.MySqlClient 依赖; using MySql.Data.MySqlClient; using System.Data;namespace WebApplication1.…...

yolov8 opencv dnn部署自己的模型

源码地址 本人使用的opencv c github代码,代码作者非本人 使用github源码结合自己导出的onnx模型推理自己的视频 推理条件 windows 10 Visual Studio 2019 Nvidia GeForce GTX 1070 opencv4.7.0 (opencv4.5.5在别的地方看到不支持yolov8的推理&#xff0c;所以只使用opencv…...

插槽(64-67)

文章目录 插槽1.插槽 - 默认插槽(组件内可以定制一处结构)2.插槽 - 后备内容&#xff08;默认值&#xff09;3.插槽 - 具名插槽(组件内可以定制多处结构)4.作用域插槽(插槽的一个传参语法) 插槽 插槽分类:默认插槽和具名插槽 1.插槽 - 默认插槽(组件内可以定制一处结构) 作用…...

C# LING查询语法学习,扩展方法的使用

class Program { #region 示例1&#xff1a;不使用LINQ查询数组 //static void Main(string[] args) //{ // int[] nums { 1, 7, 2, 6, 5, 4, 9, 13, 20 }; // List<int> list new List<int>(); // foreach (int item in nums) …...

自然语言推断:微调BERT

微调BERT 自然语言推断任务设计了一个基于注意力的结构。现在&#xff0c;我们通过微调BERT来重新审视这项任务。自然语言推断是一个序列级别的文本对分类问题&#xff0c;而微调BERT只需要一个额外的基于多层感知机的架构&#xff0c;如下图中所示。 本节将下载一个预训练好的…...

立创EDA学习:设计收尾工作

布线整理 ShiftM&#xff0c;关闭铺铜显示 调整结束后再使用快捷键”ShiftM“打开铺铜 过孔 在空白区域加上一些GND过孔&#xff0c;连接顶层与底层的铺铜。放置好”过孔“后&#xff0c;隐藏铺铜&#xff0c;观察刚才放置的过孔有没有妨碍到其他器件 调整铺铜 先打开铺铜区&…...

ShardingSphere之ShardingJDBC客户端分库分表上

目录 什么是ShardingSphere&#xff1f; 客户端分库分表与服务端分库分表 ShardingJDBC客户端分库分表 ShardingProxy服务端分库分表 ShardingSphere实现分库分表的核心概念 ShardingJDBC实战 什么是ShardingSphere&#xff1f; ShardingSphere是一款起源于当当网内部的应…...

rust for循环步长-1,反向逆序遍历

fn main() {for i in (0..3).rev().step_by(1) {print!("{}", i);} } // 打印结果&#xff1a;210Trait std::iter::Iterator fn rev(self) -> Rev< Self > where Self: Sized DoubleEndedIteratorfn step_by(self, step: usize) -> StepBy< Self &…...

编译与运行环境(C语言)

文章目录 前言编译环境编译链接 运行环境 前言 C语言代码的实现&#xff0c;存在两种不同的环境。 第一种是翻译环境&#xff0c;在这个环境中&#xff0c;源代码被转换为可执行的二进制指令。 翻译环境即我们日常使用编译器&#xff0c;将一个 " mission.c " 的文件…...

再谈Android View绘制流程

一&#xff0c;先思考何时开始绘制 笔者在这里提醒读者&#xff0c;Android的View是UI的高级抽象&#xff0c;我们平时使用的XML文件也好&#xff0c;本质是设计模式中的一种策略模式&#xff0c;其View可以理解为一种底层UI显示的Request。各种VIew的排布&#xff0c;来自于开…...

分布式定时任务系列8:XXL-job源码分析之远程调用

传送门 分布式定时任务系列1&#xff1a;XXL-job安装 分布式定时任务系列2&#xff1a;XXL-job使用 分布式定时任务系列3&#xff1a;任务执行引擎设计 分布式定时任务系列4&#xff1a;任务执行引擎设计续 分布式定时任务系列5&#xff1a;XXL-job中blockingQueue的应用 …...

python+Qt5 UOS 摄相头+麦克风测试,摄相头自动解析照片二维条码,麦克风解析音频文件

UI图片&#xff1a; 源代码&#xff1a; # -*- coding: utf-8 -*-# Form implementation generated from reading ui file CameraTestFrm.ui # # Created by: PyQt5 UI code generator 5.15.2 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is…...

MongoDB日期存储与查询、@Query、嵌套字段查询实战总结

缘由 MongoDB数据库如下&#xff1a; 如上截图&#xff0c;使用MongoDB客户端工具DataGrip&#xff0c;在filter过滤框输入{ profiles.alias: 逆天子, profiles.channel: }&#xff0c;即可实现昵称和渠道多个嵌套字段过滤查询。 现有业务需求&#xff1a;用Java代码来查询…...

wordpress 产生大量首页/免费的seo网站下载

原文地址:http://czmmiao.iteye.com/blog/1478465 Hint概述 基于代价的优化器是很聪明的&#xff0c;在绝大多数情况下它会选择正确的优化器&#xff0c;减轻了DBA的负担。但有时它也聪明反被聪明误&#xff0c;选择了很差的执行计划&#xff0c;使某个语句的执行变得奇慢无…...

厦门网站建设公司/成都官网seo厂家

知识点:掌握类的构造方法、 掌握方法重载、 掌握对象之间的通信 1、构造方法 1.1 什么是构造方法 构造方法又叫构造函数,它是一种特殊的方法,因为构造方法本身没有返回值,并且通常是public访问类型,方法的名称必须与类名相同。构造方法在类实例创建之前执行,用来初始…...

武汉品牌网站建设公司哪家好/seo全网优化指南

let arr [{a:1},{a:2},{a:3},{a:4},{a:5}];// 1.while循环 let sum 0; let num 1; while(num < 1){ if (num 5) { num; continue // containue必须写在后面,否则会进入死循环,因为在while中continue之后,是执行条件判断 // break // 支持break …...

企业局域网的组建与网站建设论文/营销方案案例范文

今天分享一份来自中国移动的《5G落地&#xff1a;应用融合与创新》。如需下载《5G落地&#xff1a;应用融合与创新》&#xff0c;请扫码前往我们公众号对话框回复“落地”。ps&#xff1a;链接有效期至3月5日&#xff0c;建议尽快下载保存哦&#xff01;编辑&#xff1a;陈颖思…...

查找手机网站/代写文章

Python教程全套&#xff0c;现在分享给大家&#xff0c;入门到精通(Python全栈开发教程) 黑马程序员Python教程_600集Python从入门到精通教程 [小甲鱼]零基础入门学习Python 更多资料请关注公众号&#xff1a;计算机视觉与图形学实战 Python教程全套&#xff0c;现在分享给大…...

做泵阀生意到哪个网站/2019网站seo

java-8 http://www.oschina.net/translate/everything-about-java-8...