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

在解析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.mzph.cn/diannao/79861.shtml

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

相关文章

AI驱动研发效率在中后台的实践

本文探讨了AI驱动的中后台前端研发实践&#xff0c; 涵盖设计出码、接口定义转换、代码拟合、自动化测试等多个环节&#xff0c;通过具体案例展示了AI技术如何优化研发流程并提升效率。特别是在UI代码编写和接口联调阶段&#xff0c;并提出了设计出码&#xff08;Design to Cod…

【Rust 精进之路之第6篇-流程之舞】控制流:`if/else`, `loop`, `while`, `for` 与模式匹配初窥

系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025-04-20 引言:让代码“活”起来——指令的流动 在前面的文章中,我们已经掌握了 Rust 的基础数据类型(标量和复合类型)以及如何通过变量绑定来存储和命名它们。这相当于我们准备好了程序…

C++ 表达式求值的基础(四十九)

1. 运算符的分类 1.1 按操作数个数 一元运算符&#xff08;Unary&#xff09; 作用于单个操作数&#xff1a; 取地址 &obj解引用 *ptr逻辑非 !b一元加减 x, -x递增递减 i, i-- 二元运算符&#xff08;Binary&#xff09; 作用于两个操作数&#xff1a; 算术运算 a b, a …

Three.js + React 实战系列 : 从零搭建 3D 个人主页

可能你对tailiwindcss毫不了解&#xff0c;别紧张&#xff0c;记住我们只是在学习&#xff0c;学习的是作者的思想和技巧&#xff0c;并不是某一行代码。 在之前的几篇文章中&#xff0c;我们已经熟悉了 Three.js 的基本用法&#xff0c;并通过 react-three-fiber 快速构建了一…

Kotlin实现Android应用保活方案

Kotlin实现Android应用保活优化方案 以下的Android应用保活实现方案&#xff0c;更加符合现代Android开发规范&#xff0c;同时平衡系统限制和用户体验。 1. 前台服务方案 class OptimizedForegroundService : Service() {private val notificationId 1private val channel…

windows拷贝文件脚本

1、新建脚本文件xxx.bat&#xff0c;名字任意&#xff0c;后缀未.bat即可&#xff0c;将以下内容拷贝进去&#xff0c;修改src和des为自己文件的目录即可。 echo off :: 设置字符集为UTF-8&#xff0c;命令窗口能正确显示中文字符。 chcp 65001 rem 读取当前目录并进入当前目…

Qt 核心库总结

Qt 核心库&#xff08;QtCore&#xff09; QtCore 是 Qt 框架的基础模块&#xff0c;提供非图形界面的核心功能&#xff0c;是所有 Qt 应用程序的基石。它包含事件循环、信号与槽、线程管理、文件操作、字符串处理等功能&#xff0c;适用于 GUI 和非 GUI 应用程序。本文将从入…

大模型相关面试问题原理及举例

大模型相关面试问题原理及举例 目录 大模型相关面试问题原理及举例Transformer相关面试问题原理及举例大模型模型结构相关面试问题原理及举例注意力机制相关面试问题原理及举例大模型与传统模型区别 原理:大模型靠海量参数和复杂结构,能学习更复杂模式。传统模型参数少、结构…

【AI+HR实战应用】用DeepSeek提升HR工作效能

用DeepSeek提升HR工作效能 一、AI 与 AIGC 简介二、DeepSeek 介绍三、使用 DeepSeek 的渠道及硬件要求四、使用 DeepSeek 的核心技巧五、AI 在人力资源的应用场景六、AI 绘画与多模态应用七、个人使用 AI 的能力层级八、企业拥抱 AI 的策略九、提示词管理的重要性 一、AI 与 AI…

Postgresql几个常用的json操作

将行记录转为jsonb row_to_json(表名或别名)将行记录集转为json数组 &#xff08;jsonb) select json_agg(row_to_json(t) order by t.task_name) into v_next_taskfrom dyna_flow_task t where t.zidv_template_id and t.levelv_next_level ;访问json字段&#xff0c;用->…

ESP32学习与快速总结——5.系统存储

1.ESP32分区表 为什么ESP32要分区 00&#xff1a;34-- 简述&#xff1a;其他单片机生成文件少&#xff0c;功能少&#xff0c;而ESP32功能多&#xff0c;文件多 分区表各个文件简介 --7&#xff1a;31vscode查看分区表 --9&#xff1a;33ota通过idf.py menuconfi…

Linux 进程控制(自用)

非阻塞调用waitpid 这样父进程就不会阻塞&#xff0c;此时循环使用我们可以让父进程执行其他任务而不是阻塞等待 进程程序替换 进程PCB加载到内存中的代码和数据 替换就是完全替换当前进程的代码段、数据段、堆和栈&#xff0c;保存当前的PCB 代码指的是二进制代码不是源码&a…

Spring 微服务解决了单体架构的哪些痛点?

1. 部署困难 (Deployment Difficulty & Risk) 单体痛点: 整体部署: 对单体应用的任何微小修改&#xff08;哪怕只是一行代码&#xff09;&#xff0c;都需要重新构建、测试和部署整个庞大的应用程序。部署频率低: 由于部署过程复杂且风险高&#xff0c;发布周期通常很长&a…

面试题之高频面试题

最近开始面试了&#xff0c;410面试了一家公司 针对自己薄弱的面试题库&#xff0c;深入了解下&#xff0c;也应付下面试。在这里先祝愿大家在现有公司好好沉淀&#xff0c;定位好自己的目标&#xff0c;在自己的领域上发光发热&#xff0c;在自己想要的领域上&#xff08;技术…

【MySQL】Read view存储的机制,记录可见分析

read view核心组成 1.1 事务id相关 creator_trx_id: 创建该read view的事务id 每开启一个事务都会生成一个 ReadView&#xff0c;而 creator_trx_id 就是这个开启的事务的 id。 m_ids: 创建read view时系统的活跃事务&#xff08;未提交的事务&#xff09;id集合 当前有哪些事…

【刷题Day20】TCP和UDP(浅)

TCP 和 UDP 有什么区别&#xff1f; TCP提供了可靠、面向连接的传输&#xff0c;适用于需要数据完整性和顺序的场景。 UDP提供了更轻量、面向报文的传输&#xff0c;适用于实时性要求高的场景。 特性TCPUDP连接方式面向连接无连接可靠性提供可靠性&#xff0c;保证数据按顺序…

Flink 内部通信底层原理

Flink 集群内部节点之间的通信是用 Akka 实现,比如 JobManager 和 TaskManager 之间的通信。而 operator 之间的数据传输是用 Netty 实现。 RPC 框架是 Flink 任务运行的基础,Flink 整个 RPC 框架基于 Akka 实现。 一、相关概念 RPC(Remote Procedure Call) 概念 定义:…

企业级Kubernetes 1.28高可用集群离线部署全指南(含全组件配置)

企业级Kubernetes 1.28高可用集群离线部署全指南(含全组件配置) 摘要:本文手把手教学在无外网环境下部署生产级Kubernetes 1.28高可用集群,涵盖ETCD集群、HAProxy+Keepalived负载均衡、Containerd运行时、Calico网络插件及Kuboard可视化管理全流程。提供100年有效证书配置…

【中间件】redis使用

一、redis介绍 redis是一种NoSQL类型的数据库&#xff0c;其数据存储在内存中&#xff0c;因此其数据查询效率很高&#xff0c;很快。常被用作数据缓存&#xff0c;分布式锁 等。SpringBoot集成了Redis&#xff0c;可查看开发文档Redis开发文档。Redis有自己的可视化工具Redis …

C语言——函数递归与迭代

各位CSDN的uu们大家好呀&#xff0c;今天将会给大家带来关于C语言的函数递归的知识&#xff0c;这一块知识理解起来稍微会比较难&#xff0c;需要多花点时间。 话不多说&#xff0c;让我们开始今天的内容吧&#xff01; 目录 1.函数递归 1.1 什么是递归&#xff1f; 1.2 递归…