静态时序分析:SDC约束命令set_clock_latency详解

相关阅读

静态时序分析icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12567571.html?spm=1001.2014.3001.5482


        时钟的延迟可以使用set_clock_latency命令设置,这里的时钟延迟包括源延迟(source latency),即时钟对象到时钟源对象(时钟定义点)的延迟,又叫插入延迟(insertion delay);以及网络延迟(network latency),即时钟源到各触发器时钟引脚的延迟。正如上一篇文章中说的一样静态时序分析:SDC约束命令set_clock_transition详解-CSDN博客,因为时钟树尚未创建,时钟端口的高扇出会导致,任何在时钟路径上的转换时间和延迟的计算都是毫无意义的,网络延迟只是一种预布局阶段(pre-layout)的估计,但注意源延迟在时钟树综合完成后依然会存在。

        该指令的BNF范式(有关BNF范式,可以参考以往文章)为:

set_clock_latencydelay object_list [-rise] [-fall] [-min] [-max][-source] [-early] [-late] [-dynamic jitter][-clock clock_list]//注:该命令的object_list参数一定要放在delay参数后

延迟值

        delay参数指定了时钟延迟值,默认情况下是指网络延迟,当使用了-source选项后指的是源延迟。注意,这个值一般为正,如果为负会出现如下所示的警告。

Warning: Value for <delay> is negative. (UID-450)

对象列表

        object_list参数指定了延迟值的作用对象,对于网络延迟,它可以是时钟、端口和引脚;对于源延迟,它可以是时钟以及源对象(即定义了时钟的端口或引脚)。

        如果对象是时钟,则源延迟或网络延迟会直接被指定在时钟上;如果对象是端口,则所有经过该端口的时钟会被指定源延迟或网络延迟;如果对象是引脚,则所有经过该引脚的所有时钟会被指定源延迟或网络延迟。

        下面对上面的描述进行举例说明,以图1所示的电路为参考。

图1 一个简单的例子 

        下面的命令创建了两个时钟对象,其中一个时钟clk控制发射触发器,一个时钟CLK控制捕获触发器(有关发射、捕获触发器,可以看以往的文章静态时序分析:建立时间分析-CSDN博客)

create_clock -period 10 [get_port clk]
create_clock -period 20 [get_port CLK] 

        下面的命令给clk时钟设置了源延迟和网络延迟。

set_clock_latency 0.1 [get_clock clk]
set_clock_latency -source 0.2 [get_clock clk]

        可以使用report_clock -skew命令查看时钟(包括其他允许的对象)的延迟情况,如图2所示。 

图2 时钟延迟报告

        下面的命令继续在端口clk上设置了源延迟和网络延迟,注意这两条命令与之前的区别。

set_clock_latency 0.3 [get_port clk]
set_clock_latency -source 0.4 [get_port clk]

         延迟情况如图3所示,可以看到其中有两个clk对象的源延迟和网络延迟,这是因为其中一个clk指的是时钟对象,另一个clk指的是端口对象。

图3 时钟延迟报告

         使用report_timing命令给出时序分析报告,如图4所示。

图4 时序分析报告

        可以看出,源延迟和网络延迟被叠加后合称为clock network delay,并且使用的是clk端口的延迟0.4源延迟+0.3网络延迟而不是clk时钟的延迟0.2源延迟+0.1网络延迟,这是因为端口的延迟覆盖了时钟的延迟,也可以时钟延迟指定的优先级低于端口指定的延迟。

        另外,我们可以看出对于理想时钟,DC并不会直接计算其实际时钟路径上的延迟(如计算U1、U2的延迟),而是直接使用set_clock_latency指定。

指定沿

        -rise选项用于指定延迟值作用于上升沿、-fall选项用于指定延迟值作用于下降沿。如果这两个选项都没有指定,延迟同时作用于时钟的上升沿和下降沿(相当于它们同时指定)。

        下面的命令更改端口clk的上升沿网络延迟为0.5,保持其下降沿网络延迟为0.3,延迟情况如图5所示。

set_clock_latency 0.5 -rise [get_port clk]

图5 时钟延迟报告

        使用report_timing命令给出时序分析报告,如图6所示。

图6 时序分析报告

        可以看出,由于本例的触发器是上升沿触发,因此我们的设置起了作用,现在的clock network delay是0.4源延迟+0.5网络延迟。

最大/最小条件

        -max选项用于指定延迟值作用于最大条件(建立时间分析),-max选项用于指定延迟值作用于最小条件(保持时间分析)。如果这两个选项都没有指定,延迟同时作用于最大条件和最小条件(相当于它们同时指定)。

        下面的命令更改端口clk的上升沿最大网络延迟为0.6,上升沿最小网络延迟为0.7,延迟情况如图7所示。

set_clock_latency 0.6 -rise -max [get_port clk]
set_clock_latency 0.7 -rise -min [get_port clk]

图7 时钟延迟报告

        使用report_timing命令分别给出建立时间和保持时间的时序分析报告,如图8和图9所示。

图8 建立时间时序报告

 图9 保持时间时序报告

        可以看出,建立时间时序分析时,clock network delay是0.4源延迟+0.6网络延迟;而保持时间时序分析时,clock network delay是0.4源延迟+0.7网络延迟。

早/晚延迟

        -early选项只能用于指定源延迟(即只能搭配-source使用),用于指定最快(最小源延迟)的源路径; -late选项只能用于指定源延迟(即只能搭配-source使用),用于指定最满(最大源延迟)的源路径。在建立时间分析和保持时间分析中,会对发射时钟和捕获时钟的这点进行考虑,给出最差情况下的分析结果。如果这两个选项都没有指定,源延迟同时作用于最快情况和最慢情况(相当于它们同时指定)。为了与实际情况吻合,-early指定的源延迟应小于-late指定的源延迟。

        我们用下面的命令给端口CLK(即捕获时钟)设置一个最快源延迟0.1,一个最慢源延迟0.2,延迟情况如图10所示。

//注意-early和-late选项必须搭配-source使用
set_clock_latency -early -source 0.1 [get_port CLK]
set_clock_latency -late -source 0.2 [get_port CLK]

图10 时钟延迟报告

        使用report_timing命令分别给出建立时间和保持时间的时序分析报告,如图11和图12所示。 

图11 建立时间时序报告

图12 保持时间时序报告

        可以看到,在建立时间分析时,捕获时钟CLK使用了最小源延迟0.1;在保持时间分析时,捕获时钟CLK使用了最大源延迟0.2。这两者都是最坏的情况下的结果。发射时钟clk的不同延迟是因为上节中的-min/-max选项,注意要辨别这两者的差异。这点从时钟延迟报告中也可以看出,-min/-max、-early/-late、-rise/-fall这几组选项是可以任意搭配的。

        -source选项的作用,在前面已经进行过说明。-dynamic选项用于模拟时钟延迟的抖动,用得较少。

时钟列表选项

        时钟选项-clock用于指定一个列表,因为对象列表中可以有端口和引脚,会出现多个时钟从同一个端口或引脚经过。如果没有使用-clock选项指定,则命令对多个时钟生效;如果指定了-clock选项和时钟列表,则命令只对时钟列表中的时钟生效。

        在下面的例子中,我们使用命令在CLK端口又定义了一个时钟CLK1,并令端口CLK的源延迟为0.5,这会使得CLK1和CLK时钟在经过CLK端口时都受到影响,如图13、图14和图15所示。

create_clock -period 30 -add -name CLK1 [get_port CLK]
set_clock_latency -source 0.5 [get_port CLK]

图13 时钟延迟报告

 图14 捕获时钟为CLK的时序报告

图15 捕获时钟为CLK1的时序报告

        现在我们使用带-clock选项的命令,将CLK端口对CLK1的源延迟影响变成0.6,如图16、图17和图18所示。

set_clock_latency -source 0.6 [get_port CLK] -clock_list CLK1

图16 时钟延迟报告

图17 捕获时钟为CLK的时序报告

图18 捕获时钟为CLK1的时序报告 

        可以看到,端口CLK对CLK的源延迟影响依然是0.5,但对CLK1的源延迟影响已经变成了0.6。

移除属性

      使用remove_clock_latency可以移除时钟延迟属性,注意为了移除源延迟属性,需要加上-source选项。

其他

        -dynamic选项用于指定时钟延迟的抖动(jitter),这个选项不常使用,用于指定延迟中,不确定部分的延迟值,对于建立时间分析/保持时间分析,发射时钟/捕获时钟会有不同的情况,以使得最差情况的时序得到分析。

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

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

相关文章

MyBatisPlus 整合 SpringBoot 遇见的问题

【异常】&#xff1a;Cause: java.sql.SQLSyntaxErrorException: Unknown column ‘udf1’ in ‘field list’… SQL: SELECT id,oper_id,btch_id,udf1, FROM scan_cyber Cause: java.sql.SQLSyntaxErrorException: Unknown column ‘udf1’ in ‘field list’; ,"messag…

CleanMyMac X好不好用?如何下载2024最新版本

CleanMyMac X是一款好用的系统优化软件&#xff0c;具有简洁的界面和多样的功能&#xff0c;能够支持系统垃圾、图片、邮件、iTunes清理&#xff0c;移除恶意软件&#xff0c;优化系统和释放多余空间等。 CleanMyMac X全新版下载如下: https://wm.makeding.com/iclk/?zoneid4…

【HarmonyOS】鸿蒙开发之Text组件——第3.2章

text组件属性介绍 textAlign有三种属性start(默认),end,center Column(){//默认文字大小16Text("迪加奥特曼").width(200)Text().margin({top:10,bottom:10})Text("泰罗奥特曼").width(200).fontSize(26).fontColor(Color.Red).textAlign(TextAlign.End)…

计算机设计大赛 深度学习二维码识别

文章目录 0 前言2 二维码基础概念2.1 二维码介绍2.2 QRCode2.3 QRCode 特点 3 机器视觉二维码识别技术3.1 二维码的识别流程3.2 二维码定位3.3 常用的扫描方法 4 深度学习二维码识别4.1 部分关键代码 5 测试结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天…

【Java】Static关键字与类的实例化

关键字&#xff1a;static 作用&#xff1a;主要用于内存管理 范围&#xff1a;可以用在变量、方法、代码块和嵌套类上。java关键字属于类&#xff0c;但不是类的实例。 类的成员变量包括&#xff1a; 【静态变量/类变量】&#xff1a;指被static修饰的成员变量 运行时&#…

离线数仓(二)【用户行为日志采集平台搭建】

用户行为日志采集平台搭建 1、用户行为日志概述 用户行为日志的内容&#xff0c;主要包括用户的各项行为信息以及行为所处的环境信息。收集这些信息的主要目的是优化产品和为各项分析统计指标提供数据支撑。收集这些信息的手段通常为埋点。 目前主流的埋点方式&#xff0c;有代…

【Kubernetes in Action笔记】1.快速开始

在Kubernetes上运行一个程序 基础运行环境 当前的运行环境为使用虚拟机构建的单master集群。 [rootk8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 109d v1.27.1 k8s-node1 Ready …

代码随想录算法训练营第十六天 | 104.二叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数 [二叉树篇]

代码随想录算法训练营第十六天 LeetCode 104.二叉树的最大深度题目描述思路递归后序遍历参考代码递归前序遍历参考代码总结 LeetCode 111.二叉树的最小深度题目描述思路参考代码 LeetCode 222.完全二叉树的节点个数题目描述思路后序遍历参考代码1后序遍历参考代码2 LeetCode 10…

Stable Diffusion ComfyUI安装详细教程

上一篇文章介绍了sd-webui的安装教程&#xff0c;但学习一下ComfyUI这种节点流程式的对理解AI绘画有较大帮助&#xff0c;而且后期排查错误会更加方便&#xff0c;熟练后用这种方式做AI绘画可玩性会更多。 文章目录 一、安装包说明二、安装文件介绍三、安装步骤四、汉化五、云主…

Linux-ls命令

目录 ls&#xff1a;查看目录下文件/文件夹 ls -l&#xff1a;列表显示文件 ls -a&#xff1a;显示所有文件正常情况下‘ . ’开头的文件是隐藏的 ls -la&#xff1a;以列表形式显示所有文件包括隐藏文件 ls -lt&#xff1a;按时间倒序查看文件 ls -R&#xff1a;递归方式…

Open CASCADE学习|曲线向曲面投影

在三维空间中&#xff0c;将曲线向曲面投影通常涉及复杂的几何计算。这个过程可以通过多种方法实现&#xff0c;但最常见的是使用数学和几何库&#xff0c;如OpenCASCADE&#xff0c;来处理这些计算。 在OpenCASCADE中&#xff0c;投影曲线到曲面通常涉及以下步骤&#xff1a;…

第14讲投票帖子详情实现

投票帖子详情实现 后端,根据id查询投票帖子信息&#xff1a; /*** 根据id查询* param id* return*/ GetMapping("/{id}") public R findById(PathVariable(value "id")Integer id){Vote vote voteService.getById(id);WxUserInfo wxUserInfo wxUserInf…