LVDS系列8:Xilinx 7系可编程输入延迟(一)

news2025/4/22 0:38:06

在解析LVDS信号时,十分重要的一环就是LVDS输入信号线在经过PCB输入到FPGA中后,本来该严格对齐的信号线会出现时延,所以需要在FPGA内部对其进行延时对齐后再进行解析。
Xilinx 7系器件中用于输入信号延时的组件为IDELAYE2可编程原语,通过可以编程的32抽头延迟线、环绕式延迟实现信号延迟。
原语可用于组合输入路径、寄存器输入路径、FPGA逻辑直接访问;可以对单个输入引脚进行信号延迟。原语的抽头延迟分辨率也就是延时精度由IDELAYCTRL原语控制。

 IDELAYE2框图:
在这里插入图片描述
 IDELAYE2例化:
(* IODELAY_GROUP = <iodelay_group_name> *) // Specifies group name for associated IDELAYs/ODELAYs and IDELAYCTRL

IDELAYE2 #(
.CINVCTRL_SEL(“FALSE”), // Enable dynamic clock inversion (FALSE, TRUE)
.DELAY_SRC(“IDATAIN”), // Delay input (IDATAIN, DATAIN)
.HIGH_PERFORMANCE_MODE(“FALSE”), // Reduced jitter (“TRUE”), Reduced power (“FALSE”)
.IDELAY_TYPE(“FIXED”), // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE
.IDELAY_VALUE(0), // Input delay tap setting (0-31)
.PIPE_SEL(“FALSE”), // Select pipelined mode, FALSE, TRUE
.REFCLK_FREQUENCY(200.0), // IDELAYCTRL clock input frequency in MHz (190.0-210.0, 290.0-310.0).
.SIGNAL_PATTERN(“DATA”) // DATA, CLOCK input signal
)
IDELAYE2_inst (
.CNTVALUEOUT(CNTVALUEOUT), // 5-bit output: Counter value output
.DATAOUT(DATAOUT), // 1-bit output: Delayed data output
.C©, // 1-bit input: Clock input
.CE(CE), // 1-bit input: Active high enable increment/decrement input
.CINVCTRL(CINVCTRL), // 1-bit input: Dynamic clock inversion input
.CNTVALUEIN(CNTVALUEIN), // 5-bit input: Counter value input
.DATAIN(DATAIN), // 1-bit input: Internal delay data input
.IDATAIN(IDATAIN), // 1-bit input: Data input from the I/O
.INC(INC), // 1-bit input: Increment / Decrement tap delay input
.LD(LD), // 1-bit input: Load IDELAY_VALUE input
.LDPIPEEN(LDPIPEEN), // 1-bit input: Enable PIPELINE register to load data input
.REGRST(REGRST) // 1-bit input: Active-high reset tap-delay input
);

 IDELAYE2例化端口:
在这里插入图片描述
端口列表如上图:
C:时钟输入,原语的所有控制输入(如REGRST、LD、CE、INC)都与该时钟输入同步。当该原语配置为VARIABLE, VAR_LOAD和VAR_LOAD_PIPE模式时,该端口必须连接有效时钟。且该时钟必须由全局或区域时钟缓冲器提供。
REGRST:寄存器同步复位信号,当复位置1时,将原语内部流水线寄存器置0,仅在
VAR_LOAD_PIPE模式下使用。
LD:加载抽头值,LD端口置1有效,且与输入时钟C同步;
在VARIABLE模式下,IDELAY置高LD端口会加载IDELAY_VALUE参数端口设置的抽头值作为新的延时值,此时LD端口可当作IDELAY的复位信号,拉高LD后延时抽头值将设置为IDELAY_VALUE参数的值。
在VAR_LOAD模式下,IDELAY会加载由CNTVALUEIN端口设置的抽头值作为新的延时值。
在VAR_LOAD_PIPE模式下,IDELAY会加载当前在流水线寄存器中的抽头值作为新的延时值。
CE:控制INC端口作为抽头值增量或减量的使能,就是CE有效,INC端口的值才能生效。且该端口只在VARIABLE, VAR_LOAD, VAR_LOAD_PIPE这三个模式下使用。
INC:抽头延迟的增量减量,搭配CE使用,只有当CE为高时,INC才有效,当CE为低时INC值不起作用,其中INC=1时抽头值递增,INC=0时抽头值递减,且INC和CE都与时钟C同步,且当CE保持高,每个C的时钟周期,根据INC的值设置,抽头值会在下一个时钟C的上升沿开始进行抽头值的递增递减操作;
IDELAYE2原语的可编程延迟抽头会执行环绕操作,原语的延迟抽头值为0~31共32个数,环绕是指当抽头值当前到达边界,如0或31,在0时如果递减,抽头值将变为31,在31时如果递增,抽头值将变为0;
且信号的延时也只有32个选项,例如对一个信号从延时抽头值0开始一直做INC递增的延时操作,当抽头值到达31,递增1后,抽头值到0,此时这个抽头值0的信号延时与最开始抽头值初始为0的延时是相同的,而不是指从31递增到0后,信号延时在延时抽头值31的延时基础上又往后延迟了一个抽头的延时,这就是该原语的环绕操作。
CINVCTRL:动态控制输入时钟C的极性,且在切换极性时,两个时钟周期内不要控制IDLEAY原语的控制端口。
CNTVALUEIN:用于动态切换加载的抽头值。
IDATAIN:IDATAIN端口输入来自IOB,该输入数据由IOB中的IBUF驱动,也就是FPGA的管脚输入的信号,对FPGA的外部输入信号作延时。
DATAIN:DATAIN端口输入来自FPGA逻辑,该端口为内部逻辑提供了可访问的延迟线。
LDPIPEEN:流水线寄存器加载,当该端口为1时,会把当前CNTVALUEIN引脚上的抽头值加载到管道寄存器中。
DATAOUT:来自两个数据输入端口的延迟数据,延时后的输出数据线可以连接到ILOGIC、ISERDES组件或是FPGA逻辑。
CNTVALUEOUT:该端口用于报告此时输出的延迟数据加载的延迟抽头值。

 IDELAYE2例化参数:
在这里插入图片描述
在这里插入图片描述
上图为原语的例化参数:
IDELAY_TYPE:设置IDELAY原语的延迟的工作模式,有FIXED, VARIABLE, VAR_LOAD,
VAR_LOAD_PIPE四种可选模式;
设置为FIXED模式时,抽头延迟值由参数IDELAY_VALUE的值确定,且该值是预设的,配置后无法更改;
设置为VARIABLE模式时,抽头延迟可选,设置CE=1和INC=1增加抽头延迟,设置CE=1和INC=0减少抽头延迟,递增递减操作与C时钟同步;
设置为VAR_LOAD模式时,置高LD端口,原语将立即加载CNTVALUEIN端口的值作为新的抽头延迟值,同时支持CE和INC协同的递增递减操作;
设置为VAR_LOAD_PIPE模式时,置高LDPIPEEN端口,原语将立即将CNTVALUEIN端口的值加载到原语内部的流水线寄存器中暂存,当置高LD端口,原语将立即加载流水线寄存器中的抽头值作为新的抽头延迟值(该模式一般用于多通道同步修改延迟的情况,同步性强,优化时序),同时支持CE和INC协同的递增递减操作。
DELAY_SRC:选择原语的输入数据源端口,可选值为IDATAIN和DATAIN,设置为IDATAIN时原语使用IDATAIN端口作为输入数据,数据来自IO引脚,设置为DATAIN时原语使用DATAIN端口作为输入数据,数据来自FPGA内部逻辑。
IDELAY_VALUE:指定了初始的抽头延迟数量,默认为0,可设置为0~31之间任意整数;
FIXED模式下,IDELAY_VALUE参数指定原语的抽头延时值;
VARIABLE模式下,IDELAY_VALUE值将作为延迟线的初始延时值,LD置高将会将原语的延迟重置为IDELAY_VALUE的值;
VAR_LOAD和VAR_LOAD_PIPE模式下,IDELAY_VALUE参数不被使用。
HIGH_PERFORMANCE_MODE:高性能模式选择参数,可选值为TRUE和FALSE,
TRUE模式降低抖动,降低抖动将会略微增加功耗,适用于高速场景,
FALSE降低功耗但抖动增加,适用于低速场景。
SIGNAL_PATTERN:数据输入的信号类型,可选值为DATA和CLOCK,由于时钟信号和数据信号有不同的电器特性,时钟信号具有周期性,而数据信号是随机的,两者在延迟链中积累的抖动量也不同,所以选择DATA(输入数据为数据信号)和CLOCK(输入数据为时钟信号),原语将会根据时钟和数据的电气特性的不同执行不同的抖动优化策略。
REFCLK_FREQUENCY:参考时钟频率,与IDELAYCTRL原语参考时钟需严格匹配,否则将会校准失败,范围为(190.0-210.0, 290.0-310.0),默认使用200.0,设置为200MHZ即可。
CINVCTRL_SEL:时钟动态反相的使能,输入时钟端口C是否可以反相,改参数搭配CINVCTRL端口使用,当参数设置为TRUE的同时将CINVCTRL端口置1可以将时钟C反相,当参数设置为FALSE时,时钟不会反相,CINVCTRL端口也将无法使用。
PIPE_SEL:仅在VAR_LOAD_PIPE模式下工作,控制流水线寄存器是否使用,设置为TRUE时启用流水线寄存器,FALSE时不启用流水线寄存器。

 例化约束:
Vivado的例化模板中IDELAYE2原语还有一行约束:
(* IODELAY_GROUP = <iodelay_group_name> *)
该约束可以定义IDELAYE2原语的组,可以将多个IDELAYE2和ODELAYE2原语与一个IDELAYCTRL原语绑定,确保它们共享同一个参考时钟并物理相邻,减少时钟偏差;
使用时同一组的IDELAYE2和ODELAYE2和IDELAYCTRL原语都约束指定为一个相同的组名即可。

 IDELAY工作模式:
IDELAY_TYPE参数设置工作模式,有FIXED, VARIABLE, VAR_LOAD,VAR_LOAD_PIPE:
FIXED固定延迟模式:
IDELAY_VALUE参数值将配置为延时值,配置后无法更改;
VARIABLE可变延迟模式:
在这里插入图片描述
由上表,该模式下,LD置1将加载IDELAY_VALUE参数值作为延时值;
CE和INC搭配执行当前延时值的递增递减操作,CE=1,INC=1递增,CE=1,INC=0递减;
其他输入延时值保持不变;
在这里插入图片描述
上图为VARIABLE模式下,IDELAY_VALUE参数值为0的时序:
时刻1,LD置1,原语加载为IDELAY_VALUE参数值,延时值DATAOUT变为tap0,
时刻2,CE=1,INC=1,延时值从0递增到1,从tap0变为tap1;

VAR_LOAD可加载变量延迟模式:
在这里插入图片描述
由上表,该模式下,
CE和INC搭配执行当前延时值的递增递减操作,同上条;
此时LD置1将加载CNTVALUEIN端口值作为延时值;
其他输入延时值保持不变;
在这里插入图片描述
上图为VAR_LOAD模式下的时序,
时刻1,LD置1,加载CNTVALUEIN端口的值2,延时值DATAOUT变为tap2,
时刻2,CE=1,INC=1,延时值从2递增到3,从tap2变为tap3,
时刻3,LD置1,加载CNTVALUEIN端口的值10,延时值DATAOUT变为tap10,

VAR_LOAD_PIPE可加载变量流水线寄存延迟模式:
该模式与VAR_LOAD模式类似,
CE和INC执行递增递减;
不同的是LD的操作,该模式下LD置1将加载内部流水线寄存器值作为延时值,
流水线寄存器则是在LDPIPEEN端口置1时,将CNTVALUEIN端口的值加载到寄存器中;

下节讲解IDELAYCTRL原语和IDELAYE2的搭配使用;
本文章由威三学社出品
对课程感兴趣可以私信联系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2339757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Oracle专栏】函数中SQL拼接参数 报错处理

Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 最近同事反馈了一个很奇怪的问题,即有一个函数,入参是当前年月,主要作用是通过SQL语句将不合规的数据插入到指定表中,插入数据时带上入参的年月参数。当前问题:单独测试SQL没有问题可以执行成功,…

自然语言处理(NLP)领域大图

以下是一份自然语言处理&#xff08;NLP&#xff09;与大模型领域的领域大图&#xff0c;涵盖技术框架、发展脉络、交叉融合点和应用场景的完整解析&#xff1a; 1. 核心技术体系 基础分析层级 词法分析&#xff1a;分词、词性标注、命名实体识别句法分析&#xff1a;依存句法…

【Linux我做主】GDB调试工具完全指南

Linux下GDB调试工具完全指南&#xff1a;25个核心命令详解与实战示例 github地址 有梦想的电信狗 前言 GDB&#xff08;GNU Debugger&#xff09;是Linux开发中不可或缺的调试工具&#xff0c;尤其在定位代码逻辑错误和内存问题时表现卓越。本文基于实际开发经验&#xff0…

Pycharm 如何删除某个 Python Interpreter

在PyCharm中&#xff0c;点击右下角的“Interpreter Settings”按钮&#xff0c;或者通过菜单栏选择“File” > “Settings”&#xff08;macOS用户选择“PyCharm” > “Preferences”&#xff09;。在设置窗口中&#xff0c;导航到“Project: [Your Project Name]” >…

Day3:个人中心页面布局前端项目uniapp壁纸实战

接下来我们来弄一下个人中心页面布局user.vue <template><view class"userLayout"><view class"userInfo"><view class"avatar"><image src"../../static/Kx.jpg" mode"aspectFill"></im…

正则表达式反向引用的综合应用魔法:从重复文本到简洁表达的蜕变

“我....我要....学学学学....编程 java!” —— 这类“重复唠叨”的文本是否让你在清洗数据时头疼不已&#xff1f; 本文将带你一步步掌握正则表达式中的反向引用技术&#xff0c;并结合 Java 实现一个中文文本去重与清洗的实用工具。 结合经典的结巴实例。如何高效地将这样的…

FFmpeg+Nginx+VLC打造M3U8直播

一、视频直播的技术原理和架构方案 直播模型一般包括三个模块&#xff1a;主播方、服务器端和播放端 主播放创造视频&#xff0c;加美颜、水印、特效、采集后推送给直播服务器 播放端&#xff1a; 直播服务器端&#xff1a;收集主播端的视频推流&#xff0c;将其放大后推送给…

Windows串口通信

Windows串口通信相比较Android串口通信,在开发上面相对方便一些。原理都是一样,需要仔细阅读厂商设备的串口通信协议。结合串口调试助手进行测试,测试通过后,编写代码实现。 比如近期就接触到了一款天平,其最大测量值为100g,测量精度0.001g。 拿到手之后我就先阅读串口通…

【开源项目】Excel手撕AI算法深入理解(三):时序(RNN、mamba、Long Short Term Memory (LSTM)、xLSTM)

项目源码地址&#xff1a;https://github.com/ImagineAILab/ai-by-hand-excel.git 一、RNN 1. RNN 的核心思想 RNN 的设计初衷是处理序列数据&#xff08;如时间序列、文本、语音&#xff09;&#xff0c;其核心特点是&#xff1a; 隐藏状态&#xff08;Hidden State&#xff…

构建专业金融图表系统的高效路径——QtitanChart在金融行业的应用价值

QtitanChart是一个C 库&#xff0c;它代表一组控件&#xff0c;这些控件使您可以快速轻松地为应用程序提供漂亮而丰富的图表。QtitanChart在Qt.C 上实现&#xff0c;并且支持所有主要的桌面操作系统 - Windows、Linux和Mac OSX。要将QtitanChart添加到您的程序中&#xff0c;只…

多模态大语言模型arxiv论文略读(二十六)

Holistic Autonomous Driving Understanding by Bird’s-Eye-View Injected Multi-Modal Large Models ➡️ 论文标题&#xff1a;Holistic Autonomous Driving Understanding by Bird’s-Eye-View Injected Multi-Modal Large Models ➡️ 论文作者&#xff1a;Xinpeng Ding,…

Java虚拟机(JVM)平台无关?相关?

计算机的概念模型 计算机实际上就是实现了一个图灵机模型。即&#xff0c;输入参数&#xff0c;根据程序计算&#xff0c;输出结果。图灵机模型如图。 Tape是输入数据&#xff0c;Program是针对这些数据进行计算的程序&#xff0c;中间横着的方块表示的是机器的状态。 目前使…

cloudstudio学习笔记之openwebui

代码获取 git clone 参考资料 openwebui官网 https://docs.openwebui.com/getting-started/advanced-topics/development 后端启动 cd backend pip install -r requirements.txt -U sh dev.sh后端启动成功后的界面 在cloudstudio提供的vscode弹出的提示中打开浏览器并在末…

7.QT-常用控件-QWidget|font|toolTip|focusPolicy|styleSheet(C++)

font API说明font()获取当前widget的字体信息.返回QFont对象.setFont(const QFont& font)设置当前widget的字体信息. 属性说明family字体家族.⽐如"楷体",“宋体”,"微软雅⿊"等.pointSize字体⼤⼩weight字体粗细.以数值⽅式表⽰粗细程度取值范围为[…

机器学习核心算法全解析:从基础到进阶的 18 大算法模型

在机器学习领域&#xff0c;算法模型是解决实际问题的核心工具。 不同的算法适用于不同的数据场景和任务需求&#xff0c;理解它们的原理与应用是掌握机器学习的关键。 以下将详细解析 18 个核心算法模型&#xff0c;涵盖监督学习、无监督学习、集成学习和深度学习等多个领域…

线性代数 | 知识点整理 Ref 1

注&#xff1a;本文为 “线性代数 | 知识点整理” 相关文章合辑。 因 csdn 篇幅合并超限分篇连载&#xff0c;本篇为 Ref 1。 略作重排&#xff0c;未整理去重。 图片清晰度限于引文原状。 如有内容异常&#xff0c;请看原文。 线性代数知识汇总 Arrow 于 2016-11-27 16:27:5…

【深度学习入门_NLP自然语言处理】序章

本部分开始深度学习第二大部分NLP章节学习&#xff0c;找了好多资料&#xff0c;终于明确NLP的学习目标了&#xff0c;介于工作之余学习综合考量&#xff0c;还是决定以视频学习为主后期自主实践为主吧。 分享一个总图&#xff0c;其实在定位的时候很迷茫&#xff0c;单各章节…

蓝桥杯 二进制问题 刷题笔记

8.二进制问题 - 蓝桥云课 存入N的二进制每一位作为基准数组 算出方案数 从高位往低位用dfs枚举每一位是放1还是放0 #include<iostream> #include<vector> #define ll long long using namespace std;ll dp[65][65]; ll num; ll k; vector<ll> vec;ll cal(l…

mapbox基础,加载视频到地图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️raster 栅格图层 api二、🍀加载视频到…

RNN - 循环神经网络(实现)

写在前面 在RNN - 循环神经网络&#xff08;概念介绍&#xff09;中&#xff0c;介绍了一下 RNN 的相关概念&#xff0c;下面就基于概念对 RNN 进行两种实现。从零开始实现和简洁实现。 从 0 开始实现 首先导入必要的环境&#xff0c;使用 H.G.Wells 的时光机器数据集上训练…