2.4 CMOS:互补的智慧
📚本文内容摘自本人的开源书《从沙子到车辙 - 一个工程师的理解》
🔗 在线阅读/下载:from-sand-to-ruts
gitclone https://github.com/Lularible/from-sand-to-ruts⭐ 如果对您有帮助,欢迎 Star 支持,也欢迎通过 GitHub Issues 交流讨论。
一个不会漏水的水路系统
假设你手里有两个简单的东西:一个水龙头(平常关着,拉杆就出水),一个塞子(平常塞着,拔掉就漏水)。
你把水龙头装在上水管——这是"高边",接通水源。你把塞子装在下水口——这是"低边",接通排水。
现在把这两个东西联动起来——用一根连杆同时控制它们:水龙头打开的同时,塞子堵住下水口(水不会直接从水管流到排水管——水流向了你要用的地方)。水龙头关上的同时,塞子打开下水口(把管道里残留的水排掉,不积水)。
你得到了什么?一个既不会漏水、也不会积水的水路系统。常态下没有水的浪费。只在切换的一瞬间——水龙头还没完全打开、塞子还没完全堵住的那一刹那——有短暂的水直接从水源流到排水管。
这就是 CMOS。两个互补的开关配成一对——一个接 VDD(PMOS),一个接 GND(NMOS)。一个导通时另一个截止。静态功耗几乎为零。
CMOS 的 C,是Complementary——互补。不是对立的互补,而是协同的互补。就像阴阳太极图——黑中有白,白中有黑,动态平衡,静态归零。
CMOS 反相器——数字电路的最基本积木
CMOS 反相器只有两个 MOSFET。上面一个 PMOS:源极接 VDD,漏极接输出。下面一个 NMOS:漏极接输出,源极接 GND。两个 MOSFET 的栅极连在一起——这就是输入。
VDD | PMOS | (上拉网络) IN ---+--- OUT NMOS | (下拉网络) | GND当 IN = 0(0V):PMOS 的 V_GS = -VDD → PMOS导通(PMOS 在栅极为低时导通)。NMOS 的 V_GS = 0 → NMOS截止。OUT 通过导通的 PMOS 连接到 VDD → OUT = VDD = 逻辑 1。
当 IN = 1(VDD):PMOS 的 V_GS = 0 → PMOS截止。NMOS 的 V_GS = VDD → NMOS导通。OUT 通过导通的 NMOS 连接到 GND → OUT = 0V = 逻辑 0。
无论 IN 是 0 还是 1,PMOS 和 NMOS 不会同时导通。静态下,从 VDD 到 GND 没有直流通路——理论上功耗为零。现实中有一点点漏电:亚阈值泄漏(晶体管在"截止"状态也有 pA-nA 级微弱电流),栅漏电流(在纳米级工艺中电子隧穿氧化层),以及 PN 结反向漏电。但在车规 MCU 常用的 40nm-90nm 工艺上,这些静态漏电在单个反相器层面是皮安(pA)级别的。
CMOS 反相器不需要输入电流(栅极绝缘)。不消耗静态功率(P 管和 N 管互补开关)。开关速度极快(只受栅电容充放电限制)。这三个特性,让它成为数字电路的终极积木块。
电压传输特性——VTC 曲线里的信息量
反相器的电压传输特性(VTC,Voltage Transfer Characteristic)是一张 V_IN 对 V_OUT 的图。横轴是输入电压从 0 扫到 VDD,纵轴是输出电压的变化。
理想的 VTC 是一个阶跃函数:当 V_IN 低于 VDD/2 时,V_OUT = VDD;当 V_IN 高于 VDD/2 时,V_OUT = 0。干净利落。切换点恰好是 VDD/2。
真实的 VTC 没有那么锋利。它是一个平滑的 S 形曲线。当 V_IN 从 0 开始上升时,V_OUT 在 VDD 附近维持平坦——PMOS 完全导通,NMOS 完全截止。当 V_IN 接近 V_TH_N(NMOS 的阈值电压)时,NMOS 开始微弱导通,OUT 电压开始下降。在 V_IN 接近 VDD/2 的某个区间内,PMOS 和 NMOS同时导通——都在饱和区或线性区——反相器表现出高增益,V_OUT 急剧下降。然后当 V_IN 超过 VDD - |V_TH_P| 后,PMOS 彻底截止,V_OUT 降到 0。
VTC 曲线给出了几个关键的设计参数:
开关阈值 V_M:V_IN = V_OUT 的点。理想是 VDD/2。如果 PMOS 和 NMOS 的驱动能力不对称,V_M 会偏向强的一侧。V_M 偏得太多会导致噪声容限不对称。
噪声容限(Noise Margin):输入端的噪声电压可以大到什么程度而不改变输出逻辑值。噪声容限定义为 VTC 曲线和其镜像曲线之间最大正方形的边长。高噪声容限(NM_H)= V_OH_min - V_IH_min,低噪声容限(NM_L)= V_IL_max - V_OL_max。噪声容限越大,电路对电源噪声、串扰、地弹越不敏感。在车规芯片中——EMC 环境极其恶劣——噪声容限是设计的关键指标。
过渡区宽度:V_OUT 从 90% VDD 降到 10% VDD 对应的输入电压区间。过渡区越窄(VTC 越陡),增益越高,噪声容限越大。CMOS 反相器的过渡区可以做到 100mV 以内——这意味着输入电压只要变化约 100mV,输出就能从逻辑 1 翻转到逻辑 0。
扇出(Fan-out):一个反相器的输出可以驱动多少个后续门输入。扇出由驱动能力和负载电容决定——负载电容 = N × C_in(被驱动的门的输入电容)+ 连线寄生电容。驱动能力大的反相器可以驱动更多门——但也会消耗更多功耗和面积。在高速数字电路中,关键路径上的门的扇出通常限制在 3 到 5 之间。
传播延迟(t_p):输入翻转 50% 到输出翻转 50% 之间的时间差。t_p 由充放电电流和输出负载电容决定——t_p ≈ C_L × VDD / I_D。降低延迟的手段:增大晶体管宽度(提高 I_D),减小负载电容(缩小被驱动门的输入电容),降低 VDD(但电压越低,I_D 越小——存在最优值)。
这些都是 CMOS 反相器一张简单的 VTC 图就能推出的信息。电路设计——从原理图到版图——本质上就是在这张图上的各种参数之间做权衡:速度 vs 功耗 vs 面积 vs 噪声容限。
三笔账:芯片的功耗到底从哪里来?
CMOS 的静态功耗接近零——这是教科书里的理想。真实芯片的功耗有三个来源。
第一笔:动态功耗(开关功耗,Switching Power)。这是最大的单笔支出。反相器翻转一次,输出端的负载电容 C_L 需要充电或放电。充电时,电流从 VDD 经 PMOS 流向 C_L,把电容从 0V 充到 VDD。能量从电源被取出来,一半存储在电容中(½ C_L V²),另一半消耗在 PMOS 的沟道电阻上变成了焦耳热。放电时,存储在电容中的 ½ C_L V² 经过 NMOS 放电到 GND——全部变成焦耳热。所以每一次完整的充放电周期(0→1→0),总耗能是 C_L × VDD²。
如果芯片以频率 f 运行,每秒钟翻转次数近似为 f × α。α 是活动因子(activity factor)——一个时钟周期内某个节点发生 0→1→0 完整翻转的概率。所以动态功耗:
P_dynamic = α × C_L × VDD² × f
数字电路 90% 以上的功耗通常是动态功耗。一个 Cortex-M4 在 112MHz、1.2V 下运行时,典型动态功耗约 50-100 mW。这 100mW 花在了什么上面?花在了"给芯片上几十万到几百万个节点的栅电容和连线电容充电和放电"这件事上——每个时钟周期,每一微秒,都有成百上千个节点在翻转。
你写的代码越"忙"——主循环不停跑、中断不停触发、DMA 不停搬运数据——α 越高,功耗就越高。你在做低功耗优化时把不用的外设时钟关掉(clock gating),本质上就是在那一部分电路上将 α 降到零——时钟停了,那些节点就不翻转了。
第二笔:短路功耗(直通功耗,Short-circuit Power)。CMOS 在静态下没有直流通路——这是对静态而言。但在切换的瞬间,当输入电压在 V_TH_N 和 VDD - |V_TH_P| 之间时,PMOS 和 NMOS 会同时微弱导通。一股"穿堂风"——电流从 VDD 直接经 PMOS 和 NMOS 流到 GND。
一个反相器在单次翻转中消耗的短路能量大约是 C_L × VDD² 的 5-15%。但是如果输入信号的上升/下降时间很长(比如因为驱动能力不足),这个"同时导通"的时间窗口会被拉长——短路功耗占比可能上升到 20-30%。这就是为什么在做高速数字设计时要关注信号的压摆率(slew rate)——缓坡不仅噪声大(因为中间电平的 PMOS/NMOS 共导时间长,对外部噪声敏感),而且费电。
第三笔:静态功耗(漏电功耗,Leakage Power)。
P_leakage = VDD × I_leak
I_leak 包括:
- 亚阈值泄漏(Subthreshold Leakage):晶体管即使 V_GS = 0,也有一条微弱的指数电流尾在漏电。在 40nm 工艺下,单管的亚阈值泄漏约在 1-10 nA。听起来小——但一个 die 上有上百万到上亿个晶体管。1nA × 1亿个 = 100mA。这就是"暗硅"问题的根源。
- 栅漏电流(Gate Leakage):量子隧穿导致的栅极到沟道直接漏电。在 HKMG 工艺中已经得到了大幅抑制。
- 结漏电(Junction Leakage):源/漏到衬底的 PN 结反向漏电流。通常很小(fA-pA 级),但高温下指数增长——温度每增加 10°C,泄漏大约翻倍。
三个来源整合起来:
P_total = α × C_L × VDD² × f + P_short + P_leak
对于汽车 ECU 来说,现实场景下的功耗管理就是在这三个项上做文章:
- 电压降一半,动态功耗降四倍(因为 VDD² 项)。这就是内核电压从 5V → 3.3V → 1.8V → 1.2V → 0.9V 一路向下走的根本驱动力。
- 频率降低,动态功耗线性下降。所以 MCU 有多达几十个时钟分频选项——HCLK、PCLK1、PCLK2——让你给不同的外设挂不同速度的时钟。不需要跑满的外设就别给它高速时钟。
- 活动因子降为零——关掉未用模块的时钟(clock gating),那部分电路完全不耗动态功耗。
- 降低亚阈值泄漏——用电源门控(power gating)直接切断未用模块的供电。但电源门控的成本很高——恢复供电需要时间(唤醒延迟)。
- 动态电压频率调节(DVFS)——在负载低时降低电压和频率,在高负载时升高。这在手机 AP 上是标配,但在车规 MCU 上不常见——因为汽车对实时性要求严格,电压频率的切换延迟可能不可接受。
Dennard 缩放——一个成立、然后崩溃的预言
1974 年,IBM 的 Robert Dennard 发表了一篇里程碑式的论文。他指出了一个漂亮的缩放规律:如果晶体管尺寸等比例缩小 k 倍(k > 1),功耗密度可以保持恒定。
推导大致是这样的:
- 晶体管尺寸缩小 k 倍 → 面积缩为 1/k² → 可以放 k² 倍的晶体管。
- 电压也缩到 1/k(保持电场不变——氧化层减薄 k 倍,VDD 也等比例缩 k 倍)。
- 氧化层减薄 k 倍 → 栅电容 C 也缩到 1/k(C = εA/t,A 缩为 1/k²,t 缩为 1/k → C 缩为 1/k)。
- 频率提升 k 倍(信号传播距离缩短 k 倍,但电场保持不变 → 载流子速度不变,传播时间缩为 1/k → 频率提升 k 倍)。
代入 P = αCV²f:
C → 1/k。V² → 1/k²。f → k。
乘起来:单个晶体管的功耗变成1/k²。
但芯片上可以放 k² 倍的晶体管。所以芯片的总功耗不变。
这就是 Dennard 缩放定律——它解释了为什么从 1970 年代到 2000 年代中期,芯片频率一路飙升(几 MHz → 几 GHz),但芯片的功耗没有爆炸。Intel 从 8086(3μm)到 Pentium 4(90nm),每一代制程都能在相同功耗预算下获得更高的频率。
然而在 2005 年左右——90nm 到 65nm 附近——这一定律崩溃了。
崩溃的原因是:电压不能无限缩。
阈值电压 V_TH 不能跟着等比例缩。如果 V_TH 太低,亚阈值泄漏电流会指数级暴涨——晶体管关不死。而工作电压 VDD 必须比 V_TH 高出一定的"过驱"余量(overdrive),才能保持足够的开关速度。所以 VDD 在 1V 附近就不再显著下降了。
同时,栅氧化层也不能无限缩——2nm 以下量子隧穿急剧增加,再减薄栅漏电流就失控了。所以 DENNARD 的"氧化层等比例减薄"这一步也停下来了。
当 VDD 和氧化层厚度不再缩,但晶体管数量还在翻倍(摩尔定律的密度继续提升)——功耗密度开始上升。这就是"暗硅"(dark silicon)现象的根源——你没法让芯片上所有晶体管同时以全速工作,因为产生的热量散不出去。你只能让一部分区域以全速跑,其他区域关闭或降频。移动芯片的 big.LITTLE 架构(ARM)、CPU 的睿频(Turbo Boost)和热降频(thermal throttling),都是 Dennard 缩放崩溃后不得已的妥协方案。
车规芯片很少跑在制程节点的最前沿。大多数车规 MCU 还在 90nm 到 40nm——Dennard 缩放崩溃的刃口刚好在它们前面。这其实是一个优势。用稍微落后的制程,换来了更好的热分布、更低的漏电、更高的可靠性、更成熟的设计库。这就是"成熟制程"在汽车电子中活得好好的根本原因。
为什么车规芯片甘愿用"落后一代"的制程?
你可能会想:车规芯片为什么不用 5nm?性能不是更好吗?
答案是:不是"不能",是"不该"。
第一,漏电。更先进的制程(7nm、5nm、3nm)的亚阈值泄漏是 40nm 的几十到几百倍。一颗 5nm 的芯片即使处于待机状态,静态功耗可能也在几百毫瓦级别。这对手机来说勉强可以接受——你晚上回去充电就是了。对汽车来说不可接受——熄火后全车 ECU 的暗电流总和必须 < 10mA(约 120mW),否则一晚上电池就空了。用 40nm 或 90nm 做车规 MCU,静态漏电可以控制在 μA 级别——整颗芯片的睡眠电流可能只有十几个 μA。
第二,电压。更先进的制程要求更低的 VDD——0.7V 到 0.9V。但车上的电源环境是 12V(乘用车)或 24V(商用车),降到你需要的 1.2V 或 3.3V 已经很难了,再降到 0.8V——LDO 或 DC-DC 的效率、噪声、可靠性都会恶化。而且低电压意味着模拟电路的信号摆幅小——信噪比下降。你的 12-bit ADC 在 1.2V 基准下,一个 LSB 是 0.29mV。如果用 0.8V 基准,一个 LSB 是 0.20mV——热噪声和电源噪声的容限都更小了。
第三,可靠性。更先进的制程的器件老化更快——NBTI、HCI、TDDB(经时击穿)等退化机制在纳米级工艺中更加显著。一个 5nm 的晶体管在 125°C 下跑 1000 小时的 HTOL,参数漂移可能达到 10-15%。而一个 40nm 的晶体管在同样条件下可能只漂移 2-3%。车规芯片要在 15 年内保持参数在 spec 内——谁更可靠一目了然。
第四,成熟度。40nm 已经量产了十几年。几十亿颗芯片的数据积累下来,整个工艺窗口已经被摸透了。设计规则(DRC rules)是经过几百次 tapeout 验证的。模型精度很高——SPICE 仿真和实际硅片的偏差很小。良率稳定——90% 以上的良率是可以持续保持的。对于做 ASIL-D 安全件的 Tier-1 来说——他们不想要"新"的,他们想要"确定"的。
所以车规芯片用 40nm 不是落后——是理性。
在做失效分析时,我最喜欢的事就是切片
这是我的亲身经历——良率工程师视角下的失效分析。
在 fab 里,当良率出现异常,单靠参数测试和光学检测不足以确定根因时,下一步就是做物理失效分析(PFA,Physical Failure Analysis)。而 PFA 的第一步,通常是切片。
切片就是用聚焦离子束(FIB,Focused Ion Beam)在 die 的特定位置切出一个剖面,然后用扫描电子显微镜(SEM)观察这个剖面。FIB 用镓离子束轰击硅的表面,像一把原子级的刀——可以把硅、氧化硅、金属、甚至封装材料一层一层地削掉,精度达到纳米级别。
我第一次在 SEM 上看自己切的 chip 剖面时,整个人是震撼的。
在 SEM 的黑白图像里,芯片不再是一块平淡无奇的黑色方块。它是一个精密的、层叠的、有纵深感的微型城市。最底层的硅衬底——灰色的、均匀的海洋。上面是晶体管层——一个个 FinFET 的鳍像一排排高楼,栅极像包裹在楼外面的隔热层。再往上是十几层金属互连线——铜线在二氧化硅介质中穿行,像城市地下的地铁隧道。层与层之间是密密麻麻的钨通孔(via)——垂直的通道,把相邻的金属层连接起来。
这片小小的硅——15mm²——在 SEM 下是一个立体的、有人尺度的世界。
有一次,一个 die 的失效模式很怪异——常温测试全 pass,高温(125°C)测试大面积 fail。参数测试指向 VDD 到 GND 之间短路——但哪个位置短了?
我们把 die 送去做光发射显微镜(EMMI,Emission Microscopy)分析。给 die 通电——VDD 和 GND 之间应该有高阻抗。但在 EMMI 图像上,一个微小的光点出现了——那是电子和空穴复合发出的近红外光子。光点的位置标记了短路点。
然后 FIB 在那个位置切了一个剖面。SEM 下看——看到了。
两个相邻金属线的间距应该 ≥ 0.25μm。但在 SEM 图像上,这两条线之间的距离在某一段几乎为零——有一条细细的金属桥(bridge)横跨在两条线之间。这条桥的宽度大约只有 50nm——用光学显微镜根本看不到,在常规的 AOI(自动光学检测)中也扫不出来。但在 SEM 下,它清楚得不能再清楚。一条 50nm 宽的金属细丝,把 VDD 和 GND 短接了。
这是什么造成的?进一步用 EDX(能量色散 X 射线光谱)分析了桥梁的化学成分——主要是铜和少量的钽(钽是铜互连工艺中的扩散阻挡层材料)。这表明桥梁是在铜 CMP 之后、钽阻挡层沉积之前形成的——可能是 CMP 残留的铜碎屑没有清洗干净,在下一道沉积工序中被"埋"进了介质层里。
这个缺陷在室温下不造成短路——因为热膨胀系数差异,室温下桥梁可能处于微小的机械应力下,刚好断开。但加热到 125°C 后,铜的热膨胀比周围的二氧化硅大——桥梁被"挤"到了旁边的金属线上,接通了。
这就是为什么这颗芯片常温 pass、高温 fail。不是电气设计有 bug——是物理制造有缺陷。
一粒尘埃——70nm 的铜碎屑——就可以破坏整个电路。而这颗碎屑,是在几百道工序中的某一个清洗步骤留下的。
我每次回忆起那幅 SEM 图像——两条铜线之间那条 50nm 的细桥——都会感到一种混合的情绪。一方面是敬畏——人类可以把东西做到这么小、这么精确。另一方面是谦卑——在原子尺度做任何事,任何微小的失误都会被放大成致命的缺陷。
从两个 MOSFET 到一台车
CMOS 逻辑最漂亮的一个性质:简单规则的重复,可以涌现无限复杂。
一个 NMOS + 一个 PMOS = 反相器。反相器 × 几个 = NAND 门(两个 PMOS 并联 + 两个 NMOS 串联)、NOR 门(两个 PMOS 串联 + 两个 NMOS 并联)。NAND 门 × 几十个 = 加法器、多路选择器、ALU。ALU + 寄存器 + 控制状态机 × 几千个 = CPU。CPU + 片上 SRAM + Flash + 外设 = MCU。MCU × 100 + CAN/LIN/FlexRay + 传感器 + 执行器 = 整车电子架构。
从两个 MOSFET 到一台在路上以 120km/h 飞驰的、依靠几十个 ECU 协同工作的汽车——中间没有魔法。每一步都是确定性的、可理解的、由简单积木块组成的。
这是工程之美——不是"不可分析的复杂",而是"可分析的复杂"。你可以从最顶层的模型一路走到最底层的晶体管,每一层都是可以严格推导的、可以仿真的、可以预测的。你的车在高速公路上做自适应巡航——雷达数据 → CAN 消息 → MCU 中断 → 算法计算 → GPIO 输出 → 刹车作动——这整个链条,最终可以分解为几十万个 CMOS 逻辑门的翻转。
道家讲"道生一,一生二,二生三,三生万物"。在 CMOS 的世界里:CMOS → 逻辑门 → 功能模块 → 芯片 → 系统 → 万物。
你在调试 ECU 时看到的每一个不正常的电平、每一条时序违例、每一帧丢掉的 CAN 消息——它们的根因,最终都可以追溯到某些 MOSFET 没有在正确的时间、接到正确的电压。因为一切数字电路的物理本质就是如此——CMOS 反相器的输入和输出之间那层薄薄的氧化硅。
你在做软件。但你的软件跑在物理上。而物理——是由 MOSFET 定义的。
本篇小结
今天我们做了一件事:理解了CMOS"互补"的智慧——为什么两个互补的开关配成一对,就成了数字电路的终极积木。
关键结论:
- CMOS的本质是"一个导通时另一个截止":静态下VDD到GND没有直流通路,功耗几乎为零——这是整个数字世界能跑在电池上的物理基础。
- 芯片功耗有三个来源:动态功耗(CV²f)、短路功耗、静态泄漏——Dennard缩放的崩溃告诉我们在纳米时代,电压不能再无限降。
- 车规芯片甘愿用"落后一代"的制程,是理性的选择:更低的漏电、更高的电压容限、更慢的老化——可靠性凌驾于性能之上。
下一节,一个面板厂良率工程师的视角,带你走进半导体制造的真实世界——电路图是如何在基板上一层层长起来的。
【下集预告】
从理论上说,有了 MOSFET,有了 CMOS,就能造任何数字电路。但这些电路是如何被"制造"出来的?
光刻、刻蚀、沉积、离子注入、CMP——这组五步骤要重复几十次。在面板厂,线宽是微米级别;在芯片厂,线宽是纳米级别。原理相似,尺度不同。
我在一家面板厂做过几年良率工程师。我见过 PECVD 腔体中的等离子体辉光、听过溅射机的高压放电声、在 SEM 上看过自己切的面板剖面——电路图在玻璃基板上一层层长了起来。下一节——从一个良率工程师的视角,带你走进半导体制造的真实世界。