做模拟IC这几年,我见过不少“仿真说稳定、流片回来振荡”的案例。最典型的一次,同事设计的LDO已经送去流片,回片后轻载时输出出现几十毫伏的小信号振荡,频率刚好和补偿电容引入的极点吻合。我翻他的仿真报告,他只跑过Cadence里的AC仿真,把运放开环测了一下,相位裕度57度,按教科书完全没问题。问题恰恰出在这:他测的是放大器开环增益的相位裕度,不是反馈环路真正关心的环路增益。后来我补了一个STB仿真,实际环路相位裕度只有二十几度。也是从那次之后,我把Cadence里的STB仿真当成稳定性分析的默认动作,AC开环仿真只用来做辅助参考。这篇就把从AC仿真到STB仿真中间那些容易踩的坑、Cadence里的配置步骤、结果怎么判读,完整写一遍。
1. 为什么开环AC仿真撑不起稳定性分析
1.1 开环AC仿真到底在测什么
AC仿真的本质,是在DC工作点上叠加一个小正弦信号,扫频看响应。它测的是“断开负载、断开反馈,在输入端口加AC小信号,在输出端口量增益”的开环传递函数A(s)。这里有一个隐藏前提:你人工断开的节点必须正好是环路真实工作时的信号断开点,而且断开之后电路的工作点不能乱。问题在于,很多电路一旦把反馈断开,直流偏置就塌了,你必须额外补一个大电感、大电容或者理想电压源才能让DC点成立。补法不一样,AC仿真结果也会不一样,这其实是AC仿真结果看起来“飘”的主要来源。
在Cadence的ADE里做开环AC仿真,通常的流程是:把环路在某个位置断开,在输入侧加AC源,AC magnitude设为1,输出点选在放大器输出,扫描频率范围从1Hz到1GHz,然后看输出与输入的幅度比和相位差。这套流程本身没问题,但它测出来的东西和你真正需要判定的“环路稳定性”之间,隔了好几层近似。
第一,反馈网络本身的负载效应消失了。你把环路断开后,反馈电阻、反馈电容还挂在输出节点上吗?很多人都直接把反馈网络整个摘掉,输出节点看到的电容负载和真实工作状态完全不同,这会让相位裕度明显偏高。第二,反馈系数β如果随频率变化(比如反馈网络里存在电容),只测A(s)根本得不到环路增益A(s)β(s)的曲线,而稳定性判断真正要看的恰恰是后者。第三,断开点两边的阻抗关系一旦改变,断口位置还可能引入额外的极点或零点。这就是为什么AC开环仿真跑出来PM=60度,实际闭环可能只有20度。
1.2 环路增益和开环增益不是一回事
用奈奎斯特判据判断稳定性,工程上直观的做法是看环路增益T(s)=A(s)β(s)的幅频和相频特性。这里有个关键点:如果只测A(s),忽略β(s)的频率特性,等于默认反馈系数是个纯实数常数。运放接纯电阻反馈时,这个近似还能接受,但只要反馈网络里有电容——比如用于前馈补偿的电容、输出负载电容、各种寄生电容——β就是频率的函数,这种情况下开环AC仿真的结论就站不住脚了。
STB仿真是直接在闭环连接的真实电路中,测出整个环路的return ratio。它把A(s)和β(s)合在一起测出来,同时保留了真实DC工作点,反馈网络的负载效应全部包含在内。所以STB测出来的环路增益曲线,才是真正应该拿去做稳定判据的东西。
再补一个概念,return ratio就是在环路的某一点加入一个测试信号源,看这个信号经过整个环路的传输再回到该点的传输函数。STB仿真内部干的就是这事,但它不是真的把环路断开再插信号源,而是通过一个叫iprobe的无损电流表来提取,这也是STB不需要破坏环路、不会改变DC工作点的原因。
1.3 什么时候AC仿真还能继续用
这里要给AC仿真一个公道。开环AC仿真在某些场景下依然非常有用:
- 判断裸放大器本身的GBW、主极点位置、开环相位裕度是否满足设计指标;
- 快速评估一个运放的开环直流增益是否达到设计值;
- 在没有反馈的电路里(比较器、开环缓冲器)直接验证小信号响应。
换句话说,AC开环仿真适合回答“这个放大器本身好不好”,STB仿真适合回答“这个放大器放在闭环里稳不稳”。两者不是替代关系,而是不同层面的问题。但如果你要判断一个反馈系统的稳定性,直接上STB,不要再拿开环AC曲线的相位裕度去外推闭环稳定性。这个认知转变,能帮你避开后续一连串“仿真过了、实际振荡”的坑。
2. Cadence里STB仿真的环境搭建和操作细节
2.1 iprobe是什么,为什么它不需要断开环路
在Cadence Virtuoso的analogLib库里,有一个叫iprobe的元件。它本质上是一个理想电流探针,零电压降,串在环路的信号通路上不会破坏电路工作点。Spectre的stb分析就是通过iprobe处建立的测试信号模型来求环路增益。这也是STB仿真最让人舒服的地方:不需要人为断开环路、不需要额外加偏置,整个电路的DC工作点完全是真实闭环状态。
放置iprobe时要注意箭头方向,箭头方向代表电流(信号)流向,通常按照信号从放大器输出经过反馈网络再回到输入的方向来放置。放置位置我一般优先选两种:
- 放大器输出和反馈网络之间的串联点;
- 反馈网络回输入求和节点的通路上。
我自己的习惯是放在输出节点和反馈网络的连接处,因为这个位置的前向增益和反馈网络分界最清楚,结果也最好解读。还有一些人喜欢把iprobe串到反馈电阻支路上,也能工作,但要求你必须清楚那一路电流确实是主反馈信号。
这里有个容易犯的错误:把iprobe放到偏置支路、ESD保护支路或者旁路电容支路上。一旦放错,仿真器测出来的“环路”就不是你真正关心的主反馈环。判断方法很简单,画完原理图后,从放大器输出节点沿着反馈网络回到输入求和点,再顺着前向通道回到输出,确认iprobe确实串在这条闭环链路上。多环结构会更复杂一点,一般以全局反馈环路上的点为主测点,局部反馈单独跑一轮stb去测。
2.2 ADE里配置stb分析的过程
我以Virtuoso ADE L(IC6.1.8为例)来描述,IC5、ADE XL的界面略有差异,但配置思路完全一样。
- 在原理图中,从analogLib调出iprobe,串联到环路里。
- 给iprobe取一个有辨识度的实例名,比如IP0。
- 打开ADE L,选择仿真器为spectre,模型库、corner、电源电压照常设置。
- 在Analyses选项卡里选择stb,面板里会有一个Probe instance填写框,填入iprobe的实例名,比如IP0。如果iprobe在子模块里,就要填全层次路径,比如I0.IP0。
- 设置扫描频率范围。我通常从1Hz扫到1GHz,或者覆盖你预估GBW十倍频以上范围,对数扫描。
- 有些版本会让你选分析类型是loop gain还是return ratio,我一般选loop gain,输出的是环路增益曲线。
- 运行仿真,在Results里调出stb对应的增益和相位曲线。
很多新手在这一步会卡住:Probe instance填错名字或者忘了填,仿真器直接报错,或者跑完结果只有一条平线。CIW日志里如果出现“stb: no probe”“no device found”之类的信息,基本就是探针没被识别。检查方法是看netlist日志,确认iprobe是不是被正确识别成了stb探针。
2.3 仿真器与精度设置
stb分析可以在spectre或者APS里跑。APS对stb的支持要看具体版本,老版本APS在某些工艺角下对iprobe的处理不够稳定,我在遇到结果异常时会把仿真器切回spectre对比一下,确认不是仿真器问题再深挖电路。
扫描精度方面,速度优先时用automatic或者medium,曲线有毛刺、尖峰时把每十倍频程的点数提高到20到50个。注意stb是小信号分析,它完全依赖DC工作点,DC工作点如果不对,stb的曲线可能长得还挺正常,但数值全不可信。我每次跑stb前会先跑一个DC op,确认所有管子都在目标饱和区、关键节点电压在预期范围。
3. 我踩过的坑和排查链路:STB结果为什么总不对
3.1 坑1:iprobe放错位置,环路口径错误
iprobe必须串在未来闭环信号真正流通的路径上。如果放到了旁路支路,比如ESD保护支路、偏置电流源支路,仿真器测出来的“环路”根本不是你关心的主反馈环。放错位置最典型的表现是:环路增益曲线低频增益特别低,只有几dB,或者相位曲线形态诡异。原因很简单,iprobe不在主反馈路径上,测出来的return ratio是一条旁路传输函数,而不是环路的真实传输函数。
排查方法也很直接:顺着原理图把主反馈信号流向画出来,从输出节点出发,经过反馈网络回到输入求和点,再经过前向放大通路回到输出。如果这条路径上没有iprobe,那结果一定有问题。多环结构下,我见过有人在局部反馈环里放了一个iprobe,又想用这个结果去判断全局稳定性,结果全局环路增益和相位完全对不上。
3.2 坑2:方向放反、激励参数异常
iprobe箭头方向和流经它的信号方向相反,stb结果会表现为相位曲线整体翻转,增益曲线基本不变。很多“相位裕度算出来是负的”“曲线看起来像正反馈”的结果,其实就是方向放反造成的。遇到这种异常,先把iprobe箭头方向反向,再跑一次对比,是最快的验证手段。
还有一个细节,stb分析里的测试信号是Spectre内部自动加的微扰,不需要你额外设置AC幅度,这是它和AC仿真的又一个区别。有些版本支持修改probe frequency参数,也就是环路增益曲线的起始频率,默认会自动生成,通常也不需要手动改。
3.3 坑3:DC工作点不对导致环路增益异常
环路里如果有一个管子处于线性区、截止区,或者输出饱和,stb的结果看起来可能还是“一条正常曲线”,但数值完全不可信。这里要分两种情况来看:
- 反馈环路根本没建立起来,环路增益低频值只有几dB,远远达不到应该有的直流增益;
- 相位曲线在低频段就开始反常翻转,DC增益掉得离谱。
遇到这两种情况,先跑DC op,检查关键节点电压和各管工作点。对二级、三级放大器还要检查中间级偏置电流,确保没有因为反馈内部连接方式导致局部偏置失效。我见过好几个案例,设计者拿到异常stb曲线后一直在调补偿参数,结果真正原因是一个管子在某个corner下进了线性区,工作点错了,调补偿纯属浪费时间。
3.4 坑4:stb不收敛与瞬态不收敛的连锁问题
stb不收敛通常发生在DC工作点求解失败时。CIW里报一串“DC analysis did not converge”,然后stb跟着报错。这个场景下可以尝试以下手段:
- 在ADE里把DC收敛条件放松一点,比如增加迭代次数,或者把gmin从默认值调到1e-12或1e-10;
- 把homotopy从none改成gmin或者source,让它通过参数渐变方式逼近收敛解;
- 去掉某些节点上多余的初始条件,重新跑DC;
- 如果是先做瞬态再在瞬态末态上跑stb,要先确认瞬态结束时电路已经稳定,末态如果还在振荡,stb基于的DC点本身就是错的。
这类不收敛问题,很多时候是模型和电路结构共同作用的结果,不要死磕一个设置,多换几种组合,收敛性会明显改善。
4. 结果判读:相位裕度、增益裕度和曲线形态
4.1 相位起点是0度还是-180度,别慌
Cadence的stb结果相位曲线有两种常见起点:一种从0度开始,一种从-180度开始。这取决于环路定义和版本内部的处理方式,有的版本把loop gain定义为-Aβ,有的定义为Aβ。新手常常被这个搞懵,以为是电路存在正反馈。其实判读时只关心两件事:环路增益曲线与0dB线的交点频率,以及该频率下相位与-180度线(或等效参考线)的距离。
如果相位曲线从0度起点,在0dB交点处的相位是-120度,那么PM就是60度。如果相位曲线从-180度起点,那就看它与-180度参考线的偏离开角,本质上是一样的判断逻辑。不要被起点迷惑,更不要因为低频相位是0度就怀疑iprobe方向放反了。
4.2 怎么精确读取PM和GM
在Cadence ViVA波形窗口里,读取stb曲线的步骤很固定:
- 先看20lg|T|曲线,找到穿过0dB的点,记录对应的频率;
- 在该频率处读相位值,PM就等于该相位值与-180度参考线之间的距离。比如相位是-120度,PM就是60度;
- 再看相位曲线第一次穿越-180度的频率,在这个频率上观察20lg|T|的值,GM等于该值与0dB的距离。
工程上PM建议至少45度,最好留到60度以上,GM至少大于10dB。对某些特殊结构,比如LDO输出级在不同负载电流下极点变化剧烈,只跑一个corner完全不够,要在所有PVT角落下看PM和GM的变化。
4.3 单位增益交叉点频率和GBW的关系
负反馈闭环中,环路增益的0dB交叉点频率通常接近闭环带宽。如果stb测出来的交叉点和你用AC开环仿出来的GBW差很多,十有八九是反馈网络β的频率特性在起作用,或者AC断环方式有问题。这也再次说明stb在判断环路稳定性上比AC开环更贴近真实。交叉点频率本身,还能告诉你补偿网络是不是把主极点压得过低,导致带宽牺牲太大。
4.4 正反馈风险和相位非单调变化
如果低频环路增益是一条从负dB往上爬的曲线,并且相位在0dB交叉点附近接近0度,这说明环路很可能存在正反馈风险,幅度包络异常。另一种常见情况是相位曲线非单调,在穿越-180度后又回来,这通常意味着存在多极点或者前馈零点,比如补偿电容直接把信号从输入前馈到输出,相位会在某个频段被零点推回去。
遇到这种非单调相位,先别急着看PM数字,要回到电路结构找是哪一个耦合路径在起作用。这一步在没有STB仿真时很难定位,反而是STB曲线形态帮了大忙。
5. 用几个真实案例复盘STB仿真的实际价值
5.1 LDO大电容负载:开环PM高、闭环PM低的根因
某款LDO外部挂了1uF电容,ESR是100毫欧。AC开环仿真PM是70度,看着没问题,但STB仿真跑出来PM只有30度左右,差距非常大。原因拆开看有三层:
- 开环AC仿真时,输出电容被断开或者没接,输出极点位置和真实情况差异巨大;
- 反馈分压网络并联在输出端,其等效电容形成的前馈路径,在开环AC仿真里完全测不到;
- 真实环路增益在单位增益点附近,还有一个由大电容和误差放大器输出阻抗共同构成的极点,开环AC仿真也测不到。
后续按照STB结果,把误差放大器负载级电流、输出级类型和外部电容的ESR零点重新做了匹配,PM才拉回60度以上。这个案例最典型,也是让我彻底信任STB的转折点。
5.2 二级运放Miller补偿:stb结果怎么指导补偿
跑STB时发现PM不够,曲线形状显示0dB交叉点频率偏高,相位在交叉点前已经掉到-130度以下。这种情况的补救思路是:
- 增大Miller电容,把主极点压低,单位增益频率下降,相位裕度自然上来;
- 调整调零电阻,用零点抵消第二极点的相位滞后;
- 缩小第一级跨导,直接降低交叉频率,代价是GBW会下降。
用STB的好处是每次调整后可以直接看环路增益曲线的整体变化,不需要重新断开环路加偏置。我习惯把补偿参数设成变量,跑几组对比曲线,一次定位最优值。这个流程可比单纯靠公式推快多了。
5.3 全差分环路的STB注意点
全差分放大器、全差分环路里,STB不能像单端环路那样直接用一个iprobe了事。iprobe测的是两个端点之间的传输,不具备共模和差模的区分能力。Cadence针对这个情况提供了cmdmprobe之类的工具用于共模稳定性测量。对做全差分设计的人,我要特别提醒:全差分环路通常包含两个交叉的反馈路径,稳定性分析要分共模环路和差模环路分别评估,单独用一个iprobe串在单端回路上很容易漏掉共模振荡。
共模振荡的一个典型表现是:stb结果看着正常,但瞬态跑起来会看到共模电压来回摆。这时候要重点检查共模反馈网络(CMFB)的环路增益和相位,而不是去调主放大器的差模补偿。
6. 日常工作流中的STB仿真习惯
6.1 从预仿真到流片前的稳定性检查清单
我现在做稳定性分析,不是最后补一次,而是每个阶段都跑STB:
- 架构设计初期:用stb做主环路稳定性扫描,先确认架构本身没有先天不稳定因素;
- 参数调整阶段:stb配合AC开环看GBW和极点位置,stb决定最终PM和GM是否达标;
- 版图后仿真阶段:寄生参数会引入新的极点,用寄生提取后的网表跑stb,看PM会不会掉到危险区间;
- PVT角落覆盖:TT/SS/FF、高温低温、高低压,至少覆盖极端组合,所有stb曲线归档。
最常见的问题就是在版图后阶段,寄生电容加到输出节点或者高阻中间节点上,产生一个新的极点,PM从60度掉到30度以下。如果能在流片前通过stb扫出来,就还来得及调整补偿参数或者重排版图。没有STB这套手段,这个风险只能留到芯片回来再发现。
6.2 提高STB仿真效率的几个小技巧
第一,stb分析不需要每次都扫全频段。如果已经知道0dB交叉点在几百kHz附近,频率范围可以缩小到1kHz到100MHz,仿真速度能快不少。第二,早期快速验证用APS加中等精度,收敛后做最终确认再切到spectre高精度,两者结论一致性用来交叉验证。第三,把stb的探针位置、扫描设置保存成ADE状态,换corner时一键重跑,不需要每次重新配置。
最后分享一个小习惯:每次跑完stb,我会在0dB交叉点附近加marker,同时把DC工作点记录也存下来,两个数据一起归档。一旦后续有人反馈“这个电路不稳”,我能很快从仿真记录里看出是工作点漂移还是环路特性变化,省去大量重复仿真。这个习惯帮我排查了不少跨corner的诡异问题,也算是从AC仿真转到STB仿真之后,慢慢积累下来的一个实用经验。