时序模型:
门内的晶体管的转换需要一定的时间,这意味着门输入的变化需要一定的时间来引起输出的变化。
例如,在NLDM模型下,Gate delay = f (input transition (slew) time, output load Cnet+Cpin),其中Cnet是之线网电容负载,Cpin是驱动单元的引脚电容。
单元时序模型用于为电路设计中存在的各种器件单元提供准确的时序。时序模型数据通常是从单元的电路仿真中获得的,用来模拟单元操作的实际场景。
以一个简单反向器的时序弧举例。对于反向器,如果输入端的上升跃迁将会导致输出端的下降跃迁,反之亦然。 因此,单元有两种类型的延迟:输出上升延迟和输出下降延迟。
| 反向器的Timing arc delay |
这些延迟是根据库中定义的阈值测量的,该阈值通常为 Vdd 的 50%。因此,延迟是从输入阈值点到输出阈值点的时间来测量的。
反向器的timing arc delay取决于两个因素:输出负载(输出端的电容负载)和输入端的转换时间。延迟值与负载电容成正比——负载电容越大,延迟越大。在大多数情况下,延迟随着输入转换时间的增加而增加,并且在某些情况下,cell的延迟可能表现出相对于输入转换时间的非单调行为,这意味着较大的输入转换时间可能会产生较小的延迟,特别是如果输出负载很高的话。
输出端的转换时间与输出电容成正比,即输出转换时间随着输出负载的增加而增加。因此,根据cell类型及其输出负载,输入端的较大的转换时间可能降低输出端的转换时间,而输入处较小的转换时间也会使输出端转换时间变大。下图中显示了两种情况,其中cell 输出端的转换时间会随着输出端的负载而改善或恶化。
线性时序模型
在此,单元的延迟和输出转换时间表示为两个参数的线性函数:输入转换时间和输出负载电容。
线性延迟模型的一般形式是
D = D0 + D1 S + D2 C
其中 D0、D1、D2 是常数,S 是输入转换时间,C 是输出负载电容。
线性延迟模型在深亚微米技术下的输入转换时间和输出电容范围内并不准确,因此目前大多数单元库使用更复杂的模型,如非线性延迟模型 (NLDM) 和 CCS 模型。
非线性延迟模型 (NLDM):
如今,非线性延迟模型(NLDM)或基于复合电流源时序模型(CCS)的查找表(LUT)被广泛用于静态时序分析(STA)。在这些 LUT 中,单元延迟和转换时间等特征数据由固定数量的输入转换时间和负载电容值索引。
Synopsys Liberty (.lib) 格式文件,也称为时序库文件(Lib 文件),包含多种用于计算单元延迟的 LUT。通常Lib文件是由代工厂提供的,但是当设计者想要拥有自己的单元库或者在过程中改变一些参数时,他需要自己生成lib文件。所以设计人员应确定决定输入转换时间和输出负载的工艺特征参数,然后通过 Hspice 仿真或其他 EDA 工具获取时序信息。
在完成整个库的表征后,设计人员需要自己分析时序文件的准确性,以备日后工作,目前没有任何 EDA 工具可以自动分析。整个时序分析的准确性取决于时序文件中cell中使用的延迟模型的准确性。
另外,LUT 只包含固定数量的参数,例如 5x5 或 7x7(输入转换时间和负载)对的大小,而其他对的延迟是使用线性插值获得的。因此,在制作自己的标准单元库时,选择合适的输入转换时间和负载的特征参数是时序库文件准确性的关键工作。
NLDM 是一种高度准确的时序模型,因为它源自 SPICE 特性。大多数单元库使用表模型来指定单元的各种时序弧的延迟和时序检查,表模型称为 NLDM,用于计算延迟、输出转换或其他时序检查。该表给出了单元输入引脚输入转换时间和单元输出总输出电容的在各种组合下的cell单元延迟。NDLM 延迟模型以二维形式表示,其中两个独立变量是输入转换时间和输出负载电容,表中的条目表示延迟。一些较新的时序库还为深亚微米技术提供了基于当前源(例如 CCS、ECSM 等)的高级时序模型。
逆变器延时表示例
这与来自引脚 INP1 和 OUT 的逆变器时序弧的上升和下降延迟模型以及引脚 OUT 上允许的最大转换时间相关,用于输出引脚的上升和下降延迟的独立时序模型,它们分别表示为 cell_rise 和 cell_fall。
pin (OUT) {
max_transition: 1.0;
timing () {
related_pin: "INP1";
timing_sense: negative_unate;
cell_rise (delay_template_3x3) {
index_1 ("0.1, 0.3, 0.7"); /* Input transition */
index_2 ("0.16, 0.35, 1.43"); /* Output capacitance */
values (/* 0.16 0.35 1.43 */ \
/* 0.1 */ "0.0513, 0.1537, 0.5280", \
/* 0.3 */ "0.1018, 0.2327, 0.6476", \
/* 0.7 */ "0.1334, 0.2973, 0.7252");
}
cell_fall (delay_template_3x3) {
index_1 ("0.1, 0.3, 0.7"); /* Input transition */
index_2 ("0.16, 0.35, 1.43"); /* Output capacitance */
values ( /* 0.16 0.35 1.43 */ \
/* 0.1 */ "0.0617, 0.1537, 0.5280", \
/* 0.3 */ "0.0918, 0.2027, 0.5676", \
/* 0.7 */ "0.1034, 0.2273, 0.6452");
}
在查找表模板中指定了两个变量,表中的第一个变量是输入转换时间,第二个变量是输出电容,但这可以是其中表示方法,第一个变量也可以是输出电容;但通常一个库中设计人员使用一致的模板。这种在查找表中表示延迟的形式称为非线性延迟模型,因为延迟随输入转换时间和负载电容的非线性变化。
NLDM 模型不仅用于输出延迟,还用于由输入转换时间和输出负载表征的输出转换时间。这也分离了用于计算单元输出上升和下降转换时间的二维表。这些由输出中的rise_transition 和fall_transition 表示。
pin (OUT) {
max_transition: 1.0;
timing () {
related_pin: "INP";
timing_sense: negative_unate;
rise_transition (delay_template_3x3) {
index_1 ("0.1, 0.3, 0.7"); /* Input transition */
index_2 ("0.16, 0.35, 1.43"); /* Output capacitance */
values (/* 0.16 0.35 1.43 */ \
/* 0.1 */ "0.0417, 0.1337, 0.4680", \
/* 0.3 */ "0.0718, 0.1827, 0.5676", \
/* 0.7 */ "0.1034, 0.2173, 0.6452");
}
fall_transition (delay_template_3x3) {
index_1 ("0.1, 0.3, 0.7"); /* Input transition */
index_2 ("0.16, 0.35, 1.43"); /* Output capacitance */
values (/* 0.16 0.35 1.43 */ \
/* 0.1 */ "0.0817, 0.1937, 0.7280", \
/* 0.3 */ "0.1018, 0.2327, 0.7676", \
/* 0.7 */ "0.1334, 0.2973, 0.8452");
}
. . .
}
. . .
}
具有非线性延迟模型的逆变器单元具有下表:
Rise delay
Fall delay
Rise transition
Fall transition
指定单元正在反转的信息在哪里?
该信息在时序弧的timing_sense 字段中指定。对于逆变器,时序弧为negative_unate,即输出引脚方向与输入引脚方向相反(负)。因此,cell_rise 表查找对应于输入引脚的下降转换时间,cell_fall 表查找对应于输入引脚的上升转换时间。
case 1:当输入转换时间和输出负载值与查找表索引值匹配时。
根据延迟表,输入下降转换时间 0f 0.3ns 和输出负载 0.16pf 将对应于 0.1018ns 的反相器上升延迟,因为输入端的下降转换使反相器输出上升。
fall_transition (delay_template_3x3) {
index_1 ("0.1, 0.3, 0.7"); /* Input transition */
index_2 ("0.16, 0.35, 1.43"); /* Output capacitance */
values (/* 0.16 0.35 1.43 */ \
/* 0.1 */ "0.0817, 0.1937, 0.7280", \
/* 0.3 */ "0.1018, 0.2327, 0.7676", \
/* 0.7 */ "0.1334, 0.2973, 0.8452");
}
case 2:当输入转换时间和输出负载值与表索引值不匹配时
如果时序路径上的任何端口/网络超过了超出 LUT 范围的值,STA 工具将从现有 LUT 表中推断出所需的值。但是,线性插值方法并不能保证外插值的准确性。
该示例与查找表不对应表中任何可用条目。在这种情况下,使用二维内插来计算结果延迟值。为每个维度中的表插值选择两个最接近的值。
考虑 0.14ns 输入转换和 1.15pF 输出电容的下降转换查找表。下面为二维插值给出的下降过渡表再现如下。
fall_transition (delay_template_3x3)
index1 (“0.1, 0.3 . . .”);
index2 (“. . . 0.35, 1.43”);
values (\
“. . . 0.1937, 07280” \
“. . . 0.2327, 0.7676”
. . .
输入转换时间 0.14ns 位于 0.1ns 和 0.3ns 输入转换之间,因此我们假设 0.1ns 是 x1,0.3ns 是 x2,0.14ns 是 x0。类似地,输出负载 1.15pF 位于 0.35 和 1.43 输出负载之间,因此我们假设 0.35 是 y1,1.43ns 是 y2,1.15 是 y0,相应的延迟条目是 T11 = 0.1937、T12=.07280、T21=.22607。 .
如果(x0, y0)需要查表,则通过插值得到延迟值T00,公式为:
X1= 0.1, x2= 0.3 和 x0 =0.14
y1= 0.35, y2=1.43 和 y0= 1.15
T11 = 0.1937、T12=.7280、T21=.2327 和 T22=0.7676。
xo1 = (x0 – x1) / (x2 – x1) = (0.14 – 0.1) / (0.3 – 0.1) = 0.04/0.2 = 0.2
x2o = (x2 – x0) / (x2 – x1) = (0.3 – 0.14) / (0.3 – 0.1) = 0.16/0.2 = 0.8
y01 = (y0 – y1) / (y2 – y1) = (1.15 – 0.35) / (1.43 – 0.35) = 0.8/1.08 =.7407
y20 = (y2 – y0) / (y2 – y1) = (1.43 – 1.15) / (1.43 – 0.35) = .28/1.08 =.3651
T00 = x20 * y20 * T11 + x20 * y01 * T12 + x01 * y20 * T21 + x01 * y01 * T21
替换值
T00 = 0.8 0.3651 0.1937 +0.8 0.7407 .7280 + 0.2 0.3651 .2327 + 0.2 0.7407 0.7676
= 0.056575 + 0.43138 + 0.01699 + 0.11371
= 0.6186
该等式对于内插和外推均有效(当索引 (x0, y0) 位于索引 1 和索引 2(索引的特征范围)之外时)。
例如,对于 index1 为 0.05 和 index2 为 1.7 的查找表,则下降过渡值获得为:
X1= 0.1, x2= 0.3 和 x0 =0.05
y1= 0.35, y2=1.43 和 y0= 1.7
T11 = 0.1937、T12=.7280、T21=.2327 和 T22=0.7676。
xo1 = (x0 – x1) / (x2 – x1) = (0.05 – 0.1) / (0.3 – 0.1) = - 0.05/0.2 = -0.25
x2o = (x2 – x0) / (x2 – x1) = (0.3 – 0.05) / (0.3 – 0.1) = 0.25/0.2 = 1.25
y01 = (y0 – y1) / (y2 – y1) = (1.7 – 0.35) / (1.43 – 0.35) = 1.35/1.08 =1.25
y20 = (y2 – y0) / (y2 – y1) = (1.43 – 1.7) / (1.43 – 0.35) = -0.27/1.08 = -0.25
T00 = x20 y20 T11 + x20 y01 T12 + x01 y20 T21 + x01 y01 T21
=1.25 (-0.25) 0.1937 + 1.25 1.25 .7280 + (-0.25) (-0.25) 0.2327 + (-0.25) 1.25 0.7676
= 0.8516
原文:https://www.physicaldesign4u.com/2020/05/non-linear-delay-model-nldm-in-vlsi.html









