Bubble Pushing

CMOS 逻辑门是内生反相的,AND 和 OR 功能必须由 NAND 或 NOR 门来实现。利用 De Morgan 定律实现这种转换,在电路图上的反映被称为气泡推拉(bubble pushing)。

一次转换:气泡从输入/输出,门从 AND/OR;$\overline{A\cdot B}=\overline{A}+\overline{B}, \overline{A+B}=\overline{A}\cdot\overline{B}$。

一个例子:通过 bubble pushing 设计 $F=\overline{AB+CD}$ 的电路图
一个例子:通过 bubble pushing 设计 $F=\overline{AB+CD}$ 的电路图

复合门

上例中,$F=\overline{AB+CD}$ 采取的是 NAND solution。若最大输入电容为 16,负载电容为 160,有:

  • 寄生电容 $P=2+2=4$
  • 逻辑努力 $G=(4/3)\cdot(4/3)=16/9$
  • 电气努力 $H=160/16=10$
  • $F=GH=160/9$
  • 最佳级努力 $\hat{f}=\sqrt[N]{F}=4.2$
  • 延迟 $P=N\hat{f}+P=12.4\tau$

AND-OR-INVERT-22(AOI22)采取的则是复合设计 compound solution:

  • 寄生电容 $P=4+1=5$
  • 逻辑努力 $G=(6/3)\cdot(1)=2$($P,G$ 均可见下图分析)
  • $F=GH=20$
  • 最佳级努力 $\hat{f}=\sqrt[N]{F}=4.5$
  • 延迟 $P=N\hat{f}+P=14\tau$

复合门将多个基本逻辑门打包成一个功能单元,减少电路级数。

复合 AOI 门的逻辑努力与寄生延迟
复合 AOI 门的逻辑努力与寄生延迟

输入顺序

Input Ordering

定义外部输入(outer input)为靠近电源轨的输入端,内部输入(inner input)为靠近输出的输入端。当内部输入最后跳变时,寄生延迟最小,因为中间节点已提前完成放电。因此,若已知某信号比其他信号到达得晚,则将该信号连接到内部输入端时,门的速度最快。

再谈偏斜门

高偏(HI-skewed)门 pMOS 端电阻更小,偏好输出上升沿(rising edge);低偏(LO-skewed)门 nMOS 端电阻更小,偏好输出下降沿(falling edge)。

偏斜门的逻辑努力

偏斜门在某一特定跳变方向(a particular transition)上的逻辑努力,是指该门的输入电容与一个无偏反相器的输入电容之比 —— 其中该无偏反相器在相同跳变方向上能提供相同的输出电流。

根据该定义,求某偏斜门的逻辑努力:

  • 上升沿 $g_u$:取一个与待求门 pMOS 端等效电阻相同的无偏反相器,计算输入电容之比
  • 下降沿 $g_d$:取一个与待求门 nMOS 端等效电阻相同的无偏反相器,计算输入电容之比
一些偏斜门的逻辑努力
一些偏斜门的逻辑努力

动态逻辑与多米诺门

动态电路(dynamic circuits):利用时钟控制的上拉 pMOS,通过预充电(precharge)求值(evaluate)两个阶段交替工作来实现逻辑功能的电路。

时钟信号 $\phi$ 初始为 0,动态电路预充电将输出电平拉高;$\phi$ 变为 1,动态电路进入求值阶段,对输入 $A$ 进行求值。若输入为真,输出电平被拉低;反之保持高。

问题一:预充电阶段,时钟信号与输入信号双高导致争用(contention)。

解决方法是引入 foot:一个串联在 nMOS 下拉网络底部的时钟控制晶体管,在预充电阶段阻断输入信号与地线。

问题二:输入的单调性(monotonicity)。在求值阶段,输入单调不降,输出单调不增;这使得一个(输出为 $1\to 0$ 的)动态电路无法驱动另一个动态电路。
  • 输入 $X$ 从 $0\to 0$:输出 $Y$ 从 $1\to 1$
  • 输入 $X$ 从 $0\to 1$:输出 $Y$ 从 $1\to 0$
  • 输入 $X$ 从 $1\to 1$:输出 $Y$ 从 $0\to 0$
  • 输入 $X$ 从 $1\to 0$:求值阶段时钟信号阻断了电源轨,输出 $Y$ 无法从 $0$ 拉到 $1$

解决方法是多米诺门(domino gate),即一个动态电路后接一个静态的反相器;一对动态电路/静态反相器被称为一个多米诺门。在求值阶段,多米诺门的输入与输出均是单调不降的;所以一个多米诺门可以驱动另一个多米诺门。

  • 一系列级联的多米诺门并行 parallel 预充电(受同一时钟信号控制),相继 sequential 求值(前门的输出是后门的输入);是不是很像多米诺骨牌纷纷倒下?
  • 求值阶段比预充电阶段更 critical(是延迟的 bottleneck)
  • 静态反相器通常是 HI-skewed 的,能够将动态电路单调不增的输出拉高成单调不降
问题三:在求值阶段,多米诺门的输入与输出均为单调不降的;所以它天然的适合实现非反相函数如 AND,OR;对于反相函数(inverting functions:输入增,输出降)如 NAND,NOR 与 XOR,它就束手无策了。

解决方法:双轨多米诺(dual-rail domino)。一个逻辑信号 $X$ 用两根线表示,$X_h=1$ 表示 $X=1$,$X_l=1$ 表示 $X=0$。

输出信号 $Y$ 同时被 $Y_l$ 与 $Y_h$ 表示。预充电阶段两者均为 0,$Y_h=1$ 表示 $Y=1$,$Y_l=1$ 表示 $Y=0$。正常工作时两者不应同时为 1。这样,即使对于 NAND, NOR 与 XOR 这样的反相函数,也能做到求值阶段每根线上均单调不降。

$Y_h$ $Y_l$ 含义
0 0 预充电
0 1 求值 ‘0’
1 0 求值 ‘1’
1 1 无效
AND/NAND 门 (a) 与 XOR/XNOR 门 (b) 的双轨多米诺实现
AND/NAND 门 (a) 与 XOR/XNOR 门 (b) 的双轨多米诺实现

其实就是把 conduction complements 引入了 nMOS 网络。对于函数 $F(A,B)$,$Y_h$ 端用 $A_h, B_h$ 拼出 $F$,$Y_l$ 端用 $A_l, B_l$ 拼出 $\overline{F}$。

XOR 在 $Y_l, Y_h$ 路径上共用了晶体管,显得有点难以理解。

  • $Y_h=B_hA_l+B_lA_h=B\overline{A}+\overline{B}A=A\text{ XOR } B$
  • $Y_l=B_lA_l+B_hA_h=\overline{B}\cdot\overline{A}+BA=A\text{ XNOR }B$
问题四:泄露(leakage)。预充电阶段 $Y$ 被时钟信号拉到高电平;到了求值阶段,若 nMOS 没有导通,$Y$ 会处在悬空高电平(floating high)状态。但由于晶体管泄露(亚阈值,栅,结泄露等),高电平会慢慢流失。

解决方法是引入保持器(keeper),一个足够弱的 pMOS 晶体管。当 nMOS 导通时不会强到影响求值,nMOS 关断时足够「吊着」高电平。

问题五:电荷共享(charge sharing)。求值阶段,内部节点可能分走高电平。若内部扩散电容 $C_x$ 过大,输出电平甚至可能被拉低到 0。

$$
V_{\text{final}}=\frac{C_Y}{C_x+C_Y}V_{DD}
$$

解决方法:引入二级预充晶体管(secondary precharge transistor)在预充电阶段也拉高内部节点的电平。增大输出端电容 $C_Y$ 也是一个有效的方法。

多米诺门总结

  • 只有 nMOS 求值网络 critical,比静态 CMOS 快 1.3-2 倍,适于做高速电路
  • 噪声敏感,高能耗
  • 90 年代流行(以复杂设计换速度),现已被静态 CMOS 取代(能耗成为第一约束)

传输晶体管逻辑

在传输晶体管电路(pass transistor circuits)中,输入不单止加在栅极端,也会加在源/漏扩散端。一个典型例子见 CMOS 逻辑一节中的传输门(transmission gate)。

  • CMOS 与传输门混合使用:MUX,latch
  • 互补传输晶体管逻辑(CPL):全加器
  • LEAn integration with Pass transistors(LEAP)

LEAP 属于单端逻辑电路,只使用速度较快的 nMOS 晶体管,不需要 pMOS 互补网络。

一个简单的 LEAP 逻辑选择器
一个简单的 LEAP 逻辑选择器
  • 左侧:仅由 nMOS 构成,单端逻辑
  • nMOS 传 0 强 1 弱。若传 1,只能升到约 $V_{DD}-V_t$。restoring 逻辑:接一个 LO-skew 反相器,翻转阈值 $V_{inv}$ 较低,从而能够把弱 1 翻转过来。之后的弱 pMOS 反馈回路激活,把弱 1 拉高成满摆幅强 1(fully high)。

传输晶体管逻辑易出现电平退化,因此通常需要接 restoring 门。