时序分析
1、 静态时序分析与动态时序分析
静态时序分析:STA,主要目的是为提高系统工作主频以及增加系统的稳定性。我们用软件在综合和实现之后的timing analysis都是静态时序分析。
动态时序分析:DTA,主要目的是在验证器件在实际延时情况下的逻辑功能。通常就是我们所说的仿真。
比较:STA不需要输入向量就能穷尽所有的路径,运行速度快,占用内存小。不仅可以对芯片设计进行全面的时序功能检查,还可以利用时序分析的结果来优化设计。DTA的优点是结果精确,并且适用于更多的设计类型;缺点是速度慢,并且可能会遗漏一些关键路径。
2、 同步设计中的建立时间和保持时间
- 建立时间(Tsu)
建立时间指的是在时钟沿到来之前数据从不稳定到稳定所需的时间,如果建立时间不满足要求那么数据将不能在这个时钟上升沿被稳定的打入触发器 - 保持时间(Th)
保持时间是指在时钟沿到来之后数据稳定保持的时间 - 数据输出延时(Tco),Tclk->Q
触发器输出的响应时间,也就是触发器的输出在clk时钟上升沿到来之后多长的时间内发生变化,也即触发器的输出延时
3、 时钟相关的概念
3.1. 时钟偏移(skew)
skew:是指一个时钟源到达两个不同寄存器的时钟端的时间偏移,Tskew = Tclk2 - Tclk1 ,Tskew为正时,有利于setup满足条件。
- 如何减小时钟偏移
采用全铜工艺和树状结构,并且设计了专用的时钟缓冲和驱动网络,这么做的目的就是尽量使时钟到达不同时序单元的路径一样长,从而使时钟偏移非常小,可以忽略不计。总的来说,Skew 问题的解决方法就是:设计中的主要信号应该走全局时钟网络。
3.2. 时钟抖动(jitter)
- 周期抖动 period Jitter:实际时钟信号周期与理想时钟周期的差值的变化。这是最早最直接的一种衡量抖动的方式,这个指标说明了时钟信号每个周期的变化.
- 因为这个差值是个随机变量,并且满足高斯分布,所以可以用期望和方差来描述。一般随机选择很多个周期,然后计算平均周期、标准差、峰峰值。标准差称为 “RMS 抖动”,峰峰值称为 “Pk-Pk 周期抖动”。知道 Pk-Pk 周期抖动,对于恰当配置系统和保持时间很有用。
- 周期差抖动:cycle-to-cycle jitter 两个相邻时钟周期的差值的变化。根据定义可知,对周期抖动做一阶差分,就可以得到周期差抖动。
- 相位抖动:Phase Jitter 一个时钟沿相对于基准对齐之后,经过一段时间后,与理想位置的偏差。这个指标说明了周期抖动在各个时期的累计效应。
- 由于 周期抖动 和 周期差抖动 是单个周期或者相邻周期的偏差,所以表征为短期抖动行为。而相位抖动需要累积一段时间,所以表征为长期抖动行为。时钟抖动的原因就是噪声。相位抖动因为需要累积一段时间,所以这个误差又称为 时间间隔误差(TIE, Timer Interval Error)。
3.3 占空比(Duty Cycle Distortion)
占空比失真,即时钟不对称,有脉冲的时间和无脉冲的时间发生了变化。DCD 会吞噬大量的时序裕量,造成数字信号的失真,使过零区间偏离理想的位置。DCD通常是由信号的上升沿和下降沿之间时序不同而造成的。
4、 异步信号中的恢复时间和撤销时间
- 恢复时间 recovery time : 对于异步信号(比如异步复位/置位),信号变无效的边沿和下一个时钟沿之间必须满足一个最小的间隔。其意义在于,如果保证不了这个最小时间,也就是异步信号无效边离时钟边沿太近了,异步信号解除(无效)之后,没有给 DFF 足够的时间来恢复(recovery)到正常状态,那么就不能保证在时钟沿到来时 DFF 可以正常工作。
- 撤销时间 removal time : 对于异步信号(比如异步复位/置位),信号变有效的边沿和前一个时钟沿之间必须满足一个最小的间隔。其意义在于,如果保证不了这个最小时间,也就是异步信号的有效沿离时钟太近了,在时钟信号去除(无效)之前,异步信号提前有效了,可能会造成 DFF 处于不确定状态。
5、Timing path
1、起点有两种:
- 时序器件的时钟输入端
- 电路的 输入端口
2、终点也有两种:
- 时序器件的 数据输入端
- 电路的 输出端口
3、输入和输出排列组合一共就有 4 种 path:
- Path1:电路输入端口 -> 触发器的数据D端 (Pad-to-Setup)
- Path2:触发器的clk端 -> 触发器的数据D端 (Clock-to-Setup)
- Path3:触发器的clk端 -> 电路输出端口 (Clock-to-Pad)
- Path4:电路输入端口 -> 电路输出端口 (Pad-to-Pad)
4、关键路径(critical path):从输入到输出,延时最大的那条路径称为 critical path。关键路径是系统中延时最大的路径,它决定了系统所能达到的最大时钟频率。
6、数据需求时间(Data Required Time)
- (建立)(Setup)数据需求时间
这里不考虑这个建立不定态(Setup Uncertainty);
7、(保持)(hold)数据需求时间
;
上图中的Hold Uncertainty这里不考虑。
8、建立余量(Setup Slack)
下面这幅图画出了建立余量(Setup Slack)的示意图:
下面这幅图根据上图给出了建立余量(Setup Slack)的计算公式,但是还不够清晰。下面我们认真解读一下:
建立(Setup)数据需求时间(Data Required Time)为:
;
而数据到达时间(Data Arrival Time)为:
;
那么建立余量(Setup Slack)为:
这里假设时钟偏斜(Clock Skew)为0,也就是,同时
(这是很好理解的,这两个边沿之间的距离恰好是一个时钟周期);
(下面这个公式很重要!与其记推导公式,不如记下面这个公式来的直接,明显!)
对应的区域位于上图的绿色部分!
这个最终结果说明了源寄存器与目的寄存器之间延迟 不能太长的原因,延迟越长,slack越小。
从上图公式下面还有这样的信息:
当建立余量为正时,满足时序要求,否则不满足。
9、保持余量(Hold Slack)
保持余量的分析方法与建立时间余量的分析方法如出一辙,简单看下,这个相对于建立时间余量要好理解一点,至少比较直观。
同样,我们先看看数据到达时间以及保持(Hold)数据需求时间(Data Required Time):
;
;
如此以来,我们就可以得到保持余量(Hold Slack)为:
这里:
从最终结果可以看出,这就是源寄存器与目的寄存器之间延迟不能太短的原因,时间太短,Hold Slack越小。
同样从上图可以知道,余量结果为正,则满足时序要求,否则不满足。
10、 相关问题
小结:
- 如果有时钟抖动的情况,那么我们知道时钟抖动肯定是对电路不友好的,所以我们会导致我们的时序不满足,电路可以正常运行的频率降低。因此会导致我们的时钟周期变大,因此在等式左边。而Tskew有利与建立时间满足条件,可以提高运行频率,因此在等式的右边 Tskew = Tcapture - Tlatch
Tco+Tcomb+Tsetup+Tjitter <= Tclk + Tskew - 一般我们求电路的最高工作频率,直接带入式子求Tclk,还有一种问题是求一个电路的建立时间和保持时间是多少,这种问题一般直接正向求解,观察时钟沿和数据哪个先到,如果时钟先到,那么setup就要减少。hold time增加。Tsetup_vld = Tsetup - (T_cap-Tcomb) ,Thold_vld =Thold + (T_cap-Tcomb),我们可以另Tskew=(T_cap-Tcomb),注意这只是为了方便记忆,真正的Tskew=Tclk2-Tclk1
例题一:
下图是某电路的一条关键路径,其中路径各参数如下:
Tco = 1ns,Tsu = 2ns,Thold = 1ns,Tlogic_max = 4ns, Tlogic_min = 3ns, Jitter = 2ns。求算出最小时钟周期。
根据公式Tco+Tcomb+Tsetup+Tjitter <= Tclk + Tcapture,得
1+4+2+2 <= Tclk + 1; Tclk >= 8ns
例题二:
这个题目堪称经典中的经典,因为从这个题目是标准的建立时间和保持时间考题,并从中可以总结出系统最大时钟频率以及建立时间和保持时间需要满足的公式。
我们知道系统周期需要满足的条件是:
Tcycle + Tskew > Tco + Tgate + Tsu;
代入上面的条件,得知
Tcycle + T5 > T1 + T2 + T3 + T4 + Tsetup
上面的时钟路径是存在偏斜的,而且是正时钟偏斜,则对于保持时间的满足更加的困难,需要满足:
Thold + Tskew < Tc0 + Tgate
代入上面的条件,得: Thold + T5 < T1 + T2 + T3 + T4
例题三:
在上题的基础上,你也许会分析触发器的建立时间和保持时间应该满足的关系了,可是考题也许会变了法的考你,如下:
求系统的最高频率?
就一个触发器,我怎么办呢?
仔细看来,这是一个触发器到自身的反馈,可以看做两个触发器之间进行数据传输,其实也就是如此。
需要明白的是,由于时钟到达这个触发器的时间一致,所以不存在时钟偏斜。
给出系统周期满足的关系:
Tcycle > Tco + Tgate + Tsu = 6 + 2 + 2= 10ns
所以时钟最大频率可以为100MHz。
例题四:
如果都是分析触发器的建立时间和保持时间就好了,可惜不是这样的,套路来了:
如下图,将框内的电路作为一个寄存器,那么其有效的建立时间和保持时间是多少?
这个题目猛地一看就让人懵逼了,我还曾因项目调试不顺利,遇到这个题目,心态炸裂过。。。(年轻)
求框内电路的有效建立时间和保持时间,给出了框内触发器的建立时间和保持时间以及其他一些逻辑的延迟,我们就以触发器的建立时间和保持时间为准来倒逼整个电路的建立时间和保持时间,一切还都是为了让触发器满足时序要求。
有效建立时间分析:
假设电路的有效Setup为Tsetup_valid:
对于D触发器而言,其本身的建立时间是2ns,也就是说数据必须在时钟有效沿到达之前2ns保持稳定,这样到达D端后就一定是稳定的数据了。
这个电路的数据来自于IN,时钟来自于CLK;
考虑时钟路径延迟影响:
时钟CLK要早于触发器的时钟1ns到达,因此对于D触发器建立时间的满足是有害的,电路有效建立时间
Tsetup_valid = Tsetup - 1ns = 1ns(因为数据需要提前1ns稳定下来)
考虑数据路径延迟影响:
Tsetup_valid = Tsetup - 1ns + 2ns = 3ns;(经过组合逻辑后的数据需要在时钟有效沿之前Tsetup时间稳定下来)
有效保持时间分析:
和建立时间分析套路一致,对于D触发器而言,数据需要在时钟有效沿到来之后保持Thold时间。
考虑时钟延迟的影响:
考虑到电路时钟对于触发器时钟早到1ns,所以电路有效保持时间Thold_valid = Thold + 1ns = 3ns;
考虑路径延迟影响:
数据需要经过一段组合逻辑之后才能保持稳定,因此电路的有效保持时间为:
Thold_valid = Thold + 1ns - 2ns = 1ns。
例题五:
下面这个题目和上面题目相差无几:
求电路的固有建立时间和保持时间和上一题的有效建立时间和保持时间是一个意思的。
因此固有建立时间为Tsu_valid = Tsu - T_offset + Tpd + Tpd1 = 2 - 1.2 + 1.2 + 0.9 = 2.9ns
固有保持时间为:Th_valid = Th + T_offset - Tpd - Tpd1 = 1.5 + 1.2 - 1.2 - 0.9 = 0.6ns.
而系统的最高频率呢?
先求系统的最小周期,考虑两个触发器之间的路径:
Tmin = Tco + Tpd + Tsu = 1.8 + 1.2 + 2 = 5ns,那么系统最高频率为200MHz。
例题六:
这个题目让求setup time margin,意思大概就是建立时间裕量,就是系统周期减去Tco,Tgate以及Tsu之后还可以有多少裕量,那,Tco,Tgate以及Tsu当然要用最大的来代入,因为要保证系统在最恶劣的情况下,能有多少裕量。
因此:
Tmargin = 10ns + 0.6ns - 0.2ns - 0.65ns - 0.35ns - 0.45ns = 8.95ns
其中0.6ns - 0.2ns表示的是时钟偏斜量,可见是时钟整偏斜,有利于时钟裕量。
例题七:
根据公式Tclk+Tcap >= Tco+Tcomb+Tsetup代入得 Tclk+2>= 2+5+3 因此Tclk >= 8ns,最高工作频率为125MHz
根据公式Tco+Tcomb >= Thold+Tcap得2+5>=6+2不满足,因此存在hold vloation。可以通过增加组合逻辑的时延或者减少时钟路径的时延
10 . 时序违约该怎么办
setup vilation:主要是因为关键路径的时延过大,造成setup time违约。
解决方案:
- 复制寄存器
http://guqian110.github.io/pages/2015/03/18/static_timing_analysis_1_basic.html
https://blog.****.net/Reborn_Lee/article/details/100049997
参考链接:https://www.codenong.com/jsc07a1334a7e6/