目录
2.1CMOS逻辑设计
2.1.1基本的MOS结构
2.1.2 CMOS逻辑门
2.1.3 标准单元
2.1CMOS逻辑设计
2.1.1基本的MOS结构
都知道的NMOS、PMOS,源漏区之间的距离就是晶体管的长度,最短的长度就是流程的特征尺寸。例如,0.25μm技术允许制造具有0.25μm或更大通道长度的MOS晶体管。通过减小尺寸,相同面积内可以集成更多的晶体管,速度也就会更快。
2.1.2 CMOS逻辑门
由NMOS PMOS共同构成,CMOS反相器的工作原理在此处省略。
主要了解一下上拉网络PUN、下拉网络PDN的有关概念吧。
CMOS逻辑的一个特点是,不会给前级带来电阻负载,只会带来容性负载,因为前级的输出直接接CMOS的栅,视为电阻无穷大断路。
2.1.3 标准单元
标准单元如与或非门等等,这些单元的功能以及延时都是提前设计好的,设计者可以事先知道。
CMOS逻辑门在输入信号处于稳定逻辑状态时,不会从电源抽取电流(除了漏电流)。这意味着在静态情况下,CMOS电路几乎不消耗电能。可以理解为节点电容充满了电,或者已经完全放电,所以在稳态情况下不会有电流。功耗的主要来源是电路中活动信号的切换。当输入信号变化时,需要对输入端的电容进行充电和放电,这会导致瞬时电流的流动,从而引起功耗。
下面的图片表示了逻辑0以及逻辑1的范围:
2.2 CMOS单元的建模
如果一个单元的输出驱动了很多别的单元的输入,那么这个输出引脚上总的电容就是三部分的电容之和:单元的输出电容,驱动单元的输入电容,以及连线电容。
Total cap (Output G1) = Cout(G1) + Cin(G2) + Cin(G3) + Cin(G4) + Cs1 + Cs2 + Cs3 + Cs4
# Cout is the output pin capacitance of the cell.
# Cin is the input pin capacitance of the cell.
CMOS单元切换电平状态时,切换的速度取决于输出引脚上的 电容被充放电的速度 。输出引脚上的电容分别通过上拉和下拉结构充电和放电。上下拉的通道会对充放电的路径造成电阻,这是影响充放电速度的重要因素。
我们定义:
上拉电阻的倒数称为高电平输出驱动(因为上拉了所以输出就是高电平了,名词由此得来)
输出上拉结构越大,上拉电阻就越小,即单元的输出高电平驱动就越大,较大的输出结构也意味着该单元的面积较大。而输出上拉结构越小,单元的面积就越小,其输出高电平驱动也就越小。相同的道理同样适用于下拉网络,在此不赘述。总之,上下拉的能力通常都是设计的相近。
输出的驱动能力,决定了他能驱动多少的负载,也就是他的扇出(Fanout)。一个单元如果他的输出具有较强的驱动能力,那么他的上下拉网络的阻值必然很小。(可理解为RC一定时,R如果小,C肯定大,CMOS单元只会给前级电路带来容性负载,所以扇出就多了)
Cwire = Cs1 + Cs2 + Cs3 + Cs4
Output charging delay (for high or low) = Rout * (Cwire + Cin2 +Cin3 + Cin4)
2.3 转换时的波形
CMOS反相器0-1时候,符合下列公式:
CMOS反相器1-0时候,符合下列公式:
其中的RC称为时间常数,通常他会影响输出的转换时间。
![]() | ![]() |
实际上,并不会想上面两幅图所画,是因为在短暂时间内,上下拉网络都会打开。因此实际的网络如下图的第一个所示,是有一个渐进的过程的。
2.4 传播延时
通常而言我们都想用50%点用来测量传播延时。如下图中所示,输入A的电平由0-50%的Vdd时候,引起输出Z由Vdd-50%Vdd的变化的所需的时间就是 Tf 传播延时。(同样的道理,如果输出由低变高,延时就是 Tr )。英文分别对应于fall rise。
我们也可以用指令来实现测量标准的改变:
# Threshold point of an input falling edge:input_threshold_pct_fall : 50.0;
# Threshold point of an input rising edge:
input_threshold_pct_rise : 50.0;
# Threshold point of an output falling edge:
output_threshold_pct_fall : 50.0;
# Threshold point of an output rising edge:output_threshold_pct_rise : 50.0;
2.5波形的变化速率
变化速率通常用转换时间(Transition time)来描述,就是信号由一个电平变化到另一个电平所需的时间,同样可以自由设置百分比。
# Falling edge thresholds:
slew_lower_threshold_pct_fall : 30.0;
slew_upper_threshold_pct_fall : 70.0;
# Rising edge thresholds:
slew_lower_threshold_pct_rise : 30.0;
slew_upper_threshold_pct_rise : 70.0;
2.6 信号之间的偏差
时钟延时(latency):时钟树的起点到终点所需要的时间。
时钟偏差(skew):时钟树有很多路径,有不同的终点,用时最长的一条路径与最短的路径之间的差为偏差。
理想时钟树:无限驱动力、无延时。任何单元也认为无延时。通常在逻辑设计的早起阶段使用理想时钟,因为此时更关注数据的路径。理想时钟时,时钟偏差也认为是0。我们通常可以使用指令来设置:
set_clock_latency 2.2 [get_clocks BZCLK]
# Use options -rise and -fall if different.(如果需要的话使用参数来分别设置)
时钟的偏差可以显式的用指令来设置:ns为单位
set_clock_uncertainty 0.250 -setup [get_clocks BZCLK]
set_clock_uncertainty 0.100 -hold [get_clocks BZCLK]
设置时钟不确定性的指令实际上指定了一个窗口,在这个窗口内时钟沿都有可能出现。时钟边沿时序的不确定性将考虑多个因素,例如时钟周期抖动(jitter) 和用于时序验证的额外时序裕量(slack)。每个实际的时钟源都有一定的抖动量,即一个时间窗口,在该窗口内都可能会出现时钟沿。时钟周期抖动取决于所使用的时钟发生器的类型。在时钟实现之前,时钟偏差必须也被考虑进去。
可以为建立时间检查和保持时间检查指定不同的时钟不确定性。保持检查不要求时钟抖动包含在不确定度中,因此通常为保持时间检查指定较小的时钟不确定度值。
上图是一个不确定度250ps的示意图,这相当于要求设计以更高的频率工作。
如果设计人员有任何的保守估计(害怕出现其他的意外情况,所以增大不确定度)。也可以增加到不确定度中。
因此不确定度应该有三个部分:时钟抖动+估计的时钟偏差+设计人员的保守估计。
2.7时序弧与单调性
每个元件都有众多的时序弧。就一个组合逻辑单元(combinational logic cell) 而言,与或非门等元件,从输入引脚到输出引脚均存在一时序弧。每个时序弧都是时序敏感的,依靠于输出如何根据输入的变化而变化。
时序弧正单调:输入0-1的变化导致了输出0-1的变化或者不变、输入1-0的变化导致了输出1-0的变化或者不变
时序弧负单调:输入0-1的变化导致了输出1-0的变化或者不变、输入1-0的变化导致了输出0-1的变化或者不变
时序弧非单调:输出的变化情况不明朗,需要依靠别的输入来共同决定。
时序单调性(unateness) 对于时序很重要,因为它指定了输入引脚上电平边沿将如何通过逻辑单元传播以及将如何出现在逻辑单元的输出脚上。
可以利用时序弧的非单调性,来实现控制信号控制单调性:
当输入信号POLCTRL为逻辑0时,输出的DDRCLK信号与输入时钟MEMCLK保持相同的极性(正弧);当POLCTRL为逻辑1时,DDRCLK信号与MEMCLK的极性相反(负弧)。XOR门的特性使得其输出依赖于两个输入的组合,而不是单一的输入状态。这意味着可以通过改变一个输入的状态来控制另一个输入的极性(也就是改变正还是负)。
2.8 用时最短和最长的路径
从一个起点到达终点有多个路径,用时最长的路径称为最长路径,用时最短的路径称为最短路径。(顾名思义很好理解)最长和最短都取决于延时,而不取决于路径上的元件数。
如果考虑一条由触发器到触发器的路径,数据出发的触发器称为启动(Launch)寄存器、捕获数据的寄存器称为捕获(Capture)寄存器。
2.9 时钟域
一个时钟通常要驱动很多的触发器,这一系列被驱动的触发器称为该时钟的时钟域,通常来说一个设计中会有很多不同的时钟域。下图就是俩不同的时钟域。
时钟域比较关心的问题就是,时钟域是否有相互依赖的关系。这取决于是否有数据从时钟域1开始,从时钟域2结束(也就是数据的传输有交叠)。下图是一个交叠的例子。
若存在跨时钟域的数据路径(如上图所示),则必须确定这些路径是否为真实路径。例如,一个两倍频时钟驱动的触发器发送数据,再由一倍频时钟驱动的触发器接收数据,这条路径就是一条真实路径。伪路径(false paths)指的是逻辑上存在的时序路径,但是在电路设计运行时不会发生的时序路径,这样的路径就不需要进行时序检查了,可以把时序检查的资源分配到其他的关键路径上。
一般需要进行伪路径的处理情况有:
1. 从逻辑上考虑,与电路正常工作不相关的那些路径,比如测试逻辑,静态或准静态逻辑。
2. 从时序上考虑,我们在综合时不需要分析的那些路径,比如跨越异步时钟域的路径。
set_false_path -from [get_clocks USBCLK] \ -to [get_clocks MEMCLK]
#设置虚伪路径的指令如上
时钟域的交叉可双向,比如从MEMCLK到USBCLK,或者是USBCLK到MEMCLK。
下图的例子通过2to1MUX实现了时钟域的互斥。
2.10 工作的环境
静态时序分析,通常是在给定的工作条件下的分析。工作条件被定义为工艺、电压和温度的组合。一共有3种制造工艺模型:慢工艺模型、典型工艺模型、快工艺模型。慢快两种工艺代表了两种极端的工艺角。对于可靠的设计,应经受住极端工艺角,以及极端工作环境的挑战(极端温度,极端电源电压)。
工作环境的选择还需要考虑可用的单元库,三种常用的工作条件如下:
WCS(Worst-Case Slow):工艺慢(slow)、温度最高,并且电压最低(额定1.2V减10%)。对于低电源技术,还有另一个最坏的情况:工艺慢、电压最低并且温度也最低。低温下的延迟并不总是小于高温下的延迟,这是因为对于纳米技术而言,相对于电源的器件阈值电压(Vt)裕度降低了。在这种低电源的情况下,负载较小的逻辑单元的延迟在低温下要高于在高温下的延迟。 对于高阈值甚至是标准Vt的单元,情况更明显。在较低温度下延迟增加的这种异常行为称为温度反转。
TYP(Typical):典型(typical)工艺,温度是额定值(如25°C),电压是额定值(例如1.2V)。
BCF(Best-Case Fast):工艺快(fast),温度最低(如-40°C),电压最高(额定1.2V加10%)。
进行功耗分析时的工作条件通常与时序分析不同:
ML(Maximal Leakage):工艺快,温度最高,电压也最高(如1.2V加10%)。该此时有最大的漏电功耗(leakage power),对于大多数设计,也有着最大的有效功耗。
TL(Typical Leakage):经典工艺,温度最高,电压是额定值(1.2V)。此时的漏电功耗比较具有代表性,因为由于正常工作时的功耗,芯片温度通常会更高。
可以使用指令实现工作条件的设置
set_operating_conditions “WCCOM” -library mychip
部分内容翻译自“Static Timing Analysis for Nanometer Designs A Practical Approach” 欢迎指正!