
1. 从器件到电路为什么选择LTspice复现CMOS特性曲线很多刚接触模拟电路或者半导体物理的朋友在课本上看到NMOS和PMOS的转移特性、输出特性曲线时总觉得那些平滑的抛物线像是凭空画出来的。老师讲的时候好像很简单什么“栅压超过阈值就导通”、“漏源之间形成沟道”但真到自己动手画的时候往往一头雾水。我当年学模电的时候也是这样直到后来逼着自己用LTspice把每一根曲线都跑了一遍才真正把书本上的公式和实际波形对应起来。LTspice这款仿真软件可以说是模拟电路入门的“神器”。它免费、体积小、安装快而且自带大量经典器件模型比如我们这次要用的NMOS和PMOS。你不用去装几个G的Cadence也不用折腾复杂的PDK打开软件就能开始跑仿真。对于想理解CMOS反相器工作原理、想看NMOS和PMOS到底怎么互补工作的朋友来说LTspice是最短路径。这篇文章我会从最基础的NMOS/PMOS单管特性仿真开始一步步带你搭出CMOS反相器跑出它的电压传输特性曲线VTC再深入看它的动态响应和功耗特性。整个过程我会把每个参数为什么这么设、每个步骤背后的意图讲清楚让你不仅会点鼠标还能明白为什么要这么点。适合刚学模电的学生、想转行IC设计的工程师或者单纯对CMOS反相器好奇的硬件爱好者。2. 先搞懂器件NMOS和PMOS到底怎么工作2.1 NMOS的导通条件与工作原理NMOS全称N沟道金属氧化物半导体场效应管。它的核心结构是在P型衬底上做两个N型掺杂区分别叫源极Source和漏极Drain中间用一层很薄的二氧化硅绝缘层隔开上面盖一层多晶硅作为栅极Gate。当栅极电压Vgs大于阈值电压Vth时栅极下方的P型衬底表面会聚集电子形成一层N型反型层也就是我们说的“沟道”。这时候源漏之间就导通了电流可以从漏极流向源极。这里有个关键点NMOS的导通条件是Vgs Vth而且Vgs必须是正电压。比如一个典型的NMOSVth大约是0.7V那么当Vgs1.8V时沟道充分形成导通电阻很小。当Vgs0V时沟道消失源漏之间相当于两个背靠背的二极管只有极小的漏电流。在实际仿真中我建议你先固定Vds为一个较小的值比如0.1V然后扫描Vgs从0到1.8V观察Id的变化。你会看到一条从几乎为零开始到Vgs超过Vth后迅速上升的曲线这就是转移特性曲线。然后再固定几个不同的Vgs值扫描Vds从0到1.8V观察Id的变化你会看到输出特性曲线——在Vds较小时Id线性上升线性区Vds增大到一定程度后Id基本不变饱和区。2.2 PMOS的导通条件与工作原理PMOS正好反过来。它是在N型衬底上做两个P型掺杂区作为源漏栅极加负电压时栅极下方的N型衬底表面会聚集空穴形成P型反型层。所以PMOS的导通条件是Vgs Vth注意这里的Vth是负值。比如一个PMOS的Vth-0.7V那么当Vgs-1.8V时Vgs Vth沟道形成源漏导通。很多初学者容易搞混PMOS的电压极性。我教你一个简单记法PMOS的源极通常接高电位栅极电压比源极低一个阈值以上就导通。比如源极接1.8V栅极接0V那么Vgs-1.8V远小于Vth-0.7V所以导通。如果栅极也接1.8VVgs0V大于Vth所以截止。在LTspice里仿真PMOS时要注意电压源的接法。通常把源极接VDD漏极通过电阻接地栅极接扫描电压。扫描Vg从0到VDD观察Id。你会看到当Vg接近VDD时Vgs接近0PMOS截止当Vg降低到VDD-|Vth|以下时PMOS开始导通。2.3 NMOS和PMOS的核心区别对比特性NMOSPMOS衬底类型P型N型源漏掺杂N型P型导通条件Vgs Vth正阈值Vgs Vth负阈值载流子电子空穴电子迁移率高约空穴的2-3倍低导通电阻较小较大典型应用低侧开关、下拉网络高侧开关、上拉网络防倒灌寄生二极管从源到漏寄生二极管从漏到源这个表格里的信息非常关键。NMOS的电子迁移率高所以同样尺寸下NMOS的导通电阻比PMOS小驱动能力更强。这也是为什么在CMOS反相器里PMOS的宽度通常要做得比NMOS宽一般取2到3倍就是为了平衡两者的驱动能力让反相器的上升沿和下降沿时间接近。3. LTspice仿真环境搭建与单管特性曲线复现3.1 LTspice的获取与基础设置LTspice的安装没什么好说的去官网下载对应系统的版本一路下一步就行。安装完之后建议做几个基础设置在Tools菜单里找到Control Panel把Waveforms里的“Plot data with thick lines”勾上这样曲线看起来更清楚在Simulation里把默认的仿真时间改长一点比如10ms避免跑瞬态的时候还没稳定就结束了。新建原理图之后按快捷键F2调出元件库。LTspice自带的标准元件库里有nmos和pmos的通用模型分别是“nmos”和“pmos”。但我要提醒你这些通用模型的参数非常理想化阈值电压默认是0V跨导参数也是随便设的。如果你想复现教科书上那种典型的特性曲线最好用具体的器件模型比如2N7002NMOS和BSS84PMOS这些在LTspice的元件库里都能找到。3.2 NMOS转移特性曲线仿真步骤先来搭NMOS的转移特性测试电路。从元件库拿一个NMOS比如2N7002源极接地漏极通过一个1kΩ的电阻接VDD比如1.8V栅极接一个电压源Vg。然后设置Vg为直流扫描从0V扫到1.8V步长0.01V。在漏极和电阻之间放一个电压探针或者直接看漏极电流。LTspice里看电流有个小技巧把鼠标悬停在元件引脚上鼠标变成电流表图标时点击就能把该支路的电流加到波形窗口里。对于NMOS我想看的是Id随Vgs的变化所以直接点漏极引脚选I(D)就行。跑完仿真你会看到一条典型的转移曲线Vgs从0到0.7V左右Id几乎为零只有皮安级的漏电流Vgs超过0.7V之后Id开始指数上升Vgs到1.5V以上Id上升变缓进入线性区。这条曲线和课本上画的几乎一模一样但这是你自己跑出来的感觉完全不一样。注意LTspice默认的MOS模型可能没有考虑亚阈值区的精确行为如果你发现曲线在Vth以下下降得太快可以在模型参数里加上亚阈值斜率相关的参数或者换用更精确的模型。3.3 PMOS转移特性曲线仿真步骤PMOS的测试电路稍微改一下。源极接VDD1.8V漏极通过1kΩ电阻接地栅极接电压源Vg。扫描Vg从0到1.8V。当Vg0时Vgs-1.8VPMOS充分导通Id最大当Vg1.8V时Vgs0VPMOS截止Id接近零。在LTspice里看PMOS的电流方向要注意电流是从源极流向漏极的所以如果你点漏极引脚看电流可能会看到负值。这没关系取绝对值就行。或者你可以把电流探针放在电阻上看流过电阻的电流方向更直观。跑出来的曲线应该是Vg从0到1.1V左右Id基本不变处于饱和导通状态Vg超过1.1V之后Id迅速下降Vg到1.8V时Id几乎为零。这条曲线和NMOS的转移曲线正好左右镜像这就是互补的直观体现。3.4 输出特性曲线族仿真方法转移特性看的是Vgs对Id的控制输出特性看的是Vds对Id的影响。在LTspice里跑输出特性曲线族需要嵌套扫描。具体操作是把Vgs设成一个直流扫描变量同时把Vds也设成扫描变量。LTspice支持这种嵌套扫描在Simulate菜单里选Edit Simulation Cmd然后分别设置两个直流扫描指令。比如先设Vds从0扫到1.8V步长0.01V再设Vgs从0.8V扫到1.8V步长0.2V。跑完之后你会得到一组曲线每条曲线对应一个Vgs值。在Vds较小时Id随Vds线性上升这是线性区Vds增大到Vgs-Vth之后Id基本不变这是饱和区。把不同Vgs的曲线叠在一起就是教科书上那张经典的输出特性曲线族。我实测下来用2N7002模型跑出来的曲线和课本上的形状非常接近但饱和区的斜率比理想模型大一些这是因为实际器件有沟道长度调制效应。如果你想看到更理想的曲线可以把沟道长度调制系数设小一点。4. CMOS反相器电路搭建与静态特性仿真4.1 CMOS反相器的电路结构与工作原理CMOS反相器的结构非常简单一个PMOS和一个NMOS串联PMOS的源极接VDDNMOS的源极接地两个栅极连在一起作为输入端两个漏极连在一起作为输出端。当输入为低电平时NMOS截止PMOS导通输出被PMOS拉到VDD所以输出高电平当输入为高电平时NMOS导通PMOS截止输出被NMOS拉到地所以输出低电平。这个结构的美妙之处在于无论输入是高还是低总有一个管子是截止的所以静态功耗几乎为零。只有输入电压在阈值附近时两个管子同时导通才会有一瞬间的短路电流。这也是为什么CMOS电路功耗低的核心原因。在LTspice里搭这个电路PMOS用BSS84NMOS用2N7002。VDD设1.8V输入端接一个电压源Vin输出端接一个1pF的电容模拟负载。先跑直流扫描看电压传输特性。4.2 电压传输特性曲线VTC仿真与关键参数提取直流扫描Vin从0到1.8V步长0.01V观察Vout的变化。跑出来的曲线就是CMOS反相器的电压传输特性曲线简称VTC。这条曲线有几个关键点VOH输出高电平当Vin0时Vout接近VDD实测大约1.79V因为PMOS有微小的导通电阻。VOL输出低电平当VinVDD时Vout接近0V实测大约0.01V。VIL输入低电平的最大值也就是曲线开始下降的拐点大约在0.6V左右。VIH输入高电平的最小值曲线开始平坦的拐点大约在1.2V左右。VM开关阈值VoutVin时的输入电压大约在0.9V左右。VM这个点特别重要它决定了反相器的抗噪声能力。理想情况下VM应该等于VDD/2但实际中由于NMOS和PMOS驱动能力的差异VM会偏离。如果你发现VM偏了可以通过调整PMOS的宽度来修正。比如PMOS太弱VM会偏低把PMOS的W加大就能把VM拉回来。在LTspice里提取这些参数可以用Measure指令。比如在Simulate菜单里选Edit Simulation Cmd然后加一行“.meas DC VM FIND V(out) WHEN V(out)V(in)”跑完仿真后在View菜单里选SPICE Error Log就能看到VM的值。这个方法比手动看波形精确得多。4.3 反相器阈值电压的调整与优化刚才说了VM由NMOS和PMOS的相对驱动能力决定。驱动能力和什么有关和载流子迁移率、氧化层电容、宽长比都有关系。电子迁移率大约是空穴的2到3倍所以同样宽长比下NMOS比PMOS强。为了让VM接近VDD/2PMOS的宽度通常要取NMOS的2到3倍。在LTspice里你可以直接修改MOS模型的W参数。比如NMOS的W1uPMOS的W2.5u。改完之后重新跑直流扫描看VM是不是更接近0.9V了。如果还偏继续调直到VM落在0.85V到0.95V之间。这里有个经验不要只调WL也可以调。增大L会降低驱动能力但也会增大寄生电容。通常先调WW调到头了再考虑调L。另外如果你用的是具体的器件模型比如2N7002和BSS84它们的W/L是固定的你改不了。这时候你可以用LTspice的“m”参数也就是并联器件数量来等效调整驱动能力。比如PMOS的m2就相当于两个PMOS并联驱动能力翻倍。5. 动态特性与功耗仿真让反相器真正“动”起来5.1 瞬态仿真设置与上升/下降时间测量静态特性看完了接下来让反相器动起来。把Vin改成脉冲电压源参数设成初始0V脉冲高电平1.8V上升时间1ns下降时间1ns脉冲宽度10ns周期20ns。仿真时间设40ns最大步长设0.01ns保证波形足够精细。跑完瞬态仿真你会看到输出波形是输入的反相但边沿不是垂直的而是有一定的上升时间和下降时间。上升时间定义为输出从0.1VDD上升到0.9VDD所需的时间下降时间类似。在LTspice里可以用Measure指令自动测量“.meas TRAN Trise TRIG V(out) VAL0.18 RISE1 TARG V(out) VAL1.62 RISE1”。我实测下来用2N7002和BSS84搭的反相器在1.8V供电、1pF负载下上升时间大约2ns下降时间大约1ns。下降时间比上升时间短因为NMOS比PMOS强。如果你把PMOS的m改成2上升时间会明显缩短两者会更接近。5.2 动态功耗与短路电流分析CMOS反相器的功耗分两部分动态功耗和短路功耗。动态功耗是给负载电容充放电消耗的公式是PCV²f。短路功耗是输入在阈值附近时NMOS和PMOS同时导通从VDD到地有一条直通路径产生的电流消耗。在LTspice里看短路电流可以把VDD的电流加到波形窗口里。你会看到在输入跳变的时候VDD电流有一个尖峰这就是短路电流。尖峰的宽度和输入信号的上升/下降时间有关输入边沿越陡短路电流持续时间越短平均短路功耗越小。我试过把输入上升时间从1ns改成10ns短路电流的尖峰明显变宽平均功耗增加了大约30%。所以实际电路设计中输入信号的边沿不能太慢否则短路功耗会显著增加。但也不能太快太快会导致过冲和振铃。一般取上升时间在1ns到5ns之间比较合适。5.3 负载电容对传播延迟的影响传播延迟是指输入跳变到输出跳变之间的时间差。在LTspice里你可以把负载电容从1pF改成2pF、5pF、10pF分别跑瞬态仿真看传播延迟怎么变。你会发现延迟和负载电容基本成正比电容越大延迟越大。这个规律可以用一个简单公式解释tpd ≈ 0.7 × Req × CLoad其中Req是等效导通电阻。NMOS的Req大约是几百欧姆PMOS的Req大约是NMOS的2到3倍。所以上升延迟比下降延迟大因为上升时是PMOS在给电容充电PMOS的Req更大。如果你想减小延迟要么减小负载电容要么增大晶体管的驱动能力。增大驱动能力的方法就是加大W或者增加并联数量。但增大W会增大寄生电容所以有个最优值。在LTspice里你可以扫W看延迟的变化找到那个拐点。6. 常见问题与排查技巧实录6.1 仿真不收敛怎么办LTspice仿真MOS电路时最常见的问题就是不收敛。报错信息通常是“Singular matrix”或者“Timestep too small”。遇到这种情况先检查电路有没有悬空的节点比如某个MOS的衬底没接。LTspice里MOS的衬底默认是接地的但PMOS的衬底应该接VDD如果你忘了接就会出问题。另一个常见原因是初始条件没设好。可以在Simulate菜单里选Edit Simulation Cmd在Transient标签页里勾上“Start external DC supply voltages at 0V”让电源从0慢慢升到VDD这样收敛会容易很多。如果还不行把最大步长设小一点比如1ns或者把积分方法从trap改成geargear更稳定但精度稍低。6.2 波形异常与模型参数检查有时候跑出来的波形和预期完全不一样比如NMOS的Id一直是零或者PMOS的Id方向反了。先检查模型参数LTspice里右键点击MOS元件看它的模型名称是不是你想要的。如果你从网上下载了SPICE模型要确保模型文件被正确包含。在LTspice里用“.include”指令把模型文件加进来路径要用绝对路径或者相对路径。还有一个坑是引脚顺序。LTspice里MOS的引脚顺序是D、G、S、B但有些第三方模型的引脚顺序可能不一样。如果你发现波形不对先检查引脚连接。我踩过这个坑一个PMOS的源漏接反了跑出来的曲线完全不对查了半天才发现是引脚顺序的问题。6.3 测量指令不生效的排查Measure指令不生效最常见的原因是语法写错了。LTspice的Measure指令对大小写不敏感但关键字不能拼错。比如“TRIG”和“TARG”必须成对出现“VAL”后面跟的是触发值。如果你写的是“.meas TRAN Trise TRIG V(out) VAL0.18 RISE1 TARG V(out) VAL1.62 RISE1”但输出波形没有上升到1.62V那测量就会失败。排查方法是先看波形确认输出确实达到了你设定的阈值。如果没达到把阈值调低一点。另外Measure指令是在仿真结束后执行的如果你在仿真过程中看Error Log可能还没生成测量结果。等仿真完全结束再看。6.4 常见问题速查表问题现象可能原因解决方法仿真不收敛节点悬空、初始条件不当检查衬底连接、勾选从0V启动Id始终为零模型未包含、引脚接错检查.include指令、核对引脚顺序波形与预期相反PMOS源漏接反交换PMOS的源漏连接Measure不生效语法错误、阈值未达到检查关键字拼写、调整阈值上升时间过长PMOS驱动能力不足增大PMOS宽度或并联数量短路电流过大输入边沿太慢减小输入上升/下降时间7. 从仿真到版图后续可以扩展的方向仿真跑通之后如果你对IC设计感兴趣下一步可以学学版图。CMOS反相器的版图非常经典就是一个P型有源区和一个N型有源区中间是多晶硅栅上面开接触孔连金属。画版图的时候要注意设计规则比如最小线宽、最小间距、接触孔包围等。这些规则每个工艺都不一样但基本思想是相通的。另一个方向是跑后仿真。在版图里提取寄生参数反标到原理图里再跑一次仿真看性能退化了多少。通常后仿真的延迟会比前仿真大20%到50%因为版图里有寄生电容和电阻。这个差距就是你要优化的空间。如果你不想碰版图也可以继续在LTspice里玩。比如把反相器级联起来做成环形振荡器看振荡频率或者把电源电压降到0.5V看反相器还能不能正常工作再或者把温度从27度升到125度看阈值电压怎么漂移。这些实验都能帮你更深入地理解CMOS电路的本质。我个人在实际操作中的体会是仿真最大的价值不是验证你已知的东西而是让你发现你自以为知道但其实不知道的东西。比如我一开始以为CMOS反相器的静态功耗真的是零仿真之后才发现亚阈值漏电流虽然小但在低功耗设计里绝对不能忽略。这种“原来如此”的瞬间才是仿真最迷人的地方。