资讯动态

两级CMOS运放设计与Spectre仿真:从指标预算到流片可信

发布时间:2026/10/21 9:39:05 来源:尧图企业网站定制
简介面向模拟集成电路设计初学者的两级CMOS运算放大器设计文档基于CSMC 0.5um Double Poly Mix CMOS工艺完整呈现从设计指标拆解到spectrum仿真的全过程。文档开头解释单级放大器增益与输出摆幅的矛盾引入两级结构的必要性随后按一级差分放大器、二级共源放大器逐步设计推导电流镜偏置、M3/M4对称性、米勒补偿电容选取、相位裕度与单位增益带宽的关系。工艺参数部分列出NMOS/PMOS模型数值并依据ICMR约束计算各管宽长比最后通过仿真验证电压增益、输出电压摆幅、输出阻抗等关键指标附有结论与设计要点。资源压缩包共1个doc文档大小1.14MB内容以文字、公式和图表为主结构紧凑适合高校集成电路课程设计、考研复试准备或新手自学参考。已有282人学习下载可作为模拟CMOS运放设计的入门范例。1. 两级CMOS运放设计与Spectrum仿真从“AC能跑”到“流片可信”的距离某次校内流片项目里A同学把两级运放的AC仿真打到88dB增益、63°相位裕度自认为稳了。芯片回来一测单位增益带宽缩水一半输出还自激。排查到最后发现AC仿真断环时把输出级负载电容拆掉了那个漂亮的相位裕度根本不成立。这件事给我的直接认知是两级CMOS运算放大器的设计与spectrum仿真价值不在“能跑通”而在“仿真结果能不能对应流片行为”。标题里的spectrum仿真在EDA工具链里通常指Spectre仿真器覆盖DC工作点、AC幅频相频、瞬态摆率和STB稳定性验证。这篇笔记按这个闭环拆开讲先定架构与指标预算再手算管子宽长比接着用Spectre跑DC/AC/瞬态最后收在STB、零极点与蒙特卡洛验证。新手能照着做熟手能直接看边界与踩坑点。2. 两级运放架构与指标预算先把增益、带宽、摆率算明白很多初学者拿到“两级CMOS运算放大器”这个题目第一反应是打开原理图工具直接画管子。我一般会拦一下架构没定、指标没分清楚之前画的管子后面八成要推翻重画。两级运放之所以被反复拿来当教学案例和工业标准单元在于它用一级差分对拿增益、用一级共源级拿摆幅、用一只米勒电容完成频率补偿三件事各司其职分析路径非常清晰。2.1 经典两级米勒补偿架构为什么第一级要差分、第二级要共源经典结构里第一级是PMOS差分输入对负载是NMOS电流镜尾电流源负责设定总电流第二级是NMOS共源放大器负载是PMOS电流源。两级之间跨接一只米勒补偿电容Cc有些设计还会在Cc通路上串联一只调零电阻Rz用来把右半平面零点推到高频避免它吃掉相位裕度。选PMOS做输入对不是因为PMOS比NMOS快而是因为PMOS输入对的共模输入范围更接近地在低电源电压下容易把输入共模电平设在VDD/2附近。第一级用差分结构为的是抑制共模扰动和电源噪声第二级用共源结构为的是获得接近轨到轨的输出摆幅。两级级联的直流增益近似等于第一级增益乘第二级增益所以拿到80dB以上增益并不难难点在频率补偿。频率补偿的思路是Cc把第一级输出端的主极点往低频推同时利用米勒效应把第二级输入端的极点推到高频形成极点分离。单位增益带宽GBW近似等于第一级跨导gm1除以Cc第一非主极点p2近似等于第二级跨导gm6除以负载电容CL。要让相位裕度到60°一般要求p2至少大于2倍GBW工程上我喜欢留到3到4倍。2.2 指标预算表把spec拆到每一级的电流与过驱动电压设计开始前先把指标写成一张预算表。表里每一项都要能回答“这条指标主要卡哪一级、由哪个参数决定”。我的习惯是先定电源电压、负载电容CL、总静态功耗、目标GBW、相位裕度和摆率再看工艺库能提供的阈值与单位增益因子。设计指标典型目标值主要决定环节关联参数开环直流增益≥ 80dB第一级与第二级串联gm、ro、电流镜精度单位增益带宽10MHz 起第一级跨导与米勒电容gm1、Cc相位裕度≥ 60°极点分离程度Cc、gm6、CL摆率≥ 20V/μs尾电流与补偿电容I_tail、Cc输出摆幅接近轨到轨第二级过驱动电压Vov6、Vov7静态功耗≤ 1mW尾电流与第二级电流各支路电流共模输入范围含VDD/2输入对与尾电流源Vov1、Vov5、Vth把指标拆到晶体管级之后设计就从“感觉差不多”变成了“有数可算”。比如摆率这条很多人只看尾电流忽略输出级的电流能力结果瞬态仿真出来上升沿和下降沿不对称这就是预算没拆到第二级。2.3 为什么先定电流再定宽长比一个容易忽略的设计顺序我见过不少同学先把宽长比拍脑袋定下来再反推电流这种做法会让自己陷入反复调参的循环。建议的顺序是先根据功耗预算和摆率要求锁定各级电流再由gm和过驱动电压反推宽长比。电流是“纲”宽长比是“目”纲举目张。过驱动电压Vov的分配也有讲究。第一级输入对管的Vov不宜太大否则共模输入范围变小也不宜太小否则gm上不去匹配性变差。一般取100mV到300mV之间。第二级的Vov可以稍微大一点因为输出摆幅需要它提供余量但太大同样会压缩输出范围。分配完Vov之后尺寸计算就是查工艺参数代公式的事了。3. 手工尺寸计算从设计方程到一组能跑仿真的W/L这一章是整篇笔记里最“能抄作业”的部分。我会用一个具体的设计目标把从指标到宽长比的计算过程完整走一遍。目标值如下负载电容CL3pF目标GBW10MHz相位裕度≥60°摆率≥20V/μs电源电压1.8V总静态电流预算250μA以内。3.1 核心设计方程五条公式管住整个设计设计两级运放真正绕不开的方程只有五条。第一直流增益等于两级增益乘积Av≈gm1×(ro2//ro4)×gm6×(ro6//ro7)这里ro在短沟道工艺里往往比长沟道小一个量级所以增益不够时优先加L而不是加W。第二GBWgm1/(2πCc)这是米勒补偿最核心的关系。第三第一非主极点p2≈gm6/CL决定相位裕度。第四摆率SRI_tail/Cc由尾电流和补偿电容共同决定。第五gm2I/Vov将跨导、电流、过驱动电压三者锁在一起。这五条方程互相牵连Cc定下来之后gm1由GBW决定I_tail由SR决定gm6由p2与CL决定。每改一个指标跟着变的是两三处参数所以设计时必须按顺序迭代而不是同时拍脑袋定所有变量。3.2 一步步算出一组初始尺寸建议直接跑这个计算脚本下面这段Python脚本是我平时做初始尺寸估算的模板填上PDK的典型工艺参数就能跑。计算顺序严格按照“先定Cc→再算gm1→再算尾电流→再分配过驱动电压→最后算W/L”来。# 两级运放初始尺寸估算脚本示意模板 # 工艺参数请按你的PDK典型值填写不同工艺差别很大 import math # ---- 设计指标 ---- CL 3e-12 # 负载电容3pF GBW 10e6 # 单位增益带宽10MHz PM 60 # 目标相位裕度度 SR 20e6 # 目标摆率20V/us VDD 1.8 # 电源电压 I_total_max 250e-6 # 总静态电流上限 250uA # ---- 工艺参数示意值按PDK替换---- uCox_n 180e-6 # NMOS 单位增益因子 A/V^2 uCox_p 60e-6 # PMOS 单位增益因子 A/V^2取绝对值 # ---- 1. 米勒电容先取负载电容的一半 ---- Cc CL / 2.0 # 1.5pF # 若相位裕度不足再往 2/3*CL 方向加 # ---- 2. 由 GBW gm1 / (2*pi*Cc) 反推第一级跨导 ---- gm1 2 * math.pi * GBW * Cc # ---- 3. 由 SR I_tail / Cc 反推尾电流 ---- I_tail SR * Cc I_d1 I_tail / 2.0 # 差分对单臂电流 # ---- 4. 第一级输入对过驱动电压与宽长比 ---- Vov1 2 * I_d1 / gm1 W_L_p 2 * I_d1 / (uCox_p * Vov1**2) # ---- 5. 第二级跨导取 p2 4 * GBW保证 PM60 有裕量 ---- gm6 4 * 2 * math.pi * GBW * CL # ---- 6. 第二级电流典型取尾电流的 2~4 倍 ---- I6 I_tail * 3.0 Vov6 2 * I6 / gm6 W_L_n 2 * I6 / (uCox_n * Vov6**2) # ---- 输出关键参数 ---- print(fCc {Cc*1e12:.2f} pF) print(fgm1 {gm1*1e6:.2f} uS) print(ftail {I_tail*1e6:.2f} uA) print(fVov1 {Vov1*1e3:.1f} mV) print(fPMOS输入对 W/L {W_L_p:.1f}) print(fgm6 {gm6*1e6:.2f} uS) print(fI6 {I6*1e6:.2f} uA) print(fVov6 {Vov6*1e3:.1f} mV) print(fNMOS第二级 W/L {W_L_n:.1f})这段脚本的关键在计算顺序和变量约束关系。Cc先取CL的一半是一线设计里常用的起点因为米勒电容越大主极点推得越低、相位裕度越容易保证但摆率和面积会恶化。gm1不直接指定而是由GBW和Cc反推原因在于GBW是系统指标gm1是实现手段。Vov1算出来如果超过300mV说明尾电流或Cc的取值需要调整否则共模输入范围会不够。第二级跨导gm6按4倍GBW留裕量这个系数对应约65°到70°的相位裕度如果仿真结果PM偏低再往5倍方向加。3.3 电流镜与偏置电路的尺寸最容易手算翻车的地方输入对和第二级的尺寸算完偏置电路和电流镜负载的尺寸不能“估一估就完事”。电流镜的宽长比直接决定各支路电流比例失配则直接表现为输入失调电压。尾电流源M5的过驱动电压要留足余量确保在共模输入范围内都处于饱和区第二级PMOS负载M7的Vds要大于其Vov否则输出摆幅受限。我一般这样处理偏置先定一个基准电流通过电流镜比例复制到尾电流源、第二级负载和输入对。电流镜管子的L取工作管的两倍以上以抑制沟道长度调制带来的电流复制误差。所有电流镜管的过驱动电压尽量取接近这样不同工艺角下电流比例变化更小仿真和流片之间的偏差也更小。4. Spectre仿真验证闭环DC、AC、瞬态的最小可复现步骤尺寸算好之后真正见真章的是Spectre仿真。这个阶段的任务不是“证明设计是对的”而是“把设计里不成立的地方找出来”。我习惯按DC→AC→瞬态的顺序跑每步都有明确要检查的对象而不是直接拉一波波形然后凭感觉调。4.1 搭建测试电路开环与闭环两套接法都要准备Spectre仿真不能只测裸运放必须把运放接成可测的电路。开环AC测量需要把环路断开同时保持直流工作点正确瞬态测摆率则要把运放接成单位增益缓冲器或反相放大器。两种接法我都建议写成独立的测试网表片段避免反复改连接关系时改错。开环AC测试里有两种常用断环做法。第一种是在输入对的正负输入端之间插入一个很大的电感和一个很大的电容让直流路径保持闭环、交流路径断开第二种是直接在让DC工作点建立之后用STB分析在环路里自动断点。初学者容易踩的坑是直接在输出端把负载电容断开这样AC测出来的相位裕度是“没有负载的相位裕度”和实际工作条件完全不是一回事。下面是一份两级运放Spectre网表的核心片段器件宽长比按第3章的脚本结果填入// two_stage_opamp_test.scsSpectre netlist片段 // 器件模型名请按所用PDK替换成实际model name simulator langspectre // 电源与地 VDD (vdd 0) vsource dc1.8 typedc VSS (vss 0) vsource dc0 typedc // 输入差分对 PMOSM1 M2 M1 (nd1 vinp vtail vdd) pch w2.4u l0.5u m1 M2 (vout1 vinn vtail vdd) pch w2.4u l0.5u m1 // 电流镜负载 NMOSM3 M4 M3 (nd1 nd1 vss vss) nch w2u l1u m1 M4 (vout1 nd1 vss vss) nch w2u l1u m1 // 尾电流源 PMOSM5 M5 (vtail vbias1 vdd vdd) pch w4u l1u m2 // 第二级放大管 NMOSM6 M6 (vout2 vout1 vss vss) nch w8u l0.5u m1 // 第二级负载 PMOSM7 M7 (vout2 vbias2 vdd vdd) pch w6u l1u m1 // 米勒补偿电容 Cc (vout2 vout1) capacitor c1.5p网表里最需要注意的是节点命名和电流镜方向。nd1是M3的漏栅节点也是M1的漏端vout1是第一级输出接M2漏端、M4漏端和M6栅端vout2是最终输出。M5的源接vdd、漏接vtail意味着尾电流从vdd流向vtail再由差分对向下泄放这是PMOS尾电流源的常见接法。M7的栅极接vbias2如果你的电路里第二级负载电流源由偏置电路直接复制就先单独仿真偏置网络把vbias电压算出来再加进来不要用一个“看起来差不多”的固定电压。4.2 DC仿真先看工作点五个检查项决定要不要继续往下走我跑AC之前一定先看DC工作点这步省下来的时间远比花下去的多。Spectre里跑DC工作点后逐个检查五个项目所有管子是否工作在饱和区、尾电流源两端电压是否足够、差分对两支路电流是否对称、第二级静态电流是否落在预算内、输出共模电平是否在期望范围内。任何一项不满足都不要急着做AC因为AC仿真的小信号参数依赖DC工作点工作点错了增益和带宽全是虚的。一个常见现象是输出共模电平跑偏根源往往在第二级负载电流和驱动管电流不匹配而不是偏置电压没给对。遇到这种情况先把电流镜比例核一遍再看M6的宽长比是否需要微调比盲目改偏置电压更有效。4.3 AC仿真读增益、带宽与相位裕度三种容易误读的波形AC仿真在Spectre里可以用如下分析语句// 在测试网表末尾追加AC分析 // start10Hz 到 100MHz每十倍频程取10个点够看主极点和次极点 ac1 ac start10 stop100M dec10跑完打开波形看幅频曲线和相频曲线。幅频曲线在低频段的平坦值就是直流增益与0dB线相交处的频率就是GBW相位裕度在GBW频率处读取相位值用180°减去该相位绝对值得到。比如GBW处相位是-115°则相位裕度是65°。读曲线时最容易出三个问题。第一增益低频段不平坦往往是DC工作点没建立好往上翻AC结果时被DC偏移主导了第二相频曲线在GBW附近出现非单调变化说明存在一个右半平面零点需要调整调零电阻或Cc第三幅频曲线在GBW附近出现“翘头”基本可以断定次极点落在GBW以内相位裕度会明显不足这时不是调Cc就是调gm6。// 瞬态分析测单位增益缓冲器接法下的摆率 tran1 tran stop5u瞬态激励建议用边沿小于20ns的阶跃源幅度设在输出摆幅的50%左右比如0.2V到1.6V。摆率测量方法是从输出波形10%到90%区段取斜率上升沿和下降沿都要测两者不一致说明第二级电流与负载条件不对称。建立时间看输出进入终值±1%误差带之后所需的时间这里的1%误差带是针对阶跃幅度算的不是针对电源电压算的。4.4 把仿真结果和手工计算对账差多少算正常手工计算和仿真结果一定不会完全一致这是正常的原因在于手算用的平方律模型没有完整描述短沟道效应、体效应和二级效应。以我的经验以下几个量的偏差范围可以作为参考。直流增益偏差在20%以内算正常gm1的偏差在10%到15%以内算正常GBW偏差在20%以内算正常。如果偏差超过这些范围优先怀疑宽长比计算时用的工艺参数是否填错或者工作点是否落在饱和区边缘。对账这一步特别重要它决定了你后续调参是“有方向地微调”还是“盲目试”。每次改完尺寸或电流都把关键仿真值和手算值对比一遍你会逐渐摸清PDK的非理想特性在哪个方向影响设计这也是所谓“手感”的来源。5. 两级运放设计避坑指南五个高频翻车现场与排查思路仿真和流片之间隔着很多坑有些坑会在仿真阶段暴露有些要到芯片回来才暴露。把高频翻车现场提前列出来至少能让你在按键跑仿真之前先有个心理预期。5.1 现象AC仿真相位裕度65°STB仿真只有8°原因几乎都是断环方式破坏了真实负载条件。AC仿真时直接把Cc或CL断开等于改写了环路特性测出来的相位裕度对应的是一个不存在的电路。解决方法是改用Spectre的STB分析让工具在环路内自动插入探针并建立直流工作点这样测的是真实环路的稳定性。从此我把STB作为相位裕度的唯一判定标准AC只用来读增益和带宽。5.2 现象差分对两支路电流不对称输出失调电压高达十几毫伏原因通常有两个输入对宽长比差异或者电流镜负载的Vds不一致。M3和M4栅电压相同但M3是二极管接法Vds等于VgsM4的漏端是vout1Vds取决于第一级输出电平。沟道长度调制效应会让两支路电流不同。解决方法是把电流镜管子的L加长比如从0.5μm加到1μm并检查vout1的电平是否给M4留足了Vds余量。5.3 现象瞬态仿真摆率只有设计值的一半原因要分两段查。上升沿慢说明第二级上拉电流能力不足加大M7电流或宽长比下降沿慢说明第二级下拉电流不足加大M6电流或宽长比。如果两边都慢先检查Cc是否比预期大了因为摆率SRI_tail/Cc中Cc是一个全局约束Cc加得过大摆率必然被压下来。另一个隐蔽原因是大信号跳变时尾电流被“撕裂”输入对有一侧瞬间关断导致第一级无法给Cc充放电这时需要重新审视输入共模范围是否覆盖阶跃过程中经过的电平。5.4 现象相位裕度不足但调大Cc后摆率又不够了这是两级运放最经典的指标博弈。Cc增大确实推低主极点、改善相位裕度但同时减小摆率。处理顺序是这样的先确认次极点位置如果p2gm6/CL远大于GBW说明补偿电容本身是够的问题在右半平面零点或调零电阻设置如果p2和GBW靠得太近说明gm6不够大或CL太大优先增大第二级跨导而不是继续加Cc。把Rz调到适当值把零点推到高频之后再看相位裕度通常能找到一个Cc和Rz的折中。5.5 现象仿真报错“no dc path to ground”或节点悬空原因多半是测试电路里信号源没有提供直流路径。比如AC仿真时用ac源直接接栅极但源内部阻抗是无穷大栅极直流电平悬空工作点无法建立。解决方法是给每个栅极一个直流电压源或大电阻提供偏置路径。还有一个相关现象是闭环接法里反馈网络的直流路径被电容隔断同样会导致工作点失败。养成习惯先跑DC确认所有节点电压都在合理范围再跑AC和瞬态能省掉大量排查时间。6. 收尾验证STB分析、零极点与蒙特卡洛一起上瞬态和AC都过了不代表设计稳了。流片前的最后一道工序我会把STB分析、pz分析和蒙特卡洛按顺序跑一遍。STB分析前面已经提过这里说具体操作。Spectre的stb分析在netlist里写一行分析语句指定在vout2处断开环路工具会在该节点注入小信号激励并自动测环路增益与相位裕度。建议把STB的扫描范围和AC保持一致读取结果时直接看GBW频率处的相位裕度这比AC断环法可信得多。零极点分析pz会把环路的传输函数分解成零点和极点列表。重点看两样东西是否存在右半平面零点以及主极点、次极点位置是否符合预期。如果pz结果显示次极点频率低于设计值说明第二级的电流或负载电容估算有偏差这时回头查工作点。pz分析还能顺带看到是否存在高频寄生极点这在寄生参数提取后的后仿真阶段特别有用。蒙特卡洛用来评估工艺偏差和失配的影响。我的标准做法是先跑200个点的工艺角加失配的混合仿真统计GBW、相位裕度、直流增益和输入失调电压的分布。如果相位裕度的3σ值低于45°说明设计裕量不足需要在尺寸或补偿策略上加强。很多人觉得蒙特卡洛是“大公司才跑的流程”其实对两级运放这种经典结构跑200个点也就几分钟到十几分钟完全值得。Corner仿真也不能省。至少把tt、ff、ss三个工艺角配上-40°C、27°C、85°C组合跑一遍重点关注ss corner下尾电流减小导致GBW掉多少。如果ss corner的GBW比典型值低30%以上说明设计余量不够流片后性能可能落在规格外。我的习惯是在手算阶段就把corner影响预估进去给GBW和相位裕度各留20%到30%的裕量。最后说一个多年养成的习惯每次仿真报告都写三行头——工艺角、温度、负载电容。这个习惯救过我很多次因为两个月后回看一个波形你根本记不清当时跑的是什么条件。把这三行写清楚别人接手你的设计或者流片回来复测时至少能对上号。两级运放这个课题做到最后拼的不是什么玄学技巧而是每一步有没有留出可验证的边界。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑