Vivado输入输出时序约束(set_input_delay、set_output_delay)

news2024/11/28 16:26:27

前言
        I/O Delay约束主要有两个命令:set_input_delay和set_output_delay。

        I/O Delay约束的主要目的同时钟约束一样,是告诉编译器,外部输入输出信号与参考时钟之间的相位关系,便于综合器能够真实和准确的对IO接口的信号进行时序分析,同时也有利于综合器的布局布线。

        注意:I/O Delay约束和 IDELAYE、ODELAYE原语是完全不同的,前者是用于编译器进行时序分析的,后者是对数据进行延时的(由于建立时间和保持时间不满足,导致在接收数据有错时,需要对数据进行延迟,以满足建立时间和保持时间)。换言之,前者是时序分析手段,后者是电路调试手段。

一、input delay
      
  输入信号是在时钟沿后多长时间到达模块的port上。
        "set_input_delay"命令是用于指定输入端口(PIN)的数据输入相对于设计中参考时钟边沿的延迟。 输入延迟值以ns为指定单位,可以为正值,也可以为负值,具体取决于设备接口处的时钟和数据的相对相位关系。

        这里特别强调的是FPGA芯片的PIN到内部IOB是有pin delay的,但是set_input_delay指定的延迟是不包含pin delay的值。即set_input_delay所指的延迟是下图中Tco+td_bd-Tc_d-tc_bd的值。
在这里插入图片描述
说明:
        上图为IO接口的时序分析模型,模型可分为3部分,分别是上游芯片,PCB走线,下游芯片(这里主要指FPGA)。上图中的时序参数含义分别如下:

时序参数含义
Tco上游芯片输出数据管脚相较于扇出节点时钟发射沿延时
Tc_d上游器件输出管脚处时钟,相较于扇出节点时钟延时
Td_bd数据在PCB上的走线延时
Tc_bd时钟在PCB上的走线延时
pin_delayFPGA的封装引脚pin到内部IOB的延迟
Td_fiFPGA内部数据通路上,IOB到FPGA内部D触发器的路径延迟
Tc_fiFPGA内部随路时钟通路上,IOB到FPGA内部D触发set_input_delayinput_delay

二、set_input_delay语法

set_input_delay  [-clock <args>] [-reference_pin <args>] [-clock_fall] [-rise]
                 [-fall] [-max] [-min] [-add_delay] [-network_latency_included]
                 [-source_latency_included] [-quiet] [-verbose] <delay>
                 <objects>
选项含义
-clock相对时钟,默认使用上升沿,也可以使用-clock_fall指定使用下降沿
-reference_pin指定延迟与出现在指定引脚或端口上的时钟的有效边沿有关,而不是与时钟有关。
-clock_fall指定延迟是相对于时钟的下降沿
-rise指定应用于指定端口上的上升转换的输入延迟。 默认是对上升和下降转换应用延迟(用于指定数据的,非时钟的)。
-fall指定应用于指定端口上的下降转换的输入延迟。 默认是对上升和下降转换应用延迟(用于指定数据的,非时钟的)。
-max表示指定的输入延迟仅在计算最大(最长)路径延迟时使用(建立时间)。
-min表示指定的输入延迟仅在计算最小(最短)路径延迟时使用(保持时间)。
-add_delay将指定的延迟约束添加到端口,以与端口上已定义的任何其他 set_input_delay 约束共存。 默认行为是替换现有的延迟。
-network_latency_included表示参考时钟的时钟网络延迟包含在延迟值中。 除非指定的输入或输出延迟值包括源延迟或网络延迟,否则 Vivado 时序分析器会考虑在时钟延迟之后到达捕获触发器的时钟边沿。
-source_latency_included指示相对时钟的源延迟包含在指定的延迟值中。
-quiet忽略命令错误
-verbose命令执行期间暂停消息限制
delay延时值
objects端口列表

三、用法举例
示例一:
 创建一个时钟周期为10ns的sysClk 时钟,然后设定端口DIN相对于时钟sysClk 上升沿的最大和最小延迟为2ns:

create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk 2 [get_ports DIN]

示例二: 创建一个虚拟时钟clk_port_virt ,周期为10ns,然后设定端口DIN相对于时钟clk_port_virt 下降沿的最大和最小延迟为2ns:

 create_clock -name clk_port_virt -period 10
 set_input_delay -clock_fall -clock clk_port_virt 2 [get_ports DIN]

示例三: 定义输入端口reset相对于wbClk_IBUF_BUFG_inst/O输出的时钟的输入延迟为2ns,其中wbClk_IBUF_BUFG_inst/O输出时钟的时钟源为wbClk:

set_input_delay -clock wbClk 2 -reference_pin [get_pin wbClk_IBUF_BUFG_inst/O] reset  

示例四: 定义输入端口DIN相对时钟sysClk不同的相对延迟,用于最大路径分析和最小路径分析:

create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk -max 4 [get_ports DIN]
set_input_delay -clock sysClk -min 1 [get_ports DIN]

示例五: 限制I/O端口之间的纯组合逻辑路径,首先定义一个虚拟时钟,用于约束输入和输出延迟,例如设定DIN端口到DOUT端口的纯组合逻辑的延迟为5ns(10ns-1ns-4ns):

create_clock -name sysClk -period 10 [get_ports CLK0]
set_input_delay -clock sysClk 4 [get_ports DIN]
set_output_delay -clock sysClk 1 [get_ports DOUT]

示例六: DDR数据的input delay约束:

create_clock -name clk_ddr -period 6 [get_ports DDR_CLK_IN]
set_input_delay -clock clk_ddr -max 2.1 [get_ports DDR_IN]
 set_input_delay -clock clk_ddr -max 1.9 [get_ports DDR_IN] -clock_fall -add_delay
 set_input_delay -clock clk_ddr -min 0.9 [get_ports DDR_IN]
 set_input_delay -clock clk_ddr -min 1.1 [get_ports DDR_IN] -clock_fall -add_delay

示例七: 对STARTUPE3 内部pin(UltraScale+器件)的input delay约束:

//重命名STARTUP/CCLK自动衍生的时钟名为clk_sck,时钟源为axi_quad_spi_0/ext_spi_clk,频率为时钟源的1/2
create_generated_clock -name clk_sck -source [get_pins -hierarchical *axi_quad_spi_0/ext_spi_clk] [get_pins STARTUP/CCLK] -edges {3 5 7}
set_input_delay -clock clk_sck -max 7 [get_pins STARTUP/DATA_IN[*]] -clock_fall
set_input_delay -clock clk_sck -min 1 [get_pins STARTUP/DATA_IN[*]] -clock_fall

四、实操演示
        以SiI9293 MHL/HDMI接收器芯片为例,利用vivado的时序约束向导进行input delay约束,下图为硬件环境模型:
在这里插入图片描述
        通过查阅SiI9293的芯片资料手册,可以获取芯片并行数据输出接口Q和随路时钟ODCK之间的时序关系:
在这里插入图片描述         时序约束中假设PCB布线等长时间差很小,可以忽略不计,由上可知在148.5MHz的频率下,数据在时钟上升沿前4.2ns稳定,并在时钟上升沿后的0.4ns后,开始输出下一个并行数据,结合vivado的时序约束向导中的input delays 页面,进行输入延时约束:
在这里插入图片描述

        界面中tco_min对应的延时值为手册中的Tck2out(min),tco_max 对应芯片手册中的Tck2out(max)
vivado的时序约束向导中的input delays约束方法2:
在这里插入图片描述
界面中dv_bre对应的延时值为手册中的Tsu,dv_are 对应芯片手册中的Thd
        XDC约束语法如下:

set_input_delay -clock [get_clocks {sli9293_odck}] -min 0.4 [get_ports {sli9293_q[*]}]
set_input_delay -clock [get_clocks {sli9293_odck}] -max 2.534 [get_ports {sli9293_q[*]}]

五、总结

min = hold time
max = T - setup time
max - min = 数据抖动时间


 

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

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

相关文章

打造一流软件测试工程师的技能图谱

目录 引言 测试工程师面临的核心问题 概述 测试设计 代码能力 阅读开发代码 自动化测试的开发 自动化测试 UI自动化 接口自动化 质量管理流程 行业技术知识 数据库 关系型数据库 非关系型数据库 RDBMS vs NoSQL 业务知识 技术的准备 一、测试基础 二、Linu…

IDEA配置Maven教程(超详细版~)

文章目录 前言一、Maven下载二、配置Maven环境变量三、settings.xml配置文件修改四、打开IDEA配置Maven 前言 本文介绍在IDEA中配置Maven 一、Maven下载 首先我们进入maven官方网站&#xff0c;进入网页后&#xff0c;点击Download去下载 下载免安装版&#xff0c;解压即可,…

软件测试面试八股文,正在面试的同学请仔细观看

目录 第一类问题&#xff1a;自我介绍&#xff08;心理学首因效应告诉我们第一印象非常重要&#xff09; 第二类问题&#xff1a;项目介绍&#xff08;项目经验直接决定一个人能否胜任一份工作&#xff0c;企业更应该看重一个人解决问题的思路和具体能力&#xff09; 第三类…

【1 Vue - 初识】

1 认识Vue Vue的本质&#xff0c;就是一个JavaScript的库框架. Vue与原生开发相比&#xff0c;有以下几个优势&#xff1a; 1 数据绑定&#xff1a;Vue使用双向绑定技术&#xff0c;可以方便地绑定数据与视图&#xff0c;数据变化时&#xff0c;视图自动更新。而原生开发需要…

安全基础第十一天:nginx

目 录 一、nginx的反向代理 1.反向代理原理 2.反向代理的几种算法 &#xff08;1&#xff09;轮询&#xff08;默认&#xff09; &#xff08;2&#xff09;weight &#xff08;3&#xff09;ip_hash &#xff08;4&#xff09;fair&#xff08;第三方&#xff09; …

springboot+vue家乡特色推荐系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的家乡特色推荐系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

客户端跨端动态化方案现状

前言 客户端现状 工作中&#xff0c;经常遇到产品想尽快上线看数&#xff0c;CR业务也总是倒排期状态&#xff0c;native 的发版窗口是他们经常要关注的&#xff0c;往往因为窗口时间问题&#xff0c;导致某个需求业务迭代周期长&#xff0c;客户端开发在业务动态化方面多有被…

毫米波雷达系列 | 传统CFAR检测(有序统计类)

毫米波雷达系列 | 传统CFAR检测&#xff08;有序统计类&#xff09; 1.OS-CFAR 有序统计类CFAR检测器(OS-CFAR)与均值类CFAR检测器处理过程不同,在对背景杂波功率进行估计时&#xff0c;需要将所有参考单元进行升序排列得到一个新的有序数列&#xff0c;在新序列中选取第k个值…

【Python | 深度学习】safetensors 包的介绍和使用案例(含源代码)

safetensors 是一种用于安全存储张量&#xff08;与 pickle 相反&#xff09;的新型简单格式&#xff0c;并且仍然很快&#xff08;零拷贝&#xff09;。 safetensors 真的很快。 一、安装 1.1 pip 安装 pip install safetensors1.2 conda 安装 conda install -c huggingf…

【HTML5系列】第二章 · HTML5新增功能

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

我写了一套uniapp微信小程序投票系统实战课程 (SpringBoot2+vue3.2+element plus ) 实战课程,免费分享给CSDN的朋友们

大家好&#xff0c;我是锋哥&#xff0c;最近写了一套前后端分离的uniapp微信小程序投票系统&#xff0c;逼格略高&#xff0c;专门为Java初学者提升技术层次和方便就业而精心打造。希望你们喜欢&#xff01;&#xff08;文末领取&#xff09; 一&#xff0c;Java就业实战课程简…

STC单片机使用示例分别介绍 CCP/PCA在4种工作模式下的使用

STC单片机使用示例分别介绍 CCP/PCA在4种工作模式下的使用 📍针对利用PCA对上升或下降沿捕获功能,可以看这篇有关脉宽测量《STC15单片机利用PCA功能测量脉宽应用示例》 🍁应用场景: 🎉STC15系列部分单片机集成了3路可编程计数器阵列(CCP/PCA)模块(STC15W4K32S4系列单…

DOM事件模型与事件委托

事件 JS与HTML之间的交互通过事件实现。 事件就是文档或浏览器窗口中发生的一些特定的交互瞬间。 可以使用监听器来预定事件&#xff0c;以便事件发生时执行相应的代码。这种在传统软件工程中被称为观察者模式 事件流 事件流描述的是从页面中接受事件的顺序 事件冒泡 微软…

【李老师云计算】实验三:在Docker中部署Hadoop集群

索引 0. 前言1. Docker1.1 安装Docker1.2 启动Docker 2. Dokcer部署Hadoop2.1 设计Hadoop集群结构2.2 拉取Hadoop镜像2.3 ★解决拉取镜像时 - no space left on device2.4 创建Docker容器2.5 ★解决docker ps没有内容2.6 通过终端进入容器2.7 关闭防火墙2.8 配置SSH2.8.1 设置主…

springboot+vue留守儿童爱心网站(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的留守儿童爱心网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风…

这个代码生成器火了…SmartSoftHelp

火了&#xff0c;火了…SmartSoftHelp 开源C#代码生成器&#xff0c;专注.NET&#xff0c;Sqlserver&#xff0c;最简单&#xff0c;最干净&#xff0c;支持自编码的开源工具&#xff0c;SmartSoftHelp 开发辅助优化工具&#xff01; 下载地址&#xff1a;https://pan.baidu.…

PC端网页特效

元素偏移量offset系列&#xff1a;&#xff08;使用其相关属性可以动态的得到该元素的位置&#xff08;偏移&#xff09;、大小 &#xff08;1&#xff09;获得元素距离带有定位父元素的位置 …

sqlserver 中的表值函数和标量函数

目录 一、表值函数 1.内联表值函数 1.创建函数 2.调用函数 3.返回结果 2.多语句的表值函数 2.调用函数 3.返回结果 3.内联表值函数和多语句的表值函数的区别 1.语法上 2.结构上 二、标量函数 1.创建函数 2.调用函数 2.返回结果 总结 一、表值函数 表值函数是返回一个Table类型…

2023年必备!这些值得信赖的问卷调查工具

随着我们进入2023年&#xff0c;可靠的调查问卷工具对研究和数据收集的重要性比以往任何时候都更加明显。随着在线调查和远程数据收集的兴起&#xff0c;越来越多的用户和企业都开始注重数据安全&#xff0c;所以使用值得信赖和有效的工具至关重要。在这篇文章中&#xff0c;小…

Spring的第十六阶段:数据库的事务隔离级别

数据库事务隔离级别 1、为什么会出现数据库的隔离级别呢? 数据库隔离级别是为了解决数据库并发访问过程中产生的各种数据安全问题. 四种事务隔离级别&#xff1a; 一&#xff1a;读未提交 read uncommitted 二&#xff1a;读已提交 read committed ( oracle默认 ) 三&…