3.6 黑盒的接口时序模型
本节将介绍黑盒(任意模块或块)的 IO 接口时序弧,时序模型将捕获黑盒(black box)IO 接口(interface)的时序。黑盒的接口时序模型可以具有组合逻辑弧,也可以有时序逻辑弧。通常,这些时序弧也可能取决于状态。
图 3-11
对于如图 3-11 所示的例子,可以将时序弧分为以下几类:
- 输入到输出的组合逻辑弧:这对应于直接从输入到输出的组合逻辑路径,例如从输入端口 FIN 到输出端口 FOUT。输入时序逻辑弧:这对应于连接到触发器 D 引脚的输入端口的建立时间或保持时间。通常,在将模块的输入端口连接到触发器的 D 引脚之前,可以存在一些组合逻辑。这样的一个例子是在输入端口 DIN 上相对于时钟端口 ACLK 的建立时间检查。输出时序逻辑弧:这类似于触发器时钟端到输出端 Q 的传播延迟。通常,触发器输出引脚与模块输出端口之间可以存在一些组合逻辑。一个示例是从时钟 BCLK 到触发器 UFF1 的输出引脚再到输出端口 DOUT 的路径。异步输入时序弧:这类似于触发器异步输入引脚的恢复时间和撤销时间时序约束,例如输入端口 ARST 到触发器 UFF0 的异步清零引脚。
除上述时序弧外,在黑盒的外部时钟引脚上还可以进行脉冲宽度检查。还可以定义内部节点(node)并在这些内部节点上定义衍生时钟(generated clock),从而指定在这些节点之间的时序弧。总之,黑盒模型可以具有以下时序弧:
- 纯组合逻辑路径的输入到输出时序弧(Input to output timing arcs)从同步输入端口到相关时钟端口的建立时间和保持时间时序弧(Setup and hold timing arcs)从异步输入端口到相关时钟端口的恢复时间和撤销时间时序弧(Recovery and removal timing arcs)从时钟端口到输出端口的输出传播延迟(Output propagation delay)
如上所述的接口时序模型并非旨在捕获黑盒的内部时序,而只是捕获其接口上的时序。
3.7 高级时序建模
非线性延迟模型(NLDM)这类的时序模型是基于输出负载电容和输入过渡时间来表示通过时序弧的延迟的。实际上,单元输出的负载不仅包括电容还应当包括互连电阻(interconnect resistance)。由于 NLDM 方法假设输出负载为纯电容,因此互连电阻成为了一个问题。即使互连电阻不为零,但当互连电阻的影响较小时,仍使用了这些 NLDM 模型。在互连电阻存在的情况下,延迟的计算方法通过在单元的输出端获得等效的有效电容(effective capacitance)来改进 NLDM 模型。延迟计算工具中使用的“有效”电容法获得的等效电容可保证单元输出延迟与具有 RC 互连的单元输出延迟相同。有效电容法将在 5.2 节里的延迟计算部分再详细介绍。
随着特征尺寸的缩小,由于波形变得高度非线性,互连电阻的影响会导致较大的误差,各种建模方法为单元的输出驱动能力提供了更高的精度。通常,这些方法通过用等效电流源对驱动器(driver)的输出级进行建模来获得更高的精度。例如 CCS(Composite Current Source)复合电流源或 ECSM(Effective Current Source Model)有效电流源模型:CCS 时序模型通过使用随时间变化且依赖电压的电流源,为建模单元输出驱动能力提供了更高的精度。通过为不同情况下的接收引脚电容(receiver pin capacitance)和输出充电电流(output charging currents)指定详细时序模型,可以提供时序信息。接下来描述 CCS 模型的细节。
3.7.1 接收引脚电容
接收引脚电容对应于 NLDM 模型中指定的输入引脚电容(input pin capacitance)。与 NLDM 模型的输入引脚电容不同,CCS 模型允许在过渡波形的不同部分分别指定接收引脚电容。由于互连 RC 和由单元内部输入设备的米勒效应(Miller effect)所引起的等效输入非线性电容,接收引脚电容值会在过渡波形的不同点处发生变化。因此,该电容值在波形的初始部分(leading portion)与在波形的后续部分(trailing portion)的建模是不同的。
接收电容可以在引脚级别(pin level)上指定(如 NLDM 模型),通过该引脚的所有时序弧都使用该电容值;或者,接收电容可以在时序弧(timing arc level)级别上指定,在这种情况下可以为不同的时序弧指定不同的电容模型。接下来将介绍这两种指定接收引脚电容的方法。
在引脚级别指定电容
当在引脚级别指定电容时,接收引脚电容的一维表格示例如下:
index_1 指定了此引脚输入过渡时间的索引值,一维表格 values 为波形的初始部分指定了输入引脚上用于上升沿波形的接收电容。
与上面示例中的 receiver_capacitance1_rise 表格类似,receiver_capacitance2_rise 表格为波形的后续部分指定了输入引脚上用于上升沿波形的接收电容。而下降电容(用于下降沿输入波形的引脚电容)分别由表格 receiver_capacitance1_fall 和 receiver_capacitance2_fall 指定。
在时序弧级别指定电容
接收引脚电容值也可以在时序弧级别上,根据输入过渡时间和输出负载以二维表格的形式来指定。以下给出了在时序弧级别指定电容的示例。本示例指定了输入引脚 IN 上波形初始部分的接收引脚上升电容,该电容取决于输入引脚 IN 上的过渡时间和输出引脚 OUT 上的负载。
上面的示例指定了 receiver_capacitance1_rise 的模型,库中也包含有关 receiver_capacitance2_rise、receiver_capacitance1_fall 和 receiver_capacitance2_fall 的类似定义。
下表总结了四种不同类型的接收电容类型。如上所述,可以在引脚级别将它们指定为一维表格,或在时序弧级别将它们指定为二维表格。
3.7.2 输出电流
在 CCS 模型中,非线性时序表现为输出电流。输出电流信息被指定为一个查找表,该表的查找取决于输入过渡时间和输出负载。
输出电流会根据输入过渡时间和输出负载电容的不同组合被指定,对于每一个组合,都将分别指定一个输出电流波形。本质上,此处的波形指的是随时间变化的输出电流值。以下示例使用 output_current_fall 指定了用于下降输出波形的输出电流:
reference_time 是指输入波形超过延迟阈值的时间,index_1 和 index_2 是指输入过渡时间和所使用的输出负载电容,而 index_3 是时间。index_1 和 index_2(输入过渡时间和输出负载电容)只能有一个值,index_3 是指时间值,表值是指相应的输出电流。因此,对于给定的输入过渡时间和输出负载,输出电流波形是时间的函数。同样,还指定了用于输入过渡时间和输出电容的其他组合的查找表。
类似地可以使用 output_current_rise 去指定上升输出波形的输出电流。
3.7.3 串扰噪声分析模型
本节介绍用于串扰噪声(或毛刺)分析的 CCS 模型,又被称为 CCSN(CCS Noise)模型。CCS 噪声模型是结构(structural)模型,并针对单元内的不同沟道连接块 -CCB(Channel Connected Blocks)表示。
什么是 CCB?CCB 是指单元的源极(source)- 漏极(drain)的沟道(channel)连接部分。例如,单级(single stage)单元(例如反相器、与非门和或非门单元)仅包含一个 CCB,即整个单元仅通过一个沟道连接区域进行连接,而多级单元(例如与门和或门单元)包含多个 CCB。
通常仅为由单元输入驱动的第一个 CCB 和驱动单元输出的最后一个 CCB 指定 CCSN 模型,并且会使用稳态电流、输出电压和传播噪声模型来指定这些 CCSN 模型。
对于单级组合逻辑单元(例如与非门和或非门单元),将为每个时序弧指定 CCS 噪声模型。这些单元只有一个 CCB,因此模型将会是从单元的输入引脚到输出引脚的。
以下是一个与非门单元的模型示例:
现在我们描述 CCS 噪声模型的属性:ccsn_first_stage 字段表示该模型用于与非门单元的第一级 CCB。如前所述,与非门单元只有一个 CCB。is_needed 字段几乎始终为 true,但天线单元(antenna cell)等非功能性单元除外。stage_type 字段中的 both 表示该级 CCB 同时具有上拉(pull-up)和下拉(pull-down)结构。miller_cap_rise 和 miller_cap_fall 分别代表输出上升和下降过渡时的米勒(Miller)电容值。
直流电流
dc_current 表中为输出引脚上针对输入和输出引脚电压不同组合的的直流电流,其中 index_1 为输入电压,index_2 为输出电压, 二维表格中的数值为 CCB 输出处的直流电流。输入电压和输出电流均在库中指定单位(通常为伏特和毫安)。对于从与非门单元的输入引脚 IN1 到输出引脚 OUT 的 CCS 噪声模型示例,当输入电压为 -0.9V 并且输出电压为 0V 时,输出端的直流电流为 0.42mA。
输出电压
output_voltage_rise 和 output_voltage_fall 表中分别包含 CCB 输出上升和下降的时序信息。这些表格是 CCB 输出节点的多维表格,指定了针对不同输入过渡时间和输出电容的上升和下降输出电压。每个表格的 index_1 指定了轨到轨输入过渡时间,index_2 指定了输出电容,index_3 指定了输出电压超过特定阈值点的时间(在这种情况下,为 0.9V 的 Vdd 电源的 30%,70%和 90%)。在每个多维表中,电压交叉点(voltage crossing points)是固定的,并且 CCB 输出节点与电压交叉时的时间值在 index_3 中指定。
噪声传播
propagated_noise_high 模型和 propagated_noise_low 模型指定的多维表格提供了通过 CCB 的噪声传播信息。这些模型表征了串扰毛刺(或噪声)从 CCB 的输入到输出的传播,表征时输入端使用了对称的三角波。噪声传播的多维表被组织为了多个表,这些表指定了 CCB 输出处的毛刺波形。这些多维表包含:
- 输入毛刺幅值(index_1)输入毛刺宽度(index_2)CCB 输出电容(index_3)时间(index_4)
表格中的数值指定了 CCB 输出电压(或通过 CCB 传播的噪声)。
两级单元的噪声模型
与单级单元一样,两级单元(例如与门和或门单元)的 CCS 噪声模型通常被描述为时序弧的一部分。由于这些单元包含两个单独的 CCB,因此需要分别为 ccsn_first_stage 和 ccsn_last_stage 指定噪声模型。例如,对于两输入与门单元,CCS 噪声模型由第一级和最后一级相互独立的模型组成,如下所示:
为 IN2 引脚指定的 ccsn_last_stage 中的模型与为 IN1 引脚指定的 ccsn_last_stage 中的模型是相同的。
多级单元和时序单元的噪声模型
通常将较为复杂的组合逻辑单元或时序逻辑单元的 CCS 噪声模型描述为引脚规范(pin specification)的一部分,这与前面在单级或二级单元的 CCS 噪声模型中以引脚对(pin-pair)为基础,指定为时序弧的一部分是不同的。通常由所有输入引脚的 ccsn_first_stage 模型和所有输出引脚的 ccsn_last_stage 模型描述复杂的多级和时序单元。这些单元的 CCS 噪声模型不是时序弧的一部分,但通常是为引脚指定的。
如果输入和输出之间的内部路径多达两级 CCB,则噪声模型也可以表示为引脚对时序弧的一部分。通常,多级单元中可以将某些 CCS 噪声模型指定为引脚对时序弧的一部分,而其他一些噪声模型可以通过引脚说明来指定。
下面的示例使用引脚说明以及时序弧的一部分指定了 CCS 噪声模型:
请注意,上述触发器单元的某些 CCS 模型是通过引脚定义的。使用输入引脚上的引脚说明定义的指定为 ccsn_first_stage,而输出引脚 QN 上的 CCS 模型指定为 ccsn_last_stage。另外,两级 CCS 噪声模型被描述为 CDN 到 Q 的时序弧的一部分。因此本示例表明,一个单元可以具有指定为引脚说明一部分和时序弧一部分的 CCS 模型。
3.7.4 其它噪声模型
除了上述 CCS 噪声模型之外,某些单元库还提供了其他模型来表征噪声。早在 CCS 噪声模型出现之前,就已经使用了其中一些模型。如果 CCS 噪声模型可用,则不需要这些附加模型。为了完整起见,我们在下面介绍一些早期的噪声模型。
直流裕度模型(Models for DC margin):直流裕度是指单元输入引脚允许的最大直流变化(DC variation),它将使单元保持稳定状态,即不会在输出端引起毛刺。例如,低电平输入的直流裕度指的是输入引脚上最大的直流电压值,而不会在输出端引起任何电平跳变。
抗扰度模型(Models for noise immunity):抗扰度模型指定输入引脚可以允许的毛刺幅度(glitch magnitude)。通常以二维表的形式来描述,其中毛刺宽度和输出电容为两个索引量,表中的值对应于输入引脚可以允许的毛刺幅度。这意味着任何小于指定幅度和宽度的毛刺都不会通过单元传播。抗扰度模型还具有不同变形形式,例如:
- noise_immunity_highnoise_immunity_lownoise_immunity_above_highnoise_immunity_below_low
3.8 功耗建模
单元库中也包含与单元功耗有关的信息,包括有功功率(active power)以及待机(standby)或漏电(leakage)功率。顾名思义,有功功率与设计中的行为有关,而待机功率是待机模式下的功耗,这主要是由于漏电引起的。
3.8.1 有功功率
有功功率与单元输入和输出引脚上的行为有关。单元中的有功功率是由于输出负载的充电以及内部的开关引起的,通常分别称这两个为输出开关功率(output switching power)和内部开关功率(internal switching power)。
输出开关功率与单元类型无关,仅取决于输出负载电容、开关频率和供电电源;内部开关功率取决于单元的类型,因此该值会包含在单元库中,接下来将介绍库中的内部开关功率。
内部开关功率在单元库中被称为 internal power,这是当单元的输入或输出处于活动状态时单元内部的功耗。对于组合逻辑单元,输入引脚的电平跳变会导致输出引脚的电平跳变,从而导致内部开关功耗。例如,每当输入引脚电平跳变(上升或下降)时,反相器单元就会消耗功率。库中描述的内部开关功率如下所示:
上面的示例展示了单元从输入引脚 A 到输出引脚 Z1 的功耗,模板中的 2x2 表是根据引脚 A 上的输入过渡时间和引脚 Z1 上的输出电容来确定的。注意,尽管该表包含了输出电容,但表中的值仅对应于内部开关,不包括输出电容的影响。该值表示每个开关转换(上升或下降)时在单元中耗散的内部能量,单位是从库中的其他单位导出的(通常电压以伏特 V 为单位,电容以皮法拉 pF 为单位,并且表示为以皮焦耳 pJ 为单位的能量)。因此,库中的内部开关功率实际上是指每次开关转换时内部所消耗的能量。
除了内部开关功率表之外,上面的示例中还给出了电源引脚、接地引脚的说明,并且指定了可将单元断电的条件。这些构造允许在设计和方案中使用多个电源,在这些情况下可以关闭不同的电源。下面展示了单元的电源引脚说明:
功率描述的语法允许上升和下降(指输出过渡方向)功率使用单独的构造。就像时序弧一样,功率描述也可能取决于状态。例如,可以将异或门(XOR)单元的状态相关功耗指定为取决于各种输入的状态。
对于组合逻辑单元,开关功率是基于输入 - 输出引脚对指定的。但是,对于诸如具有互补输出 Q 和 QN 的触发器之类的时序单元来说,CLK-> Q 转换也会导致 CLK-> QN 转换。因此,该库可以将内部开关功率指定为三维表格,如下所示。下例中的三个维度分别是 CLK 的输入压摆(input slew)和 Q 与 QN 的输出电容。
即使输出和内部状态没有转换,也可以消耗开关功率。一个常见的例子是在触发器的时钟引脚上切换(toggle)的时钟。触发器在每次时钟切换时都会消耗功率,通常是由触发器单元内部反相器的开关所带来的。即使触发器输出未切换,也会消耗由于时钟引脚切换引起的功率。因此,对于时序逻辑单元,输入引脚功率(input pin power)是指单元内部的功耗,即输出不切换时的功耗。以下例子中描述了输入引脚功率:
上述例子展示了 CLK 引脚切换时的功率说明,它表示即使输出未切换,时钟切换也会导致功耗。
时钟引脚的功率是否被重复计算了?
注意,触发器还包含由于 CLK-> Q 转换引起的功耗。因此重要的是,CLK-> Q 功率描述表格中的值是不包括与 CLK 内部功率有关的影响的,CLK 内部功率与输出 Q 不切换时的状况相对应。
以上内容涉及到了应用工具对功率表使用的一致性,能够确保在功率计算期间与时钟输入有关的内部功率不会被重复计算。
3.8.2 漏电功率
大多数标准单元的设计都仅在输出或状态发生变化时才消耗功率。单元通了电但没有任何行为时,所有功耗都归因于泄漏电流(leakage current)。泄漏可能是由于 MOS 器件的亚阈值电流引起的,也可能是由于通过栅极氧化物的隧穿电流引起的。在以前的 CMOS 工艺技术中,漏电功率可以忽略不计,并且在设计过程中并不是主要考虑因素。但是,随着技术的发展,漏电功率变得越来越大,与有功功率相比,漏电功率已经无法忽略不计了。
如上所述,漏电功率主要有两个来源:MOS 器件中的亚阈值电流和栅氧化物隧穿。通过使用高阈值电压单元,可以降低亚阈值电流;然而,由于高阈值电压单元的速度较低而存在一个折中(trade-off):高阈值电压单元的漏电较小,但速度较慢。同样,低阈值电压单元的漏电较大,但速度较高。无论是使用高阈值电压还是低阈值电压的单元,栅极氧化物隧穿带来的影响都差不多。因此,控制漏电功率的可能方法是使用高阈值电压的单元。类似于在高阈值电压和标准阈值电压单元之间进行选择,设计中使用的单元强度(strength)也是一种漏电和速度之间的折中。强度较高的单元具有较高的漏电功率,但速度较高。与功率管理有关的折中将在 10.6 节中详细介绍。
MOS 器件的亚阈值泄漏电流与温度具有很强的非线性特性,在大多数工艺技术中,随着器件温度从 25°C 升高到 125°C,亚阈值泄漏电流可能会增加 10 倍至 20 倍。栅极氧化物隧穿带来的影响基本不随温度或器件阈值电压而改变,在 100nm 及以上工艺技术中可以忽略的栅极氧化物隧穿已成为 65nm 或更精细技术在较低温度下漏电的主要原因。例如,对于 65nm 或更精细的工艺技术,栅极氧化物隧穿漏电量可能等于室温下的亚阈值漏电量。而在高温下,亚阈值漏电仍然是导致漏电功率的主要因素。
库中的每个单元都被指定了漏电功率。例如,反相器单元的漏电功率可能描述如下:
这是单元中耗散的漏电功率,漏电功率单位在库的头文件中指定,通常以纳瓦为单位。通常,漏电功率还取决于单元的状态,可以使用 when 条件指定状态相关值。
例如,一个反相器单元可以具有如下描述:
其中 I 是反相器单元的输入引脚。需要注意的是,上例中的描述还包括了一个默认值(在 when 条件之外),该默认值通常是在 when 条件内指定值的平均值。
3.9 单元库中的其它属性
除时序信息外,库中的单元描述还指定了单元面积、功能和时序弧的 SDF 条件。这些将在本节中进行简要描述,有关更多详细信息,请参阅 Liberty 手册。
单元面积
面积描述中指定了一个单元或一组单元的面积:
area:2.35
上面指定了单元的面积为 2.35 个面积单位,这可以代表单元实际使用的硅面积,也可以是面积的相对测量值。
单元功能
功能描述中指定了一个引脚或一组引脚的功能:
上面指定了一个两输入与门单元输出引脚 Z 的逻辑功能。
SDF 条件
SDF 条件属性支持标准延迟格式 SDF(Standard Delay Format)文件的生成以及在反标(backannotation)期间的条件匹配。就像 when 条件指定用于时序分析的状态相关模型的条件一样,SDF 标注(annotation)时状态相关时序的相应条件由 sdf_cond 来表示。以下是一个示例:
3.10 特征和工作条件
单元库中还会指定创建该库的特征(characterization)和工作条件。例如,库文件的头部可能包含以下内容:
工作条件(nom_process、nom_temperature 和 nom_voltage)指定了对库进行表征的工艺、电压和温度, 也指定了使用该库中单元的条件。如果特征和工作条件不同,则需要对延迟计算过程中获得的时序值进行降额(derate)处理, 这可以通过使用库中指定的降额系数(k- 系数)来实现。
在除用于表征之外的条件下使用降额获得时序值会导致时序计算不准确。只有当无法在预期的条件下表征库时,才能使用降额过程。
什么是工艺变量?
与作为物理量的温度和电压不同,工艺是不可量化的变量。就数字特征和验证而言,它可能是缓慢(slow)、典型(typical)或快速(fast)的工艺之一。因此,工艺值为 1.0(或任何其它值)是什么意思?答案在下面。
库的表征是一个耗时的过程,针对各种工艺角(process corner)对库进行表征可能需要数周的时间,工艺变量的设置使得以特定工艺角为特征的库可以用于不同工艺角的时序计算。工艺的 k- 系数可用于完成从特征库工艺到目标工艺的延迟降额。如上所述,降额系数的使用在时序计算期间引入了不准确性,跨工艺条件进行降额尤其不准确,因此很少采用。总而言之,指定不同工艺变量值(例如 1.0 或任何其它值)的唯一功能就是在少数情况下允许跨工艺条件进行降额处理。
3.10.1 使用 K- 系数降额
如上所述,当工作条件不同于表征条件时,降额系数(或称 k- 系数)可用于计算延迟,k- 系数是近似系数。库中 k- 系数的示例如下所示:
当延迟计算过程中工作条件的工艺、电压或温度与库中的标称条件不同时,可使用这些系数来进行计算。注意,k_volt 系数为负,这意味着延迟随着电压的增加而减小,而 k_temp 因子为正,这意味着延迟通常随温度的升高而增加(除非单元具有 2.10 节中所描述的温度反转现象)。k- 系数的用法如下:
- 降额后延迟库中原始延迟
例如,假设使用 slow 工艺模型在 1.08V 和 125°C 下表征了一个库。如果要获得 1.14V 和 100°C 的延迟,则 slow 工艺模型的单元上升延迟可以通过以下计算获得:
- 降额后延迟库中原始延迟
假设使用上例中的 k- 系数代入以上计算公式,可得:
- 降额后延迟库中原始延迟库中原始延迟
可见,在降额条件下的延迟约为原始延迟的 94.48%。
3.10.2 库中各单位
单元描述中数值的单位都是在库中指定的,可使用 Liberty 命令集在库文件中声明单位。电压、时间、电容和电阻的单位声明如下例所示:
在本书中,我们假设库中时间单位为纳秒(ns),电压单位为伏特(V),每转换一次的内部功率单位为皮焦耳(pJ),漏电功率单位为纳瓦(nW),电容单位为皮法(pF),电阻单位为 Kohms,面积单位为平方微米,但明确有特殊说明的情况除外。