
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的源极接VDDNMOS的源极接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要接VDDNMOS的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取W1uPMOS取W2u左右。到了深亚微米工艺还要考虑沟道长度调制效应和饱和电流实际尺寸要靠仿真扫描决定不能只靠经验拍脑袋。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阱环接VDDNMOS外围用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的源极和衬底接VDDNMOS的源极和衬底接GND两个栅极接输入IN两个漏极接输出OUT。如果不想用图形界面拖元器件可以直接写网表。最简单的模型文件这样写M1 OUT IN VDD VDD PMOS W2u L0.18u M2 OUT IN 0 0 NMOS W1u L0.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 (VTO0.5 KP200e-6) .model PMOS PMOS (VTO-0.5 KP80e-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) val0.9 rise1 targ V(out) val0.9 fall1 .meas tran tplh trig V(in) val0.9 fall1 targ V(out) val0.9 rise1这里的tphl是输入上升、输出下降的传播延迟tplh是输入下降、输出上升的传播延迟。两个延迟越接近说明反相器做得越“正”。我做版图前后对比时最喜欢用这两条语句看寄生电容带来的延迟增量。6. 现代应用图像传感器与嵌入式CMOS6.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参考、改maxstepD触发器采样错误建立保持时间不足查时钟树延迟和数据路径延迟版图DRC报阱间距错N阱/ P阱边界不够查设计规则手册里的well enclosure这张表不解决所有问题但能帮你把“从哪开始查”这个最头疼的问题先解决掉。我个人在实际操作中的体会是CMOS这个东西越往底层挖越有趣但也越容易卡在细节上。画反相器时两只管子就是那么一摆逻辑功能瞬间就通可一上版图阱、隔离、接触孔、寄生电容全冒出来了。每次带新人我都让他们先用LTSpice把反相器波形调对称再去画一个版图跑DRC最后回来看D触发器逻辑图喊一声“原来传输门是用在这里的”。这一套流程走完CMOS就不再是教科书上那张静态的截面图而是一套能真正跑起来的思维方式了。