
简介这是一份面向模拟集成电路学习者与电路设计初学者的CMOS两级运算放大器设计与仿真实验报告适合正在学习运放结构选型、手工参数估算与Cadence仿真流程的本科高年级或研究生。报告按运算放大器设计简介、设计目标参数要求、电路设计、仿真调试、实验结果五部分展开采用CMOS-90nm工艺库围绕双端输入单端输出差分放大级、共源放大级、直流偏置与密勒补偿电路给出具体宽长比、偏置电流与补偿参数。资源包为单个PDF文件约1.34MB内容完整、图文并茂便于打印研读与对照仿真。已有1362人学习下载读者可借此掌握两级运放的增益、增益带宽积、相位裕度等指标的推导与验证思路获取从手工计算到Virtuoso仿真调试的完整排错参考适合作为课程实验与课程设计的模板素材。1. 卡住大多数人的不是仿真器是从指标到尺寸的那一步做一份 CMOS 两级运算放大器设计报告最容易翻车的环节往往不在打开仿真器之后而在打开之前。手上只有一串指标开环增益要 60 dB 以上、单位增益带宽 10 MHz、相位裕度不低于 60 度、摆率 10 V/μs、负载电容 2 pF、静态功耗压到 1 mW 以内然后就得决定每一只 MOS 管的沟道宽长比、每一路偏置电流取多大、米勒电容放多少。指标到尺寸这一步没算清楚后面 AC 曲线只会给你一条增益四十来 dB、相位裕度二十几度的线于是开始盲调 W/L一个下午就没了。两级结构之所以成为模拟 CMOS 入门和课程设计的默认选择是因为第一级差分放大负责堆增益第二级共源放大负责给输出摆幅和驱动能力代价是必须用米勒补偿把两个极点拆开。这套取舍讲清楚参数就能倒推出来。适合正在做模拟 IC 课程设计、需要补齐一份运放报告或者第一次从 cmos 反相器这种单管级电路往运放跨的人。2. 拓扑先行CMOS 两级运放为什么是差分输入加共源输出2.1 单级放大器的增益天花板在哪单级共源放大器的低频增益写成 A gm·(ro,n || ro,p)其中 ro 由沟道长度调制系数 λ 决定ro ≈ 1/(λ·Id)。在 0.18 μm 这类工艺里如果 L 取最小尺寸λ 偏大ro 通常只有几百 kΩ 量级算下来单级增益四十 dB 上下就到头了。想再往上走有两条路一是把 L 拉长ro 近似线性上升但寄生电容跟着涨带宽掉得厉害二是叠共源共栅cascode增益能到六七十 dB可输出摆幅被吃掉两个过驱动电压在 1.8 V 电源下留给后级的余量很紧张。这两条路的共同问题是都只能用一级电路换增益带宽和摆幅必须选一个牺牲掉。2.2 两级结构的增益分配与极点分布两级结构把增益拆成两段来挣。第一级是 NMOS 差分对配 PMOS 电流镜负载差分输入转单端输出增益 A1 ≈ gm1·(ro2 || ro4)第二级是 PMOS 共源放大管配 NMOS 电流源负载增益 A2 ≈ gm6·(ro6 || ro7)。总增益是两者相乘六十到八十 dB 可以轻松拿到。代价是电路里天然出现两个高阻节点第一级输出节点和第二级输出节点各挂一个极点。如果这两个极点频率靠近相位会在同一个频段内连掉 180 度闭环之后直接振荡。结构典型增益输出摆幅主要代价单级共源3545 dB大接近 VDD−Vdsat增益不够套筒式共源共栅6075 dB小损失两个过驱动摆幅紧偏置复杂两级差分共源6085 dB大约 VDD−2Vdsat需米勒补偿多一个极点折叠式共源共栅6580 dB中等功耗与噪声偏大2.3 米勒补偿与右半平面零点要把两个极点分开标准做法是在第二级放大管的栅漏之间跨接一个米勒电容 Cc。利用米勒效应第一级输出节点看到等效电容 (1A2)·Cc主极点被大幅往低频推同时第二级输出节点的高频极点被推向 gm6/CL 附近这就是极点分裂。分裂之后主极点 p1 ≈ 1/(R1·A2·Cc)次极点 p2 ≈ gm6/CL单位增益带宽 GBW ≈ gm1/(2π·Cc)三者可以解耦设计。麻烦在于 Cc 同时开了一条从第一级输出到第二级输出的前馈通路在 s 域里引入一个右半平面零点 z ≈ gm6/Cc。右半平面零点不衰减反而抬升幅频曲线同时往下压相位是相位裕度杀手。常用两种处理在 Cc 上串一个调零电阻 Rz ≈ 1/gm6把零点推到左半平面或者无穷远或者干脆用共源共栅补偿让前馈通路经过一个低阻节点被截断。前者省面积后者更干净但摆幅会损失。2.4 什么情况下不该用两级两级不是万能。如果要求噪声极低、摆率极高或者电源只有 1 V 出头折叠式共源共栅往往更划算因为它第一级就提供了高增益不需要米勒电容也就没有零点问题。另外像 cmos 图像传感器里的像素读出链路、ToF 测距芯片的模拟前端面积和功耗卡得很死很多时候用的是结构更简单的单级放大器或开关电容电路两级运放只在列级读出或者基准缓冲里出现。选型时先把增益、摆幅、功耗、噪声四个指标写下来排优先级再决定要不要两级。3. 从 GBW 和相位裕度反推 W/L 与偏置电流3.1 设计顺序先电流、再过驱动、最后尺寸手工设计有一个相对固定的顺序按这个顺序走基本不会来回返工。第一步从摆率定尾电流因为 SR I5/Cc摆率只跟第一级尾电流和补偿电容有关。第二步从负载电容定 Cc工程上取 Cc ≈ 0.20.3·CL太小压不住次极点太大浪费带宽和摆率。第三步由 GBW 反推输入对管的 gm1。第四步由相位裕度要求定第二级的 gm6。最后才根据 gm 和电流反推每只管的 W/L并回头校验饱和区。这里有个容易忽略的点gm 和 Id 是两个独立的设计变量比值 gm/Id 决定管子工作在弱反型还是强反型。gm/Id 取大管子偏弱反型省电流但匹配差、带宽差取小强反型线性度好、匹配好但费电流。中等反型区 gm/Id 在 1015 V⁻¹ 之间是模拟设计的常用工作点。3.2 关键公式与 Cc 的取值设计里反复用到的就四组关系。第一组是带宽GBW gm1/(2π·Cc)。第二组是摆率SR I5/Cc其中 I5 是第一级尾电流单边电流为 I5/2。第三组是次极点位置p2 ≈ gm6/CL为了让相位裕度在 60 度以上一般要求 p2 ≥ 3·GBW已经用调零电阻消掉零点的情况零点没处理时得压到 2.2·GBW 以内还要额外留余量。第四组是增益A_total A1·A2两级各贡献一半左右的增益比较均衡全部压在一级会导致那一级的 ro 要求过于苛刻。3.3 一段可复现的 Python 尺寸估算脚本把上面四组关系写成脚本改动指标时重跑一遍比在纸上推快得多。import math # 目标指标 GBW 10e6 # 单位增益带宽 Hz SR 10e6 # 摆率 V/s CL 2e-12 # 负载电容 F PM_ratio 3.0 # 次极点 / GBW 的裕度系数 # 工艺常数0.18um 量级按实际 PDK 替换 uCox_n 200e-6 # NMOS 迁移率 x 栅氧电容 A/V^2 uCox_p 80e-6 # PMOS lam 0.1 # 沟道长度调制系数 1/V # 第一步米勒电容 Cc 0.25 * CL # 第二步由摆率定尾电流SR I5 / Cc I5 SR * Cc Id1 I5 / 2.0 # 差分对单管电流 # 第三步由 GBW 定输入对管 gm gm1 2 * math.pi * GBW * Cc # 第四步由次极点定第二级 gm6 gm6 2 * math.pi * PM_ratio * GBW * CL Id6 30e-6 # 第二级静态电流先按功耗预算定 # 反推宽长比 WL1 gm1**2 / (2 * uCox_n * Id1) WL6 gm6**2 / (2 * uCox_p * Id6) # 校验饱和区需要的过驱动电压 Vov1 2 * Id1 / gm1 Vov6 2 * Id6 / gm6 # 单级增益估算 A1 gm1 / (2 * lam * Id1) # ro2 || ro4两管 ro 近似相等 A2 gm6 / (2 * lam * Id6) A_total_dB 20 * math.log10(A1 * A2) print(fCc {Cc*1e12:.2f} pF) print(fI5 {I5*1e6:.2f} uA, 单边 {Id1*1e6:.2f} uA) print(fgm1 {gm1*1e6:.2f} uS, gm6 {gm6*1e6:.2f} uS) print(fW/L1 {WL1:.2f}, W/L6 {WL6:.2f}) print(fVov1 {Vov1*1e3:.1f} mV, Vov6 {Vov6*1e3:.1f} mV) print(f总增益约 {A_total_dB:.1f} dB) print(f调零电阻 Rz {1/gm6:.0f} ohm)这段脚本的逻辑很直白Cc 由 CL 定I5 由 SR 和 Cc 定gm1 由 GBW 和 Cc 定gm6 由次极点要求定。四个设计变量互相咬合改一个指标整条链路都会跟着动。需要说明几个参数。uCox_n、uCox_p必须换成实际 PDK 里对应 L 的数值不同 L 的迁移率会略有差异。lam是沟道长度调制系数的粗略值只用于前期估算真实 ro 要看仿真。Id6是第二级静态电流它不受摆率约束只受功耗预算和 gm6 的合理性约束Id6 太大浪费功耗太小则要达到同样的 gm6 需要很宽的 W寄生电容变大。脚本末尾打印的 Vov 要检查是否落在 100300 mV 之间低于 100 mV 匹配会明显变差高于 400 mV 会吃掉输出摆幅。3.4 尺寸结果对照表与饱和区校验按上面脚本在 GBW 10 MHz、CL 2 pF、SR 10 V/μs 的条件下跑一遍得到的量级大致如下具体数值必须按实际 PDK 重算。器件角色电流gm过驱动W/L 量级M1/M2NMOS 差分输入对2.5 μA31 μS160 mV约 1建议 L 取 2 μm 提匹配M3/M4PMOS 电流镜负载2.5 μA—约 200 mV由镜像比定L 取 12 μmM5NMOS 尾电流源5 μA—250 mV宽长比偏大注意版图匹配M6PMOS 第二级放大管30 μA380 μS160 mV约 30L 取 1 μmM7NMOS 第二级负载30 μA—250 mV与 M5 构成镜像M8偏置支路5 μA—250 mV决定全芯片电流基准校验的核心就一句话每只管的 |Vds| 必须大于 |Vov|。仿真时先跑 .op把每只管的工作区看一眼只要有一只要么进线性区要么进截止区后面的 AC 曲线全是错的不要往下走。3.5 首次设计最容易踩的三个坑第一个坑是把过驱动电压取到 50 mV 以下觉得省电又高 gm实际上此时管子进入弱反型阈值失配直接放大到几十毫伏差分对失衡失调电压超标。第二个坑是 L 全取最小值ro 小、增益怎么调都上不去输入对管和负载管的 L 至少放大到最小尺寸的两倍。第三个坑是 Cc 取太小比如取 0.05·CL主次极点靠得太近相位裕度调到五十度以下然后靠加调零电阻硬撑实际上建立时间会出现明显的长尾振荡。4. 从网表到波形两级运放的 DC/AC/瞬态仿真怎么设4.1 可直接改用的 SPICE 网表骨架原理图搭好之后用网表跑批处理仿真更方便反复迭代。下面是一个单位增益缓冲接法的骨架直接换成实际 PDK 的器件模型就能跑。* CMOS 两级运放 AC/瞬态仿真骨架 .include pdk_model.lib VDD vdd 0 1.8 VSS vss 0 0 VB vb 0 0.9 $ 偏置支路栅压先给个估计值 * 第一级差分输入对 电流镜负载 M1 n1 vip n3 vss nmos W2u L2u M2 n2 vin n3 vss nmos W2u L2u M3 n1 n1 vdd vdd pmos W4u L2u M4 n2 n1 vdd vdd pmos W4u L2u M5 n3 vb vss vss nmos W10u L1u * 第二级共源放大 电流源负载 M6 vout n2 vdd vdd pmos W30u L1u M7 vout vb2 vss vss nmos W15u L1u * 米勒补偿与调零电阻 Cc n2 vout 0.5p Rz n2 nz 2.6k Cz nz vout 0.01p $ 可选配合 Rz 微调零点 CL vout 0 2p * 交流激励 VIN vip 0 DC 0.9 AC 1 Efb vin 0 vout 0 1.0 $ 单位增益反馈 .op .ac dec 100 1 1G .tran 10n 20u .end网表里第一级输出节点是 n2它同时是第二级 M6 的栅极Cc 就跨在 n2 和 vout 之间。Rz 串在 Cc 路径上用来把右半平面零点推走。Efb是压控电压源用来构造单位增益负反馈把 vout 反馈回 vin构成闭环这样 AC 扫出来的就是闭环响应——想看开环增益和相位裕度更省事的做法是把反馈断开直接在开环状态下跑 .ac然后手动算相位裕度。4.2 先看工作点每一只管都必须落在饱和区跑.op之后重点看三组数每只管子的 Vgs、Vds、Vdsat以及流过每只管子的 Id。输出文件里如果器件模型提供 region 信息更好直接看 region 字段是不是 2饱和区。第二级放大管 M6 最容易出问题如果它的 Vds 不够会掉到线性区此时 gm6 会大幅下降次极点位置往下掉相位裕度跟着恶化。此时要么调小 M6 的过驱动要么调 M7 的镜像比把输出共模抬上去一点。4.3 AC 扫描读增益、GBW 与相位裕度开环 AC 扫描的接线方式是把输入端加 AC 1第二级输入断开反馈。扫完之后从输出读三个值低频增益是幅频曲线在低频段的平坦值GBW 是增益降到 0 dB 时的频率相位裕度是 GBW 频率处相位与 −180° 的差值。用 .measure 可以自动读出来省得每次在波形上手动点。.measure AC gain_dc FIND vdb(vout) AT1 .measure AC gbw WHEN vdb(vout)0 .measure AC phase_gbw FIND vp(vout) WHEN vdb(vout)0FIND ... AT1取 1 Hz 处的增益就是低频增益WHEN vdb(vout)0是找增益过零点的频率FIND vp(vout) WHEN ...是该频率处对应的相位。相位裕度 180 phase_gbw注意相位单位是度如果波形给出的是负值要先取绝对值再算。这套 measure 语句的意义在于每次改尺寸后重跑一条命令就能看到相位裕度变了多少不用靠眼睛估。4.4 瞬态仿真验证摆率与建立时间AC 只反映小信号摆率和建立时间必须用瞬态验证。把电路接成单位增益缓冲输入端加 0.2 V 的阶跃观察输出的上升沿。摆率取输出从 10% 到 90% 的斜率如果实测明显低于 SR I5/Cc 的估算值说明第一级尾电流不够或者补偿电容偏大。建立时间关注的是输出进入 ±0.1% 误差带之后不再出来所需的时间这里最容易暴露的是相位裕度不足导致的长尾振荡。仿真项激励设置关键读数不达标时的调整方向直流工作点.op各管 region、Vds−Vdsat调偏置电压、镜像比开环增益.ac dec 100 1 1G低频增益 dB加大 L、提高 gm/Id相位裕度同上过零点相位加 Rz、加大 Cc、提高 gm6摆率0.2 V 阶跃10%→90% 斜率加大尾电流 I5建立时间单位增益缓冲±0.1% 带内时间调相位裕度先保证 60° 以上共模抑制共模小信号扫频共模增益提高尾电流源输出阻抗5. 版图匹配、寄生提取与后仿把仿真值和实测值拉到一起5.1 差分对的共质心版图与截面图上的寄生两级运放的版图里差分对 M1/M2 和电流镜 M3/M4 的匹配决定失调共质心交叉布局是常规做法把每只管子拆成偶数个指状结构沿对角线交叉放置让梯度方向的工艺偏差互相抵消。从截面图看每个指状结构的源漏扩散区往下都有一层衬底寄生电容金属走线再叠一层层间电容这些寄生在原理图里是不存在的。第一级输出节点是高阻节点多挂几十 fF 就会把主极点往低频推增益带宽积跟着缩所以这一段的走线要短、要宽但也不能太宽导致对衬底电容增加。5.2 后仿流程与寄生参数提取后仿的基本流程是版图完成 DRC 和 LVS 之后做寄生参数提取输出带寄生标注的网表把原来原理图网表里的器件替换成带寄生的版本再重跑一遍 DC/AC/瞬态。对比前后两次的相位裕度和 GBW一般 GBW 会下降 10%25%相位裕度下降几度到十几度。如果前仿相位裕度只有 60 度后仿掉到 50 度以下就得回去调 Cc 或 Rz。常见的做法是前仿时把相位裕度做到 6570 度给后仿留出余量。5.3 用工作在深线性区的 MOS 做可调零电阻调零电阻 Rz 用多晶硅电阻做会多一道工艺更常见的做法是用一只工作在线性区的 MOS 管替代栅压从偏置链路引出来版图上就是一只普通管子。它的等效电阻是 1/(μCox·(W/L)·(Vgs−Vth))通过栅压就能连续调节零点位置。调到极端情况时零点会被推到左半平面很远的地方反而在高频处贡献相移所以要配合 AC 扫描边调边看。判断标准很简单调 Rz 的过程中相位裕度先升后降取峰值附近那个栅压就对了这一组值记进报告里比只写一个标称值有说服力。本文还有配套的精品资源点击获取