文章目录
- 2.1 CMOS逻辑设计(CMOS Logic Design)
- 2.2 CMOS单元建模(Modeling of CMOS Cells)
- 2.3 电平切换波形(Switching Waveform)
- 2.4 传播延时(Propagation Delay)
- 2.5 波形的压摆(Slew of a Waveform)
- 2.6 信号偏斜(Skew between Signals)
- 2.7 时序弧(Timing Arcs and Unateness/Arc Sense(时序弧指向))
- 2.8 最小与最大时序路径(Min and Max Timing Paths)
- 2.9 时钟域(Clock Domains)
- 2.10 工作条件(Operating Condition)
- 相关术语
- 知乎翻译圣经
本章节介绍CMOS技术的基础知识以及执行静态时序分析所涉及的术语。
2.1 CMOS逻辑设计(CMOS Logic Design)
2.1.1 基本MOS结构(Basic MOS Structure)
基本MOS结构:MOS晶体管可分为PMOS和NMOS,区别见:nmos和pmos有什么区别。相较于三极管是电流控制电流,MOS是通过电压控制电流。其中源极和漏极间的距离(channel length)是MOS晶体管的长度,而用于构建MOS晶体管的最小长度即为CMOS技术工艺的最小特征尺寸(feather size)。
2.1.2 CMOS逻辑门(CMOS Logic Gate)
CMOS逻辑门使用NMOS和PMOS晶体管搭建而成:
- CMOS反相器两种稳定状态,取决于输入 A A A: A = l o w ( 0 ) A=low(0) A=low(0),NMOS截止,PMOS导通,进而 Z = h i g h ( 1 ) Z=high(1) Z=high(1); A = h i g h ( 1 ) A=high(1) A=high(1),NMOS导通,PMOS截止,进而 Z = l o w ( 0 ) Z=low(0) Z=low(0)。所以称为反相器(可脑补一下输入输出对照表);
- CMOS逻辑门中,输出节点通过上拉结构(由PMOS晶体管构成)连接至 V d d V_{dd} Vdd,并通过下拉结构(由NMOS晶体管构成)连接至 V s s V_{ss} Vss。且任何CMOS逻辑门,输出节点通过上拉结构(由PMOS晶体管构成)连接至 V d d V_{dd} Vdd,,并通过下拉结构(由NMOS晶体管构成)连接至 V s s V_{ss} Vss。
- 对于逻辑0或逻辑1的输入,由于上拉和下拉结构不能同时开启,因此处于稳态的CMOS逻辑门不会对输入或电源汲取任何电流。CMOS逻辑的另一个重要方面是,输入仅对前一级构成容性负载。
2.1.3 标准单元(Standard Cells)
芯片中复杂的逻辑功能大多是由具有简单逻辑功能的基本构建块(basic building blocks)像乐高一样搭建设计出来的。这些基本构件块是预先设计的,称为标准单元(standard cell)。其功能和时序已预先确定,供设计人员使用。
前面小节中描述的CMOS逻辑门的关键特性适用于所有CMOS数字设计。当输入处于稳定的逻辑状态时,所有数字CMOS单元的设计都能够保证不从电源汲取电流(漏电流除外)。因此,大多数功耗与设计的功能有关,并且是由设计中CMOS单元输入端的充放电引起的。
逻辑 0 0 0和逻辑 1 1 1的定义如下图所示。VIHmin(之上是1)和VILmax(之下是0)的值是从标准单元的直流传输特性中得出的。
2.2 CMOS单元建模(Modeling of CMOS Cells)
如果元件输出针脚驱动了数个扇出元件,那么该输出针脚的总电容:
t o t a l c a p a c i t a n c e = ∑ a l l c e l l s i t i s d r i v i n g i n p u t c a p a c i t a n c e s + ∑ a l l w i r e s e g m e n t s ′ c a p a c i t a n c e s w h i c h c o m p r i s e s n e t + o u t p u t c a p a c i t a n c e o f t h e d r i v i n g c e l l total\;capacitance=\sum_{all \;cells\; it\; is \;driving}input\;capacitances\\+\sum_{all}wire \;segments'\;capacitances\;which\;comprises\;net\\+output\;capacitance \;of\;the\;driving\;cell totalcapacitance=allcellsitisdriving∑inputcapacitances+all∑wiresegments′capacitanceswhichcomprisesnet+outputcapacitanceofthedrivingcell
总电容值是元件进行电平切换是需要充放电的电容值,因此该总电容值会影响该元件的时序特性。
当输出为逻辑1时,输出级的上拉结构导通,并提供了一条从输出到Vdd的路径。同样,当输出为逻辑0时,输出级的下拉结构提供了一条从输出到 V s s V_{ss} Vss的路径。当CMOS单元切换电平状态时,切换的速度取决于输出引脚上的电容被充放电的速度。输出引脚上的电容分别通过上拉和下拉结构充电和放电。注意,上拉和下拉结构中的通道会对输出的充放电路径构成电阻,充放电路径的电阻是决定CMOS单元速度的主要因素。上拉电阻的倒数称为单元的输出高电平驱动(output high drive)。输出上拉结构越大,上拉电阻就越小,即单元的输出高电平驱动就越大,较大的输出结构也意味着该单元的面积较大。而输出上拉结构越小,单元的面积就越小,其输出高电平驱动也就越小。上拉结构的相同概念可用于下拉结构,输出下拉结构决定了下拉路径的电阻值以及输出低电平驱动(output low drive)。通常,单元的上拉和下拉结构具有相似的驱动强度。
输出驱动
→
d
e
t
e
r
m
i
n
e
可驱动最大电容负载
→
d
e
t
e
r
m
i
n
e
扇出的最大数量
输出驱动\xrightarrow{determine} 可驱动最大电容负载\xrightarrow{determine} 扇出的最大数量
输出驱动determine可驱动最大电容负载determine扇出的最大数量
输出驱动决定了可以驱动的最大电容负载,最大电容负载又决定了扇出的最大数量,即可以驱动多少个其他单元。较高的输出驱动对应较低的输出上拉/下拉电阻,这使单元可以在输出引脚上对较大的负载进行充电和放电。
|
|
以上两图具有相同的网络,右图是左图使用等效模型表示CMOS单元的结果:
- C w i r e = C s 1 + C s 2 + C s 3 + C s 4 C_{wire}=C_s1+C_s2+C_s3+C_s4 Cwire=Cs1+Cs2+Cs3+Cs4
- 输出充放电延迟 = R o u t × ( C w i r e + C i n 2 + C i n 3 + C i n 4 ) 输出充放电延迟=R_{out}\times (C_{wire}+C_{in}2+C_{in}3+C_{in}4) 输出充放电延迟=Rout×(Cwire+Cin2+Cin3+Cin4)
其中 R o u t R_{out} Rout是 R d h R_{dh} Rdh或者 R d l R_{dl} Rdl之一,分别对应上拉的输出驱动电阻和下拉的输出驱动电阻。引申:电容充电放电时间计算,充电: t = R C l n [ E / ( E − V t ) ] t=RCln[E/(E-V_t)] t=RCln[E/(E−Vt)],放电: t = R C l n ( E / V t ) t=RCln(E/V_t) t=RCln(E/Vt)。
2.3 电平切换波形(Switching Waveform)
如下图所示,按下SW0后电压将施加到RC网络,输出将变为逻辑1。若是按下时 V o u t = 0 V_{out}=0 Vout=0,那么充电过程的变化为: V o u t = V d d × [ 1 − e − t R d h × C l o a d ] V_{out}=V_{dd}\times [1-e^{\frac{-t}{R_{dh}\times C_{load}}}] Vout=Vdd×[1−eRdh×Cload−t],如下图中间所示。乘积( R d h × C l o a d R_{dh}\times C_{load} Rdh×Cload)称为RC时间常数,该值与输出的过渡时间有关。
|
|
断开SW0按下SW1后,输出变为逻辑0, V o u t V_{out} Vout的变化为: V o u t = V d d × e − t R d l × C l o a d V_{out}=V_{dd}\times e^{\frac{-t}{R_{dl}\times C_{load}}} Vout=Vdd×eRdl×Cload−t,如右上图所示。
由于CMOS单元中PMOS上拉结构和NMOS下拉结构会短暂同时导通,所以充放电的输出电平 V o u t V_{out} Vout波形并不像RC充放电波形一样。下图显示了CMOS反相器单元内,从逻辑1到逻辑0输出切换时各阶段的电流路径。左下图是上下拉结构同时开启时的电流流动;随后,上拉结构关闭,电流流向就如右下图所示。输出达到最终状态后,由于 C l o a d C_{load} Cload已经放电完全,不再有电流流动。
因为上述原因,CMOS单元输出的典型波形如左下图所示,之后的两个图片是对其波形的简化描述,简化版的近似波形也是具有一定过渡时间(transition time,从一种逻辑状态过渡到另一种逻辑状态所需的时间)的波形。
|
|
|
2.4 传播延时(Propagation Delay)
考虑一个CMOS反相器单元及其输入和输出波形,单元的传播延时(propagation delay)是由电平切换波形上的某些测量点定义的。使用以下四个变量定义这些测量点:
#输入下降沿(input falling edge)阈值点
input_threshold_pct_fall:50.0;
#输入上升沿(input rising edge)阈值点
input_threshold_pct_rise:50.0;
#输出下降沿(output falling edge)阈值点
output_threshold_pct_fall:50.0;
#输出上升沿(input rising edge)阈值点
output_threshold_pct_rise:50.0;
//上升沿是指从逻辑0到逻辑1的跳变,
//下降沿是从逻辑1到逻辑0的跳变。
以上这些变量是用于描述单元库(cell library)的命令集里的一部分。 这些阈值的单位是Vdd或电源的百分比,对于大多数标准单元库,通常将50%阈值用于计算延时。
假设有一个CMOS反相器单元,传播延时是指如下两个值,且其输入输出管脚的波形和两个值的测量示意如左下图:
- 输出下降沿延时(output fall delay): T f T_f Tf
- 输出上升沿延时(output rise delay): T r T_r Tr
如果是理想波形,则传播延时将仅仅是两个边沿之间的延迟,如右下图所示:
|
|
2.5 波形的压摆(Slew of a Waveform)
压摆率(slew rate)的定义是电压转换速率。在静态时序分析中,通常会根据电平转换的快慢来衡量上升波形或下降波形。压摆(slew)通常是根据转换时间(transition time)来定义的,转换时间是指信号在两个特定电平之间转换所需要的时间。转换时间实际上就是压摆率的倒数,进而转换时间越大,压摆率越低,反之同理。
回忆2.3节中的电平波形图,靠近 V d d V_{dd} Vdd和 V s s V_{ss} Vss两端的波形是渐进的,难以确定过渡时间确切的起点和终点。因此,一般使用指定的阈值电压来规定过渡时间计算的起点和终点。压摆阈值设计可如下所示,该设计对应的压摆的定义如左下图所示:
#下降沿的阈值点
slew_lower_threshold_pct_fall:30.0;
slew_upper_threshold_pct_fall:70.0;
#上升沿的阈值点
slew_lower_threshold_pct_rise:30.0;
slew_upper_threshold_pct_rise:70.0;
同时,上升沿和下降沿压摆的设置可以不同,如右下图所示的设定:
|
|
2.6 信号偏斜(Skew between Signals)
偏斜(skew)是指两个或多个信号(数据或时钟)之间的时序之差。例如,如果一个时钟树(clock tree)有500个终点,且有50ps的偏斜,则意味着最长时钟路径和最短时钟路径之间的延迟差为50ps。如下图是一个时钟树,时钟树的起点通常是定义时钟的节点,时钟树的终点通常是同步元件(例如触发器trigger)的时钟引脚。时钟延迟(clock latency)是指从时钟源到终点所花费的总时间,时钟偏斜(clock skew)是指到达不同时钟树终点的时间差。
理想时钟树假定时钟源具有无限驱动力,即时钟可以无延迟地驱动无限个终点。此外,假定时钟树中存在的任何逻辑单元都具有零延迟(zero delay)。在逻辑设计的早期阶段,STA通常使用理想时钟树来执行,此时分析的重点是数据路径(data path)。在理想时钟树中,默认情况下时钟偏斜为0ps,时钟树的时间延迟,可以使用set_clock_latency
命令显式地指定时钟树的延迟:
set_clock_latency 2.2 [get_clocks BZCLK]
上述命令规定了时钟树BZCLK的上升沿延迟(rise latency)和下降沿延迟(fall latency)均为2.2ns。如果两个延时值不同,可使用选项-rise
和-fall
来分别指定延时值。
时钟树的时间偏斜,可以使用set_clock_uncertainty
命令显式指定时钟不确定度的值来进行描述:
set_clock_uncertainty 0.250 -setup [get_clocks BZCLK]
set_clock_uncertainty 0.100 -hold [get_clocks BZCLK]
set_clock_uncertainty
命令为时钟沿的出现指定了一个窗口。时钟边沿时序的不确定性将考虑多个因素,例如时钟周期抖动(jitter) 和用于时序验证的 额外时序裕量(slack)。每个实际的时钟源都有一定的抖动量,即一个时间窗口,在该窗口内都可能会出现时钟沿。时钟周期抖动取决于所使用的时钟发生器的类型。实际上是不存在理想时钟的,也就是说,所有时钟都具有一定的抖动量,并且在指定时钟不确定度(clock uncertainty) 时应包括时钟周期抖动。
在时钟树被实现(implement)之前,时钟不确定度还必须包括预期的时钟偏斜。
可以为建立时间(setup time)检查和保持时间(hold time)检查指定不同的时钟不确定度。保持时间检查不需要将时钟抖动包括在内,因此通常为保持时间检查指定较小的时钟不确定度。
如下图所示是时钟不确定度为250ps的建立时间检查。图(b)揭示了时钟不确定度是如何从逻辑传播到下一个触发器的耗时中消去的,这相当于要验证设计能够以更高的频率运行。
如上所述,set_clock_uncertainty
命令也可以用于建模任何额外时序裕量。例如,设计人员可以在设计过程中依据一定的悲观度而设置50ps的时序裕量,使用set_clock_uncertainty
命令时会将这个值加进去。
总而言之,在实现时钟树之前,set_clock_uncertainty
命令指定的值将包括时钟抖动、时钟偏斜估计值以及额外悲观度。
set_clock_latency 2.0 [get_clocks USBCLK]
set_clock_uncertainty 0.2 [get_clocks USBCLK]
上面这条命令中200ps的时钟不确定度可能是由50ps时钟抖动、100ps时钟偏斜以及50ps的额外悲观度组成的。
随后我们将看到set_clock_uncertainty
这条命令是如何影响建立时间和保持时间检查的,我们最好能够将时钟不确定度视为最终计算时序裕量(slack)的补偿(offset)。
2.7 时序弧(Timing Arcs and Unateness/Arc Sense(时序弧指向))
每个元件都有众多的时序弧。就一个组合逻辑单元(combinational logic cell) 而言,比如AND、NAND、NOR、ADDER等元件,从输入引脚到输出引脚均存在一时序弧。而 时序逻辑单元(sequential logic cell),比如触发器,除了有从时钟引脚到输出引脚的时序弧,还有相对于时钟引脚的数据引脚时序约束(timing constraint)。
每个时序弧都有特定的时序敏感(timing sense),即输出如何针对输入的不同跳变类型而变化:
- 如果输入引脚上的上升沿跳变导致输出引脚电平上升(或不变),而输入引脚上的下降沿跳变导致输出引脚电平下降(或不变),则时序弧为正单边(positive unate)类型。例如,与门与或门的时序弧为正单边类型;
- 如果输入引脚上的上升沿跳变导致输出引脚电平下降(或不变),而输入引脚上的下降沿跳变导致输出引脚电平上升(或不变),则时序弧为负单边(negative unate)类型。例如,与非门和或非门的时序弧为负单边类型;
- 在非单边(non-unate)类型时序弧中,仅仅从一个输入引脚的跳变方向是无法确定输出引脚电平将如何跳变的,还要取决于其他输入引脚的状态。例如,异或门中的时序弧是非单边时序弧;
单边性(unateness) 对于时序很重要,因为它指定了输入引脚上电平跳变沿将如何通过逻辑单元传播以及将如何出现在逻辑单元的输出引脚上。
可以利用时序弧的非单边性(如异或门)来反转时钟的极性(polarity)。如下图所示,如果输入POLCTRL为逻辑0,则单元UXOR0的输出上的时钟DDRCLK具有与输入时钟MEMCLK相同的极性。如果POLCTRL为逻辑1,则单元UXOR0的输出时钟的极性与输入时钟MEMCLK的极性相反。
2.8 最小与最大时序路径(Min and Max Timing Paths)
逻辑通过逻辑路径传播的总延迟称为路径延迟(path delay),包括了逻辑路径中经过各个逻辑单元(cell)和网络走线(net)的延迟。通常,逻辑想要传递到一个终点可能有不止一条逻辑路径可走,所经过的实际路径取决于逻辑路径上其他输入的状态。下图给出了一个例子,由于有多个到达逻辑终点的路径,因此可以得出到达逻辑终点的最大时序和最小时序,对应于最大时序和最小时序的路径分别称为最大路径和最小路径。两个节点之间的最大路径是指延迟最大的路径(也称为最长路径),同样,最小路径是指延迟最小的路径(也称为最短路径)。请注意,最长和最短是指路径上的累积延迟,而不是路径上的逻辑单元个数。
通常也称最大路径为晚路径(late path),称最小路径为早路径(early path)。
当考虑从UFF1到UFF3这样的从触发器到触发器的路径时,其中一个触发器发起(launch)数据,另一个触发器捕获(capture)数据。在这种情况下,由于UFF1发起数据,因此UFF1被称为发起触发器(launch flip-flop),由于UFF3捕获数据,因此UFF3被称为捕获触发器(capture flip-flop)。请注意,“发起”和“触发”不是绝对的,一定是相对于某一条时序路径才能决定触发器到底是发起数据还是捕获数据。例如,UFF3发起的数据如果被下一级触发器捕获了,那么在那条时序路径中UFF3则变为了发起触发器。
2.9 时钟域(Clock Domains)
在同步逻辑设计中,周期性的时钟信号将计算出的新数据锁存到触发器中。新的输入数据基于的是前一个时钟周期的触发器值,因此锁存到的数据将被用于计算下一个时钟周期的数据。
一个时钟通常驱动许多触发器,由同一时钟驱动的一组触发器称为其时钟域(clock domain)。在典型的设计中,可能有多个时钟域。例如,USBCLK驱动了200个触发器,而时钟MEMCLK驱动了1000个触发器,如下图所示。在此示例中,我们称有两个时钟域。
需要关注一个问题:两个时钟域是相关的还是彼此独立的?答案取决于是否存在一条从一个时钟域开始并在另一时钟域结束的数据路径,如果没有这样的路径,我们可以肯定地说这两个时钟域彼此独立,这意味着没有时序路径从一个时钟域开始而在另一时钟域结束。
若存在跨时钟域的数据路径(如上图所示),则必须确定这些路径是否为真实(real)路径。例如,一个两倍频时钟驱动的触发器发起数据,再由一倍频时钟驱动的触发器捕获数据,这条路径就是一条真实路径。伪路径(false path)(???)的一个例子是设计人员将时钟同步器(clock synchronizer)逻辑明确放置在两个时钟域之间。在这种情况下,即使好像存在从一个时钟域到下一时钟域的时序路径,但这也不是真实的时序路径,因为数据没有被约束要在一个时钟周期之内通过同步器逻辑传播。这样的路径称为伪路径(不是真实的),因为是由时钟同步器来确保数据正确地从一个时钟域传递到另一个时钟域。可以使用set_false_path
命令指定时钟域之间的伪路径,例如:
set_false_path -from [get_clocks USBCLK] \ -to [get_clocks MEMCLK]
虽然无法从上图中看到,但实际出现跨时钟域的情况往往是双向的,即从USBCLK时钟域到MEMCLK时钟域,以及从MEMCLK时钟域到USBCLK时钟域,这两种情况都需要在STA中正确理解和处理。
为什么要讨论时钟域之间的路径呢?通常,一个设计中会有多个时钟,并且时钟域之间可能有无数条路径。 分辨出哪些跨时钟域路径是真实的,哪些是伪路径,是时序验证工作的重要组成部分,这使得设计人员可以专注于验证真实的时序路径。
下图给出了时钟域的另一个示例,多路复用器(multiplexer)根据设计的工作模式选择时钟源。虽然只有一个时钟域,但却有两个时钟,这两个时钟是互斥的,因为一次只有一个时钟处于有效状态。因此,在这个例子中,USBCLK和USBCLKx2这两个时钟域之间永远不会存在时序路径(假定多路复用器的控制是静态的,并且设计中其余部分也不存在这两个时钟域之间的时序路径)。
2.10 工作条件(Operating Condition)
静态时序分析通常是在特定的工作条件(operating condition)下执行的,工作条件定义为工艺(process)、电压(voltage)和温度(temperature)的组合,简称PVT。逻辑单元延迟和互连线的走线延迟是根据特定的工作条件计算的。
半导体代工厂(foundry)为数字设计提供了3种加工工艺模型:慢速(slow)工艺模型,典型(typical)工艺模型和快速(fast)工艺模型,快速和慢速工艺模型代表了半导体代工厂加工的两个极端工艺角(process corner)。对于稳健(robust)的设计,应该在极端加工工艺角以及温度和电源电压都比较极端的环境下对设计进行验证。下图(a)展示了逻辑单元延迟如何随工艺角变化(图(a)存疑,应该是工艺越快延迟越小?);图(b)展示了逻辑单元延迟如何随电源电压变化;图(c)展示了逻辑单元延迟如何随温度变化。因此,为静态时序分析选择特定的工作条件是非常重要的。
为STA选择合适的工作条件还需要考虑到可用的单元库(cell library),3种标准的工作条件如下所示:
- WCS(Worst-Case Slow):工艺慢(slow)、温度最高(例如125°C)并且电压最低(例如额定1.2V减去10%)。对于使用低电源的纳米技术,可能还有另一个最坏的情况:工艺慢、电压最低并且温度也最低。低温下的延迟并不总是小于高温下的延迟,这是因为对于纳米技术而言,相对于电源的器件阈值电压(Vt)裕度降低了。在这种低电源的情况下,负载较小的逻辑单元的延迟在低温下要高于在高温下的延迟。 对于高Vt(较高阈值,较大延迟)甚至是标准Vt(常规阈值,较低延迟)的单元,情况尤其如此。在较低温度下延迟增加的这种异常行为称为温度反转(temperature inversion),参见图2-23(c)。
- TYP(Typical):典型(typical)工艺,温度是额定值(例如25°C),电压是额定值(例如1.2V)。
- BCF(Best-Case Fast):工艺快(fast),温度最低(例如-40°C),电压最高(例如额定1.2V加10%)。
功耗分析(power analysis)的工作条件通常不同于静态时序分析所使用的工作条件。 对于功耗分析,工作条件可能是:
- ML(Maximal Leakage):工艺快,温度最高(例如125°C),电压也最高(例如1.2V加10%)。该工作条件有最大的漏电功耗(leakage power),对于大多数设计,也有着最大的有效功耗(active power)。
- TL(Typical Leakage):经典工艺,温度最高(例如125°C),电压是额定值(例如1.2V)。该工作条件下的漏电功耗比较具有代表性,因为由于正常工作时的功耗,芯片温度往往会更高。
静态时序分析基于的是设计人员所加载(load)和链接(link)的库,可以使用set_operating_conditions
命令明确指定设计的工作条件。
set_operating_conditions “WCCOM” -library mychip
上述命令使用了在单元库mychip中定义的名为WCCOM的工作条件。
单元库可在各种工作条件下使用,选择何种工作条件进行分析取决于为STA加载的单元库。
相关术语
-
source(源极);
-
drain(漏极);
在一块N型半导体材料的两边各扩散一个高杂质浓度的 P P P型区(用 P + P+ P+表示),就形成两个不对称的 P + N P+N P+N结。把两个 P + P+ P+区并联在一起,引出一个电极,称为栅极( g g g),在N型半导体的两端各引出一个电极,分别称为源极( s s s)和漏极( d d d)。它们分别与三极管的基极( b b b)、发射极( e e e)和集电极( c c c)相对应。夹在两个 P + N P+N P+N结中间的N区是电流的通道,称为导电沟道(简称沟道)。这种结构的管子称为N沟道结型场效应管。 -
对于数字电路来说, V c c V_{cc} Vcc是电路供电电压, V d d V_{dd} Vdd是芯片的工作电压( V c c > V d d V_{cc}>V_{dd} Vcc>Vdd), V s s V_{ss} Vss是接地点。