首页 > 其他分享 >STA-静态时序分析学习记录-1

STA-静态时序分析学习记录-1

时间:2022-10-07 10:12:01浏览次数:50  
标签:set STA clock 静态 时序 delay path 时钟


cell的传播延时是根据电平转换波形上的某些测量点定义的,使用以下四个变量定义这些测量点

#输入端口下降沿阙值
input_threshold_pct_fall: 50.0;

#输入端口上升沿阙值
input_threshold_pct_rise: 50.0;

#输出端口下降沿阙值
output_threshold_pct_fall: 50.0;

#输出端口上升沿阙值
output_threshold_pct_rise: 50.0;

假设有一个CMOS反相器cell,其输入输出管脚的波形图如下图所示,传播延时是指如下两个值:

  • 输出下降沿延时(output fall delay): Tf
  • 输出上升沿延时(output rise delay): Tr

从上面的波形图可以看到,Tf指的是从A port上升沿50%的时间点到Z port下降沿50%的点,50%是先前在测量点设定时设置的

Skew between signals

skew指的是多个信号之间在timing上的差值

例如,一个clock tree有500个end points,并且有50ps的skew,这意味着 clock tree起点到最长path终点 与clock tree起点到最短path终点之间的延迟差值是50ps

用下图来区分clock skewclock latency

图中A是clock tree的起点,B、C、D是三个clock tree的终点

A --> B是一条path,A --> C是一条path,A --> D是一条path

每条path上所花费的时间是clock latency,不同path上的clock latency的差值是clock skew

显式指定clock tree的延迟:

set_clock_latency 2.2 [get_clock BZCLK]
#上升沿和下降沿的latency都是2.2
#也可以使用-fall或-rise选向分别指定不同的latency

显式指定clock skew

set_clock_uncertainty 0.250 -setup [get_clocks BZCLK]
set_clock_uncertainty 0.100 -hold [get_clocks BZCLK]

set_clock_uncertainty为时钟沿的出现指定了一个窗口,时钟边沿时序的不确定性会考虑多个因素,例如时钟周期抖动(jitter)和用于时序验证的额外裕量(slack)

每个实际的时钟源都有一定的抖动量,可以理解成一个可以产生时钟沿的时间窗口

现实中所有的时钟都有一定的抖动量,因此在指定时钟不确定性时应当包含时钟周期抖动

此外在时树实现之前,时钟不确定性还要包括clock skew

时钟不确定性包括clock skew、时钟周期抖动

hold check和setup check可以指定不同的时钟不确定性,由于hold check的时钟不确定性不需要包含时钟抖动,因此通常为hold check指定较小的时钟不确定性

下图是不确定性为250ps时的setup check,图a是时钟源的波形图,图b是触发器时钟端接受到的波形图

在时钟源中,第二个上升沿在A处,因为在setup check中指定了250ps的不确定性,因此对于触发器的时钟端来说,第二个上升沿就有可能出现在B处

set_clock_uncertainty也可以用于建模任何额外的时间裕量,比如design过程中,designer用50ps的时序裕量作为额外的pessimism

通常在实现clock tree之前,要先指定时钟不确定性

时钟不确定性包括:时钟抖动、时钟偏移和额外的pessimism,换句话说,时钟抖动、时钟偏移和额外的pessimism的指定都在set_clock_uncertainty

set_clock_latency 2.0 [get_clocks USBCLK]

set_clock_uncertainty 0.2 [get_clocks USBCLK]
#200ps的时钟不确定性可能由50ps时钟抖动、100ps时钟偏斜以及50ps额外的pessimism组成

最大和最小时序路径

在实际电路中,无论是cell还是net,当逻辑经过时都会产生延迟,通常,一个逻辑从起点到终点可能不止一条逻辑path可以走,如下图所示

可以看到从UFF1/Q到UFF3/D,红色和绿色两条path都可以实现,那么这两条path中,延迟最大的是最大时序路径,延迟最小是最小时序路径

有一点需要强调,最大最小时序路径取决于path上的延迟时间,与path上cell的数量没有直接关系

比如下面这张图

从UFF1/Q到UFF2/D有绿色和蓝色两条path,假设两条path上的net delay相同,绿色path上每个cell的delay为100,蓝色path上每个cell的delay是50

蓝色path上总的delay是50+50+50+net delay,绿色path上总的delay是100+100+net delay

绿色path的delay 比蓝色path上的delay大,因此,绿色path是最大时序路径

时钟域

由同一时钟驱动的一组触发器称为其时钟域(clock domain)

在一个设计中,可能有多个时钟域,例如,USBCLK驱动了200个触发器,而时钟MEMCLK驱动了1000个触发器,如下图所示。在此示例中,我们称有两个时钟域。

需要关注一个问题:两个时钟域是相关的还是彼此独立的?

时钟域是否相关取决于是否有一条path横跨两个时钟域

如果存在跨时钟域的data path,则需要判断这些path是否为real path,如下图所示,在USBCLK时钟域下launch一笔数据,在MEMCLK时钟域下capture

如果约束数据在一个时钟周期内通过同步电路,则是real pah,否则是false path

可以使用set_false_path命令指定这是一条false path,从而让工具不去检查这条path

set_false_path -from [get_clocks USBCLK] \  -to [get_clocks MEMCLK]
#  将从USBCLK到MEMCLK的path指定为false path,让工具不用检查这条path的时序

标签:set,STA,clock,静态,时序,delay,path,时钟
From: https://www.cnblogs.com/ICcode/p/16759146.html

相关文章

  • 基于.NetCore开发博客项目 StarBlog - (18) 实现本地Typora文章打包上传
    前言九月太忙,只更新了三篇文章,本来这个功能是从九月初就开始做的,结果一直拖到现在国庆假期才有时间完善并且写文章~之前我更新了几篇关于Python的文章,有朋友留言问是不......
  • [C语言]CLion Recommends to use 'strtof' instand of 'scanf'
    #include<stdio.h>intmain(){floatOilConsumption;printf("PleaseentertheFuelConsumption:\n");scanf("%f",&OilConsumption);printf("Fu......
  • NewStarCTF学习笔记-WEEK1
    WEEK1returntotext[text区域]​ 通过向栈上堆砌长度足够且合适的"垃圾信息"改写ret指令指向的地址,执行对应函数​ 注意点:保护,遇上Canary要进行绕过常见的Cana......
  • java static 静态
    static是java语言中的关键字,意思是“静态的”,它可以用来修饰变量、方法、代码块等,修饰的变量叫做静态变量,修饰的方法叫做静态方法,修饰的代码块叫做静态代码块。static的......
  • static 关键字
    基本介绍:  对于局部变量来说:  对于第三点,有:  此时调用 输出如下:n=10n++=11n=10n++=11如果再次调用一次会输出:n=10n++=11n=11n++=12=========......
  • 静态变量的生命周期是多少?
    何谓静态变量在整个代码中,静态变量具有特定的生命周期。即使函数被多次调用,静态变量的内存也只分配一次,并且前一次调用的值被传递到下一次函数调用。它们不保存在堆栈中......
  • 014——static应用知识:单例设计模式
    static应用知识:单例设计模式设计模式开发中经常遇到一些问题,一个问题通常有n种解法的,但其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式。......
  • 查看网络状态netstat和ss命令
    ####yum-yinstallnetstat安装netstat命令#netstat命令查看网络状态#netstat-lnp查看监听端口#-l表示监听#netstat-an查看系统的网络所有连接状况#netstat-l......
  • openfeign出现错误No Feign Client for loadBalancing defined. Did you forget to in
    SpringCloudOpenFeign报错NoFeignClientforloadBalancingdefined.Didyouforgettoincludespring-cloud-starter-loadbalancer?问题原因使用SpringInitializ......
  • 安装fabric时,出现Error: got unexpected status: BAD_REQUESTic
    问题如下:(已经尝试了sudo./byfn.sh-mdown很多次,以及重装了多次fabric)sudo./byfn.sh-mup后出现下面的问题:EndorserandordererconnectionsinitializedError:gotu......