参考资料:
ic基础|时序篇:浅谈负的建立时间和保持时间成因_触发器建立时间负的-CSDN博客
静态时序分析Static Timing Analysis1——STA概述、标准工艺库、时钟、IO约束的建立-CSDN博客
1、STA简介
STA存在在逻辑综合后的每个步骤,非常重要,且STA只针对同步电路,异步电路的时序无法分析。
本质:满足每个寄存器的建立时间和保持时间。
关键路径:时序路径中最长的一条,决定系统的最快工作速度。
静态时序分析的不同路径:
(1)输入端口到内部寄存器 pin2reg(input-D)
(2)内部寄存器之间 reg2reg(clk-D)
(3)内部寄存器到输出端口 reg2pin(clk-output)
(4)输入端口到输出端口之间 pin2pin(input-output)
前三类要确保数据信号在时钟锁存沿的建立时间和保持时间内是稳定不变的;最后一个路径的信号传输通常不通过时钟,一般直接约束pin2pin的延时范围。
STA和DTA的优缺点对比
两者是互补关系;假设动态仿真验证到了所有功能点,就不需要进行STA了
STA | DTA | |
优点 | 1、不需要输入激励 2、几乎可以找到所有的关键路径 3、运行速度块 | 1、适用于同步、异步电路 2、可以验证功能准确性 |
缺点 | 1、只适用于同步电路 2、不能验证功能的准确性 3、工艺库造价昂贵 | 1、运行速度慢,花费时间多 2、占用内存高 3、需要输入激励,难以测试到所有情况 |
STA的工作环境PVT:Process工艺、Voltage电压、Temperature温度;一般STA工艺库会提供三种不同的工作环境:fast、normal、slow。
其中建立时间的检查使用slow工作环境——高温低压(延迟最大,建立时间限制了电路的最大延迟,如果slow工作环境都能满足的话,说明电路的建立时间时序没有问题);保持时间的检查使用fast工作环境——高压低温(延迟最小,保持时间限制了电路的最小延迟,如果在fast工作环境都能满足的话,说明电路保持时间时序没有问题)。
工艺:工艺越好,能够支持的工作频率越高,动态功耗越大,静态功耗越小。
2、STA约束的建立
一般流程为:将STA时序约束写入sdc文档内,使用sdc约束文档来跑综合,然后再对综合后的电路做第一次静态时序分析。当然,在后端每一个环节都还要再做一次静态时序分析。
1、时钟约束
(1)创建时钟:可以设定时钟频率,占空比,第一个时钟沿来的时间,端口
create_clock -name SYSCLK -period 20 -waveform {0 5} [get_ports SCLK]
(2)时钟不确定性:是由于时钟抖动和时钟偏移导致的。对setup和hold time添加时钟不确定性的约束,使得时序约束更加严格,使得输入数据应该到达更早,时钟沿后应该保持更久的时间。
set_clock_uncertainty -setup 0.2 [get_clocks CLK_CONFIG]
set_clock_uncertainty -hold 0.05 [get_clocks CLK_CONFIG]
(3)时钟延迟:时钟源延时 + 时钟网络延时;
时钟树建立之前,网络延迟的声明是一个估计值,在时钟树生成之后,就会使用实际的网络延迟,定义的网络延迟就失效。(时钟树综合使得时钟网络延时值更加准确)
set_clock_latency 0.8 [get_clocks CLK_CONFIG] //时钟网络延时
set_clock_latency 1.9 -source [get_clocks CLK_CONFIG] //时钟源延时
总结:这张图挺详细的,上面没说的一些时钟约束里面也有,简单看看。
2、输入输出路径约束
这个约束用来定义输入延时的最大值和最小值:
其中,输入延时约束的为输入信号有效的时间,输出延时为信号输出后传输需要的时间,它们只能约束到非时钟端口
set_input_delay -clock CLKP -max 6.7 [get_ports INPA] //第一个时钟沿有效到DUA输入端口的时间,clk2q+Comb
set_input_delay -clock CLKP -min 3.0 [get_ports INPA]
定义输出延时的最大值和最小值:set_output_delay
3、时序例外(例外约束)
用来放宽约束范围
set_false_path:STA不需要进行分析检查的路径,伪路径约束
set_multicycle_path:声明可能耗费超过一个周期的路径
set_case_analysis:声明单元引脚上的固定值,或者输入端口的固定值;假如设计里面有多个时钟,一个信号控制时钟的切换,可以分别设置时钟,这样会使得STA的遍历更加简单,占用的CPU更少
还有其他,例如断言约束、扇入扇出约束等等,但是有些是在后端设计时候用的,有些很少见,就不记录了……
3、杂七杂八的相关问题
(1)Set False Path与Set Clock Group的区别
答:两者都可以针对时钟对象设置不分析,但set false path存在方向性,set clock group不考虑方向。
(2)STA除了检查建立时间保持时间还能做什么
答:检查Async Reset/Set recovery/removal是否满足要求;检查一个短脉冲,是否能被后续电路检测到;还包括计算design是否满足DRC(Design Rule Check)的要求:电路的最大电容不能超过设置的最大电容(capacitance)、电路的翻转时间(transition)不能超过设置的最大值,电路的扇出(fanout)不能超过最大值。
(3)建立时间保持时间可以为负值吗?
答:可以,设定成负值是针对特殊情况,以下举例:
上图D、CLK端为触发器的D端和CLK端输入引脚,D’、CLK’为实际上的锁存器的输入端口,在D-D’与CLK-CLK’的路径上实际上还有延时。
如果我们假设时钟路径CLK-CLK’的延时比数据路径D-D’要大,那么,就可以实现在D端和CLK端,数据比时钟沿晚输入,但是到D’端和CLK’端时,数据比时钟沿早到,从而也就实现了从引脚上看数据比时钟沿晚输入,建立时间为负的值,但是在实际的锁存点,数据比时钟沿早到,建立时间依然为正值
保存时间同理;当数据路径D-D’的延时比时钟路径CLK-CLK’的延时要大时,就可以实现在D端和CLK端,数据比时钟沿早输入,但是在D’端和CLK’端时,时钟沿比数据早到,也就实现了从引脚上看数据比时钟沿早输入,保持时间为负值,但是在实际的锁存点,数据比时钟沿晚到,保持时间依然为正值
在较复杂的时序单元内,clock path与data path的长度不同,延时不同,可能导致setup time或者hold time为负。但是也必须保证“最小采样窗” (Tsetup + Thold)大于零成立,即保证数据有一段稳定的时间可以采样。