Archipelago

Lec 5CMOS 技术 & 布尔运算到门电路

讲义完成更新于 2026-09-29

Lec 5 CMOS 技术 & 布尔运算到门电路

TL;DR

  • 静态展开与空间实体化:Minispec/Bluespec 中的循环、泛型参数与函数调用在编译期完全展开为静态无环图(DAG),不存在运行时指令循环或调用栈。
  • CMOS 互补开关与反相本质:NFET 充当下拉开关(高开低关),PFET 充当上拉开关(低开高关);由载流子控制特性决定,单个 CMOS 门天然只能实现反相逻辑(NAND/NOR/NOT)。
  • 时序界限与关键路径计算:传播延迟 tPDt_{PD} 为关键路径各门延时之和的最大上界,污染延迟 tCDt_{CD} 为最短路径最小延时下界;tCDt_{CD} 保证输出在输入失效后维持旧有效值的窗口,是时序电路消除亚稳态保持时间违例的物理基石。

硬件编译的静态展开思维

实验 2 的目标是设计一个 32 位的 ALU,这是计算机中极为常见的组件。已经见过两位全加器(FA)串联组成的 2-bit ripple-carry adder,如果要扩展成 W 位加法器,该怎么办?今天要讲如何通过循环来描述参数化的电路(比如位宽是参数)。在硬件中是没有真正“循环”的——组合逻辑电路本质上就是盒子之间的循环连接。

  • 在硬件设计语言(比如 BlueSpec)中,所有数据结构最终都会被转换为位向量(bit vectors)。不管是整数、布尔值、颜色等等,最后统统是 0 和 1。

  • 循环:必须是可以在编译时完全展开的。如果循环依赖数据(动态条件),编译器会直接报错,因为硬件是静态的、不能在运行时决定循环次数。

  • 函数调用:也不会有动态调用或堆栈,而是通过内联(inlining)——函数体在编译时直接展开,变成一块具体电路。

  • 最终生成的硬件结构是一个无环图(DAG):节点是逻辑门、运算器,连线是信号传递,没有循环反馈。

最重要的是记住:Bluespec 的目标是描述电路,电路本质上像是画图(画出各种盒子和连线),只不过每个盒子(比如与门、或门或者更大的模块)都有具体、可定义的功能,可以用真值表来描述。这和普通画图不同,它们有确定的意义。

虽然 Bluespec 设计的首要目的是描述并综合硬件,但同样重要的是,它也能模拟电路,以验证功能正确性(functional correctness)。所以,每当你写一个 Bluespec 程序时,除了可以综合成电路,还能通过输入输出测试来验证其行为。Bluespec 存在的根本原因是为了生成电路,而不是为了计算答案。因此,Bluespec 的编译过程与传统软件语言不同。Bluespec 在编译过程中会执行大量静态展开(static elaboration):比如所有数据结构最终都会转换成位向量(bit vectors),整数、布尔值、枚举颜色等在电路中统统变成 0 和 1;

需要特别小心的是,优化器(compiler)可能会对电路做大量优化,导致生成的电路和你原本写的程序结构差异很大。比如,如果你只想让电路做“加 4”的操作,编译器可能合成出比一般加法器更小、更快的专用电路。通过 Lab 2,你会慢慢体会这种优化带来的不同。

回到 ripple-carry adder。展开(unfold)循环时,如果你设定了宽度 W,比如 2 位,就可以按照如下步骤进行静态展开:首先用 i=0 替换循环体,得到第一个 full-adder,输出 c1 和 s0;接着用 i=1 替换,第二个 full-adder 输入 c1,输出 c2 和 s1。这样,carry 位的连接关系是自动建立起来的。编译器也会确保命名的一致性,比如 c1 始终表示同一根连线。

Minispec 的参数化与静态展开

手工把全加器拼成 rca2、再拼 rca4、rca8…… 既冗长又易错。Minispec 让编译器在编译期(静态展开 static elaboration)替我们展开这些重复结构。

参数化类型(parametric type):Bit#(n) 其实就是参数化类型,n 是一个编译期必须确定的整数参数。还有 Vector#(n, T)(n 个 T 类型元素),如 Vector#(4, Bit#(8))。给定参数后才得到一个具体类型。

参数化函数(parametric function):相当于其他语言里的“泛型/模板”,把工作从运行期转移到编译期。可以对参数(而非数据)做递归:

// n 位奇偶校验:对参数 n 递归
function Bit#(1) parity#(Integer n)(Bit#(n) x);
  return (n == 1) ? x : x[n-1] ^ parity#(n-1)(x[n-2:0]);
endfunction

// n 位行波进位加法器:把一个全加器接到 rca#(n-1) 上
function Bit#(n+1) rca#(Integer n)(Bit#(n) a, Bit#(n) b, Bit#(1) cin);
  Bit#(n) lower    = rca#(n-1)(a[n-2:0], b[n-2:0], cin);
  Bit#(2) upper    = fullAdder(a[n-1], b[n-1], lower[n-1]);
  return {upper, lower[n-2:0]};
endfunction
// 还需定义基例 rca#(1)(即一个全加器),否则编译期无限递归

调用 parity#(3) 时,编译器把 3 代入,进而需要 parity#(2)、parity#(1)……一路实例化成嵌套的硬件盒子。这是编译期递归,最终全部综合成门和线。

Integer 类型:位数无界,只能在编译期求值(不可综合)。它支持算术/逻辑/比较运算,但这些运算不生成任何硬件——专门用来驱动参数和展开。

其他常用特性:

  • let:让编译器推断类型,如 let y = x;(x 是 4 位则 y 也是 4 位),let n = 42;(n 是 Integer)。
  • typedef:类型别名,如 typedef Bit#(8) Byte;。
  • struct:一组(可不同类型的)值,如 Pixel { Byte red; Byte green; Byte blue; }。
  • enum:一组符号常量,如 typedef enum { Ready, Busy, Error } State;,编译器自动用若干位编码。

踩坑(务必牢记):Minispec 语法像软件,但语义是描述电路——

  • for 循环次数必须编译期固定,编译器会把它完全展开;写出依赖运行时数据的循环会报错,且不小心会展开出庞大低效的电路。
  • if/?:/case 在组合逻辑里一律变成 mux,每个分支的硬件都真实存在。
  • 函数调用都是内联(inlining),没有运行时调用栈。
  • 最终得到的是一张无环图(DAG)——本质上只有“组合环路连接”,没有真正的循环或递归在运行时发生。

本讲导览

  • CMOS 技术
  • 组合逻辑的时序

CMOS 技术

结构特性

这里有一个显示 N-Channel MOSFET(Metal-oxide-semiconductor field-effect transistors,N 沟道金属氧化物半导体场效应晶体管)截面的 3D 图。

N 沟道 MOSFET 三维物理截面结构图(衬底、栅氧化层、源极与漏极)

集成电路(IC)所构建的基底(衬底)是一种经过掺杂的硅晶片,通过添加杂质使其具有导电性。在此案例中,所添加的杂质为受主原子(如硼),因此我们将掺杂后的硅称为 p 型半导体。集成电路将包含与 p 型衬底的电气连接,称为基极(bulk terminal),从而实现对其电压的控制。

当我们希望在导电材料之间提供电气绝缘时,我们会使用一层二氧化硅(SiO2)。通常,绝缘体的厚度并不是特别重要,除了用于隔离晶体管的栅极(gate, 这里显示为红色)和衬底时。该区域的绝缘层非常薄,因此栅导体上的电荷的电场可以轻易影响衬底。

晶体管的栅极是导体,在这种情况下是多晶硅。栅极、薄氧化物绝缘层和 p 型衬底共同构成一个电容器,其中改变栅极电压会引起栅极下方 p 型衬底的电气变化。在早期制造工艺中,栅极是金属制成的,金属氧化物半导体(MOS)一词就是指这种特殊结构。

栅极就位后,将磷等掺杂原子注入栅极两侧的 p 型衬底中的两个矩形区域。这些区域变为 n 型半导体,这将这些区域转变为 n 型半导体,最终成为 MOSFET 的两个终端。请注意,源极和漏极通常在物理上是相同的,通过它们在设备操作中扮演的角色加以区分。

MOSFET 的功能是作为一个电压控制开关,连接设备的源极(Source)和漏极(Drain)。当开关导通时,电流将穿过作为栅电容第二极板的导电通道从漏极流向源极(第一极板是前面提到的 Gate 与衬底之间的薄氧化层)。MOSFET 有两个关键尺寸:测量电流在从漏极流向源极时必须跨越的距离 L 以及其宽度 W,决定有多少通道可用于导电。通过开关的电流,称为 IDSI_{DS},与通道的宽度与长度的比值成正比 IDS∝WLI_{DS} \propto {W\over{L}}

通常,IC 设计师会尽可能缩短长度——当新闻文章提到 14 纳米工艺时,14 纳米指的是通道长度的最小允许值。设计师选择通道宽度来设定所需的电流流量。如果 IDSI_{DS}较大,源极和漏极节点上的电压转换将更快,但代价是设备的物理尺寸更大。

总结一下:MOSFET 有四个电气端子:基极、栅极、源极和漏极。设计师可以控制设备的两个尺寸:通道长度,通常选择尽可能小,通道宽度选择设定所需的电流流量。这是一个固态开关——没有活动部件,开关操作由四个端子相对电压确定的电场控制

电气特性

NMOS 在截止态、导通反型层形成与漏端夹断态的能带电荷物理过程图

首先,我们将在栅极两侧的两个扩散极上标注名称:按照约定,电压最高的扩散极称为漏极(drain),电压较低的扩散极称为源极(source)。根据这种标记,如果有电流流过 MOSFET 开关,它将从漏极流向源极。在制造 MOSFET 时,它被设计为具有特定的阈值电压 VTHV_{TH} ,该电压决定了开关从非导通转变为导通的临界点。对于这里显示的 n 沟道 MOSFET,我们预计 VTHV_{TH} 在现代工艺中约为 0.5V。

图左侧的 P+端子是与 p 型衬底的连接。为了使 MOSFET 正常工作,衬底的电压必须始终小于或等于源极和漏极的电压。MOSFET 由栅极电压 VGV_{G} 和源极电压 VSV_{S} 之间的差异控制,根据电压的常用术语,我们将其称为 VGSV_{GS},即 VGV_{G} - VSV_{S} 的简写。

第一张图显示了当 VGSV_{GS}​ 小于 MOSFET 阈值电压时配置。在这种配置下,开关是打开或不导通的,即源极和漏极之间没有电气连接。当 n 型和 p 型材料在物理上接触时,其接触点会形成耗尽区(depletion region, 图中显示为深红色)。这是衬底中携带电流的电荷粒子远离交界处迁移形成的区域。耗尽区作为绝缘层隔离衬底与源极/漏极。该绝缘层的宽度随源极/漏极电压相对于衬底电压的增大而增大。正如图中所示,绝缘层填充了源极和漏极之间的衬底区域,使它们在电气上保持隔离.

PN 结机制

当一个 P 区和 N 区形成接触(也就是形成 PN 结)时,会发生:

  1. 载流子扩散:
    • N 区中的电子会扩散进入 P 区(空穴多的地方)
    • P 区中的空穴会扩散进入 N 区(电子多的地方)
  2. 空间电荷区/耗尽层(Depletion Region)形成:
    • 扩散之后,两边的自由载流子减少,留下带电离子,形成耗尽层
    • 这个区域本身是没有自由载流子的,只剩下“固定电荷”,所以叫“耗尽”
  3. 内建电场(built-in electric field)建立:
    • 防止进一步扩散,形成稳定的结

现在,随着 VGSV_{GS} 的增大,正电荷在栅极导体上积累并产生电场,吸引衬底原子中的电子。在一段时间内,这种吸引力逐渐增强但未发生显著变化,但当电压达到 MOSFET 的阈值电压时,电场强度足以将衬底中的电子从价带拉入导带,这些新获得自由度的电子将向栅极导体方向移动,聚集在作为栅极电容器绝缘层的薄氧化层下方。当积累的电子足够多时,半导体的类型从 p 型转变为 n 型,源极与漏极之间形成了一条由 n 型材料构成的导电路径。这层 n 型材料称为反型层,因为其类型已从原来的 p 型材料反转。MOSFET 开关现在关闭或称是导通的。电流将按 VDSV_{DS}(漏极和源极端子之间的电压差)成比例地从漏极流向源极。

从价带(valence band)拉入导带(conduction band)是指电子在半导体材料中从一个能量带跃迁到另一个能量带的过程。具体来说,价带是半导体中能量较低、被电子填充的能带,而导带是能量较高、电子可以自由移动的能带。这个过程是半导体开关操作的基础。

此时,导电的反型层表现得像一个受欧姆定律控制的电阻,因此 IDS=VDS/RI_{DS}=V_{DS} / R,其中 R 是通道的有效电阻。这个过程是可逆的:如果 VGSV_{GS} 低于阈值电压,衬底电子回落到价带,反型层消失,开关不再导通

当 VDSV_{DS} 大于 VGSV_{GS} 时,情况变得更复杂,如底部图所示。大的 VDSV_{DS}改变了通道中电场的几何形状,反型层在靠近漏极的通道末端被夹断。尽管通道在靠近漏极处被夹断,电流仍然可以通过,因为电子会通过“隧道效应”穿过夹断点,继续流向漏极。只不过不能遵循 IDS=VDS/RI_{DS}=V_{DS} / R的线性关系了。如何影响从漏极到源极的电流 IDSI_{DS}?为了理解这一点,让我们往下看

IDSI_{DS} 和 VDSV_{DS}关系

MOSFET 漏极电流与漏源电压(Ids-Vds)输出特性曲线与工作区划分

每条曲线都是在特定的VGSV_{GS}值下,IDSI_{DS}随VDSV_{DS}变化的曲线

  • 当VGSV_{GS}小于等于阈值电压时,IDSI_{DS}为 0
  • 当超过阈值电压时,IDSI_{DS}不为 0,并随着VGSV_{GS}的增加而增加,因为VGSV_{GS}的越大,越多的衬底电子电子被吸引到栅电容的下衬底,反型层更厚,允许更多的电流通过。
  • 当VDSV_{DS}小于VGSV_{GS}时,MOSFET 表现得像一个电阻。曲线的线性部分的斜率与导电的 MOSFET 通道成反比。通道随着VGSV_{GS}增加变的更厚,更多的电流流过,曲线的斜率变陡,表明通道电阻更小
  • 当VDSV_{DS}大于VGSV_{GS},通道在漏极被夹断,电流不在随着VDSV_{DS}的增加而增加,相反,IDSI_{DS}是恒定,说明 MOSFET 达到了饱和。
  • 注意到IDS I_{DS} 曲线的饱和部分并不完全平坦,IDSI_{DS} 随着 VDSV_{DS} 增大略有增加。这种效应称为通道长度调制

MOSFET 的工作原理真复杂!幸运的是,作为设计师,只要在设计 MOSFET 电路时遵循一些简单规则,我们就能使用一个简单得多的开关模型。


CMOS 抽象为电压控制开关

N 沟道与 P 沟道 MOSFET 电路电气符号及四端子定义图

在 p 型衬底中有 n 型源/漏扩散。这些被称为 n 沟道 MOSFET,因为反型层形成时是 n 型半导体。这里展示了 n 沟道 MOSFET 的示意符号,四个端子如图所示排列。在我们的 MOSFET 电路中,我们会将 MOSFET 的基端连接到地,这将确保 p 型衬底的电压始终小于或等于源和漏扩散的电压。

我们还可以通过翻转所有材料类型来构建 MOSFET,创建 n 型衬底中的 p 型源/漏扩散。这称为 p 沟道 MOSFET,其也表现为电压控制开关,只是所有电压电势都是反向的!正如我们将看到的那样,使 n 沟道开关处于开启状态的控制电压将使 p 沟道开关处于关闭状态,反之亦然。

使用这两种类型的 MOSFET 将为我们提供行为互补的开关。因此,使用这两种 MOSFET 的电路被称为互补金属氧化物半导体(Complementary MOS),简称 CMOS。现在我们有了这两种电压控制开关,我们的下一个任务是弄清楚如何使用它们来构建对编码为电压的信息进行操作的电路。

NFET 与 PFET 抽象为高低电平控制开关的等效模型

现在我们对 MOSFET 的工作原理有了基本了解,接下来我们将利用它们构建电路来处理数字编码信息。在构建电路时,我们将遵循两条简单规则,只要严格遵守这些规则,就能将 MOSFET 的行为抽象为一个简单的电压控制开关。

规则 1: 我们在构建下拉电路时只使用 n 沟道 MOSFET,简称为 NFET,下拉电路将信号节点连接到电源的接地(GND)。当下拉电路导通时,信号节点将为 0V,并视为数字 0。

如果我们遵循这条规则,NFET 将作为由VGSV_{GS}(即栅极电压和源极电压之间的差值)控制的开关。当VGSV_{GS}低于 MOSFET 的阈值电压时,开关处于断开状态或未导通,MOSFET 的源极和漏极之间没有连接。如果VGSV_{GS}大于阈值电压,开关处于导通,源极和漏极之间有连接。这条路径的电阻由VGSV_{GS}的大小决定。VGSV_{GS}越大,开关的有效电阻越小,漏源之间流过的电流就越大。在设计 NFET 开关的下拉电路时,我们可以使用以下简单的思维模型:如果栅极电压为数字 0,开关将关闭;如果栅极电压为数字 1,开关将导通。

PFET 开关的情况与此类似, PFET 只能用于上拉电路,将信号节点连接到电源电压,我们称之为VDDV_{DD}。当上拉电路导通时,信号节点将为VDDV_{DD}伏特,并视为数字 1。PFET 具有负阈值电压,VGSV_{GS}必须小于阈值电压才能使 PFET 开关导通。所有这些负极性可能会让人感到困惑,但幸运的是,我们可以在上拉电路中的每个 PFET 开关中使用一个简单的思维模型:如果栅极电压为数字 0,开关将导通;如果栅极电压为数字 1,开关将截止——基本上与 NFET 开关的行为相反。

为什么不能在上拉电路中使用 NFET 或在下拉电路中使用 PFET?

简而言之,使用 NFET 或 PFET 会导致信号节点出现信号电平劣化,从而失去我们辛辛苦苦建立的噪声裕度!

CMOS 反相器的 VTC

CMOS 反相器原理图及其电压传输特性(VTC)曲线图

现在考虑 CMOS 实现的组合逻辑反相器。如果反相器的输入是数字 0,那么它的输出是数字 1,反之亦然。反相器电路包括一个用于下拉电路的单一 NFET 开关,将输出节点连接到接地(GND),和一个用于上拉电路的单一 PFET 开关,将输出连接到VDDV_{DD}。两个开关的栅极端子都连接到反相器的输入节点。反相器的电压传输特性如图所示.

当VINV_{IN}是数字 0 输入时,我们看到VOUTV_{OUT}大于或等于VOHV_{OH},表示数字 1 输出。让我们来看一下当输入为数字 0 时上拉和下拉开关的状态。0 输入意味着 NFET 开关关闭,所以输出节点与接地之间没有连接,而 PFET 开关开启,使输出节点与VDDV_{DD}连接。电流将通过上拉开关流动,给输出节点充电,直到其电压达到VDDV_{DD}。一旦源极和漏极端子都处于VDDV_{DD},开关两端没有电压差,因此开关将不再有电流流过。同样,当VINV_{IN}是数字 1 时,NFET 开关开启而 PFET 开关关闭,因此输出连接到接地,最终电压达到 0V。同样,当输出节点达到 0V 时,通过下拉开关的电流将停止流动。

当输入电压处于其电压范围的中间位置时,根据所用电源电压和 MOSFET 的阈值电压,上拉和下拉电路可能在短时间内同时导通。这是正常的。事实上,当两个 MOSFET 开关同时导通时,输入电压的微小变化会导致输出电压发生较大变化,从而展现出 CMOS 器件的高增益特性。这意味着我们可以选择包含较大噪声裕度的信号阈值,使 CMOS 器件能在多种不同的工作环境中可靠运行。这是我们的第一个 CMOS 组合逻辑门。

CMOS 的互补特性

CMOS 互补上拉网络(PUN)与下拉网络(PDN)结构示意图

现在进入有趣的部分!为了构建其他逻辑门电路,我们将设计互补的上拉和下拉电路,如右图所示连接起来,以控制输出节点的电压。互补指的是当一个电路导通时,另一个电路不导通的特性。当上拉电路导通而下拉电路不导通时,输出节点与VDDV_{DD}连接,输出电压将迅速上升,成为有效的数字 1 输出。同样,当下拉电路导通而上拉电路不导通时,输出节点与接地(GND)连接,输出电压将迅速下降,成为有效的数字 0 输出。

如果电路设计不正确,导致它们不是互补的,并且可能在一段时间内都导通,那么在VDDV_{DD}和 GND 之间就会有一条路径,大量的短路电流将流过,这非常糟糕。由于我们的简单开关模型不能让我们确定这种情况下的输出电压,我们将这种输出值称为 X 或未知。

另一种可能的情况是上拉和下拉电路都不导通,输出节点没有连接到任何电源电压。此时,输出节点电气上是浮动的,节点电容存储的电荷将保持在那里,至少一段时间。这是一种存储形式。现在,我们将集中讨论具有互补上拉和下拉电路的设备的行为。

NFET 串并联下拉与 PFET 并串联上拉的对偶互补拓扑映射关系

由于上拉和下拉电路是互补的,我们会看到它们的设计有一种漂亮的对称性。我们已经看到了最简单的互补电路:一个 NFET 下拉和一个 PFET 上拉。如果同一个信号控制这两个开关,很容易看到当一个开关打开时,另一个开关关闭。现在考虑一个由两个串联的 NFET 开关组成的下拉电路。NFET 串联开关的互补电路是并联的 PFET 开关。

复杂 CMOS 复合逻辑门(AND-OR-INVERT)上拉与下拉网络设计示例

要设计一个更复杂的逻辑门,首先确定 PFET 开关的串联和并联连接,这些开关将在正确的输入组合下连接门的输出到 VDD。在这个例子中,当 A 为 0 或者当 B 为 0 且 C 为 0 时,输出 F 将为 1。OR 逻辑对应于并联连接,而 AND 逻辑对应于串联连接,这给出了你在右侧看到的上拉电路。

为了构建互补的下拉电路,系统地遍历上拉连接的层次结构,用 NFET 替换 PFET,将串联子电路替换为并联子电路,将并联子电路替换为串联子电路。在所示的例子中,上拉电路中有一个由 A 控制的开关与一个由 B 和 C 控制的串联子电路并联连接。互补的下拉电路使用 NFET,由 A 控制的开关与由 B 和 C 控制的并联子电路串联连接。

最后,将上拉和下拉电路组合起来,形成完全互补的 CMOS 实现。这可能有点快,但通过实践,你会逐渐熟悉 CMOS 设计过程。

这种方法能适用于所有逻辑函数吗?

不行

CMOS 门的反向逻辑特性

单个 CMOS 门电路输入电平上升导致输出电平下降的反相逻辑特性图

使用 CMOS,单个门电路(具有一个上拉网络和一个下拉网络的电路)只能实现所谓的反向函数,即输入电平上升时输出电平下降,反之亦然。要理解原因,当门电路的一个输入电平从 0 变为 1 时的情况。

任何由上升输入控制的 NFET 开关将从关闭状态转为打开状态。这可能会在门的输出与 GND 之间启用一个或多个路径。而由上升输入控制的 PFET 开关将从打开状态转为关闭状态。这可能会禁用一个或多个路径在门的输出与 VDD 之间。因此,如果门的输出由于上升输入而发生变化,必须是因为某些下拉路径被启用,某些上拉路径被禁用。换句话说,由于上升输入引起的输出电压变化必定是从 1 到 0 的下降过渡。

类似的推理告诉我们,下降输入必定导致上升输出。这意味着所谓的正逻辑无法通过单个 CMOS 门实现。看看 AND 函数的真值表。当两个输入都为 0 或都为 1 时,其值与我们关于 CMOS 门输出的推断不一致。此外,我们可以看到当 A 为 1 且 B 从 0 上升到 1 时,输出上升而不是下降。故事的寓意是:当你是 CMOS 设计师时,你会非常擅长使用反向逻辑来实现功能

CMOS 的时间规范

我们已经理解如何使用 CMOS 来实现组合逻辑门电路,我们接下来关注其时间规范。这是一个简单的两个 CMOS 反相器串行连接的例子,我们用它来理解如何表征左侧反相器的时序特性。为了更好理解,我们需要构建一个电气模型,描述当输入电压VINV_{IN}发生变化时,电路中的实际情况。

两级级联反相器电容充放电与 RC 时间常数等效电路模型

当VINV_{IN}的从数字 0 过渡到数字 1 时,上拉电路中的 PFET 开关关闭,下拉电路中的 NFET 开关导通,将左侧反相器的输出节点连接到地(GND)。右侧反相器的 MOSFET 栅极还存在电容。当输出节点连接到地时,该电容上的电荷将通过导线电阻和 NFET 下拉开关的导通通道电阻流向地连接。最终导线上的电压将达到地连接的电位,即 0V。对于 VIN 的下降过零点,过程类似,导致输出节点充电至 VDD。

,输出波形具有电容通过电阻放电或充电时的特征指数形状。指数形波形由其相关的 R-C 时间常数决定,其中 R 是导线和 MOSFET 沟道总电阻,C 是导线和 MOSFET 栅极终端总电容。由于输入和输出过渡均非瞬时,我们需要选择测量反相器传播延迟的方法。幸运的是,我们正好可以参考信号阈值的指导原则。

传播延迟

组合逻辑传播延迟(tPD)输入与输出电压阈值波形测量规范图

组合逻辑门的**传播延迟(Propagation Delay)**被定义为从有效输入到有效输出的延迟上限。有效输入电压由VILV_{IL}和VIHV_{IH}信号阈值定义,有效输出电压由VOLV_{OL}和VOHV_{OH}信号阈值定义。我们在波形图上显示了这些阈值。

要测量VINV_{IN}上升过渡的延迟,首先确定输入成为有效数字 1 的时间点,即VINV_{IN}跨过VIHV_{IH}阈值的时间点。接下来确定输出成为有效数字 0 的时间点,即VOUTV_{OUT}跨过VOLV_{OL}阈值的时间点。这两个时间点之间的间隔就是这组输入和输出过渡的延迟。我们可以通过相同的过程测量输入下降过渡的延迟。首先确定VINV_{IN}跨过VILV_{IL}阈值的时间点,然后找到VOUTV_{OUT}跨过VOHV_{OH}阈值的时间点。所得的时间间隔就是我们想要测量的延迟。

由于传播延迟VPDV_{PD}是任何输入过渡相关延迟的上限,我们将选择一个大于或等于我们刚才测量值的VPDV_{PD}值。当制造商为门选择VPDV_{PD}规范时,必须考虑制造偏差、不同环境条件如温度和电源电压的影响等。他们应选择一个将成为客户在实际设备上进行的任何延迟测量的上限的VPDV_{PD}值。

从设计师的角度来看,我们可以依靠每个组件的这个上限来计算更大数字系统的VPDV_{PD},而不必重复制造商的所有测量。如果我们的目标是最小化系统传播延迟,则应尽可能减小电容和电阻。这里存在一个有趣的矛盾:为了减小 MOSFET 开关的等效电阻,我们需要增大其宽度。但这会增加开关栅极端的电容,从而减慢连接至栅极的输入节点的电荷转移速度!这是一个有趣的优化问题,需要确定晶体管尺寸以最小化整体传播延迟。

污染延迟

组合逻辑污染延迟(tCD)输出保持有效时间下限测量波形图

尽管静态分析规范并未严格要求,但定义另一个时序规格——称为**“污染延迟”(contamination delay)**。该规格衡量门电路的上一输出值在输入开始变化并失效后,仍保持有效的时间长度。从技术上讲,污染延迟是输入失效到输出失效之间延迟的下限。我们将采用与传播延迟测量类似的方法进行延迟测量。

在输入上升过渡时,延迟开始于输入不再是有效数字 0 的时刻,即VINV_{IN}跨过VILV_{IL}阈值的时刻。延迟结束于输出变为无效的时刻,即VOUTV_{OUT}跨过VOHV_{OH}阈值的时刻。我们可以对输入下降过渡进行类似的延迟测量。由于污染延迟VCDV_{CD}是与任何输入过渡相关的延迟下限,我们将选择一个小于或等于我们刚才测量值的VCDV_{CD}值。

我们真的需要污染延迟规范吗?通常不需要。如果未指定,设计师应假设组合设备的VCDV_{CD}​为 0。换句话说,保守的假设是输出在输入变为无效时立即变为无效。顺便说一下,制造商经常使用“最小传播延迟”(minimum propagation delay)一词来指代设备的污染延迟。

组合逻辑的时序

组合逻辑器件时序规范总览:tCD 与 tPD 之间无效过渡区波形定义

以下是组合逻辑时序规格的简要总结。这些规格告诉我们输出波形(本例中标记为 B)的变化时序与输入波形(本例中标记为 A)的变化时序之间的关系。

组合设备在输入过渡后的一段时间内可能会保留其先前的输出值。设备的污染延迟保证了该时间间隔的最小值,即VCDV_{CD}是旧输出值保持有效时间的下限。如注释 2 所述,保守的假设是设备的污染延迟为 0,这意味着设备的输出可能在输入过渡后立即变化。

同样地,了解 B 在输入过渡后何时保证完成变化也很重要。换句话说,我们需要等待多长时间才能使输入的变化反映在输出的更新值上?这就是VPDV_{PD}告诉我们的内容,因为它是输入过渡后 B 变为有效且稳定的时间的上限。

通常在从输入过渡开始测量的VCDV_{CD}和VPDV_{PD}之间的时间间隔内,对输出的行为没有保证。在该时间间隔内,B 输出可以变化多次,甚至在任何部分时间内具有非数字电压。正如我们将在本讲的最后部分看到的,对于组合设备的一个子类,我们能够提供更多关于该时间间隔内 B 行为的见解。但通常,设计师不应对VCDV_{CD}和VPDV_{PD}​之间时间间隔内 B 的值作出任何假设。

如何根据组合电路时序规格计算较大组合电路的传播延迟和污染延迟呢?

示例

4 门 NAND 组合电路最长路径传播延迟与最短路径污染延迟计算示例

我们的示例是一个由四个 NAND 门组成的电路,其中每个 NAND 门的VPDV_{PD}为 4 ns,tCD 为 1 ns。要找到更大电路的传播延迟,我们需要找到从输入节点 A、B 或 C 的输入状态变化到输出 Y 的有效且稳定值的最大延迟。为此,考虑从其中一个输入到 Y 的所有可能路径,并通过沿路径求和各组件的VPDV_{PD}值来计算路径延迟。选择所有路径中最大的路径延迟作为整个电路的VPDV_{PD}。在我们的示例中,最大的延迟路径包含三个 NAND 门,累计传播延迟为 12 ns。换言之,输出 Y 在 A、B 或 C 发生状态转换后 12 ns 内保证稳定且有效。

要找到更大电路的污染延迟,我们再次调查所有从输入到输出的路径,但这次我们寻找从一个无效输入到一个无效输出的最短路径。我们沿每条路径求和各组件的 tCD 值,并选择最短路径的延迟作为整个电路的 tCD。在我们的示例中,最短延迟路径包含两个 NAND 门,累计污染延迟为 2 ns。换言之,当其中一个输入变为无效时,输出 Y 将至少保持其前一状态 2 ns。

一般来说,我们不能对 tCD 和 tPD 之间的 Z 的值做出任何假设。Z 在该时间间隔内可以表现出任何行为,而设备仍被视为合法的组合逻辑电路。

宽容组合逻辑器件

你可以用 X(don't care) 表示那些不影响输出的输入。CMOS NOR 门具有一种“宽容”行为 —— 当某个输入已经足以决定输出时,其它输入的变化不会影响输出结果。这种特性使得电路在输入变化期间仍能保持稳定输出,是设计复杂逻辑系统(比如存储器)时非常重要的属性。

具有无关项宽容特性的 CMOS 门电路时序抗扰能力分析图


核心机制思考与底层洞察

tCDt_{CD} 的时序微架构救赎:消除保持时间违例的天然屏障 初学者在学习数字系统时往往极度关注传播延迟 tPDt_{PD},因为 tPDt_{PD} 直接决定了处理器的最高时钟频率(fCLK≤1tPD+tsetupf_{CLK} \le \frac{1}{t_{PD} + t_{setup}})。但从芯片工程物理实现的残酷现实来看,污染延迟 tCDt_{CD} 才是决定芯片生死的更根本指标:

  1. 建立时间违例可通过降频修复,保持时间违例直接导致硅片报废:
    • 若建立时间(Setup Time)裕量不足,设计者只需在晶圆测试时降低主频(加大时钟周期 TCLKT_{CLK}),芯片依然可以降级工作。
    • 但在跨寄存器的时序约束中,保持时间(Hold Time)条件严格要求数据在时钟有效沿后必须维持稳定至少 tholdt_{hold},其物理判定式为: tCD,reg+tCD,logic≥thold+tskewt_{CD, \text{reg}} + t_{CD, \text{logic}} \ge t_{hold} + t_{skew}
    • 关键洞察:时钟周期 TCLKT_{CLK} 在保持时间不等式中彻底消失!若两个相邻寄存器之间直连且逻辑污染延迟 tCD,logic=0t_{CD, \text{logic}} = 0,一旦物理时钟偏斜(Clock Skew)超过触发器固有延迟,高频数据便会在同一时钟周期内穿透两级触发器(Race Condition)。此时无论时钟放慢到 1 Hz 还是 1 kHz,采样到的数据都是错乱的,流片后的芯片将彻底永久报废。
  2. tCDt_{CD} 是标准单元物理惰性对时钟偏斜的天然缓冲:
    • 污染延迟衡量的是输入电平开始失真到输出端电荷通过导通阻抗开始泄放的物理“下限惰性”。门电路内部栅极寄生电容与有限载流子速度所维持的非零 tCDt_{CD},为时钟树的微小偏差提供了至关重要的安全防护窗口。
    • 当 EDA 物理布局布线(P&R)工具检测到保持时间违规时,唯一的物理补救手段便是在短路径上强行插入冗余的缓冲延迟链(Delay Buffers),其实质就是人为强行垫高短路径的 tCDt_{CD}。理解 tCDt_{CD} 是真正迈入真实硅片时钟树综合与时序闭合(Timing Closure)的关键分水岭。 :::