模拟CMOS集成电路设计这件事,两级运算放大器可以说是绕不开的经典模块。我刚完成了一版带完整版图的两级密勒补偿运放设计,从指标拆解、电路实现到仿真验证再到版图绘制,整个流程走下来踩了不少坑,也攒了一些经验,趁热整理成笔记分享出来。这篇内容适合正在学模拟IC的在校学生、准备课程设计或流片项目的工程师,也适合想系统了解运放设计全流程的朋友参考。
1. 设计目标与架构选型思路
1.1 最开始定的指标
动手画电路之前,我习惯先把指标写到一张纸上贴屏幕旁边,不然很容易在仿真中迷失方向。这次设计的核心指标如下:
| 参数 | 设计目标 | 备注 |
|---|---|---|
| 直流开环增益 | ≥70dB | 覆盖一级达不到的需求 |
| 单位增益带宽 GBW | ≥2MHz | 负载电容5pF |
| 相位裕度 PM | ≥60° | 稳定性底线 |
| 负载电容 CL | 5pF | 典型片内负载 |
| 功耗 | ≤1mW | 电源电压3.3V |
| 共模输入范围 ICMR | 1.0V~2.3V | 考虑输出摆幅折中 |
| 输出摆幅 | 0.3V~3.0V | 轨到轨不需要,管够 |
| 共模抑制比 CMRR | ≥65dB | 用共模反馈测试方案 |
为什么二级结构而不是一级?一级运放理论上也能做到70dB增益,但需要把增益集中在差分对和电流镜负载上,在3.3V电源下输出摆幅会非常受限。两级结构把“高增益”和“大摆幅”拆开:第一级负责把信号放大约40dB,第二级再贡献30~35dB增益同时保证输出摆幅,这是一种工程上更务实的取舍。代价就是多了一个极点,必须引入密勒补偿来处理稳定性问题,这也是“两级密勒补偿运算放大器”这个名称的由来。
共模抑制比是这次设计里比较费心思的一块。第一级的尾电流源有限输出阻抗会直接限制CMRR,所以我用了共源共栅尾电流源,牺牲一点点摆幅换取CMRR的提升。这个设计选择在后面仿真中验证效果确实不错。
1.2 拓扑结构选择:经典结构其实是最优解
这次采用的拓扑是教科书上的经典两级结构:第一级是PMOS输入的差分放大器,负载是NMOS电流镜;第二级是共源放大器,负载也是电流源;密勒电容Cc跨接在第二级输入输出之间,串联一个调零电阻Rz。我知道有人会问为什么不用套筒式共源共栅或者折叠共源共栅——套筒结构增益高但不适合低压和需要共模输入范围宽的场合,折叠结构带宽好但偏置电路复杂、功耗高。经典两级结构在增益、摆幅、功耗、设计难度上取得了平衡,作为通用型运放是很合适的选择。
整套偏置由一路主电流源和几个电流镜分配产生。为了压低偏置功耗,主偏置电流设成20μA,各级按比例镜像。需要说明的是,这个结构里PMOS输入对的选择是基于共模输入范围考虑的:PMOS输入对允许输入共模电压靠近地,而本次设计要求1.0V下限,PMOS是合理的。如果设计目标是输入共模范围靠近电源轨,那就该换成NMOS输入对,这是一个容易让初学者踩坑的选择点。
2. 电路设计关键点与器件尺寸的确定过程
2.1 偏置电路与尾电流源设计
偏置电路决定了整个运放的静态工作点稳定程度,我把它看作运放的“地基”。本次设计的偏置采用简单电流镜结构,基准电流20μA从外部理想电流源灌入,然后通过NMOS电流镜分配到各级。这里有个容易被忽略的问题:电流镜的沟道长度调制效应会让镜像电流偏离设定值,所以电流镜管子的L我只量放大了,取2μm而不是最小沟长,保证镜像精度。
尾电流源我做成了共源共栅结构:下层管子提供主要电流,上层管子把输出阻抗抬高。共源共栅尾电流源的好处很大,它对共模抑制比CMRR有直接贡献。简单尾电流源在长沟道工艺下输出阻抗大约几百kΩ,对应的CMRR可能只有50dB左右;做成共源共栅之后,输出阻抗可以推到几十MΩ甚至更高,CMRR也就能提上来。当然代价是输入对管上方的电压余量被多占了一个Vdsat,输入共模范围会略微收窄。我在设计时给尾电流源留了0.4V的余量,具体分配给上下两层管子各0.2V。
电流镜实现时我还特别注意匹配。理论计算是第一步,真正的性能还得靠版图来保证,这部分会在后面专门说。偏置电路建议单独加退耦电容,在版图里放1pF左右到地的MIM电容,可以滤掉电源噪声和耦合进来的数字开关噪声,这是我在一次后仿中发现的刚需。
2.2 第一级:输入对管与电流镜负载的尺寸推演
第一级是整个运放噪声、失调和带宽的核心所在。PMOS输入对的尺寸我按如下思路推演:先根据GBW确定跨导gm1。单位增益带宽与第一级跨导的关系近似为GBW = gm1 / (2π·Cc),由2MHz的GBW和5pF的密勒电容反推,gm1至少需要628μS。再根据设计功耗预算,尾电流设定为40μA,每边支路20μA,那么过驱动电压Vov选择0.2V,可算出(W/L) = gm / (μp·Cox·Vov),代入工艺参数得到大约(W/L) = 80/1。这个管子我拆成了两个并联的40/1,方便版图匹配。
输入对管还承担着失调和噪声控制的任务。PMOS管的1/f噪声比NMOS小,这也是我选PMOS输入的一个隐藏原因。尺寸越大,失调和匹配越好,但寄生电容也会增加,影响高频特性。80/1这个尺寸在匹配性和寄生之间算是平衡点。
电流镜负载(NMOS)尺寸与输入对管的匹配策略不同,负载管需要的是“精确镜像”,所以L取1.5μm以抑制沟长调制,W根据Vdsat反推算出(W/L) = 30/1.5。第一级的增益就是gm1·(ro2∥ro4),共源共栅化虽然可以进一步推高增益,但会占用输出电压余量,所以我保持简单电流镜负载,依靠第二级来补充增益。
2.3 第二级放大器与电流源负载
第二级是带电流源负载的共源放大器,这一级的主要任务有两个:提供30dB左右的附加增益,以及在输出端提供足够的摆幅。输出管MP5我设定了120μA的静态电流,尺寸根据输出摆幅选为(W/L) = 120/0.8。为什么选0.8μm的L而不是最小0.5μm?因为这是输出级,如果L太短,沟长调制会导致输出电阻降低,直流增益上不去,输出摆幅范围内的线性度也会变差。L=0.8μm算是一个不错的折中。
电流源负载MN6的尺寸和输出管匹配,确保静态电流一致且输出节点不产生系统失调。这里有一个很重要的设计点:系统失调电压主要由第二级输入节点(也就是第一级输出节点)的电流失配决定。如果在第一级输出节点上电流镜负载的电流与第二级栅极泄露电流不匹配,静态输出电压就会偏移,反映到输入端就是系统失调。计算时我把系统失调预算控制在3mV以内,通过调整MN6的W,使其Vdsat和MP5匹配。
第二级的增益大约等于gm5·(ro5∥ro6),按当前尺寸估算在30~36dB之间。加上第一级的增益,整个运放的开环增益就落在75dB上下,满足70dB的设计指标。
2.4 密勒补偿电容与调零电阻的定量计算
密勒补偿是两极运放设计的灵魂。Cc跨接在第二级输入输出之间,通过密勒效应把第一级输出极点(主极点)向低频方向推,把第二级输出极点推向高频,从而拉大极点间距。Cc的选择直接影响GBW和相位裕度,我按Cc = 5pF来设计(与CL同量级)。极性补偿后,主极点频率大约是GBW / (gm2·ro1·ro2),这个值在低频区域,而次级点约为gm2 / (2π·CL),这里CL代表第二级输出端的总等效电容。
单纯的密勒补偿会带来一个右半平面零点,因为Cc为信号提供了从第一级输出到第二级输出的一条前馈通路。这个零点在频率特性上会减小相位裕度,严重时甚至导致振荡。标准解决方案就是串联调零电阻Rz,把零点从左半平面移到右半平面,或者干脆推到很远的高频区。零点频率 = 1 / (2π·Cc·(1/gm6 - Rz))。为了把零点推至无穷远,理论上取Rz = 1/gm6;如果把零点移到左半平面来抵消次级点,Rz需要更大。我最终选择的Rz是一个多晶硅电阻,阻值约4.5kΩ,实际取值得根据gm6的仿真值微调。加了这个电阻稳定裕度立刻提升,这也是“带调零电阻的密勒补偿”在设计中的关键一招。
2.5 器件尺寸汇总表
| 器件 | 类型 | W/L (μm) | 电流/功能 |
|---|---|---|---|
| M1/M2 | PMOS输入对 | 40/1 ×2 | 各20μA |
| M3/M4 | NMOS电流镜负载 | 30/1.5 | 镜像电流 |
| M5 | PMOS输出管 | 120/0.8 | 120μA |
| M6 | NMOS电流源 | 100/1.5 | 120μA |
| M7/M8 | 共源共栅尾电流源 | 40/1 ×2、50/1 ×2 | 40μA |
| Cc | 密勒补偿电容 | MIM 5pF | - |
| Rz | 调零电阻 | poly 4.5kΩ | - |
器件尺寸计算不是一次定型的。我通常先手工计算得到一个初始值,然后用Cadence仿真逐个调整,每改一次都回头重新计算工作点,确保推导逻辑闭环。模拟IC设计最忌讳的就是“仿真调参调到好看但不知道为什么”,一旦工艺角变化结果就会暴露问题。
3. 仿真流程与关键参数验证
3.1 搭建测试电路与DC工作点检查
拿到初步尺寸后,我在Cadence Virtuoso里搭好测试电路。运放接成单位增益反馈最稳定测试拓扑之一。需要考虑的是开环增益仿真需要AC通路和DC反馈通路分开,典型做法是在反馈回路里串一个大电感(把直流反馈到输入端)和并联一个大电容(把交流短路到地),或者用stb仿真直接在反馈环断开处注入激励。
仿真开始第一件事,不是看AC曲线,而是查DC工作点。我逐个检查所有管子是否工作在饱和区:输入对管的Vdsat应该在约0.15~0.25V之间,电流镜负载管以及输出管、尾电流源管子都应处于饱和区。这一步很多人直接跳过,但后仿出问题的根源往往就是静态工作点本身没设对。从DC结果中看到输入对管两端Vds分别为1.73V与1.71V,都在饱和区;尾电流源上下两管Vds分别0.22V和0.21V,说明设计正确。
记录DC工作点数据时顺带看各支路电流,确认与设计值的偏差。实测发现第二级偏置电流比设计值偏高了约8%,这主要是电流镜沟道调制导致,我通过在NMOS电流源上略微调整宽长比来修正。
3.2 开环增益与相位裕度仿真
开环增益仿真用stb(Loop Gain)方法,这是Spectre里比较靠谱的方案,比传统的“大电感大电容”方法精度高且使用方便。仿真频率范围1Hz到100MHz,得到低频增益78.2dB,单位增益带宽GBW为2.3MHz,相位裕度65°。各项指标满足设计要求。
相位裕度是一个需要留足余量的参数。工艺角变化时相位裕度可能掉5~10°,所以我把默认工艺角下做到65°以上,保证SS工艺角下最低还有约55°的裕度。仿真确认在SS、FF、SF、FS四个工艺角下,GBW落在1.7MHz到2.9MHz之间,相位裕度最低57°,全部在可控范围。
观察频率响应时我额外注意了两点:一是低频增益是否平滑无谐振,若有谐振说明有意外正反馈通路;二是次级点是否出现在GBW之外,出现“增益曲线穿越0dB后继续上翘”这种异常形态时,通常意味着反馈环路内部有隐藏极点。
3.3 共模抑制比与电源抑制比仿真
共模抑制比的仿真在运放闭环测试电路中进行:在运放同相输入端加AC小信号,输出与输入之比即CMRR。仿真结果CMRR低频为72.5dB,满足65dB的指标。从曲线可以看到,CMRR在100kHz左右开始下降,这主要是尾电流源共源共栅管在高频下阻抗降低导致。
电源抑制比PSRR我也一并测了:在电源端加AC扰动测输出传递函数。正电源和负电源的PSRR不尽相同,本次设计比较关心高频PSRR,因为实际应用中电源噪声往往在高频段耦合进来。结果在1MHz时正电源PSRR约45dB,属于可接受范围。如果想进一步提升高频PSRR,可以在电源与偏置节点之间加RC滤波,这次我没有使用,因为会增加版图面积。
共模抑制比和电源抑制比这两个参数在单端输出运放中很关键,它们决定了系统在共模干扰和电源噪声下的表现。很多课程设计只关注开环增益和相位裕度,把这两个指标忽略掉,在实际工程项目中会吃亏——真正的系统里电源纹波、地弹噪声往往比信号本身更致命。
3.4 瞬态仿真与建立时间
瞬态仿真检验闭环稳定性:输入给一个1V阶跃,观察输出波形是否过冲、振荡。实测在单位增益接法下,输出从0到1V阶跃时,上冲约110mV(对应11%过冲),建立时间约为380ns(到0.1%精度),与相位裕度65°的预期一致。手头经验公式1/(相位裕度损失) 与过冲量成正比关系可以利用来反推稳定性:过冲过大说明相位裕度不足,需要增大密勒电容或调零电阻。
我还测试了压摆率(Slew Rate):给大信号阶跃,测量输出信号上升斜率最大处。实测SR约为4.6V/μs,这个数值与第一级尾电流40μA、密勒电容5pF的理论估算基本一致。压摆率不足时,直觉上增加尾电流或减小密勒电容,但这会与相位裕度产生矛盾,需要联合权衡。
瞬态仿真中如果有振荡发散现象,第一反应检查:是否Rz取值不当导致零点位置异常?是否密勒电容过小导致极点分裂不足?是否反馈环路接反(正反馈)?排查优先级就按这个顺序来,90%的问题都出在这三处。
3.5 仿真不收敛问题的排查经验
Cadence仿真不收敛是常见问题,我这次也遇到了。Spectre在瞬态仿真到几十微秒时停止并提示“Matrix singular”,查工作点时确认所有管子状态正常,但瞬态一跑大信号就发散。最终定位原因:一是电路中有两个高阻节点(第一级输出节点和偏置支路节点),这两个节点没有明确的DC通路到地,导致矩阵条件数很差;二是初始条件设置不合理,运放一开始工作在大信号非线性区。
解决方法有三招,按顺序尝试:第一招,给所有高阻节点设置初始条件(initcond),通过设置两个关键节点的初始电压跳过启动过程;第二招,在Spectre瞬态选项中开启gmin步进(gmin stepping),它会在仿真初期自动为每个节点并联小电导,帮助矩阵求逆,在收敛后再恢复原电路;第三招,将积分方法从默认的trapezoidal改为gear2only,虽然精度略降但稳定性更好。
实际排查中还发现,仿真器报错信息中提到的节点名能直接帮我们锁定问题所在。我强烈建议不要盲目改参数碰运气,认真读仿真器日志的警告信息,往往写着“Node X has no DC path”,这句话基本就是高阻节点的判断依据。
4. 版图设计与后仿真
4.1 版图布局策略与隔离环设计
版图设计我是用它来保证“测得的性能”和“仿真的性能”趋近于一致。本次版图的整体布局呈左右对称:左侧是输入对管和尾电流源,右侧是第二级和补偿网络。电源线和地线各自两侧走,尽可能降低信号路径与电源路径的耦合。
隔离环的设计我在这次里做了完整处理。所有NMOS周围画了P型保护环(P+ ring),接GND;所有PMOS周围画了N型保护环(N+ ring),接VDD。这两个环的作用是收集衬底中的少子,防止闩锁效应,同时降低衬底噪声耦合。深N阱隔离我也给NMOS区域加上了,因为电路里数字噪声可能从衬底串扰进来,深N阱相当于给NMOS区域多了一层防护,代价是版图面积增加了约15%。对于轻载模拟电路来说,这个面积代价值得。
版图用Virtuoso Layout编辑,我习惯打开“应用DRD”模式在布局过程中实时检查设计规则,比最后统一DRC再返工效率高很多。布线时特别注意金属层电流密度,根据顶层金属的允许电流密度下限计算,这个运放最大支路电流只有120μA,常规布线全部满足,但电源线仍然走了双倍最低宽度,算是习惯性留余量。
4.2 电流镜匹配的具体做法
电流镜匹配是整个模拟版图的核心工艺,我这次设计里差分输入对和电流镜负载都用了严格的匹配措施。差分输入对M1/M2使用共质心交叉布局:将每个管子拆成两个指,按“ABBA”四指交叉排列,中心对称。这样做的好处是工艺中的线性梯度效应(比如氧化层厚度梯度、注入剂量梯度)会被对称抵消,输入失调电压可以从10mV级别降到1mV级别。
电流镜负载管M3/M4则采用叉指(Interdigitation),两个管子交替排列成梳状结构。每个管子的指宽设为单指宽度,两端各加一个虚拟管(dummy)指,且dummy管子的栅极接固定电位不参与工作,这样边缘刻蚀效应不会导致有源区宽度不均匀。经验表明,不加dummy的电流镜失配可能比加dummy的恶化50%以上,这是从大量数据中看到的,务必不要省略。
共源共栅尾电流源的匹配同样重要。它的上下两层管子因为电流方向不同,匹配策略略有差异:上层PMOS用共质心,下层NMOS用叉指。偏置镜像电流源在主偏置电路里单独做一组,通过专门的偏置线送到运放区域。这条偏置线需要加金属屏蔽,避免信号线耦合噪声串入偏置节点。
4.3 后仿寄生提取的调整
版图完成后依次跑DRC和LVS。DRC指的是设计规则检查,确认版图没有违反工艺规则;LVS指电路一致性检查,确认提取出的网表与原理图一致。这两步过了之后,再用PEX(寄生提取)生成带版图寄生虫网表进行后仿真。
PEX结果出来后,寄生参数主要体现在:输入对管的栅极寄生电容增加了约0.8fF,密勒电容的寄生底板电容约0.5pF(MIM电容本身较大,这个比例可以接受),输出节点寄生电容约0.7fF。后仿真结果显示GBW从2.3MHz降到2.1MHz,相位裕度从65°降到61°,还在可接受范围。注意输出节点寄生电容会把次级点频率拉低,如果后仿相位裕度掉太多,可以在前仿阶段把负载电容设计值略微调大,预留寄生容差。
后仿还发现了一个有意思的问题:LVS通过但后仿增益下降约3dB,排查后确认是输入对管交互连线间的寄生电容产生了一条从第一级输出到地的低阻抗路径,在高频端形成零点。解决方法是把输入对管的交互连线改成上下两层金属正交走线,同时加大线间距。这个案例给我的教训是:版图上细小的走线变化,对寄生影响可能比大器件的尺寸变化还明显,后仿调试时要重视连线的寄生,不只看器件寄生。
4.4 版图后仿振荡问题一例
后仿瞬态仿真中出现了一次输出振荡发散,检查发现是我在版图中调零电阻Rz的走线引入了约0.3pF的额外寄生电容,改变了零点位置,相位裕度掉到50°以下。因为Rz在密勒补偿支路,极性很敏感,任何节点寄生电容都会产生频率响应偏移。解决办法是把Rz和Cc的位置布局尽可能靠近,减少中间连线长度。
用Virtuoso里的寄生标注工具找出这段走线寄生电容,确认来源后在版图里把Rz下方不打底层,避免与衬底形成寄生电容,同时加宽Rz两端的金属接触孔以降低串联电阻。改版后重新提取寄生,相位裕度恢复到60°,振荡消除。这类问题在前仿完全无法预见,只有通过后仿才能发现,事实也说明后仿在模拟版图设计中不可或缺。
5. 部分经验与心得整理
5.1 常见问题速查表
| 现象 | 可能原因 | 解决思路 |
|---|---|---|
| 低频增益不足 | 管子未饱和、电流镜失配 | 查DC工作点、调整L或偏置 |
| 相位裕度过低 | 密勒电容偏小、Rz不合理 | 增大Cc或调整Rz |
| 瞬态仿真不收敛 | 高阻节点无DC通路 | 设置initcond或开启gmin |
| 输出共模电平偏移 | 第二级电流失配 | 重新匹配MN6和MP5 |
| 后仿增益下降 | 寄生电容耦合 | 检查线条布线、调整布局 |
| 振荡无法消除 | 版图寄生改变了补偿支路 | 缩短Cc/Rz走线、优化版图 |
| CMRR过低 | 尾电流源阻抗不足 | 共源共栅结构、增大L |
| 压摆率不足 | 尾电流过小或Cc偏大 | 提高功耗预算或减小Cc |
5.2 个人经验碎碎念(写给同路人的话)
整个设计流程走下来,我最大的体会是模拟IC设计里“理性和经验同样重要”。公式推算可以把架构选定和工作点推导出来做出个合理起点,但真正把性能调到最优、把问题定位清楚,靠的是对物理本质的理解和一次次踩坑积累的敏感度。比如密勒补偿的零点问题,教科书上说得清清楚楚,但第一次调不出来的时候根本想不到是Rz寄生电容闹的,直到后仿振荡才恍然大悟,这就是经验的代价。
给还在学校或者刚入行的朋友提几个建议:第一,每个管子尺寸都要亲手算一遍,不要直接抄参考设计;第二,仿真的每个结果都要找到物理层面的解释;第三,版图阶段留足时间,DRC/LVS和后仿发现问题时,修改一轮往往要半天以上,不要压着截止时间才动手。这三点是我这次项目最想传达的东西。
如果后续想把这个运放用在更高精度场合,可以考虑把第一级电流镜负载改为共源共栅结构,或者引入斩波稳定来消掉失调和1/f噪声,针对低功耗场景还可以研究亚阈值区偏置设计。这些扩展方向都是在现有版本上围绕同一核心架构可以继续深入的路径。