【第三章:标准单元库 下】静态时序分析圣经翻译计划

本文由知乎赵俊军授权转载,知乎主页为https://www.zhihu.com/people/zhao-jun-jun-19

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)的输出级进行建模来获得更高的精度。例如CCSComposite Current Source)复合电流源或ECSMEffective 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_fallreceiver_capacitance2_fall指定。

在时序弧级别指定电容

接收引脚电容值也可以在时序弧级别上,根据输入过渡时间和输出负载以二维表格的形式来指定。以下给出了在时序弧级别指定电容的示例。本示例指定了输入引脚IN上波形初始部分的接收引脚上升电容,该电容取决于输入引脚IN上的过渡时间和输出引脚OUT上的负载。

上面的示例指定了receiver_capacitance1_rise的模型,库中也包含有关receiver_capacitance2_risereceiver_capacitance1_fallreceiver_capacitance2_fall的类似定义。

下表总结了四种不同类型的接收电容类型。如上所述,可以在引脚级别将它们指定为一维表格,或在时序弧级别将它们指定为二维表格。

3.7.2 输出电流

在CCS模型中,非线性时序表现为输出电流。输出电流信息被指定为一个查找表,该表的查找取决于输入过渡时间和输出负载。

输出电流会根据输入过渡时间和输出负载电容的不同组合被指定,对于每一个组合,都将分别指定一个输出电流波形。本质上,此处的波形指的是随时间变化的输出电流值。以下示例使用output_current_fall指定了用于下降输出波形的输出电流:

reference_time是指输入波形超过延迟阈值的时间,index_1index_2是指输入过渡时间和所使用的输出负载电容,而index_3是时间。index_1index_2(输入过渡时间和输出负载电容)只能有一个值,index_3是指时间值,表值是指相应的输出电流。因此,对于给定的输入过渡时间和输出负载,输出电流波形是时间的函数。同样,还指定了用于输入过渡时间和输出电容的其他组合的查找表。

类似地可以使用output_current_rise去指定上升输出波形的输出电流。

3.7.3 串扰噪声分析模型

本节介绍用于串扰噪声(或毛刺)分析的CCS模型,又被称为CCSNCCS 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_risemiller_cap_fall分别代表输出上升和下降过渡时的米勒(Miller)电容值。

直流电流

dc_current表中为输出引脚上针对输入和输出引脚电压不同组合的的直流电流,其中index_1为输入电压,index_2为输出电压, 二维表格中的数值为CCB输出处的直流电流。输入电压和输出电流均在库中指定单位(通常为伏特和毫安)。对于从与非门单元的输入引脚IN1到输出引脚OUT的CCS噪声模型示例,当输入电压为-0.9V并且输出电压为0V时,输出端的直流电流为0.42mA。

输出电压

output_voltage_riseoutput_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_stageccsn_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_high
  • noise_immunity_low
  • noise_immunity_above_high
  • noise_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_processnom_temperaturenom_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-系数的用法如下:

  • \(降额后延迟 = 库中原始延迟 * (1+ k_{process} * \Delta_{process}+k_{volt} * \Delta_{volt}+k_{temp} * \Delta_{temp})\)

例如,假设使用slow工艺模型在1.08V和125°C下表征了一个库。如果要获得1.14V和100°C的延迟,则slow工艺模型的单元上升延迟可以通过以下计算获得:

  • \(降额后延迟 = 库中原始延迟 * (1 + k_{volt\_cell\_rise} * 0.06 - k_{temp\_cell\_rise} * 25)\)

假设使用上例中的k-系数代入以上计算公式,可得:

  • \(降额后延迟 = 库中原始延迟 * (1 - 0.42 * 0.06 - 0.0012 * 25)= 库中原始延迟 * 0.9448\)

可见,在降额条件下的延迟约为原始延迟的94.48%。

3.10.2 库中各单位

单元描述中数值的单位都是在库中指定的,可使用Liberty命令集在库文件中声明单位。电压、时间、电容和电阻的单位声明如下例所示:

在本书中,我们假设库中时间单位为纳秒(ns),电压单位为伏特(V),每转换一次的内部功率单位为皮焦耳(pJ),漏电功率单位为纳瓦(nW),电容单位为皮法(pF),电阻单位为Kohms,面积单位为平方微米,但明确有特殊说明的情况除外。

posted @ 2020-11-12 13:11  空白MAX  阅读(988)  评论(0编辑  收藏  举报