这部分内容容易混淆,为了方便记忆和理解,故从STA概念浅析之Propagation delay、slew、skew和latency - 知乎 (zhihu.com)摘录如下内容:
Propagation Delay(传播延迟)
考虑下图中反相器输入输出引脚上的波形
Propagation Delay表示为:
Output fall delay (Tf)
Output rise delay (Tr)
如果当做理想波形分析,则Propagation Delay就是两个边沿之间的延迟。
Slew
在静态时序分析中,使用transition time来测量波形上升或下降的快慢(slew rate),也就是信号在两个电平之间转换所花费的时间。transition time是slew rate的倒数。
transition time的阈值设置也可以是20%~80%或者10%~90%。
Skew(偏移)
Skew是两个或多个时钟信号之间的时间差。 例如,如果时钟树有500个端点(endpoints),并且Skew为50ps,则表示最长时钟路径和最短时钟路径之间的时间差为50ps。
时钟树的起点(beginning point)通常是时钟定义点。 时钟树的终点(end points)通常是同步元件,例如触发器的时钟端。
Clock latency(时钟延迟)是从时钟源到终点的总时间。 Clock skew是时钟树到达不同终点的时间差。
理想的时钟树(ideal clock tree)假设时钟源具有无限驱动(infinite drive)能力,也就是说,时钟可以无延迟地驱动无限多的单元。 另外,假定时钟树中存在的任何单元也具有零延迟。
在逻辑综合阶段, STA通常以理想的时钟路径执行,分析的重点放在数据路径上。
在理想的时钟树中,默认clock skew为0ps。
时钟树的clock latency可以显式地使用set_clock_latency命令指定。
set_clock_latency2.2 [get_clocks BZCLK]
# Both rise and fall latency is 2.2ns.
# Use options -rise and -fall if different.
时钟树的clock skew也可以通过set_clock_uncertainty命令指定。
set_clock_uncertainty 0.250 -setup [get_clocks BZCLK]
set_clock_uncertainty 0.100 -hold [get_clocks BZCLK]
set_clock_uncertainty指定一个窗口(window),时钟沿可能出现在该窗口内任何一个位置。
时钟边沿时序的uncertainty包含多个因素,例如时钟周期jitter和用于STA额外的margins。
实际上,没有理想的时钟,也就是说,所有的时钟都具有jitter。
在时钟树综合之前指定clock uncertainty时,应包括jitter、skew和margins。
clock uncertainty = jitter + skew + margins
在时钟树综合之后指定clock uncertainty时,不包括skew,只包括jitter,因为此时时钟树有实际的走线,可以计算出实际的skew。
可以为setup检查和hold检查指定不同的clock uncertainty。
hold检查不需要将jitter包括在uncertainty中,因此hold检查的uncertainty较小。原因是hold 是同沿check ,所以不存在clock jitter。
在实际项目中,还需要增加额外的margin,做更加悲观保守的STA分析。例如对于150ps的uncertainty,可以再增加50ps的margin。
set_clock_latency2.0 [get_clocks USBCLK]
set_clock_uncertainty 0.2 [get_clocks USBCLK]
# The 200ps may be composed of 50ps clock jitter,
# 100ps clock skew and 50ps additional pessimism.
所以在综合时,需要设置的set_clock_uncertainty为jitter + skew + margin。
Reference:
Static Timing Analysis for Nanometer Designs A Practical Approach