
做模拟IC设计的人最怕被当场问一句“你这个管子现在工作在哪个区”画电路、跑仿真、出波形看增益多少dB、带宽多少MHz这些都还好办但真要让你指着波形说“现在输入管已经退出饱和了负载管其实还在线性区”没被问住过的人真的不多。我自己第一次用Cadence Virtuoso搭CS放大器就吃过这个亏——DC扫描曲线跑出来很漂亮老板随口一问当场卡壳。后来我把一条VTC曲线和每个管子的工作区逐步对应起来才发现这些信息全都藏在波形里区别只是你看不看得出来。这篇就以电流源负载的共源放大器为例把“从仿真曲线到电路状态”这条链路完整走一遍。我会从电路拓扑、仿真环境搭建设起再到VTC曲线分段、逐管工作区核对、增益和摆幅推导最后补上新手最容易踩的坑。适合刚接触Cadence Virtuoso的在校学生也适合工作两三年但还没认真把波形和工作区对应起来的工程师。1. 先搞清楚我们在剖析什么电路1.1 电流源负载CS放大器的拓扑结构CS放大器全称共源放大器输入从MOS管的栅极进输出从漏极出源极交流接地。电阻负载版本在课本里最常见但实际IC设计里用得更多的是有源负载——用MOS管代替电阻做负载。原因很直接电阻负载想获得高增益电阻值就要做得很大而大电阻在芯片上面积感人工艺误差也大用MOS管做电流源负载输出阻抗天然就是MOS管的ro级别增益能做到几十倍甚至上百倍还不用付出额外面积代价。本文用来演示的电路结构如下输入管M1NMOSW/L 5µm / 180nm负责把Vin的电压变化转换成电流变化。负载管M2PMOSW/L 10µm / 180nm栅极接固定偏置VB作为电流源负载。偏置管M3PMOS二极管连接方式与M2构成电流镜为M2提供栅极偏置VB。基准电流IREF50µA可以用理想电流源也可以用实际偏置电路产生。器件型号尺寸作用M1nch5µ/180n输入放大管M2pch10µ/180n电流源负载M3pch10µ/180n电流镜基准管IREFidc50µA偏置电流基准之所以把M2和M3做成电流镜是为了避免用理想电压源直接偏置PMOS栅极。理想电压源偏置在仿真器里很好用但它掩盖了一个重要事实真实电流镜的输出电流会随漏端电压变化而变化。用电流镜做负载后面分析工作区时才能看到实际电路里负载管状态切换带来的影响。电源电压取1.8V这是180nm工艺的典型工作电压后文所有仿真和分析都基于这个条件。1.2 为什么要死磕工作区工作区不是纸上谈兵它直接决定一个管子是放大器还是电阻是恒流源还是开关。对CS放大器来说增益公式Av -gm × (ro_n || ro_p)能成立的前提是输入管和负载管同时工作在饱和区。一旦任何一方退出饱和输出阻抗急剧下降增益就会从几十倍掉到个位数。更要命的是不同工作区对应的电压转移特性完全不同饱和区里Vout对Vin的变化非常敏感曲线斜率很陡线性区里Vout几乎“黏”在某个低电平上输入怎么变输出都没反应。这本质上就是增益变化的外在表现。我刚学这个电路的时候只关注NMOS输入管的区域总觉得PMOS负载接成电流源就该一直在饱和区。仿真结果一出来上平台那段曲线怎么看都不对劲后来用Cadence Virtuoso打印每个管子的工作区才明白PMOS负载在Vout接近VDD时早就跑到线性区去了。所以这篇的内容与其说是分析电路不如说是在帮你建立一套“看到曲线就能反推管子状态”的直觉。2. 搭建一套能看清楚工作区的仿真环境2.1 Cadence Virtuoso中搭电路与参数设置仿真环境的选择没什么悬念就用Cadence Virtuoso的Schematic Editor ADE L仿真器用Spectre。这套流程在高校和公司都很通用界面版本可能有差异但操作逻辑基本一致。搭电路时建议把实例名改清楚输入管叫M1负载管叫M2电流镜基准管叫M3。别默认用NM0、PM0这种名字后文要从Operating Point里抓取每一只管子的region参量实例名清晰能少很多麻烦。器件从analogLib库和工艺PDK库里调用analogLib里的nmos4、pmos4也可以但工艺PDK里的管子包含更完整的模型仿真结果更贴近真实流片这里使用PDK里的nch和pch。尺寸设置上M1取W5µ、L180nM2取W10µ、L180n。PMOS宽度比NMOS大是因为空穴迁移率大约只有电子的1/2到1/3想让负载管在相同偏置电流下有接近的过驱动电压就需要加大宽长比。M3和M2做1:1镜像尺寸保持一致。IREF在analogLib里用idcDC电流值填50µA。接好电路后先跑一次最基础的DC仿真不要急着扫描。点开ADE L选择Analysis - dc我只勾选“Save DC Operating Point”选项让它把每个管子的工作点信息保存下来。第一次仿真成功说明电路连接、模型定义、网表解析都没问题后面再加扫描才不容易被各种低级错误打断。2.2 两条DC扫描曲线怎么打要让CN放大器各个工作区“现身”最有效的两个仿真操作是扫描输入电压Vin看输出Vout的变化曲线也就是VTC曲线。扫描同一个Vin把输入管、负载管的region参数同时画出来。第一件事很简单。在ADE L里选择Analysis - dcSweep Variable选“Design Variable”变量名写成Vin扫描范围0到1.8V步长设1mV。1mV步长是我自己习惯的推荐值不要嫌密后面找饱和区边界时太粗的步长会让拐点看起来像一条平滑斜线根本定位不准。第二件事是本文的核心操作。很多人只画VTC曲线一个波形窗口里孤零零一根Vout曲线信息量太低了。更好的做法是在Calculator里调用op参数提取函数把M1和M2的region值拉出来getData(M1:region ?result dc) getData(M2:region ?result dc)region是Spectre回传的工作区标识字段通常0表示截止1表示线性区/三极管区2表示饱和区有些工艺库里3表示亚阈值区。把这几个波形叠加在VTC曲线的同一张图里你会看到一条曲线上同时存在着几条阶梯状的状态曲线那种“图纸一下子活过来”的感觉比单独看Vout强太多了。2.3 用Operating Point直接核对曲线是宏观趋势Operating Point才是微观真相。扫描仿真跑完以后返回Schematic编辑器选中M1菜单路径通常是Results - Print - DC Operating PointsSpectre会弹出这个管子完整的直流工作点信息。关键字段如下region工作区编号0、1、2的含义上面说过。vgs、vds、vth直接判断管子状态的三个电压用手算核对最直观。vdsat饱和电压VDS大于它才是真正的饱和区。gm、gds跨导和输出电导算增益时直接取用。我每次做工作区分析都会在典型偏置点打印M1、M2、M3三只管子的OP信息和手算的VGS、VDS比对一遍。仿真值可能和手算有百分之几的偏差但region字段一旦和理论判断不符说明你的手算逻辑或偏置设计有问题趁早查清楚比留着隐患强。3. 从VTC曲线读出五个区域3.1 整条曲线的五种状态把Vin从0扫到1.8VVout曲线横跨低电平到高电平看起来像一个反相的“S”形。以电流源负载CS放大器为例这条曲线可以拆成五个有明确物理意义的状态段段AVin远低于阈值电压时M1截止漏电流近似为0M2没有电流可拉Vout被M2漏电流拉向VDD曲线是一条水平高平台。段BVin刚超过M1阈值M1开始导通并进入饱和区但Vout还很高接近VDD此时M2可能落在线性区边界。输出阻抗没有完全建立曲线斜率开始变化但幅度有限。段CM1和M2同时饱和两条高阻支路对接电路增益达到最大。VTC曲线在这个区间表现为急剧下降的陡峭段这是整个放大器的核心工作区。段DVin继续增大Vout被拉到接近M1的过驱动电压时M1从饱和区进入线性区跨导和输出阻抗急剧下降曲线斜率明显变缓。段EM1深线性区等效导通电阻很低Vout被压到接近地的水平曲线几乎平躺。这五段不是均匀分布的段C往往又窄又陡尤其在高增益电路里可能只有几百毫伏范围。如果你只做粗扫描很可能把这几个区域混成一段那就看不到真正的状态切换点。3.2 曲线斜率与管子状态的对应VTC曲线的斜率本质上就是该工作点下的小信号电压增益也就是dVout/dVin。段C斜率最陡意味着这就是放大器真正“工作”的地方段A和段E斜率接近0说明电路在这个电压区间几乎没有放大能力。在Cadence Virtuoso里可以直接对VTC曲线做导数运算用Calculator的deriv函数deriv(v(/OUT ?result dc))这条命令会返回以Vin为自变量的dVout/dVin曲线。把导数和region曲线叠在一起看能非常清楚地确认C段对应M1region 2且M2region 2的重叠区波形上会同时出现一个负向脉冲状信号峰值处就是增益最大的偏置点。这里有个很关键的经验不要只凭VTC曲线的“肉眼观察”判断边界曲线太陡的时候眼睛根本分不清哪一段是饱和区哪一段只是过渡。正确做法是先用导数曲线标出增益峰值区间再用OP点打印region字段两条证据对齐边界自然浮出来。3.3 工作区判断的对照逻辑我总结了一个最简单的对照表每次分析CS放大器都按这个逻辑来VTC曲线特征输入管M1状态负载管M2状态电路行为上平台Vout≈VDD截止或亚阈值线性/深线性区无放大能力斜率渐增曲线下弯饱和区边缘线性区向饱和区过渡增益开始建立陡峭下降段饱和区饱和区高增益工作区斜率变缓下弯趋平线性区饱和区增益快速跌落下平台Vout≈0深线性区饱和区无放大能力这个表可以直接复用到所有带电流源负载的反相放大器上唯一的区别是具体电压值不同状态序列不会变。4. 逐管验证把曲线翻译成管子的“生理状态”4.1 输入管NMOS的状态轨迹NMOS输入管的栅源电压就是Vin漏源电压就是Vout所以它的状态完全由Vin和Vout两条DC曲线共同决定。用region曲线画出M1的状态你会看到它随Vin增大依次走完截止、饱和、线性三个阶段。当Vin VTH时M1的沟道没有建立起来ID近似为0这就是段A。当Vin刚超过VTHVgs VTH但Vds Vout仍然接近VDD远大于Vgs - VTHM1进入饱和区。饱和区的标志是输出电流基本由Vgs决定对Vds不敏感所以Vout在这个区间对Vin表现出很强的敏感性——饱和区同时也是放大区就是这个原因。随着Vin继续增大Vout被拉低当Vout低到刚好等于Vin - VTH时M1到达饱和区到线性区的边界。继续增加VinVds小于Vgs - VTHM1进入线性区此时它更像一个压控电阻ID主要由Vds决定Vout的变化斜率急剧变缓。要注意的是在段C到段D的过渡区里M1的region字段会从2跳到1这个跳变点就是线性区边界也是输出电压下限的物理来源。4.2 负载管PMOS的状态轨迹PMOS负载管是这篇文章里最容易被忽视的角色。它的栅极接固定电压VB源极接VDD所以它的Vsg是固定的变化的是它的Vds VDD - Vout。也就是说Vout的状态直接决定了PMOS负载管的工作区。当Vout非常接近VDD时PMOS的|Vds|很小小于|Vsg| - |Vthp|它处于线性区。这就是段A和段B的一部分你以为是“NMOS截止所以输出被拉高”实际上PMOS在线性区时只是一个电阻如果它没有导通足够的电流Vout根本不会稳定在VDD附近。只有当Vout降到足够低让|Vds| |Vsg| - |Vthp|PMOS才进入饱和区表现出恒流源特性。这个状态切换通常发生在VTC曲线从水平段转入陡峭下降段的拐弯处。很多教材把CS放大器的上平台简单归因于“NMOS截止”这个说法在定性层面没错但放到工作区分析里就不够精确。你打开PMOS的region曲线会看到在Vout≈VDD那一段M2的region是1而不是2。这意味着上平台期间负载管根本不在理想电流源状态真正的恒流源饱和状态是从曲线开始急剧下降之后才建立的。了解PMOS的状态切换还有个实际用途如果你设计的CS放大器静态工作点选得太靠上也就是Vout偏高PMOS负载会在不完全饱和的状态下工作增益达不到设计值。这时查M2的region是最快的定位方式。4.3 电流镜与偏置支路的核对电流镜的偏置管M3是二极管连接VDS等于VGS所以只要VGS超过阈值电压它天然满足VDS VGS - VTH永远工作在饱和区。这也是把ref管做成二极管短接的原因之一饱和区的电流镜才能保证基准电流到负载电流的稳定复制。真正需要检查的是镜像管M2在不同Vout下能否维持饱和。从M2的视角看它的栅压VB由M3决定Vs固定为VDD所以当Vout过低时VDS变大PMOS会更“饱和”当Vout过高时VDS变小才会退到线性区。所以电流镜在CS放大器里的工作状态其实和输入管强相关如果输入静态点取得太高导致Vout太低虽然M2更饱和但M1可能已经线性了如果Vout太高M1饱和但M2线性。设计最优先要让两管同时满足饱和条件。另外一定要在ADE L里把IREF、M2漏极电流、M3漏极电流都抓出来对比。理想电流镜的复制误差来源于沟道长度调制效应M2的VDS和M3的VDS不同电流就会有偏差。实际仿真里你会看到M2电流随Vout变化这就是电流镜有限输出阻抗的直接证据。5. 从工作区推导放大器关键指标5.1 高增益区的gm与ro提取一旦确认M1和M2同时处于饱和区CS放大器的增益公式就可以放心使用Av -gm1 × (ro1 || ro2)。符号表示反相绝对值是增益大小。gm是M1的跨导ro1和ro2分别是两个管子的输出阻抗。手算时gm1 2 × ID / Vov代入ID50µA、Vov≈150mV能得到gm1≈0.667mS。ro与沟道长度调制系数λ有关ro≈1/(λ×ID)。在180nm工艺里NMOS的λ大概在0.08/V附近PMOS在0.12/V附近算出来ro1≈250kΩro2≈170kΩ并联后约100kΩ。所以理论增益大约为0.667mS×100kΩ≈66倍换算成dB大约是36dB。仿真验证时直接在Calculator里提取M1的gm和M1、M2的gdsgetData(M1:gm ?result dc) getData(M1:gds ?result dc) getData(M2:gds ?result dc)然后用增益公式做运算即可。我测下来手算和仿真结果的误差一般在10%到20%之间主要误差来源是λ取值和Vov估算不够精确。如果发现仿真增益和手算差好几倍优先检查工作区判断——大概率是某一方没在饱和区。5.2 输出摆幅与工作区边界输出摆幅不是由电源电压决定的而是由管子的饱和区边界决定的。对CS放大器来说最高输出电压受限PMOS负载的饱和条件Vout最高不能超过VDD - |Vov_p|否则M2进入线性区失去恒流源特性。最低输出电压受限NMOS输入管的饱和条件Vout最低不能低于Vin - VTH也就是M1的过驱动电压Vov_n。所以负载能摆动的范围大致是VDD - |Vov_p| - Vov_n这个量在电流源负载下通常比电阻负载小因为两端的“无用压降”被过驱动电压占掉了一部分。从VTC曲线上可以直接读出这个范围陡峭段两端对应的Vout坐标就是放大器能输出高电平和低电平的边界。把M1和M2的region曲线叠上去两条region同时等于2的区间就是输出电压的可线性工作范围。5.3 用一条“状态区间表”做设计验证做完整分析后建议把仿真结果整理成一张状态区间表记录Vin的范围、Vout的范围、M1状态、M2状态、增益特征。这步看起来像在做文档工作但实际上是在训练自己把电路行为量化。例如某一次仿真里我得到的大致区间可能是Vin 0.45V时M1截止Vout≥1.75V增益≈0。Vin在0.45V到0.65V之间时M1和M2慢慢进入饱和区增益从0提升到最大值附近。Vin在0.65V到0.85V之间时两管都饱和VTC斜率最陡增益接近峰值。Vin超过0.85V后M1进入线性区Vout下探到0.2V以下增益迅速归零。不同工艺、不同尺寸下数值会变但这个分析套路完全通用。把这些数据记录下来下次调整偏置或尺寸时直接对照状态区间就能快速判断改动方向不用每次重新瞎猜。6. 新人最容易踩的坑与自查清单6.1 看曲线误判工作区的三种典型情况第一种情况是只看NMOS状态。我用电流源负载做演示就是为了暴露这个问题PMOS负载在Vout接近VDD时明明在线性区可很多人在汇报时看图说话只说“NMOS截止所以Vout为高”。这句话没错但掩盖了PMOS的状态变化。如果后续你把这个CS放大器放到更大的电路里负载管的工作区会影响外部阻抗忽视它就会留下隐患。第二种情况是扫描步距太粗。用10mV甚至50mV的步距扫DC高增益区可能只有几十个点的数据VTC曲线看起来像一条从VDD到地的大斜线边界完全模糊。我习惯用1mV如果只是想快速看趋势可以用5mV但精细分析必须加密扫描点。第三种情况是只信曲线不信OP点。region曲线的确能反映状态但有些工艺库的模型里region字段的输出值未必像教科书一样标准甚至有毛刺。可靠流程是先用region曲线定位大概边界再用DC Operating Point打印具体管子精确验证两条路对齐才算数。6.2 仿真层面的常见报错与排查仿真不收敛是DC扫描最常见的坑。遇到“dc convergence”报错时我一般按下面顺序排查检查是否有管子的尺寸、连接方向不对比如PMOS的源漏接反。检查偏置电流源是否给了可直流通路。扫描范围是否跨过了某些非常陡峭的状态翻转区可以在扫描设置里限制迭代步长或增加迭代次数。实在不收敛可以在仿真设置里给相应节点加一个初始条件比如让Vout初始为VDD/2。另一个常见问题是提取region参数时语法报错。不同版本Virtuoso的Calculator语法略有差异最简单的方法是在Results - Print - DC Operating Points里手动打印OP点确认字段名称然后再去Calculator里拼表达式。还有一点部分PDK管子的region参数会有“region”和“region_num”两种命名字段字段含义一致取数时别搞混。6.3 一份可以直接照抄的自查清单我把自己平时做CS放大器工作区分析时的检查项整理成清单每次跑完仿真都过一遍[ ] M1、M2、M3的DC Operating Point都能正常打印region字段无报错。[ ] M1在预设偏置点处于饱和区Vds Vdsat。[ ] M2在预设偏置点处于饱和区|Vds| |Vdsat|。[ ] M3二极管连接管处于饱和区。[ ] IREF、M2漏电流、M3漏电流三条电流曲线趋势一致电流偏差在合理范围。[ ] VTC曲线的陡峭下降段与M1、M2同时region2的区间吻合。[ ] 从导数曲线上读出的峰值增益和OP点算出的gm×ro乘积基本一致。[ ] 输出高电平边界与PMOS退出饱和的电压对应输出低电平边界与NMOS进入线性的电压对应。这套清单看着简单但每一次逐项核对都能逼你更准确地理解电路行为。尤其在流片前的设计复查里工作区检查能挡掉很多“仿真看着正常、实测完全失效”的潜在问题。最后分享一个我自己的小习惯分析完一组电路后我会在Virtuoso波形窗里把VTC曲线、M1:region曲线、M2:region曲线三条波形叠在同一坐标轴下在陡峭段的两端分别放上两个Marker再在示意图上用文字标注“输入管饱和区”“负载管饱和区”“线性区”等标签。这样截图放进设计文档里别人一眼就能看懂后续回看时也省去重新推导的功夫。这个习惯我从第一次被老板问住之后一直保持到现在。