参考文献
[1]Static Timing Analysis for Nanometer Designs A Practical Approach
[2]静态时序分析圣经翻译计划——第三章:标准单元库 (上)
一. 引脚电容
标准单元库的每个cell的每个输入和输出都可以在pin上指定电容。在大多数情况下,仅为单元输入引脚指定电容,而不为输出引脚指定电容,即大多数单元库中的输出引脚电容为 0。
上例中展示了输入 INP1 引脚电容值的一般规格(specification)。在最基本的格式中,引脚电容被指定为单个值(在上面的示例中为 0.5 个单位)。电容单位通常为皮法拉(pF),一般在库文件的开头指定。单元描述中还可以为 rise_capacitance(0.5 个单位)和 fall_capacitance(0.45 个单位)分别指定值,这些值是指引脚 INP1 上发生电平上升和下降跳变时的值。也可以将rise_capacitance 和 fall_capacitance 的值指定为范围,并在描述中指定下限值和上限值。
二. 时序模型
逻辑单元的时序模型(timing model)旨在为设计中的各种单元实例(instance)提供准确的时序信息。通常会从单元的详细电路仿真中获得时序模型,用以对单元工作时的实际情况进行建模,且需要为逻辑单元的每个时序弧都建立一个时序模型。
对于一个反相器(inverter)的时序弧,可以使用Tr(输出上升延迟)和Tf(输出下降延迟)来表征反相器的延迟。
通过反相器的时序弧的延迟取决于两个因素:
- 1)输出负载,即反相器输出引脚上的电容负载,负载电容越大,延迟越大。
- 2)输入信号的过渡(transition)时间,在大多数情况下,延迟会随着输入信号过渡时间的增加而增加。
而在某些情况下,输入信号阈值点(用于测量延迟)与单元的内部开关点(switching point)明显不同。在这种情况下,通过单元的延迟可能相对于输入信号过渡时间表现出非单调行为:较大的输入信号过渡时间可能会产生较小的延迟,尤其是在输出负载较小的情况下。
逻辑单元输出引脚的压摆(slew)主要取决于输出引脚电容:输出信号过渡时间会随着输出负载的增加而增加。 因此,在输入端压摆较大(输入信号过渡时间较长)的情况下,选择合适的单元类型及输出负载,可以改善输出端的压摆。图 3-2 展示了通过调节逻辑单元的输出负载,可以改善或恶化单元输出信号过渡时间的情况。
1. 线性时序模型-linear delay model
较为简单的时序模型是线性延迟模型(linear delay model)。该模型使用含两个参数的线性函数表示逻辑单元的延迟和输出过渡时间,这两个参数是:输入过渡时间(input transition time)和输出负载电容(output load capacitance)。通过逻辑单元的延迟(D)使用线性模型的一般形式如下所示:
其中 D0, D1, D2 是常数, S 是输入过渡时间, C 是输出负载电容。对于亚微米(submicron)技术,线性延迟模型在输入过渡时间和输出负载电容的范围内并不准确,因此,目前大多数单元库都使用更复杂的模型,例如非线性延迟模型(non-linear delay model)。
2. 非线性时序模型-non-linear delay model
大多数单元库都包括表格模型(table model),用于为单元的各种时序弧指定延迟并进行时序检查。这些表格模型被称为 NLDM(NonLinear Delay Model),可用于延迟、输出压摆计算或其他时序检查。表格模型中提供了:在单元输入引脚处输入过渡时间和输出引脚处输出负载电容的各种组合下通过单元的延迟。
如何查表计算输出延迟
NLDM 模型以二维形式表示,两个独立变量是输入过渡时间和输出负载电容,表中的数值表示延迟。以下是一个典型反相器单元的表格模型示例:
在上例中描述了输出引脚OUT的延迟信息。单元描述里的这个部分包含了从引脚 INP1 到引脚 OUT 时序弧的上升和下降延迟模型,以及引脚 OUT 的 max_transition 允许时间。上升和下降延迟有单独的模型(用于输出引脚),分别标记为 cell_rise 和 cell_fall。其中delay_tempate_3x3是一个查找表模板,可以在数字单元库里面找到,其中index_1表示的是输入转换时间的索引值,而index_2表示的是输出负载电容的索引值,values表示的是基于index_1和index_2的二维查找表,查找表中的值为NLDM的输出延迟结果。此外,表格模型可以是三维的,例如一个具有互补输出Q和QN的触发器。
根据延迟表,输入下降过渡时间为 0.3ns 且输出负载为 0.16pf 时,反相器的上升延迟为 0.1018ns。 由于输入的下降沿跳变导致反相器输出的上升沿跳变,因此当输入引脚发生下降沿跳变时,应该去查询cell_rise 延迟表。
NLDM 模型不仅可以用于计算延迟,而且还可用于计算逻辑单元输出引脚的过渡时间,该时间同样由输入过渡时间和输出负载电容来表征。因此,还存在着另外一张独立的用于计算单元的输出上升和下降过渡时间的二维表格。输出过渡时间也同样有两张表: rise_transition 和 fall_transition。过渡时间是根据特定的压摆阈值点(通常为电源的10%-90%)测量的。
如何线性插值计算输出延迟/输出过渡时间
如果输入过渡时间和输出电容正好与表格条目中的值相对应,则表格查找是很简单的,因为可以直接从表中对应的位置读出时序值。以下示例对应于一般情况,即输入过渡时间和输出电容无法与表格条目中的值对应的情况。在这种情况下,可利用二维插值的方法来得到最终的时序值,一般选择每个维度中两个最接近的表格条目中的值以进行表格插值。考虑输入过渡时间为 0.15ns、输出电容为 1.16pF 的输出下降沿查找表。查找表如下。
假设index_1和index_2的两个值设置为x1和x2,index_2的两个值设置为y1和y2,对应的输出过渡时间为T11,T12,T21和T22。我们需要求的值为(x0,y0)对应的查表值为T00。可以通过双线性插值算法来计算T00。
假设(x0,y0)=(0.15,1.16)可以计算得到
此外,上面的等式对于内插和外推均有效,即当索引值(x0, y0)超出范围时依然成立。例如,当 index_1 索引值为 0.05 且 index_2 索引值为 1.7 时, fall_transition 值计算如下:
3. 阈值规格和压摆降额-Threshold Specifications and Slew Derating
压摆值(slew)基于的是在库中指定的测量阈值点,大多数上一代的库(0.25um 或更旧的库)都使用 10%和 90%作为压摆(或称过渡时间)的测量阈值点。压摆阈值点的选择对应的是波形的线性部分。随着技术的发展,实际波形最线性的部分通常在 30%至 70%之间。 因此,大多数新一代时序库都将压摆测量阈值点指定为 Vdd 的 30%和 70%。但是,由于之前测得的过渡时间在 10%至 90%之间,因此在填充库时,通常将测得的 30%至 70%的过渡时间加倍,这由压摆降额系数(slew deratefactor)指定,通常指定为 0.5。压摆测量阈值点为 30%和 70%且压摆降额系数为 0.5,等效于测量阈值点为 10%和 90%。 阈值设置的示例如下:
上例的设置规定了要将表格中的过渡时间乘以 0.5,以获得与阈值(30%-70%)设置相对应的过渡时间。这意味着表格中的值(以及相应的索引值)实际上是 10%-90%阈值点的测量值。在标定过渡时间值时,首先在 30%-70%处测量,然后再把测量值外推到 10%至 90%((70-30) /(90-10) = 0.5)。
在上述 20%-80%压摆阈值设置的例子中,未指定slew_derate_from_library(默认值为 1.0),这意味着库中的过渡时间不会降额(derate)。表格中的过渡时间值直接对应于 20%-80%的阈值点,如图 3-4 所示:
在这种情况下,将 slew_derate_from_library 设置为 0.6,并将压摆测量阈值点指定为 20%和 80%,这意味着库中的过渡时间表里的数据对应于外推到 0%至 100%((80-20) /(100-0) = 0.6)的值,如图 3-5 所示:
指定了压摆降额后,计算延迟使用的压摆值的计算值为
为什么需要找个slew_derate压摆降额(个人理解)
在许多现有的电子设计自动化(EDA)工具、仿真软件和时序分析工具是基于传统的10%-90%压摆时间标准开发的。在现代时序分析中,为了更精确地测量信号的线性部分,压摆阈值被设置在30%和70%。为了兼容传统的10%-90%压摆时间标准,需要通过压摆降额系数(0.5)将30%-70%的测量值加倍,从而得到等效的10%-90%压摆时间。这种调整方法确保了新旧标准之间的兼容性,同时提高了时序分析的精度。