静态时序分析简明教程(七)]端口延迟

news2024/10/5 17:16:39

端口延迟

    • 一、写在前面
      • 1.1 快速导航链接·
    • 二、端口延迟
      • 2.1 输入有效
      • 2.2 输出有效
      • 2.3 set_input_delay
        • 2.3.1 -clock clock_name
        • 2.3.2 -clock_fall
        • 2.3.3 -level_sensitive
        • 2.3.4 -rise/fall
        • 2.3.5 min/max
        • 2.3.6 -add_delay
        • 2.3.7 时钟延迟
      • 2.4 set_output_delay
    • 三、总结

一、写在前面

一个数字芯片工程师核心竞争力是什么?不同的工程师可能给出不同的答复,有些人可能提到硬件描述语言,有些人可能会提到对于特定算法和协议的理解,有些人或许会提到对于软硬件的结合划分,作者想说,这些说法,其实对也不对,硬件描述语言,翻来覆去无非是always和assign这几个语句的反复使用,而一些基础的协议算法深究起来其实也并不复杂,于作者而言,在常规的技能以外,有两项额外的技能颇为重要,其中之一便为sdc/STA的分析能力,它的重要之处在于作为桥梁建立了前端和后端的连接,虽然对于DE工程师而言,初版交付的sdc往往不甚准确,也没有办法通过这份sdc生成一份无误的timing report,但sdc的内容体现却是完完整整的将时序约束从行为级的描述映射到了gate level这样一个真实的电路层次上面。
写此专栏,一为学习记录,二为交流分享,以犒粉丝读者。

1.1 快速导航链接·

静态时序分析简明教程(一)绪论
静态时序分析简明教程(二)基础知识:建立保持时间,违例修复,时序分析路径
静态时序分析简明教程(三)备战秋招,如何看懂一个陌生的timing report
静态时序分析简明教程(四)时钟常约束
静态时序分析简明教程(五)生成时钟
静态时序分析简明教程(六)时钟组与其他时钟特性
静态时序分析简明教程(七)端口延迟
静态时序分析简明教程(七)完整端口约束
静态时序分析简明教程(八)虚假路径
静态时序分析简明教程(九)多周期路径
静态时序分析简明教程(十)组合电路路径
静态时序分析简明教程(十一)模式分析与约束管理
静态时序分析简明教程(十二)浅议tcl语言

二、端口延迟

2.1 输入有效

在这里插入图片描述
假如我们想分析B2模块的静态时序,它的来源于F1寄存器Q端的输出,信号从Clk1开始,经过Clk1到Q,wire的延时,C1与C2的组合逻辑,到达B2模块的边界,这些不同来源的延时如何分配对于B2模块的分析不产生影响,我们只需要确定一个总的信号经过多长时间出现在输入端口,进行约束即可。

2.2 输出有效

在这里插入图片描述
与之相似的,我们对于B1模块输出端口分析,输出需要保持的时间长度,需要允许信号经过C2,C3,互连线延时,和F2的建立时间之和,但是同样的,我们也不需要关心这几种信号之间的分配关系,作为一个整体进行约束即可。

举一个简单的例子
假如我们讨论B1的output端口(此时信号已经经过C1了),输出的延迟为6ns,而B2的寄存器会在10ns的时间进行采样,那么我们需要使B1的output端口在4ns以前就进入稳定状态,以避免亚稳态的出现

2.3 set_input_delay

在输入端口指定延迟的SDC命令使set_input_delay。在输出端口指定延迟的SDC命令为set_output_delay,他们的约束条件相似,因此终点介绍input_dealy,这个命令的具体BNF如下:

set_input_delay [-clock clock_name]
				[-clock_fall]
				[-level_sensitive]
				[-rise]
				[-fall]
				[-max]
				[-min]
				[-add_delay]
				[-network_latency_included]
				[-source_latency_included]
				delay_value port_pin_list

2.3.1 -clock clock_name

-clock用来指定参考的时钟,这个时钟是指触发输入端信号的时钟名称。比如下面这幅图片,输入I1由触发器F1驱动,而触发器F1,由Clk1时钟驱动,因此clock_name的名称应该设置为Clk1
在这里插入图片描述

2.3.2 -clock_fall

通常情况下,我们讨论的触发器触发条件都是上升沿,因此输入延时也是基于时钟的上升沿指定,但是也存在特殊的下降沿触发,还是上面那张图片,假如F1是由下降沿触发的寄存器,同时延迟为2,我们可以使用如下的sdc进行约束

set_input_delay -clock Clk1 -clock_fall 2.0 [get_ports I1]
set_input_delay -clock Clk1 7.0 [get_ports I1]
#这两条SDC等价的前提使时钟周期为10,因此对于下降沿的2.0 dealy和对于上升沿的7.0 delay等价

2.3.3 -level_sensitive

如果前级的输出不来自触发器,而来自锁存器,那么我们通过-level_sensitive来进行约束,为什么前级会出现锁存器的原因,和通过锁存器增加setup slack(建立裕度)有关

2.3.4 -rise/fall

这里的rise/fall指的是:输入延迟输入端口上升沿/下降沿相对应(注意与-clock_fall的区别,-clock_fall是指前一级触发器是上升沿时钟触发还是下降沿时钟触发),但是通常情况下,我们并不需要单独的指定-rise/fall,这是因为在CMOS电路中,上升沿和下降沿过渡的路径延迟非常相似

2.3.5 min/max

-min用于限定输入信号端口最早到达时间的延迟值
-max用于限定输入信号端口最晚到达时间的延迟值
假如我们不加以单独指定-min/-max,那么他们默认使用相同的设定值,随着工艺的提升,触发器需要的保持时间要求大幅下降,因此我们只需要使用最大值就可以完成检查,而不答需要去关心最小值

2.3.6 -add_delay

假如我们需要在同一个端口指定多个参考时间的输入延迟,我们需要在新的SDC约束上增加“-add_delay”选项,目的是避免后面的约束覆盖前面的约束,案例如下

set_input_delay -clock CLK1 -min 3.0 [get_ports A]
set_input_delay -clock CLK2 3.5 [get_ports A]
#第二句的3.5覆盖掉了第一句的3.0
set_input_delay -clock CLK1 -min 3.0 [get_ports A]
set_input_delay -clock CLK2 -add_delay 3.5 [get_ports A]
#第二句的3.5和第一句的3.0共存

2.3.7 时钟延迟

在2.3.7中,我们要讨论的语句是[-network_latency_included]和[-source_latency_included]。
在2.3.1的图片中,假如wire延时为0,Clk1到达F1和B1的时间相同,但是实际的电路中时钟源延迟和网络延迟的存在会使clk信号到达不同步,假如input的delay包括时钟源延迟,指定[-source_latency_included],计入input的delay包括网络延迟的话,我们需要指定[-network_latency_included],但是这些语句并不常用。

2.4 set_output_delay

set_output_delay与set_input_delay非常相似,在这里仅列出其BNF指令,具体的内容参考2.3节即可

set_output_delay [-clock clock_name]
				 [-clock_fall]
				 [-level_sensitive]
				 [-rise]
				 [-fall]
				 [-max]
				 [-min]
				 [-add_delay]
				 [-network_latency_included]
				 [-source_latency_included]
				 delay_value port_pin_list

三、总结

set_input_delay和set_output_delay需要保证正确的设定,以此来确保时序的正确,假如设定不正确,单个的单元电路可能会满足自身时序要求,但整体的集成设计可能会出现时序违例,在讨论set_input_delay的过程中,我们需要关注到:启动时钟才是参考时钟,而在set_input_delay的过程中,采样时钟才是参考时钟。

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

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

相关文章

点击化学FAM荧光素:6-FAM-alkyne,FAM alkyne 6-isomer,6-炔基-羧基荧光素

【中文名称】6-炔基-羧基荧光素 【英文名称】 FAM alkyne,6-isomer,6-FAM-alkyne 【CAS】478801-49-9 【分子式】C24H15NO6 【分子量】413.39 【纯度标准】95% 【包装规格】25mg,50mg,100mg 【是否接受定制】可进行定制,定制时间周…

Kubernetes安装可视化界面

安装可视化界面编写配置文件安装kubernetes-dashboard创建访问账号访问可视化界面dashboard是kubernetes官方提供的可视化界面。 https://github.com/kubernetes/dashboard编写配置文件 创建配置文件存放目录并切换到其中: mkdir /usr/local/kubernetes-dashboard…

java面试强基(10)

Exception 和 Error 有什么区别? 在 Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。Throwable 类有两个重要的子类: Exception :程序本身可以处理的异常,可以通过 catch 来进行捕获。Exception 又可以分为 Checke…

Twitter网红账号营销,一定不能做的事

做社媒运营,我们都会创建一个官方账号与粉丝进行互动沟通,及时通知我们的新活动、产品,也是我们与粉丝建立联系的一个渠道方法。 推特群推王提示,虽然有这么多的好处,但是,也是有很多事项需要注意的&#…

服务器抓包简介

1、微服务服务器上抓包 2、在nginx服务器上抓包 1、服务器安装抓包软件 yum install -y tcpdump 2、服务器抓包命令 tcpdump -i any -s 0 -vvv -w /opt/qqgh.cap port 8080(本服务器该服务的实际ip地址) tcpdump -i eth0 host 10.30.224.170 -w result.…

14.函数的使用

函数的概念 函数是c语言的功能单位,实现一个功能可以封装成一个函数来实现。 定义函数的时候一切以功能为目的,根据功能去定函数的参数和返回值。 函数的分类 1.从定义角度分类(即函数是谁实现的) 库函数(c库实现的…

Fedora怎么设置主菜单快捷键? Fedora快捷键的设置方法

Fedora主菜单可以设置打开快捷键,该怎么设置呢?下面我们就来看看Fedora快捷键的操作方法。 同时按【ALTF2】,输入gnome-terminal,打开终端。 单击右上角的主菜单按钮。 单击【配置文件首选项】。 单击【快捷键】。 单击【显示主菜…

使用DIV+CSS进行网页布局设计【HTML节日介绍网站——二十四节气】

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

【linux】进程概念

文章目录前言进程状态一、普遍的操作系统1、运行状态2、阻塞状态小结(重要知识点)3、新建/就绪状态4、挂起状态小结二、linux操作系统Linux内核源代码1、运行状态(R)2、(浅度)睡眠状态(S&#x…

HTML CSS JS 网页设计作业「我的家乡吉林」

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

HTML小游戏12 —— 汽车赛道飙车游戏(附完整源码)

💂 网站推荐:【神级源码资源网】【摸鱼小游戏】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】💬 免费且实用的计…

【WSL】【Opencv】【C++】在windows中使用WSL开发C++程序的环境搭建

文章目录基本环境Ubuntu安装Opencv从源码安装opencv-4.x从源码安装opencv-3.x直接pkg包安装CLion工程cmake文件写法demo基本环境 (1)安装WSL; (2)安装cmake: wget https://github.com/Kitware/CMake/rele…

作为运维你还在想要不要学Python?听听运维老司机怎么说

概述 今天闲聊下为什么我比较建议运维人员去学python… 建议运维一定要会开发 (文末送读者福利) 现阶段,掌握一门开发语言已经成为高级运维工程师的必备技能,不会开发,你就不能充分理解你们系统的业务流程&#xff…

SpringSecurity(十六)---OAuth2的运行机制(中)-密码、客户端凭据授权类型以及刷新令牌

一、前言 本篇将讨论剩余的授权类型以及使用刷新令牌重新获得令牌等内容,仍然以概念为主。下一节我们将通过一个SSO实例让大家对授权码授权类型更加熟悉。 二、实现密码授权类型 此授权类型也被称为资源所有者凭据授权类型。使用此流程的应用程序会假定客户端收集…

Spark 3.0 - 6.ML 自定义 Transformer 踩坑大全

目录 一.新征程开始 - 道阻且长 二.从源码入手 - 一探究竟 1.Tokenizer 2.UnaryTransformer 三.取源码精髓 - 照猫画虎 四.从实际出发 - 小试牛刀 五.扫重重障碍 - 补阙挂漏 1.Task not serializable 2.jsonEncode only supports string 3.Invisibility Error 4.Non…

补充(三)完善保密性三种定义的通俗表述及等价性的证明

目录 DEFINITION 2.3 完美保密加密方案的定义 LEMMA 2.5 完美保密方案的等价定义(一) LEMMA 2.7 完美保密方案的等价定义(二) 三个等价定义的通俗描述 等价性的证明(手写过程) DEFINITION 2.3 完美保密加密方案的定义 一个在明文空间M上的加密方案…

web前端期末大作业 html+css家乡旅游主题网页设计 湖北武汉家乡介绍网页设计实例

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

外卖项目05---套餐管理业务开发

套餐:一组菜品的集合 点击之后就会弹出下面的界面: 上面是后台的管理操作,下面是处理完成后在用户端展示的界面效果: 目录 一、新增套餐 70 1.1需求分析 70 1.2数据模型 70 ​编辑1.3新增套餐---代码开发---准备工作&梳理…

vtk.js滚动切片

关于滚动切片,官方有一个很好的例子,如下图: 关键代码 const mapper vtkImageMapper.newInstance(); mapper.setInputConnection(rtSource.getOutputPort()); mapper.setSliceAtFocalPoint(true);//这一行切片的光照焦点必须要设置为true,否…

CSDN周赛第十期总结

文章目录竞赛概述题解熊孩子摆拜访问题目描述数据范围样例输入样例输出代码走楼梯题目描述输入描述输出描述样例输入 1样例输出 1代码括号上色输入描述:输出描述:输入样例:输出样例:代码喜水青蛙题目描述输入描述:输出…