本文由知乎
赵俊军
授权转载,知乎主页为https://www.zhihu.com/people/zhao-jun-jun-19
本章节将介绍特殊的STA分析,例如时间借用(time borrowing)、时钟门控(clock gating)和非时序(non-sequential)检查。此外,还介绍了高级STA概念,例如片上变化(on-chip variation)、统计时序(statistical timing)以及功耗和时序之间的折中。
10.1 片上变化
通常,工艺和各环境参数在芯片的不同部分上可能不一致。由于工艺差异,芯片上不同部分的相同MOS晶体管可能没有相似的特性,这些差异是由于芯片内部的工艺差异引起的。请注意,多个制造批次中的工艺参数差异可能会覆盖慢工艺到快工艺(2.10节中所介绍)。在本节中,我们讨论的是对一个芯片上可能存在的工艺差异(称为局部工艺差异)的分析,该差异远小于多个制造批次之间的差异(称为全局工艺差异)。
除了工艺参数的变化之外,设计中不同部分可能还会存在不同的电源电压和温度。因此,同一芯片的两个区域可能不在相同的PVT条件下。这些差异可能是由许多因素引起的,包括:
-
会影响局部电源电压的沿芯片区域的IR压降变化;
-
PMOS或NMOS器件的电压阈值变化;
-
PMOS或NMOS器件的沟道长度变化;
-
由于局部热点造成的温度变化;
-
互连金属刻蚀或厚度变化会影响互连电阻或电容。
上述的PVT变化被称为片上变化(OCV),这些变化会影响芯片不同部分的走线延迟和单元延迟。如上所述,OCV建模并不是要对芯片与芯片之间可能的PVT变化进行建模,而是要对单个芯片内局部可能的PVT变化进行建模。OCV带来的影响通常在时钟路径上更为明显,因为时钟路径在芯片中传播的距离更长。解决局部PVT变化的一种方法是在STA期间包含OCV分析。前面各章中所介绍的静态时序分析能够获得特定时序角(timing corner)的时序,但没有对芯片上的变化进行建模。由于时钟和数据路径可能受到不同OCV的影响,因此时序验证可以通过使数据发起路径和捕获路径的PVT条件稍有不同来对OCV的影响进行建模。通过降额(derate)特定路径的延迟就可以对OCV带来的影响进行建模,即首先使这些路径更快或更慢,然后通过这些变化来验证设计的性能。可以降额单元延迟或走线延迟,或同时降额两者,以模拟OCV的影响。
现在,我们来讨论如何完成OCV降额处理以进行建立时间检查。考虑图10-1中所示逻辑,其中PVT条件可能随芯片的不同区域而变化。当发起时钟路径和数据路径的OCV条件导致延迟最大、而捕获时钟路径的OCV条件导致延迟最小时,此时的建立时间检查最为严格。请注意,此处最小和最大延迟是由于芯片上局部PVT的变化。
对于此示例,以下是建立时间检查,注意此处还不包括任何用于降额延迟的OCV设置:
-
LaunchClockPath + MaxDataPath <= ClockPeriod + CaptureClockPath - Tsetup_UFF1
-
Minimum clock period = LaunchClockPath + MaxDataPath - CaptureClockPath + Tsetup_UFF1
-
LaunchClockPath = 1.2 + 0.8 = 2.0
-
MaxDataPath = 5.2
-
CaptureClockPath = 1.2 + 0.86 = 2.06
-
Tsetup_UFF1 = 0.35
-
Minimum clock period = 2.0 + 5.2 - 2.06 + 0.35 = 5.49ns
以上路径延迟对应于没有任何OCV降额的延迟值,我们可以使用set_timing_derate命令来对单元和网络延迟进行降额处理。比如以下命令:
-
set_timing_derate -early 0.8
-
set_timing_derate -lata 1.1
上述命令将最小/最短/最早路径的延迟降低了20%,并将最大/最长/最迟路径的延迟增加了10%。长路径的延迟(例如,用于建立时间检查的数据路径和发起时钟路径或用于保持时间检查的捕获时钟路径)将乘以使用-late选项指定的降额值,而短路径的延迟(例如,用于建立时间检查的捕获时钟路径或用于保持时间检查的数据路径和发起时钟路径)将乘以使用-early选项指定的降额值。如果未指定降额系数,则假定值为1.0。
降额系数将统一应用于所有网络延迟和单元延迟,如果某个应用场景中需要保证单元和网络的降额系数不同,则可以在set_timing_derate命令中使用-cell_delay和-net_delay选项。
-
set_timing_derate -cell_delay -early 0.9
-
set_timing_derate -cell_delay -late 1.0
-
set_timing_derate -net_delay -early 1.0
-
set_timing_derate -net_delay -late 1.2
可以使用-cell_check选项来对单元检查(例如建立时间和保持时间)的延迟进行降额。使用此选项时,使用set_output_delay指定的任何输出延迟也将被降额,因为此约束也是输出建立时间要求的一部分。但是,对于使用set_input_delay指定的输入延迟,是不会被降额的。
-
set_timing_derate -early 0.8 -cell_check
-
set_timing_derate -late 1.1 -cell_check
-clock选项仅将降额应用于时钟路径。同样,-data选项仅将降额应用于数据路径。
-
set_timing_derate -early 0.95 -clock
-
set_timing_derate -late 1.05 -data