静态时序分析:SDC约束命令set_clock_uncertainty

news2024/11/28 0:43:08

相关阅读

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


        set_clock_uncertainty是用来指定设计中时钟周期的不确定性,不确定性指的是对那些会对时钟周期造成的负面影响。这些不确定性可能来源于时钟抖动(clock jitter)或时钟偏差(clock skew)等一切想要在时序分析中考虑的悲观因素。

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

set_clock_uncertainty
               [object_list
                | -from from_clock -to to_clock
                | -rise_from rise_from_clock -rise_to rise_to_clock
                | -fall_from fall_from_clock -fall_to fall_to_clock]
               [-setup]
               [-hold]
               uncertainty

定义不确定值

         uncertainty是不确定值的具体浮点数值,它的单位由工艺库给出。下面所有的实例,默认是以纳秒(ns)为单位的。典型的不确定值是正数,用以表示悲观估计;如果不确定值是负的,则代表额外的时序裕度,这表示了乐观估计,应该在一些极端条件下使用。

对象列表

        object_list指定了设置不确定度的时钟、端口和引脚。如果对象是时钟,则不确定度会直接被指定在时钟上;如果对象是端口,则所有经过该端口的时钟会被指定时钟不确定度;如果对象是引脚,则所有经过该引脚的所有时钟会被指定时钟不确定度。注意这三者是可以相互覆盖的,即如果如果一个时钟的时钟不确定度为0.5,但其定义在一个时钟不确定度为0.4端口上,则最终到达触发器的时钟引脚的时钟不确定度则为0.4;如果触发器的时钟引脚定义了一个0.3的时钟不确定度,则不论其他定义如何,这个触发器的时钟不确定度一定是0.3。

        下面是一些简单的使用示例。

#直接将时钟不确定度定义在时钟上
set_clock_uncertainty 0.2 [get_clocks clk]

#将时钟不确定度定义在时钟端口上
set_clock_uncertainty 0.3 [get_ports clk]

#将时钟不确定度定义在时钟引脚上
set_clock_uncertainty 0.4 [get_pins reg/CK]

        在定义了时钟不确定度后,我们可以使用report_clock -skew命令查看所有定义了的时钟不确定度,如图1所示。 

图1 时钟不确定度报告 

        可以从图中看出,定义了三个对象的时钟不确定度,data_out_reg可以很明显看出是一个触发器的时钟引脚,而为什么会有两个clk_2对象呢?其实答案很简单,这是两个同名的对象,但是其中一个是时钟本身,另一个是时钟端口。 

        最后顺带一提,如果重复对同一个对象定义了时钟不确定度,则最新定义会覆盖之前的定义。

时序分析中的时钟不确定度

        目前为止,我们还没有接触时钟不确定度的具体作用,但我们已经可以定义简单的时钟不确定度了。时钟不确定度影响了所有使用此时钟的捕获触发器,使终点为该触发器的时序路径的时序裕度减少该不确定度值。下面我们通过一个简单的例子加深理解。

        考虑两个触发器组成的简单结构,其中第一个触发器即发射触发器由clk_1时钟控制,第二个触发器即捕获触发器由clk_2时钟控制,有关发射触发器和捕获触发器的内容,可以看以往的文章静态时序分析:建立时间分析-CSDN博客,具体电路结构如图2所示。

图2 简单的例子 

        现在我们只研究从t_reg的时钟端到data_out_reg的数据输入端的时序路径。首先使用下面的命令在两个时钟端口上分别创建两个时钟对象。

create_clock -period 10 -waveform {5 10} [get_port clk_1]
create_clock -period 10 -waveform {5 10} [get_port clk_2] 

        然后我们使用下面的命令,分别设置这两个时钟对象的时钟不确定度,在这里为了区分,设置的数值是不同的。

set_clock_uncertainty 0.1 [get_clock clk_1]
set_clock_uncertainty 0.5 [get_clock clk_2]

        最后我们使用report_timing命令给出建立时间时序报告,如图3所示。

图3 建立时间时序报告 

         从图3中可以看出,只有捕获时钟的时钟不确定度会影响相应的时序路径,而发射时钟的时钟不确定度则不会。clk_2的时钟不确定度体现在了clock uncertainty这一项中,导致data  required time减少了0.5,也就导致了最后的裕度(slack)减少了0.5。

        对于保持时间的分析也是类似的,在此不进行赘述。

时钟间不确定度

        上小节中使用对象列表定义的是普通的时钟不确定度,还有一种时钟不确定度称为时钟间不确定度(interclock uncertainty)。它是由-from\-rise_from\-fall_from选项之一与-to\-rise_to\-fall_to选项之一指定的。从BNF范式中可以看出,每次使用命令时,普通的时钟不确定度和时钟间不确定度只能选择其一,但一个时钟可以同时拥有普通的时钟不确定度和时钟间不确定度。

        时钟间不确定度,不仅使用-from\-rise_from\-fall_from指定了发射时钟,还使用-to\-rise_to\-fall_to指定了捕获时钟。-from指定了发射时钟的上升和下降沿,-rise_to\-fall_to指定了发射时钟的上升\下降沿,-to指定了捕获时钟的上升和下降沿,-rise_from\-fall_from指定了捕获时钟的上升\下降沿。两组选项之间可以任意搭配,比如-from与-fall_to,-fall_from与-rise_to等...

        下面来看一个实例,在图2例子的基础上,我们使用下面的命令创建一个从clk_1到clk_2的时钟间延迟。

set_clock_uncertainty 0.8 -from clk_1 -to clk_2

        使用report_clock -skew命令报告所有的时钟不确定度,如图4所示。

图4 时钟不确定度报告 

        我们会发现,普通的时钟不确定度和时钟间不确定度可能会发生冲突,比如图4中clk_1到clk_2的时钟间不确定度是0.8而clk_2的普通时钟不确定度是0.5。在发生冲突时,以时钟间不确定度为准,即在分析从clk_1到clk_2的时序路径时,以0.8作为不确定度,如图5的时序报告所示。

图5 建立时间时序报告

        在上例的基础上,如果再使用下面的命令,则会将已设置的时钟间不确定度分成四份(因为此时这四份不确定度不再统一),分别对应发射时钟的上升\下降沿到捕获时钟的上升\下降沿的时钟间不确定度,如图6所示,其中r代表上升沿,f代表下降沿。

set_clock_uncertainty 0.4 -fall_from clk_1 -rise_to clk_2

图6  四份时钟间不确定度

建立\保持时间 

        到这里为止,我们讨论的不确定度的设置都是同时针对建立时间检查和保持时间检查,从上面的图中也可以看到这一点,即Plus\Hold Uncertainty和Setup\Minus Uncertainty被设置为相同的值。

        使用-setup和-hold,可以指定时钟不确定度只设置给建立时间或保持时间(默认情况下,时钟不确定度同时设置给建立时间和保持时间)。顺带一提,这两个选项可以同时指定,此时和默认情况一致。

        例如可以使用下面的命令,更改clk_2的保持时间的时钟不确定度,如图7所示。

set_clock_uncertainty -hold 1.0 [get_clock clk_2]

图7 更改了clk_2的保持时钟不确定度 

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

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

相关文章

mysql8.0.36主从复制(读写分离)配置教程

1、关闭防火墙 使用命令行关闭防火墙 在Ubuntu系统中,可以使用以下命令关闭防火墙: sudo ufw disable执行该命令后,系统会提示是否要关闭防火墙,确认后即可关闭防火墙。 查看防火墙状态 使用以下命令可以查看防火墙当前的状…

代码随想录Day50 | 70. 爬楼梯 322. 零钱兑换 279.完全平方数

代码随想录Day50 | 70. 爬楼梯 322. 零钱兑换 279.完全平方数 70.爬楼梯322.零钱兑换279.完全平方数 70.爬楼梯 文档讲解:代码随想录 视频讲解: 状态 dp数组 dp[j]表示爬上第j阶台阶需要的方法数递推公式,由于在每一阶台阶可以向上走1~m阶&a…

AGV|RGV基本概念及导航分类与差异

AGV是自动导引运输车,装备采用电磁或光学等自动导引装置,能够沿规定的导引路径行驶,具有安全保护以及各种移载功能的运输车。其导航方式主要分磁条|磁钉导航、激光导航、激光反光板、激光自然导航、二维码导航、惯性导航等方式,广…

Java学习手册——第七篇基础语法

Java学习手册——第七篇基础语法 1. 注释2. 顺序语句3. 条件语句3.1 if语句3.2 switch语句 4. 循环语句4.1 for循环4.2 while 语句4.3 do...while语句 本篇为大家快速入门Java基础语法,了解一个语言的基础语法是必要的, 因为我们后期都是需要用这些基础语…

Kafka(三)(集成SpringBoot)

第三章 Kafka集成 SpringBoot SpringBoot 是一个在 JavaEE 开发中非常常用的组件。可以用于 Kafka 的生产者&#xff0c;也可以 用于 SpringBoot 的消费者。 在初始化springboot环境的时候要勾选kafka依赖 <dependency><groupId>org.springframework.kafka</gr…

【基础】第K大与第K小数

说明 给定一个长度为N(0< n< 10000)的序列&#xff0c;保证每一个序列中的数字a[i]是正整数 &#xff0c;编程要求求出整个序列中第k大的数字减去第k小的数字的值m&#xff0c;并判断m是否为质数。(0< k< n) 输入数据 第一行为2个数n&#xff0c;k&#xff08;…

步步深入 k8s 使用 pv pvc sc 在 nfs 基础上共享存储

博客原文 文章目录 前言集群环境nfs 环境搭建pod 挂载 nfs架构图 pvc 方式挂载 nfs架构图 storageclass 方式动态申请 pv架构图 参考 前言 持久化卷&#xff08;Persistent Volume, PV&#xff09;允许用户将外部存储映射到集群&#xff0c;而持久化卷申请&#xff08;Persist…

[Java][算法 滑动窗口]Day 02---LeetCode 热题 100---08~09

第一题 无重复字符串的最长子串 思路 其实就是在字符串S中 找到没有重复的最长子串的长度 这道题的难点就是在于如何判断最长并且无重复 首先 最长长度 可以使用变量max记录保存 再者 判断有无重复 最简单的方法就是 暴力遍历法 即对于每次找的子串都再次寻找遍历…

【Django】Django内建用户系统

Django内建用户系统 14.1 Django中的用户认证 Django带有一个用户认证系统系统&#xff0c;它处理用户用户账号、组、权限以及基于cookie的用户会话。 用户可以直接使用Django自带的用户表。 官方文档&#xff1a;https://docs.djangoproject.com/zh-hans/2.2/topics/auth/ …

计算机组成原理 2 数据表示

机器数 研究机器内的数据表示&#xff0c;目的在于组织数据&#xff0c;方便计算机硬件直接使用。 需要考虑&#xff1a; 支持的数据类型&#xff1b; 能表示的数据精度&#xff1b; 是否有利于软件的移植 能表示的数据范围&#xff1b; 存储和处理的代价&#xff1b; ... 真值…

ELAdmin 配置定时任务

定义方法 在自己的 Module 中写个要执行的方法。 比如获取微信公众号的 accessToken&#xff0c;每两个小时更新一次。这种的其实使用 Spring 的 Scheduled 更方便些&#xff0c;此处仅为演示。 package me.zhengjie.mp.task;import com.alibaba.fastjson.JSON; import lombo…

基于Linux的nfs、samba网络服务搭建

我学的Ubuntu&#xff0c;以它为例子 一、nfs(linux <---> linux) 1.1.nfs首先搭建服务端&#xff08;对外共享&#xff09; //安装nfs核心服务 sudo apt update sudo apt install nfs-kernel-server //配置nfs文件(指定共享文件) sudo vim /etc/exports //重启nf…

H5 渐变3D旋转个人主页引导页源码

H5 渐变3D旋转个人主页引导页源码 源码介绍&#xff1a;一款渐变3D旋转个人主页引导页源码&#xff0c;可以做个人主页/旗下网站引导 下载地址&#xff1a; https://www.changyouzuhao.cn/10392.html

第三百四十五回

文章目录 1. 概念介绍2. 方法与功能2.1 基本用法2.2 加密算法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"FlutterCacheManager组件"相关的内容&#xff0c;本章回中将介绍一个加密工具包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 加密主要…

【MySQL进阶之路】通过实操理解 explain 执行计划

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

【刷题记录】——2024寒假day9编程题

本系列博客为个人刷题思路分享&#xff0c;有需要借鉴即可。 1.目录大纲&#xff1a; 2.题目链接&#xff1a; T1:LINK T2:LINK 3.详解思路&#xff1a; T1: 思路&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/#include<…

计算机网络——11EMail

EMail 电子邮件&#xff08;EMail&#xff09; 3个主要组成部分 用户代理邮件服务器简单邮件传输协议&#xff1a;SMTP 用户代理 又名“邮件阅读器”撰写、编辑和阅读邮件输入和输出邮件保存在服务器上 邮件服务器 邮箱中管理和维护发送给用户的邮件输出报文队列保持待发…

【成长记录】第一次写博客入csdn榜单了 还是第一.....

庆祝一下第一次拿综合榜榜一 Java内容榜第二 总之谢谢大家支持 小苏会继续努力的 可以看看我的新作 嘻嘻&#x1f601;&#x1f924;&#x1f449;&#x1f3fb;&#x1f448;&#x1f3fb; 谢谢大家

web3知识体系汇总

web3.0知识体系 1.行业发展 2. web3的特点&#xff1a; 1、统一身份认证系统 2、数据确权与授权 3、隐私保护与抗审查 4、去中心化运行 Web3.0思维技术思维✖金融思维✖社群思维✖产业思维”&#xff0c;才能从容理解未来Web3.0时代的大趋势。 3.技术栈 Web3.jsSolidit…

Spring Boot 笔记 005 环境搭建

1.1 创建数据库和表&#xff08;略&#xff09; 2.1 创建Maven工程 2.2 补齐resource文件夹和application.yml文件 2.3 porn.xml中引入web,mybatis,mysql等依赖 2.3.1 引入springboot parent 2.3.2 删除junit 依赖--不能删&#xff0c;删了会报错 2.3.3 引入spring web依赖…