1. 从一颗像素到一枚芯片:CMOS到底是什么
很多年前我第一次拆开一颗手机摄像头模组,对着那块指甲盖大小的感光芯片发了好一阵呆。那时候我还没搞懂,为什么一颗芯片上既能做感光,又能做模数转换,还能跑一堆图像算法。后来做IC设计久了才明白,这一切都指向同一个名字:CMOS。
CMOS的完整叫法是Complementary Metal Oxide Semiconductor,翻译过来是“互补金属氧化物半导体”。名字虽然长,但核心就两个词:互补,半导体。互补指的是在同一颗芯片上同时有PMOS和NMOS两种晶体管,它们像一对性格相反的搭档:一个负责拉高电压,一个负责拉低电压。半导体指的是晶体管靠半导体衬底里的导电沟道工作。正是这个“互补”结构,让CMOS电路在静态时几乎不耗电,在动态时动作又非常干脆。
现在市面上的处理器、存储器、单片机、图像传感器,绝大多数都是CMOS工艺做出来的。你手机里那颗1亿像素的CMOS图像传感器,本质上也是一大片光电二极管加一堆CMOS读出电路。甚至你电脑里的CPU,核心逻辑也全是CMOS逻辑门搭起来的。所以理解CMOS,不只是芯片设计工程师的事,嵌入式工程师、硬件爱好者、学生都应该把它当作基本功。
这篇文章我想从最基础的反相器电路图开始,一路讲到版图、截面图、D触发器逻辑图、LTSpice仿真,再落到现代CMOS图像传感器和嵌入式CMOS。不堆公式,不讲玄学,全是我实际调电路、看版图、跑仿真时最常碰到的内容和坑。
2. CMOS反相器:数字电路的最小单元
2.1 反相器电路图:两只管子一个输出
CMOS反相器是所有数字CMOS电路的最小单元,你随便翻开一颗芯片的逻辑版图,密密麻麻的电路最终都能拆成反相器的组合。
反相器电路图非常简单:上面一只PMOS,下面一只NMOS,两只管子的栅极连在一起作为输入,漏极连在一起作为输出。PMOS的源极接VDD,NMOS的源极接GND。用文字画出来大概是这个样子:
VDD | PMOS(M1) | IN ─────┤ | NMOS(M2) | GND | OUTIN接0V时,NMOS的栅源电压为0,处于关断状态;PMOS的栅源电压是0-VDD,也就是负的电源电压,PMOS导通,输出被拉到VDD,所以输出为高电平。
IN接VDD时,情况完全反过来。PMOS关断,NMOS导通,输出被拉到GND,输出为低电平。
这就是“反相”的由来:输入高,输出低;输入低,输出高。而且这个过程中,从VDD到GND始终没有形成一条完整的直流通路。也就是说,反相器稳态工作时几乎没有静态电流,只有翻转瞬间才会有充放电电流。这是CMOS功耗低的核心原因,也是它能把几亿甚至上百亿个晶体管塞进一颗芯片的前提。
实际看反相器电路图的时候,很多人会忽略衬底连接。PMOS的bulk要接VDD,NMOS的bulk要接GND。在LTSpice里仿真如果不接好衬底,电路逻辑看起来对,但某些瞬态特性会差得很离谱。
2.2 从反相器到逻辑门:CMOS逻辑门怎么搭
有了反相器,就可以往上搭与非门、或非门,再往上搭各种组合逻辑和时序逻辑。
CMOS与非门(NAND)的搭法:NMOS串联、PMOS并联。两个NMOS串在输出到地之间,两个PMOS并在一起接在输出到VDD之间。只有当两个输入都是高电平时,两个NMOS才同时导通,输出才会被拉到低电平;只要有一个输入是低电平,对应的PMOS导通,输出就是高电平。这个逻辑正好就是“输入全1,输出为0”。
CMOS或非门(NOR)的搭法反过来:NMOS并联、PMOS串联。只要有一个输入是高电平,对应的NMOS就导通,输出被拉低;只有当两个输入都是低电平时,两个PMOS同时导通,输出才为高。
搭逻辑门时有个规律很好记:看NMOS网络。NAND里NMOS串联,所以叫“串得越深越难拉低”;NOR里NMOS并联,所以“一条通就全低”。这背后其实反映了CMOS逻辑门的一个基本约束——NMOS负责把输出拉向地,PMOS负责把输出拉向电源,逻辑功能由NMOS网络决定,PMOS网络是它的对偶。
2.3 宽长比不是随便定的
版图里的PMOS一般比NMOS宽,这一点从反相器就开始体现了。
原因是硅材料里空穴的迁移率比电子低,大致只有电子的一半到三分之一。为了让PMOS和NMOS在导通时能力相当,PMOS的宽长比(W/L)通常要做成NMOS的两到三倍。平衡的目的是让反相器的上升时间和下降时间尽量接近,这样逻辑门的噪声容限和延迟特性才对称。
在旧工艺节点,常见的设计是NMOS取W=1u,PMOS取W=2u左右。到了深亚微米工艺,还要考虑沟道长度调制效应和饱和电流,实际尺寸要靠仿真扫描决定,不能只靠经验拍脑袋。
3. 版图与截面图:芯片设计的物理真相
3.1 截面图:把芯片切开看
电路图只告诉你晶体管怎么连,但芯片上的物理结构得靠截面图来理解。很多初学者第一次看CMOS截面图时容易被一堆层次吓到,其实就是“三明治”结构:底部是衬底,中间是栅极氧化物和栅极导电层,再加上源漏区、隔离区、金属连线。
典型的CMOS截面结构大概是这样的:
- 最底下是P型硅衬底,它既是所有NMOS的公共“地”,也是整个芯片的机械支撑。
- 中间挖出一个N阱(N-well),PMOS坐在N阱里,因为PMOS的源漏是P型,需要N型隔离区隔开。
- NMOS直接做在P型衬底上,源区和漏区是N+注入。
- PMOS源漏是P+注入,和N阱形成一个独立的“岛”。
- 栅极上面是一层很薄的二氧化硅,再上面是多晶硅栅极。
- 器件之间用STI浅沟槽隔离隔开,防止相邻晶体管互相干扰。
- 最上面几层是金属互连,通过接触孔和通孔把晶体管接到一起。
截面图告诉你一个关键事实:NMOS和PMOS不是随便放的。PMOS必须放在N阱里,N阱外面必须有足够的阱边界,否则阱和衬底之间会形成寄生的PNP或NPN结构。很多新手画版图时只管把管子对齐,忘了阱间距,结果DCR报错或者流片回来漏电严重,都是吃了截面图没理解的亏。
3.2 版图:把物理设计画成规则
版图是截面图在二维平面上的投影。画版图的时候,你看到的不是一根根连续导线,而是一层层多边形版。
一个CMOS反相器版图的核心层次包括:
- 有源区:决定NMOS和PMOS的沟道和源漏区域。
- 多晶硅:横跨有源区的那条“栅”就是多晶硅,它和有源区交叉的地方形成了晶体管。
- N阱:圈住PMOS的矩形区域。
- N+和P+注入:决定哪些有源区是N型掺杂,哪些是P型掺杂。
- 接触孔和金属层:把源、漏、栅、VDD、GND这些端点连出去。
画反相器版图时,我习惯先用X轴把PMOS和NMOS放在上下两侧,中间留出输出金属线的位置,然后让PMOS和NMOS的栅多晶硅完全对齐。栅对齐能减少多晶硅拐弯带来的寄生电容和版图面积浪费,对高频和低功耗设计都有好处。流片经验多了以后你会发现,版图不只是把电路画对,更是在画“电阻、电容和寄生器件”的分布图。
3.3 版图设计中的几个大坑
第一个坑是闩锁效应。CMOS结构天然存在PNPN四层结构,它等效于一个可控硅。如果某个噪声脉冲把N阱和衬底之间的寄生三极管触发导通,VDD和GND之间就会出现低阻抗短路,芯片直接烧掉。常规办法是加guard ring保护环,PMOS外围用N阱环接VDD,NMOS外围用P+环接GND,把寄生电流挡在局部。
第二个坑是天线的工艺损伤。ICP刻蚀过程中,大面积的金属或多晶硅会像天线一样收集电荷,把薄栅氧打穿。版图设计规则里通常有天线比检查,超过限制就得跳线换层,或者在栅附近加保护二极管。
第三个坑是匹配。模拟电路里做差分对,两个晶体管的尺寸、方向、周围环境必须尽量一致。简单的做法是用叉指结构并联拆分,让中心对称,保持dummy管。数字电路对匹配要求低一点,但也不是随便摆,尤其是SRAM的位单元和图像传感器里的像素源跟随器,失配直接体现在画质上。
4. 从逻辑门到D触发器:时序电路是怎么来的
4.1 为什么需要D触发器
反相器、与非门、或非门都属于组合逻辑,它们的输出只取决于当前输入。但真正的数字系统不能全是组合逻辑,因为CPU执行指令需要“记住”中间状态,流水线需要按节拍传递数据,控制器需要知道现在处在哪一步。这些功能都得靠时序电路,而时序电路最经典的基本单元就是D触发器。
D触发器的作用一句话:在时钟边沿到来时,把输入D的值“锁”到输出Q,边沿之外的时间输出保持不变。它让数据在时钟的指挥下规规矩矩地移动,这就是同步设计的核心思想。
4.2 用CMOS逻辑门搭D触发器的逻辑图
最常见的D触发器是主从结构,两个锁存器串在一起。网上搜“CMOS逻辑门构成D触发器逻辑图”,看到的基本都是这个结构:输入先经过一个传输门进入主锁存器,主锁存器的输出再经过另一个传输门进入从锁存器。
以上升沿触发为例:
- 时钟CLK为低时,主锁存器透明,D的值进到主锁存器内部节点A,但此时从锁存器保持,输出Q不变。
- 时钟CLK为高时,主锁存器转入保持状态,传输门断开,D的新值进不来;同时从锁存器透明,把主锁存器保存的值传到Q。
- 于是整个电路只在CLK从低变高那一刻“采样”D,之后即使D继续变化,Q也不受影响。
如果用传输门和反相器画逻辑图,关键就是两组传输门的时钟相位要相反。实际电路里通常还需要一个反相器产生CLKN,再经过一两级缓冲驱动多个传输门,不然时钟负载太重,触发器的翻转速度会慢。
4.3 时序参数:setup、hold和传输门
D触发器最常被问到的参数是建立时间和保持时间。建立时间指数据必须在时钟边沿之前稳定多长时间,保持时间指时钟边沿之后数据还必须稳定多长时间。这两个时间和传输门、反相器的尺寸强相关。沟道越长、负载越大,翻转就越慢,建立时间要求就越长;传输门关断越慢,保持时间可能就越差。
所以芯片设计里,D触发器不是随便“抄一个电路”就行。标准单元库里通常有几套尺寸不同的D触发器,有的是高速型,有的是低功耗型,有的是可测试型,选择时要综合考虑时序余量、面积和功耗。
5. LTSpice仿真CMOS反相器:用免费工具验证原理
5.1 为什么选LTSpice
很多学生想仿真CMOS电路,第一反应是找Cadence或Synopsys的EDA工具,但那些工具授权贵、环境重、上手慢。LTSpice虽然名字带个LT,但它完全可以仿真通用MOS管,关键是免费、轻量、跨平台,还内置了波形查看器。我到现在项目前期做概念验证,也经常开一个LTSpice直接搭反相器看波形。它的精度不如工业级Spectre,但用来理解原理足够了。
5.2 在LTSpice里搭一个CMOS反相器
打开LTSpice,新建一个原理图,放置两个NMOS/PMOS器件、两个电压源和一个脉冲输入源。连接关系:PMOS的源极和衬底接VDD,NMOS的源极和衬底接GND,两个栅极接输入IN,两个漏极接输出OUT。
如果不想用图形界面拖元器件,可以直接写网表。最简单的模型文件这样写:
M1 OUT IN VDD VDD PMOS W=2u L=0.18u M2 OUT IN 0 0 NMOS W=1u L=0.18u V1 IN 0 PULSE(0 1.8 0 1n 1n 20n 40n) V2 VDD 0 1.8 C1 OUT 0 20f .tran 100n .model NMOS NMOS (VTO=0.5 KP=200e-6) .model PMOS PMOS (VTO=-0.5 KP=80e-6) .backanno .endPULSE参数的意思是:从0V开始,经过1ns上升沿到1.8V,保持20ns高电平,再经过1ns下降沿到0V,整个周期40ns。这里电源电压设成1.8V是常见的180nm节点电压。C1是输出负载电容,我习惯加20fF到50fF,模拟下一级电路的输入电容和连线电容,不然仿真出来的波形太理想。
跑完瞬态仿真,你会看到OUT和IN正好反相,而且波形边缘不是垂直的,而是有斜率的充放电曲线。输出从1.8V往下降的过程,是NMOS把负载电容里的电荷拉走;输出从0V往上升的过程,是PMOS给负载电容充电。两个过程的快慢分别决定了下降延迟和上升延迟。
5.3 怎么从波形判断反相器性能
看反相器波形,我一般重点看三个地方。
第一是阈值点。输入从0到1.8V变化时,输出翻转的位置应该在0.9V附近。如果翻转点偏移很多,说明PMOS和NMOS的驱动能力不平衡。可以通过调节宽长比让翻转点回到VDD/2。
第二是上升下降时间。上升时间是从输出10%到90%VDD的时间,下降时间是从90%到10%。在180nm工艺下,带20fF负载的反相器,这个值通常在几十到一两百皮秒量级。如果下降时间明显比上升时间长,就说明NMOS太弱,或者PMOS尺寸过大、负载太重。
第三是静态功耗。稳态时VDD到GND之间应该没有直流通路,所以看电源电流时,除了开关瞬间的尖峰,静态电流应该接近零。如果你仿真发现VDD上持续有大电流,多半是某个管子模型接反了,比如PMOS的源漏接反,或者衬底电位接错。
LTSpice里还可以用.meas语句自动测延迟:
.meas tran tphl trig V(in) val=0.9 rise=1 targ V(out) val=0.9 fall=1 .meas tran tplh trig V(in) val=0.9 fall=1 targ V(out) val=0.9 rise=1这里的tphl是输入上升、输出下降的传播延迟,tplh是输入下降、输出上升的传播延迟。两个延迟越接近,说明反相器做得越“正”。我做版图前后对比时,最喜欢用这两条语句看寄生电容带来的延迟增量。
6. 现代应用:图像传感器与嵌入式CMOS
6.1 CMOS图像传感器为什么能取代CCD
上世纪八九十年代,CCD是图像传感器的主流,CMOS图像传感器被认为噪声大、灵敏度差。后来CMOS工艺一路狂奔,像素内放大器、相关双采样、噪声抑制这些技术一个个落地,CMOS图像传感器的画质才追了上来,最后直接反超CCD。
CMOS图像传感器的核心优势不在单点画质,而在系统集成度。CCD的像素阵列和读出电路是分开的,驱动时序复杂,还得靠外部专用芯片配合。CMOS图像传感器则可以把像素阵列、行列驱动、模数转换器、数字逻辑、甚至ISP都做到同一颗芯片上。这就是“片上相机”的概念。手机摄像头模组能做得这么小,很大程度靠的是CMOS方案的高集成度。
现代高端CMOS图像传感器还采用了背照式和堆叠式结构。背照式让光从芯片背面入射,不受正面金属连线和晶体管遮挡;堆叠式把像素阵列和逻辑电路分成上下两层晶圆后再键合,像素层的面积可以专门做大光电二极管,逻辑层用更先进的工艺节点跑高速读出。这也是为什么现在的手机能拍4K 120帧,还能做实时HDR。
6.2 嵌入式CMOS:藏在MCU里的“隐形工艺”
“嵌入式CMOS”这个词在不同场景下含义略有不同,但大体上指两类事情:一类是CMOS工艺被嵌入到各种专用芯片里,另一类是嵌入式系统工程师需要在MCU层面理解CMOS电路的输入输出特性。
绝大多数MCU本身就是在CMOS工艺上制造的。你看到的GPIO、定时器、ADC、SPI、I2C,本质都是芯片内部CMOS晶体管和CMOS逻辑门的一种对外呈现。比如GPIO的推挽输出,实际上就是一个反相器的放大版:PMOS拉高、NMOS拉低,只是驱动能力更大。理解了这个,你就知道为什么GPIO输出高电平时不能直接接到地,为什么推挽输出和开漏输出的区别这么大。
嵌入式设计里还有一个常见场景是CMOS图像传感器接入MCU或应用处理器。这里要关心的不是传感器内部的像素工艺,而是它的MIPI接口时序、I2C配置寄存器、曝光控制和帧同步信号。很多嵌入式工程师第一次调摄像头,踩坑都踩在这些地方:上电时序没按datasheet来,MIPI时钟线上的阻抗没匹配好,或者是把reset和power-down引脚电平搞反。底层CMOS逻辑门怎么工作,反而成了调试问题时的“内功”。
6.3 从平面到FinFET再到GAA:工艺演进带来的挑战
CMOS工艺并没有停在平面晶体管时代。到了28nm以下,短沟道效应越来越严重,传统的平面MOS管漏电控制不住了,于是出现了FinFET。FinFET把沟道做成了立体的鳍状结构,栅极从三面抱住沟道,对沟道的控制能力比平面结构强得多。这也是英特尔、台积电、三星在先进节点普遍采用的方案。
再往下走,几纳米节点开始转向GAA全环绕栅极。沟道变成一层层纳米片,栅极四面八方包裹住沟道,静电控制更强。工艺演进带来的直接后果是电路设计难度大增:寄生电容更复杂,器件失配更难预测,电源电压一路降低导致噪声余量更紧张。所以现在做高端芯片,必须“设计+工艺”一起优化,光会画逻辑图已经不够了。
对普通硬件玩家来说,这些先进节点可能离得比较远,但有一个趋势非常明显:数字电路设计越来越像“搭积木”,标准单元库和EDA工具把底层CMOS物理细节封装得越来越严实。越是这样,越要理解CMOS的基本逻辑和版图思维,否则出了问题只会改“积木”,不知道“积木”在物理上为什么会歪。
7. 常见问题与排查技巧实录
7.1 反相器输出波形出现“平台”或“慢慢爬”
仿真结果里输出不是干脆地翻转,而是在中间位置停留很久,或者波形斜率明显不一致。最常见原因是输入信号的上升沿太慢,两个管子有一段时间同时导通,形成了从VDD到GND的瞬间直流通路。这种情况叫穿通电流或shoot-through,虽然不高,但在高速电路里会明显增加功耗。
解决办法之一是缩短输入信号上升下降时间,之二是在反相器后面加一级缓冲。实际芯片里,时钟这种高频信号不会直接驱动一堆大管子,都是经过多级反相器逐级放大驱动能力的。尺寸比一般取3到4倍逐级递增,这样既能保证驱动能力,又不会让每级翻转速度差太多。
7.2 LTSpice仿真不收敛或波形乱跳
我经常看到有人搭好LTSpice反相器后,仿真报错“Time step too small”。最常见的三个原因:
- 模型参数太极端,比如KP设得特别大,导致电流变化太快,仿真器步长被迫缩到极小。
- 器件衬底没有接正确,出现莫名其妙的浮空节点。
- 电路里存在没有初始条件的反馈回路,这时可以加一条
.ic V(OUT)=0.9给初始电压,或者把最大步长设小。
另外,PMOS和NMOS的极性容易在LTSpice里搞混。LTSpice里放置PMOS时,默认模型名称如果是PMOS,那源和漏的标注方式跟教科书上的符号视觉上有区别。我一般是建完原理图后先跑一遍直流工作点,看每个管子处于什么工作区,再跑瞬态。这样排错比直接盯波形快得多。
7.3 D触发器功能正常但时序跑不过
逻辑图看起来没问题,仿真功能也对,但一到时序收敛就崩。常见原因是我前面提到的传输门尺寸和时钟负载不平衡。主从D触发器里,CLK和CLKN两个信号各自驱动的传输门数量不一样,如果不做时钟缓冲,保持时间会变得很差。
另一种情况是输入数据D在CLK边沿附近同时变化。数字设计里这叫竞争冒险,表现是触发器偶尔采样到旧值。解决办法要么让D的路径尽量短且延迟稳定,要么在数据路径上加延迟单元,要么干脆换用带内置延迟的锁存器结构。从版图角度看,D触发器的输入输出走线要粗短直达,避免长走线引入大寄生电容。
7.4 快速排查表
这里整理一张表,是我平时排查CMOS电路问题时的常用思路,适合新手直接对照:
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| 输出一直固定高 | NMOS没导通或模型接错 | 查输入电平和NMOS栅源电压 |
| 输出一直固定低 | PMOS没导通或模型接错 | 查输入电平和PMOS栅源电压 |
| 上升慢下降快 | PMOS偏弱 | 增大PMOS宽长比 |
| 下降慢上升快 | NMOS偏弱 | 增大NMOS宽长比 |
| 静态电流很大 | 存在直流通路或闩锁 | 检查晶体管工作区和衬底接法 |
| 仿真不收敛 | 浮空节点或步长太小 | 加.ic、加GND参考、改maxstep |
| D触发器采样错误 | 建立保持时间不足 | 查时钟树延迟和数据路径延迟 |
| 版图DRC报阱间距错 | N阱/ P阱边界不够 | 查设计规则手册里的well enclosure |
这张表不解决所有问题,但能帮你把“从哪开始查”这个最头疼的问题先解决掉。
我个人在实际操作中的体会是:CMOS这个东西,越往底层挖越有趣,但也越容易卡在细节上。画反相器时,两只管子就是那么一摆,逻辑功能瞬间就通;可一上版图,阱、隔离、接触孔、寄生电容全冒出来了。每次带新人,我都让他们先用LTSpice把反相器波形调对称,再去画一个版图跑DRC,最后回来看D触发器逻辑图喊一声“原来传输门是用在这里的”。这一套流程走完,CMOS就不再是教科书上那张静态的截面图,而是一套能真正跑起来的思维方式了。