2.1 CMOS 逻辑设计
2.1.1 基本 MOS 结构
MOS 晶体管(NMOS 和 PMOS)的物理实现如图 2-1 所示。源极(source)和漏极(drain)区域之间的距离(channel length)是 MOS 晶体管的长度,用于构建 MOS 晶体管的最小长度即为 CMOS 技术工艺的最小特征尺寸(feature size)。例如,0.25um 技术允许制造具有 0.25um 或更大沟道长度的 MOS 晶体管。 通过缩小沟道的几何形状,晶体管的尺寸会变小,这样就可以在同样的面积上封装更多的晶体管。 正如我们将在后面章节看到的那样,更小的晶体管尺寸同样还可以使设计以更高的速度运行。
图 2-1
2.1.2 CMOS 逻辑门
CMOS 逻辑门使用 NMOS 和 PMOS 晶体管搭建而成。图 2-2 给出了 CMOS 反相器(inverter)的示例。CMOS 反相器有两种稳定状态,具体取决于输入的电平状态。 当输入 A 为低电平(Vss 或逻辑 0)时,NMOS 晶体管截止,而 PMOS 晶体管导通,导致输出 Z 的电平被上拉至逻辑为 1 的 Vdd。当输入 A 为高电平(Vdd 或逻辑 1)时,NMOS 晶体管导通,而 PMOS 晶体管截止,导致输出 Z 的电平被下拉至逻辑为 0 的 Vss。在上述两种状态中的任何一种状态下,CMOS 反相器都是稳定的,不会从输入端 A 或电源 Vdd 汲取任何电流。
图 2-2
CMOS 反相器的特性可以扩展到任何 CMOS 逻辑门。在 CMOS 逻辑门中,输出节点通过上拉结构(由 PMOS 晶体管构成)连接至 Vdd,并通过下拉结构(由 NMOS 晶体管构成)连接至 Vss。例如,图 2-3 展示了一个两输入 CMOS 与非门(nand)。在该例中,上拉结构由两个并联的 PMOS 晶体管组成,下拉结构由两个串联的 NMOS 晶体管组成。
图 2-3
对于任何 CMOS 逻辑门,上拉和下拉结构是互补的。对于逻辑 0 或逻辑 1 的输入,如果上拉结构开启,则下拉结构将关闭;类似地,如果上拉结构关闭,则下拉结构将开启。下拉和上拉结构由 CMOS 门实现的逻辑功能控制。例如,在 CMOS 与非门中,控制下拉结构的功能是“”,即当 A 和 B 都为逻辑 1 时下拉被接通。类似地,控制上拉结构的功能是“”,即当 A 或 B 处于逻辑 0 时上拉被打开。这些特性确保了控制上拉结构的功能将输出节点的逻辑上拉至 Vdd。由于下拉结构由互补函数控制,因此当上拉结构函数的值为 0 时,输出节点处于逻辑 0。
对于逻辑 0 或逻辑 1 的输入,由于上拉和下拉结构不能同时开启,因此处于稳态的 CMOS 逻辑门不会对输入或电源汲取任何电流。CMOS 逻辑的另一个重要方面是,输入仅对前一级构成容性负载。
若 CMOS 逻辑门是一个反相门,这意味着单个输入的变化(上升或下降)只能使输出往相反的方向改变,也就是说,输出无法与输入同相变化。但是,可以将 CMOS 逻辑门级联起来以实现更复杂的逻辑功能。
2.1.3 标准单元
芯片中的大多数复杂功能通常是使用基本构建块(basic building block)来设计的,这些基本构建块实现了简单的逻辑功能,例如与、或、与非、或非、或与非,与或非以及触发器(flip-flop)。这些基本构建块是预先设计的,称为标准单元(standard cell)。标准单元的功能和时序已预先确定,可供设计人员使用。然后,设计人员可以使用标准单元作为基本构建块来实现所需的功能。
前面小节中描述的 CMOS 逻辑门的关键特性适用于所有 CMOS 数字设计。当输入处于稳定的逻辑状态时,所有数字 CMOS 单元的设计都能够保证不从电源汲取电流(漏电流除外)。因此,大多数功耗与设计的功能有关,并且是由设计中 CMOS 单元输入端的充放电引起的。
什么是逻辑 1 或逻辑 0?在 CMOS 单元中,VIHmin 和 VILmax 这两个值定义了范围:高于 VIHmin 的电压值被认为是逻辑 1,低于 VILmax 的电压值被认为是逻辑 0。如图 2-4 所示,0.13um 工艺下一个具有 1.2V Vdd 电源的 CMOS 反相器单元的典型 VILmax 值为 0.465V、VIHmin 值为 0.625V。 VIHmin 和 VILmax 的值是从标准单元的直流传输特性中得出的。直流传输特性会在接下去的 6.2.3 节中有更详细的描述。
图 2-4
2.2 CMOS 单元建模
如果一个单元的输出引脚驱动多个扇出单元,则该单元的输出引脚上的总电容等于该单元正在驱动的单元的所有输入电容的总和加上构成该网络所有走线电容之和再加上驱动单元的输出电容。注意,在 CMOS 单元中,输入引脚仅呈现电容性负载。
图 2-5
图 2-5 是一个单元 G1 驱动其他三个单元 G2、G3 和 G4 的示例。 Cs1,Cs2,Cs3 和 Cs4 是组成该网络的走线电容值,因此 G1 输出引脚的总电容=G2 单元的输入电容+G3 单元的输入电容+G4 单元的输入电容+G1 单元的输出电容+ Cs1+Cs2+Cs3+Cs4 。这个值就是 G1 单元进行电平切换时需要充放电的电容值,因此该总电容值会影响 G1 单元的时序特性。
从时序角度来看,我们需要对 CMOS 单元建模,以帮助我们分析通过该单元的时序。每个输入引脚必须指定一个输入引脚电容,而大多数 CMOS 逻辑单元可以不包括输出引脚的引脚电容,但也可能存在输出引脚电容。
当输出为逻辑 1 时,输出级的上拉结构导通,并提供了一条从输出到 Vdd 的路径。同样,当输出为逻辑 0 时,输出级的下拉结构提供了一条从输出到 Vss 的路径。当 CMOS 单元切换电平状态时,切换的速度取决于输出引脚上的电容被充放电的速度。输出引脚上的电容(图 2-5)分别通过上拉和下拉结构充电和放电。注意,上拉和下拉结构中的通道会对输出的充放电路径构成电阻,充放电路径的电阻是决定 CMOS 单元速度的主要因素。上拉电阻的倒数称为单元的输出高电平驱动(output high drive)。输出上拉结构越大,上拉电阻就越小,即单元的输出高电平驱动就越大,较大的输出结构也意味着该单元的面积较大。而输出上拉结构越小,单元的面积就越小,其输出高电平驱动也就越小。上拉结构的相同概念可用于下拉结构,下拉结构决定了下拉路径的电阻值以及输出低电平驱动(output low drive)。通常,单元的上拉和下拉结构具有相似的驱动强度。
输出驱动决定了可以驱动的最大电容负载,最大电容负载又决定了扇出的最大数量,即可以驱动多少个其他单元。较高的输出驱动对应较低的输出上拉 / 下拉电阻,这使单元可以在输出引脚上对较大的负载进行充电和放电。
下图 2-6 是 CMOS 单元的等效抽象模型。该模型的目的是抽象单元的时序行为,因此仅对输入级和输出级进行建模,此模型无法捕获单元的固有延迟或电学行为。
图 2-6
CpinA 是单元在输入 A 上的输入引脚电容;Rdh 和 Rdl 是单元的输出驱动电阻,可根据单元所驱动的负载确定输出引脚 Z 电平转换时的上升 / 下降时间,输出驱动电阻还确定了单元的最大扇出限制。
图 2-7 与图 2-5 具有相同的网络,但使用等效模型表示了 CMOS 单元:
图 2-7
输出充放电延迟 =
在上述表达式中,是或之一,其中是上拉的输出驱动电阻,是下拉的输出驱动电阻。
2.3 电平切换波形
如图 2-8(a)所示,通过按下 SW0 开关将电压施加到 RC 网络时,输出将变为逻辑 1。假设还未按下 SW0 时输出为 0V,则输出电压的变化由以下公式表示:
图 2-8
该上升的电压波形如图 2-8(b)所示。乘积(Rdh * Cload)称为 RC 时间常数(RC time constant),该值与输出的过渡时间有关。
断开 SW0 开关同时按下 SW1 开关,输出就会从逻辑 1 变为逻辑 0,输出电压的变化如图 2-8(c)所示。输出电容通过按下的 SW1 开关放电,这种情况下的电压变化由以下公式表示:
在 CMOS 单元中,由于 PMOS 上拉晶体管和 NMOS 下拉晶体管在短时间内会同时导通,因此输出的充放电波形不会像图 2-8 的 RC 充放电波形那样。 图 2-9 显示了在 CMOS 反相器单元内,从逻辑 1 到逻辑 0 输出切换时各个阶段的电流路径。图 2-9(a)显示了当上拉和下拉结构同时开启时的电流流动。随后,上拉结构关闭,电流流向随即如图 2-9(b)中所示。输出达到最终状态后,由于电容 Cload 已完全放电,因此不再有电流流动。
图 2-9
图 2-10(a)是 CMOS 单元输出级的典型波形,请注意观察过渡波形如何逐渐朝向 Vss 和 Vdd 弯曲,且波形的线性部分位于中间位置。
图 2-10
在本文中,我们将使用如图 2-10(b)所示的简化版来描绘一些波形,简化版的近似波形也是具有一定过渡时间(transition time)的波形,过渡时间是指从一种逻辑状态过渡到另一种逻辑状态所需的时间。图 2-10(c)是过渡时间为 0 的波形,即理想波形。我们将在本文中交替使用(b)(c)这两种形式的波形来解释一些概念,但我们一定要清楚,实际上每个波形都有(a)那样的真实的边缘特性。
2.4 传播延时
考虑一个 CMOS 反相器单元及其输入和输出波形,单元的传播延时(propagation delay)是由电平切换波形上的某些测量点定义的。使用以下四个变量定义这些测量点:
#输入端口下降沿的阈值点
input_threshold_pct_fall:50.0;
#输入端口上升沿的阈值点
input_threshold_pct_rise:50.0;
#输出端口下降沿的阈值点
output_threshold_pct_fall:50.0;
#输出端口上升沿的阈值点
output_threshold_pct_rise:50.0;
以上这些变量是用于描述单元库(cell library)的命令集里的一部分。 这些阈值的单位是 Vdd 或电源的百分比,对于大多数标准单元库,通常将 50%阈值用于计算延时。
上升沿是指从逻辑 0 到逻辑 1 的跳变,下降沿是从逻辑 1 到逻辑 0 的跳变。
假设有一个 CMOS 反相器单元,其输入输出管脚的波形如图 2-11 所示,传播延时是指如下两个值:
1. 输出下降沿延时(output fall delay):Tf
2. 输出上升沿延时(output rise delay):Tr
图 2-11
通常,这两个值是不相等的,上图 2-11 也展示了这两个传播延时值是如何测量的。
若使用理想波形来看,则传播延时将仅仅是两个边沿之间的延迟,如图 2-12 所示:
图 2-12