静态时序分析: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_latency
    delay 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),这个选项不常使用,用于指定延迟中,不确定部分的延迟值,对于建立时间分析/保持时间分析,发射时钟/捕获时钟会有不同的情况,以使得最差情况的时序得到分析。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot java -jar --spring.profiles.active=dev 失效问题

之前动态部署修改配置文件的情况不多&#xff0c;所以也没注意过&#xff0c;这个问题今天困扰了好久&#xff0c;经过多方查询后得到了解决办法 直接上代码 <profiles><profile><!-- 本地开发环境 --><id>dev</id><properties><profi…

⭐北邮复试刷题LCR 012. 寻找数组的中心下标__前缀和思想 (力扣119经典题变种挑战)

LCR 012. 寻找数组的中心下标 给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为…

PyCharm 新建目录 (directory or folder)

PyCharm 新建目录 [directory or folder] 1. 新建目录2. Enter new directory name -> OKReferences 1. 新建目录 right mouse click on the project -> New -> Directory 2. Enter new directory name -> OK ​​​ References [1] Yongqiang Cheng, https:/…

BUGKU-WEB 源代码

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 你说啥就是啥&#xff1a;去源代码吧 相关工具 URL解码平台&#xff1a;https://www.iamwawa.cn/urldecode.html 解题步骤 随便输入试试 2. 看看源码 存在script&#xff1a; <script> …

Discuz! X3.4数据(145) Table ‘.common_member_status问题完美解决

报错&#xff1a;UPDATE common_member_status SET lastip’101.60.11.54′ , port’11296′ , lastactivity’1705538227′ , lastvisit’1705538227′ WHERE uid’1′ 这种问题完美解决教程&#xff1a;Discuz! X3.4数据(145) Table ‘.common_member_status问题已经解决

Leetcode刷题笔记题解(C++):120. 三角形最小路径和

思路&#xff1a;动态规划&#xff0c;去生成一个对应的当前节点的最小路径值&#xff0c;对应的关系如下所示 dp[0][0] triangle[0][0] dp[i][0] triangle[i][0]dp[i-1][0] dp[i][i] triangle[i][i]dp[i-1][i] dp[i][j] triangle[i][j]min(dp[i-1][j-1],dp[i-1][j]) …

C#,二进制数的按位交换(Bits swap)的算法与源代码

数字在指定位置指定位数的交换是常见算法。 1 源程序 using System; using System.Text; using System.Collections; using System.Collections.Generic; namespace Legalsoft.Truffer.Algorithm { public static partial class Algorithm_Gallery { /// <…

使用CompletableFuture在主线程捕获子线程异常

场景&#xff1a;我们使用线程池的时候&#xff0c;假如说某个线程出现了异常此时我们需要将异常捕获打印出相应的异常日志 这个时候就可以用到CompletableFuture的exceptionally方法&#xff0c;其作用是返回一个新的CompletableFuture&#xff0c;如果原CompletableFuture以…

论UI的糟糕设计:以百度网盘为例

上面这一排鼠标一经过就会弹出来&#xff08;不是点才弹出来&#xff09;&#xff0c;然后挡住你的各种操作&#xff0c; 弹出来时你就必须等它消失&#xff0c;卡一下才能操作。 在用户顺畅地操作内容时&#xff0c;经常就卡一下、卡一下、卡一下…… 1、比如鼠标从下到上&am…

Java,SpringBoot项目中,Postman的测试方法。

展示查询搜索 // 根据姓名分页查询用户GetMapping("/getUsersByName")public IPage<User> getUsersByName(RequestParam(defaultValue "1") Long current,RequestParam(defaultValue "2") Long size,RequestParam(required false) Stri…

ALINX黑金AXU3EGB 开发板用户手册RS485通信接口图示DI RO信号方向标识错误说明

MAX3485这类RS485芯片&#xff0c;DI是TTL信号输入&#xff0c;RO是TTL信号输出 如下图是MAX3485手册规格书。 因此 ALINX黑金AXU3EGB 用户手册 Page 43页 图 3-11-1 PL 端 485 通信的连接示意图&#xff0c;MAX3485芯片的DI RO信号输入输出标识方向是错误的&#xff0c;应为蓝…

C++-opencv的imread、imshow、waitkey、namedWindow

在C中使用OpenCV时&#xff0c;imread和imshow是两个非常基础且常用的函数&#xff0c;用于读取图像和显示图像。以下是这两个函数的简要说明和如何一起使用它们的示例。 imread函数 imread用于从指定的文件路径读取图像。它将图像读入为cv::Mat对象&#xff0c;这是OpenCV中…

Pulsar-架构与设计

Pulsar架构与设计 一、背景和起源二、框架概述1.设计特点2.框架适用场景 三、架构图1.Broker2.持久化存储&#xff08;Persistent storage&#xff09;3.Pulsar元数据&#xff08;Metadata store&#xff09; 四、功能特性1.消息顺序性2.消息回溯3.消息去重4.消息重投递5.消息重…

SPSSAU【文本分析】|我的词库

我的词库 文本分析时&#xff0c;可能涉及到一些新词&#xff0c;比如‘内卷’&#xff0c;这个词很可能在词典中并未出现过&#xff0c;词库也不认识它。但研究者自己认识它&#xff0c;此时可将该词纳入到新词词库中&#xff0c;让系统统计词频等信息时也对该词进行统计。当…

内存池源码剖析

SGI STL vector内存池源码 SGI STL包含了一级空间配置器和二级空间配置器&#xff0c;其中一级空间配置器allocator采用malloc和free来 管理内存&#xff0c;和C标准库中提供的allocator是一样的&#xff0c;但其二级空间配置器allocator采用了基于freelist 自由链表原理的内存…

MySql性能优化

0 引言 MySQL优化&#xff0c;一方面是找出系统的瓶颈&#xff0c;提高MySQL数据库整体的性能&#xff1b;另一方面需要合理的结构设计和参数调整&#xff0c;以提高用户操作响应的速度&#xff1b;同时还要尽可能节省系统资源&#xff0c;以便系统可以提供更大负荷的服务。 …

Django后端开发——模型层及ORM介绍

文章目录 参考资料Django配置MySQL安装mysqlclient创建数据库进入数据库的操作可能遇到的问题及解决方案Pycharm配置settings.py 模型![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c83753397bf6481d8defde26537903bf.png)ORM介绍示例终端&#xff1a;settings.py…

transformer 最简单学习1 输入层embeddings layer

词向量的生成可以通过嵌入层&#xff08;Embedding Layer&#xff09;来完成。嵌入层是神经网络中的一种常用层&#xff0c;用于将离散的词索引转换为密集的词向量。以下是一个典型的步骤&#xff1a; 建立词表&#xff1a;首先&#xff0c;需要从训练数据中收集所有的词汇&…

open3d DBSCAN 聚类

DBSCAN 聚类 一、算法原理1.密度聚类2、主要函数 二、代码三、结果四、相关数据 一、算法原理 1.密度聚类 介绍 基于密度的噪声应用空间聚类(DBSCAN)&#xff1a;是一种无监督的ML聚类算法。无监督的意思是它不使用预先标记的目标来聚类数据点。聚类是指试图将相似的数据点分…

ALINX黑金AXU3EGB 开发板用户手册 CAN接口信号方向标识错误说明

如上篇文章 CAN收发器 SN65HVD232 的D R引脚方向是 D是输入&#xff0c;R是输出。 https://blog.csdn.net/zhengwenbang/article/details/136151668?spm1001.2014.3001.5501 因此 ALINX黑金AXU3EGB 用户手册 Page 43页 图 3-10-1 PS 端 CAN 收发芯片的连接示意图&#xff0c;…