时序约束进阶四:set_input_delay和set_output_delay详解

目录

一、前言

二、set_input_delay/set_output_delay

2.1 延时约束

2.2 约束设置界面

2.3 示例工程

2.4 Delay Value

2.5 Delay value is relative to clock edge

2.6 Delay value already includes latencies of the specified clock edge

2.7 Rise/Fall

2.8 Max/Min

2.9 Add delay information to the existing delay

一、前言

        为了在设计中准确的模拟信号从FPGA传输到外部或外部信号进入到FPGA端口的时序,在设计中需要给定输入端口和输出端口的延时信息,因为vivado仅仅能够识别边界内部的时序。此时,就需要使用到约束set_input_delay/set_output_delay。

二、set_input_delay/set_output_delay

2.1 延时约束

        set_input_delay输入时延约束指定了设计中输入时钟端口的输入时延,以应用板为例,输入时延表示在数据从外部芯片通过应用板到达FPGA的输入引脚和应用板的时钟相位存在差异。因此,输入时延值可以是正数也可以是复数,正负值取决于数据信号和时钟信号在外部芯片与FPGA接口处的相对相位。 

        set_output_delay约束指定了关联时钟沿的输出端口的输出路径时延,输出时延可理解为在数据从FPGA的输出端口到达其他芯片和关联的参考时钟间的相位差。输出时延值可以是正数也可以是复数,正负值取决于数据信号和时钟信号在外部芯片与FPGA接口处的相对相位。

2.2 约束设置界面

set input delay和set output delay设置界面相同,区别是Object(ports)中可设置的端口分别为输入端口和输出端口。

set output delay界面

2.3 示例工程

工程设计为一个简单的包含2个触发器的时序路径

module slow_to_fast(in,clk1,clk2,rst,out);
input in,clk1,clk2,rst;
output out;
reg ff1,ff2;
//时钟域一
always@(posedge clk1,negedge rst)
beginif(!rst)ff1<=0;elseff1<=in;
end
//时钟域二
always@(posedge clk2,negedge rst)
beginif(!rst)ff2<=0;else              //打两拍处理ff2<=ff1;
end
assign out=ff2;endmodule

 时序约束由两条主时钟约束加上set_input_delay和set_output_delay,input延时为1ns,output延时为2ns

create_clock -period 10.000 -name clk1 -waveform {0.000 5.000} [get_ports clk1]
create_clock -period 8.000 -name clk2 -waveform {0.000 4.000} [get_ports clk2]
set_input_delay -clock [get_clocks clk1] 1.000 [get_ports in]
set_output_delay -clock [get_clocks clk2] 2.000 [get_ports -filter { NAME =~  "*" && DIRECTION == "OUT" }]

2.4 Delay Value

延时值Delay Value可设置正值或负值,并且设为正值或负值在set_input_delay/set_output_delay中表现不同,set_input_delay中的设置input delay值直接添加到Data Path的最前段,可理解为此段即为正常路径的Source Clock Path

再看output delay,延时值output delay添加到Destination Clock Path,约束为2ns,分析时为-2ns,为何要取反呢?回到output delay的定义来,为数据输出端口的延时,但现在输出端口Data Path中并无新增2ns延时,延时添加到了Destination clock上。因此,对于捕获端,相当于时钟在原有基础上提前2ns(-2)到达,和延时值直接加到Data Path效果相同。

2.5 Delay value is relative to clock edge

Delay value is relative to clock edge用于设置延时值是相对于关联时钟的上升沿还是下降沿,默认为上升沿,如示例工程Input delay约束,延时参考时钟为clk1,同时clk1的上升沿在0ns处,因次Incr为0ns,

set_input_delay -clock [get_clocks clk1] 1.000 [get_ports in]

修改时钟clk1的下降沿在6ns处,同时input_delay参考边沿为下降沿

create_clock -period 10.000 -name clk1 -waveform {1.000 6.000} [get_ports clk1]

set_input_delay -clock [get_clocks clk1] -clock_fall 1.0 [get_ports in]

结果如下,因为下降沿在6ns处,因为总的延时值为6ns+1ns共7ns

2.6 Delay value already includes latencies of the specified clock edge

Delay value already includes latencies of the specified clock用于设置延时值是否包含set_clock_latency约束的延时。Vivado时序分析时会默认捕获时钟是在时钟延时(包含源延时和网络延时)后到达捕获触发器中,除非是set_input_delay/set_output_delay约束中指定包含了源延时或网络延时。该配置的设置主要是避免和set_clock_latency约束进行重复计算。

该配置选项可设置值如下

None:输入端口延时input delay不包含时钟延时
Network:输入端口延时包含网络延时

Source:输入端口延时包含源延时

Network/Source:输入端口延时包含源延时和网络延时

2.7 Rise/Fall

该配置和前面的Delay value is relative to clock edge容易混淆,看字面意思都是上升沿和下降沿,两者对象是完全不同,前者指时钟的上升沿或下降沿,此处指端口Port的切换沿为上升沿或下降沿,默认的是对Port的上升沿或下降沿都有效。但因port通常都是fall transition/rise transition都支持,因此,设置后看不到变化,该设置使用也不多。

2.8 Max/Min

Min/Max中Min为最小时延值,作用于hold/removal,Max为最大时延值,作用于setup/recovery分析,如果Min/Max都未选择,表示最大时延和最小时延值相等,该延时值同时引用到setup/hold分析中。

以set_input_delay -clock [get_clocks clk1] -min -network_latency_included 1.0 [get_ports in]约束为例,clk1的同步路径中只有hold路径,无setup路径,符合预期。

约束中min修改max,set_input_delay -clock [get_clocks clk1] -max -network_latency_included 1.0 [get_ports in]

2.9 Add delay information to the existing delay

Add delay information to the existing delay勾选表示如果设置约束的端口已经存在约束延时,新增加的约束不会覆盖旧的,不勾选则覆盖旧的约束。

1)端口in上同时两条set_input_delay,但都没有add参数,约束生效遍历到第二条时,因没有-add_delay参数,因此后一条覆盖前一条,input delay为1.11ns

set_input_delay -clock [get_clocks clk1] 2.22 [get_ports in]
set_input_delay -clock [get_clocks clk1] 1.11 [get_ports in]

2)端口in上同时两条set_input_delay,但第一条添加了-add_delay参数,因此仍是后一条覆盖前一条,input delay为1.11ns

set_input_delay -clock [get_clocks clk1] -add_delay 2.22 [get_ports in]
set_input_delay -clock [get_clocks clk1] 1.11 [get_ports in]

3)端口in上同时两条set_input_delay,都添加了-add_delay参数,后一条有参数将不会覆盖前面的,因此,input delay为2.22ns

set_input_delay -clock [get_clocks clk1] -add_delay 2.22 [get_ports in]
set_input_delay -clock [get_clocks clk1] -add_delay 1.11 [get_ports in]

4)端口in上同时两条set_input_delay,只有第二条添加了-add_delay参数,因此,后一条有参数将不会覆盖前面的,input delay为2.22ns

set_input_delay -clock [get_clocks clk1] 2.22 [get_ports in]
set_input_delay -clock [get_clocks clk1] -add_delay 1.11 [get_ports in]

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

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

相关文章

更新C语言题目

1.以下程序输出结果是() int main() {int a 1, b 2, c 2, t;while (a < b < c) {t a;a b;b t;c--;}printf("%d %d %d", a, b, c); } 解析:a1 b2 c2 a<b 成立 ,等于一个真值1 1<2 执行循环体 t被赋值为1 a被赋值2 b赋值1 c-- c变成1 a<b 不成立…

使用IOT-Tree Server制作一个边缘计算设备(Arm Linux)

最近实现了一个小项目&#xff0c;现场有多个不同厂家的设备&#xff0c;用户需要对此进行简单的整合&#xff0c;并实现一些联动控制。 我使用了IOT-Tree Server这个软件轻松实现了&#xff0c;不外乎有如下过程&#xff1a; 1&#xff09;使用Modbus协议对接现有设备&#…

9-贪心算法

PDF文档下载&#xff1a;LeetCode-贪心算法-java 参考&#xff1a;代码随想录 题目分类大纲如下&#xff1a; 贪心算法理论基础 什么是贪心&#xff1f; 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 贪心的套路&#xff08;什么时候用贪心&#xff…

C++ STL容器(五) —— priority_queue 底层剖析

这篇来讲下 priority_queue&#xff0c;其属于 STL 的容器适配器&#xff0c;容器适配器是在已有容器的基础上修改活泼限制某些数据接口以适应更特定的需求&#xff0c;比如 stack 栈使数据满足后进先出&#xff0c;queue 队列使数据满足先进先出&#xff0c;其都是在已有容器上…

转型AI产品经理需要掌握的硬知识、经理能力模型和常见AI概念梳理

近几年&#xff0c;从亚马逊&#xff0c; Facebook&#xff0c;到谷歌&#xff0c;微软&#xff0c;再到国内的BAT&#xff0c;全球最具影响力的技术公司都将目光转向了人工智能&#xff08; AI &#xff09;。2016年 AlphaGo 战胜李世石&#xff0c;把公众的目光也聚集到了人工…

哪些因素会影响PMC对生产质量问题的响应速度?

在制造业中&#xff0c;生产物料控制&#xff08;PMC&#xff09;扮演着至关重要的角色&#xff0c;它负责协调生产计划、物料采购、库存管理和生产进度等多个环节&#xff0c;确保生产活动能够顺利进行。然而&#xff0c;面对生产过程中可能出现的各种质量问题&#xff0c;PMC…

详解 PDF 转 JPG:简单操作,高效转换

如今&#xff0c;众多软件都已具备将PDF转换为JPG的功能&#xff0c;所以pdf怎么转换成jpg图片已经不难解决了吧。接下来&#xff0c;我想分享几款依然保存在我电脑中&#xff0c;且非常实用的PDF转JPG工具给大家。 1.福昕PDF转换大师 链接一下>>https://www.pdf365.cn…

C语言基础之结构体

今天我们来讲讲C语言基础的最后一个知识点了 —— 结构体。不知道大家对前面的C语言基础的知识点掌握的怎么样了呢&#xff1f;下面我们就开始讲解结构体的相关知识点吧&#xff01; 什么是结构体呢&#xff1f;或者说结构体有什么作用呢&#xff1f;对于复杂对象来说&#xff…

盘点2024年4款打工人都在用的PDF软件。

PDF 软件在现代的办公或者是学习当中的应用非常广泛&#xff0c;已经成了很多人的必备工具。因为PDF 文件具有跨设备、跨系统的优势&#xff0c;所以在很多设备上都可以打开浏览。如果有了PDF 编辑软件&#xff0c;查看&#xff0c;编辑&#xff0c;分享也会变得更加方便简单&a…

四、Python基础语法(数据类型转换)

数据类型转换就是将一种类型的数据转换为另外一种类型的数据&#xff0c;数据类型转换不会改变原数据&#xff0c;是产生一个新的数据。 变量 要转换为的类型(原数据) -> num int(28) 一.int()将其他类型转换为整型 1.整数类型的字符串转换为整型 num1 28 print(type…

DAMA数据管理知识体系(第9章 文件和内容管理)

课本内容 9.1 引言 概要 文件和内容管理是指针对存储在关系型数据库之外的数据和信息的采集、存储、访问和使用过程的管理[1]。它的重点在于保持文件和其他非结构化或半结构化信息的完整性&#xff0c;并使这些信息能够被访问。业务驱动因素 法规遵从性要求 法律法规要求组织保…

每日OJ题_牛客_平方数_数学_C++_Java

目录 牛客_平方数_数学 题目解析 C代码1暴力 C代码2数学 Java代码数学 牛客_平方数_数学 平方数 (nowcoder.com) 描述&#xff1a; 牛妹是一个喜欢完全平方数的女孩子。 牛妹每次看到一个数 x&#xff0c;都想求出离 x 最近的完全平方数 y。 每次手算太麻烦&#xff0c;…

LeetCode讲解篇之322. 零钱兑换

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们可以使用动态规划解决这道题&#xff0c;我们首先定义一个数组&#xff0c;数组中第i个元素表示组成金额 i 的最少硬币个数 我们遍历数组的1 ~ amount号位置&#xff0c;对coins进行遍历&#xff0c;查找选…

Chromium 搜索引擎功能浅析c++

地址栏输入&#xff1a;chrome://settings/searchEngines 可以看到 有百度等数据源&#xff0c;那么如何调整其顺序呢&#xff0c;此数据又存储在哪里呢&#xff1f; 1、浏览器初始化搜索引擎数据来源在 components\search_engines\prepopulated_engines.json // Copyright …

【C语言刷力扣】1678.设计Goal解析器

题目&#xff1a; 解题思路&#xff1a; 遍历分析每一个字符&#xff0c;对不同情况分别讨论。 若是字符 G &#xff0c;则 res 中添加字符 G若是字符 &#xff08; &#xff0c;则再分别讨论。 若下一个字符是 &#xff09;&#xff0c; 则在 res 末尾添加字符 o若下一个字符…

【CSS in Depth 2 精译_045】7.1 CSS 响应式设计中的移动端优先设计原则(上)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…

分布式锁--redission 最佳实践!

我们知道如果我们的项目服务不只是一个实例的时候&#xff0c;单体锁就不再适用&#xff0c;而我们自己去用redis实现分布式锁的话&#xff0c;会有比如锁误删、超时释放、锁的重入、失败重试、Redis主从一致性等等一系列的问题需要自己解决。 当然&#xff0c;上述问题并非无…

刷题 二叉树

二叉树的核心思想 - 递归 - 将问题分解为子问题 题型 递归遍历迭代遍历层序遍历 bfs&#xff1a;队列各种递归题目&#xff1a;将问题分解为子问题二叉搜索树 - 中序遍历是递增序列 TreeNode* &prev 指针树形dp 面试经典 150 题 - 二叉树 104. 二叉树的最大深度 广度优…

DDD简介

概述 传统的数据驱动开发模式&#xff0c;View、Service、Dao这种三层分层模式&#xff0c;会很自然的写出过程式代码&#xff0c;这种开发方式中的对象只是数据载体&#xff0c;而没有行为&#xff0c;是一种贫血对象模型。以数据为中心&#xff0c;以数据库ER图为设计驱动&a…

JavaSE - 基础语法

01 背景知识补充 ① Java统治了后台服务器的开发&#xff0c;比如京东&#xff0c;淘宝网站的后台服务器就是使用的Java进行开发的 ② Java之父&#xff1a;詹姆斯高斯林 ③ Java由sun公司研发&#xff0c;现在属于Oracle公司 02 注释 ① Java的注释有三种&#xff1a;单行…