这章节主要介绍了单元设计在预布局阶段(pre-layout)的延时计算以及在完成布局之后(post-layout)的时序验证。之前的几章节都关注于互联的建模以及单元库。我们将会利用单元以及互连建模的有关技术去获得设计的时序。
目录
5.1 综述
5.1.1 基础延时计算
一个典型的设计包含了许多的组合、时序单元。我们使用下图的逻辑框架去描述延时计算的概念。
库对于单元的描述指定了单元每个引脚的电容值。因此设计中的每个网络都有容性负载,大小为所有扇出的引脚的电容之和加上互连电容(如果有的话)。出于简洁而言,我们这章节就不考虑互连电容了。对于上图而言,网络NET0的电容就在于NET0与UAND1连接的引脚的电容+NET0与UNOR2连接的引脚的电容之和。输出引脚O1的负载是单元UNOR2加上所有输出逻辑块的电容负载。输入引脚I1和I2的引脚电容分别对应于UAND1和UINV0单元。可以抽象成下图。(简单来看就是这个单元的输出 连接了谁的输入引脚)
就像在第三章中描述的一样,对于多种时序弧,单元库包含了NLDM模型可供使用。这个非线性模型,用一个二维的表格的形式进行描述,两个索引分别为输入过渡时间以及输出电容。单元的输出过渡时间也用一个二维的表格描述,两个索引分别为输入过渡时间和总的输出电容。因此,如果在逻辑模块的输入引脚,输入过渡时间被指定,这时,输出过渡时间以及UINV0-UAND1的时序弧的延时就可以从单元库的描述得出。其他时序弧的时序参数也可以用相同的方法得出。对于一个多输入的单元,不同的输入引脚可以使得输出引脚有不同的过渡时间。对于不同的输出过渡时间的选择,将在5.4节中描述。
5.1.2 延时的计算(包含互连)
预布局的时序
在第四章中描述了,在预布局的时序验证阶段,使用线负载模型对互连参数进行了估计。在多数情况下,电阻对于线负载模型的影响被设为0.这种情况下,线负载模型的影响全部由电容贡献,且对于设计中所有的时序弧前面部分所描述的时延计算方法同样适用。
布线后的时序
金属走线的寄生参数,映射成一个在驱动和扇出单元之间的网络。上面的图片为例子,网络的互连电阻如下图所示。内部网络如NET0,映射到了多个子节点,因此UINV0的输出负载由RC结构组成。因为NLDM表是和输出电容和输入过渡时间组成的,输出引脚的电阻负载暗示了,NLDM的表不能直接适用(因为出现了电阻,而不是仅有电容存在)。接下来介绍如何将NLDM表格模型和互联电阻结合使用。
5.2 使用有效电容计算单元延时
为了解决上面“存在电阻而不能直接应用模型的问题”。
有效电容方法,试图通过单一电容,等效其他的负载。所以,在这种情况下,无论是原设计还是现在有了等效电容的设计,都在输出引脚有相似时序。这个等效的单一电容称为有效电容。
下图a展示了一个单元在它的扇出有RC互连网络。在b图中用等效RC π网络进行表示,在c图中就很好说明了等效电容的存在意义。它与原设计具有相同的延时,只不过用一个电容概括了之前的所有电容和电阻。总的来说,具有RC负载的输出单元,相比于只有有效电容的单元,输出波形有很大的不同。
在下图中,展现了三种不同的电容形式下(总电容、有效电容、真实RC),输出波形的不同。可以推断知道,选择具有恰当值的有效电容值,可以使上图中ac两种情况的延时相同。
可以使用上面的公式,配合π型网络,计算等效电容值。
在公式里,C1就是距离输出引脚更近(near-end)的电容,C2就是距离输出引脚更远(far-end)的电容。k的值在0-1之间。在互连电阻的影响可以忽略不计这种情况下,有效电容的大小几乎与总电容的大小相等。如果我们试着把b图中的电阻设为0,那就完全解释的通了。相似的,如果互连电阻相对较大,此时大到视为断路了,那么等效电容就是C1,也就是离得近的那个电容。所以在有限电阻值的情况下,可以取k为0-1的一个值。
有效电容是他俩的函数:
- 驱动单元
- 负载的特征(load characteristics),尤其是驱动单元负载的输入阻抗(input impedance)
对于给定的互连,如果一个单元的输出驱动能力较弱,那么他所看到的有效电容将会更大。如果一个单元的输出驱动能力较强,那么他所看到的有效电容将会更小。因此,有效电容的大小将会介于C1或是总电容之间。接近C1的时候,电阻较大或者单元的驱动能力较强;接近总电容的时候,此时电阻的值较小或者单元的驱动能力较弱。目标引脚的转换时间比驱动单元的输出时间要晚,近端电容(near-end)充电速度快于远端电容(far-end),是电阻对于互连的屏蔽作用(resistive shielding effect),因为驱动单元只能看到远端电容的一部分。
如何理解驱动能力与Ceff的大小关系?
如果没有互连负载,输出引脚也存在着本征电容,可以联想一下反相器链的延时计算。
驱动能力较大,电流较大,尺寸较大,所以本征电容较大,相比之下看到的有效电容就小。
驱动能力较小,电流较小,尺寸较小,所以本征电容较小,相比之下看到的有效电容就大。
我们通过一个迭代的过程(iterative procedure)来获得有效电容。就算法而言,第一步是获取单元输出端看到的看到实际的RC负载的驱动点阻抗(driving point impedance),对于实际RC负载的驱动点阻抗,可以用二阶AWE或Arnoldi算法等方法计算。下一步是使两种情况下,到达过渡波形的中点(midpoint)时,传输的电荷量相等。使用实际RC负载(基于驱动点阻抗),在单元的输出端传输的电荷量,与使用有效电容作为负载时,传输的电荷量,两者是相等的。注意在这里提到的电荷传输量匹配都是到过渡波形的中点。整个迭代过程就是,我们先估计一个有效电容的值,然后不断迭代、更新有效电容的值。大多数情况下,迭代很少的次数就结束了。
有效电容近似(effective capacitance approximation)是用来计算单元延时的很好模型。但是使用有效电容近似获得输出波形和实际的输出波形并不相同。有效电容近似值不能代表单元输出处的波形,尤其是波形的后半部分。大多数情况下我们需要关注的波形并不是单元的输出引脚处,而是单元的互连线的末端,也就是扇出单元的输入引脚处。
有多种方法可以用来计算互连线终点处的延迟和波形。在确认有效电容的过程中,通常我们也计算了驱动单元的等效戴维宁电压源(equivalent Thevenin voltage source).它由一个电压源和一个串联电阻组成。串联电阻Rd对应于单元在输出时的上拉或者是下拉电阻(pull up or pull down)。
理解:把输出引脚的波形变换,将前面的所有单元,等效为一个电压源输出的波形变换。
5.3 互连延时
网络的互连寄生参数,通常用一个RC电路来表示。它可以是布局前,也可以是布局后的。布局后的互连的寄生参数可以包含对于临近网络的耦合(coupling)。基本的延时计算对所有的电容都认为是接地的(grounded)。一个网络的寄生参数和他的驱动单元以及扇出单元如图5-7所示。
使用有效电容计算法,通过驱动单元的延时以及通过互连单元的延时,是需要分开计算的。使用有效电容法可得通过驱动单元的延迟,并在单元的输出端提供等效的戴维宁电压源,然后使用戴维宁电压源计算通过互连线的延迟。互连线部分有一个输入以及与目标引脚一样多的输出。使用戴维宁等效电压源的方法,可以计算到每个目标引脚的延时。
对于预布局的分析而言,RC互连结构是由树的类型所决定的,然后也就决定了延时的大小。选定的树结构通常在库中会指明。总的来说,最坏情况(慢)库,会选择最坏情况的树类型,因为这种树类型将会导致最大的延时。相似的,最好情况的树结构,通常在源引脚到目标引脚的路径上没有包含互连电阻,延时最小近似于0,也会被选做最快的工艺角(fast corner)。典型情况RC树,和最坏情况RC树处理方法等同于布局后的RC互连。
Elmore延时
Elmore延时适用于RC树。RC树具有如下的三种特征:
- 有1个单输入节点
- 不存在电阻环路
- 所有的电容都在节点和地之间
Elmore延迟可以看作是找到每段(segment)的延迟,即R与下游电容的乘积,然后取各延迟之和。
Td1 = C1 * R1;
Td2 = C1 * R1 + C2 * (R1 + R2);
. . .
Tdn = S(i=1,N) Ci (S (j=1,i) Rj); # Elmore delay equation
我们可以将Elmore延时,考虑为冲激响应的第一时刻。我们现在将Elmore延迟模型进行如下简化:Rwire,Cwire,以及负载电容Cload在输出引脚的远端。这样的情况下,我们就可以获得一个等效的RC网络,简化为一个π网络或者T网络,无论是哪一种网络,延时都如下表示:
下面的公式中线电容取半的原因:负载电容看到了整条线的线电阻,但是在T模型中线电容只看到了一半的线电阻,在π模型中整体的线电阻能看到一半的线电容。
下面是例子:
使用一个平衡的树模型,电阻以及电容根据网络的分支而进行平分(假设他的扇出为N),对于一个引脚负载电容为Cpin,延时使用树模型计算,可得:
如果最坏情况下,可以认为电阻以及整体电容在网络的尽端,Cpins是所有扇出单元引脚的电容和
下面是一个计算的例子:
如果我们用平衡树模型,我们可以得到N1网络的如下两个延时:
高阶互连延时的估算(High order Interconnect Delay Estimation)
如上所述,Elmore延迟考虑的是脉冲响应的第一时刻,而渐近波形评估(Asymptotic Waveform Evaluation)、Arnoldi或其他方法能够匹配更高阶的响应时刻。通过进行更高阶的估计,可以提高计算互连线延迟的精度。
整个芯片的延时计算(Full Chip Delay Calculation)
这一章已经介绍了单元延时以及互连延时的计算方法。因此,就可以认为,给定了输入过渡时间、单元延时以及互连延时就可以算出来了。互连网络远端(far-end)的过渡时间,是下一段的输入的过渡时间,这过程在整个过程中不断重复。因此,整个延时可以计算出来。
5.4 压摆合并
不同的压摆的到达一个指定点,例如多输入单元或者被多个驱动单元驱动的网络。这个指定的点称为压摆的合并点(merging point)。我们选择哪个压摆向前传播呢?考虑下面的例子。
A点的压摆,来得早,但上升较慢;B点的压摆,来的晚,但是上升较慢。
进行最大时序路径分析,有两种可能:
- 最差压摆传播(worst slew propagation):这个模型在合并点,选择最差的压摆进行传播,对应于上图a。对于A-Z的时序路径此选择是准确的,但对于通过引脚B-Z的任何时序路径都是悲观的。
- 最晚到来传播(worst arrival propagation):这个模型选择合并点到来最晚的压摆,对应于上图b。这个选择对于B-Z的时序路径是准确的,但是对于任何A-Z的时序路径都是过于乐观了。
进行最小时序路径分析,也有两种可能:
- 最优压摆传播(best slew propagation):这个模型在合并点,选择最好的压摆进行传播,对应于上图b。对于B-Z的时序路径此选择是准确的,但对于通过引脚A-Z的时序路径,b图的选择压摆太小了。对于A-Z的时序路径,延迟是比实际值小的,因此对于最小时序路径分析,该选择是悲观的。
- 最早到来传播(best arrival propagation):这个模型在合并点选择最早的到达波形,对应于上图a。对于A-Z的时序路径,该选择是准确的。但是大于B-Z的时序路径的实际值,这个选择使得最小延时太大,因此对于最小时序路径分析,该选择是乐观的。
有时候设计者会在静态时序分析的环境外进行延时的计算,此时工具通常会选择最差压摆传播,最终产生的结果对于最大延时分析已经足够悲观了,但是对于最小延时分析可能是过于乐观。
大多数静态时序分析工具均使用最差和最佳的压摆传播作为默认设置,因为它会保守地限制分析。但是,在分析特定路径时可以使用精确的压摆传播,精确的压摆传播需要在时序分析工具中启用一个选项。因此,重要的是要了解静态时序分析工具中默认使用哪种压摆传播模式,并清楚其可能过于悲观的情况。
5.5 不同的压摆阈值
一般来说,库会在单元表征(cell characterization)期间的指定压摆阈值(threshold)。问题在于,如果一个单元驱动另一个单元,两个单元有着不同的压摆阈值,咋办。如下图所示
单元U1在库中的压摆设置:
slew_lower_threshold_pct_rise : 20.00
slew_upper_threshold_pct_rise : 80.00
slew_derate_from_library : 1.00
input_threshold_pct_fall : 50.00
output_threshold_pct_fall : 50.00
input_threshold_pct_rise : 50.00
output_threshold_pct_rise : 50.00
slew_lower_threshold_pct_fall : 20.00
slew_upper_threshold_pct_fall : 80.00
单元U2在另一个库中的压摆设置:
slew_lower_threshold_pct_rise : 10.00
slew_upper_threshold_pct_rise : 90.00
slew_derate_from_library : 1.00
slew_lower_threshold_pct_fall : 10.00
slew_upper_threshold_pct_fall : 90.00
单元U3在另一个库中的压摆设置:
slew_lower_threshold_pct_rise : 30.00
slew_upper_threshold_pct_rise : 70.00
slew_derate_from_library : 0.5
slew_lower_threshold_pct_fall : 30.00
slew_upper_threshold_pct_fall : 70.00
库中填充的数据,都是基于10-90的测量阈值,但是我们现在都利用30-70的测量阈值,需要对库中存放的数据进行处理,乘上降额系数,再用于别的计算。
以上关于U2、U3只写出了关于压摆有关的设置 (实际上和延时有关的50%阈值点也需要设置,但上面没展示出来)。延时计算工具根据连接到网络的单元压摆阈值计算过渡时间。在U2A、U3A处,依据波形以及压摆阈值,延迟计算工具可以计算两者的压摆。然而U2A的压摆是基于10%-90%的阈值计算的,而U3A的压摆阈值设置为30%-70%,然后经0.5的降额处理。计算见下面的例子。
在预布局阶段,假设不考虑互连电阻,一个有着不同压摆阈值的网络可以进行如下的计算。比如说,10%-90%的压摆与20%-80%的压摆有着如下的关系。
因此阈值为10%-90%的压摆,时长500ps;20%-80%的压摆,时长375ps,两者是相对应的。
相似的,阈值为20%-80%的压摆,时长600ps;10%-90%的压摆,时长800ps,也是相对应的。
5.6 不同的电压域
一个设计可能在芯片的不同部分,采用不同的电源电压。这种情况下,在不同供电电压的区域之间,需要用到电压水平转换单元(level shifting cells)。电压水平转换单元,在一个电压域接受输入,在另一个电压域进行输出。举例来说,一个单元的输入电压为1.2V,他的输出电压可能更低,比如0.9V。注意,计算延迟时候的50%阈值点,对于不同的电源电压水平,半电压值也是不同的。例如A引脚阈值是0.6V,Z引脚阈值是0.45V。
5.7 路径延迟计算
一旦每个时序弧的延迟被确定,这个单元的延时可以以一张时序表的形式呈现。对于组合逻辑单元的延时,可以用从输入到输出的时序弧来表示。相似的,互连线可用从源引脚到每个目的引脚(destination pin)的弧表示,表示为单独的时序弧。一旦设计由相应的时序弧标定(annotate)了,计算路径延迟就是将沿路径的所有网络和单元的时序弧延迟相加起来即可。
5.7.1 组合路径延迟
下图中串联的三个反相器,我们同时考虑上升沿和下降沿路径。假设N0网络的输入是上升沿。
在第一个反相器输入引脚,指定了过渡时间。如果没有指定,我们就认为是一个理想的阶跃信号,过渡时间为0。在UINVa/A引脚的过渡时间,使用前几节中提到的互连延迟模型来进行计算(因为信号经过了N0网络才到达UINVa的A引脚)。相同的模型也用来计算N0网络的延时Tn0。
根据UINVa的Z引脚的RC负载,我们可以得到等效的有效电容Ceff。有了输出引脚的有效电容以及输入引脚的过渡时间,我们就可以根据模型得到单元的输出延时。
在UINVa的Z引脚使用等效戴维宁电压源模型去计算UINVb的A引脚的过渡时间。互连模型也可以用于计算N1网络的延迟Tn1.
后面的步骤都是类似的。。。
最后一级的负载由明确的负载说明来指定,如果没有指定,则仅使用网络N3的线负载。
上下边沿是随着反相器一直切换的,我们可以得到以下两条时序路径:
互连网络的上升下降延时可能会有不同,因为在单元的输出会有不同的戴维宁等效电压源。
5.7.2 寄存器路径
到寄存器的输入路径,考虑由SDT到寄存器UFF1的输入路径的时序。
上升沿路径和下降沿路径我们都需要考虑,对于在SDT输入的上升沿,数据路径的延时为:
相似的,如果SDT接受了一个下降沿,数据路径的延时为:
捕获时钟路径的延时(就是下面那条路径),如果MCLK是上升沿,有:
寄存器到寄存器的路径
如果在UFF0Q引脚产生了一个上升沿,则UFF1的数据路径延时为
输入PCLK的上升沿的发起时钟路径延时为:
输入PCLK的上升沿的捕获时钟路径延时为:
注意我们需要考虑单元的单边性,因为边沿的方向在穿过单元的时候有可能会发生改变。
5.7.3 多路径
在任何两点之间,都可能存在多条路径。用时最长的路径,是最差路径,也是关键路径。用时最短的路径,称为最优路径。
如上图,最长的路径是UBUF1---UNOR2---UNAND3,只穿过UNAND3是最短的路径。
5.8 裕度的计算
裕度(slack)是需要数据的时间,和数据到来的时间之间的差异。(准备的充分!)
建立时间的约束下,通常会对数据的到达时间有要求,比如在下个上升沿,至少提前3ns到达,可得:
部分内容翻译自“Static Timing Analysis for Nanometer Designs A Practical Approach” 欢迎指正!