ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Cadence STB仿真指南:从AC仿真到环路稳定性分析

Cadence STB仿真指南:从AC仿真到环路稳定性分析 做模拟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开环仿真跑出来PM60度实际闭环可能只有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 LIC6.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 坑1iprobe放错位置环路口径错误iprobe必须串在未来闭环信号真正流通的路径上。如果放到了旁路支路比如ESD保护支路、偏置电流源支路仿真器测出来的“环路”根本不是你关心的主反馈环。放错位置最典型的表现是环路增益曲线低频增益特别低只有几dB或者相位曲线形态诡异。原因很简单iprobe不在主反馈路径上测出来的return ratio是一条旁路传输函数而不是环路的真实传输函数。排查方法也很直接顺着原理图把主反馈信号流向画出来从输出节点出发经过反馈网络回到输入求和点再经过前向放大通路回到输出。如果这条路径上没有iprobe那结果一定有问题。多环结构下我见过有人在局部反馈环里放了一个iprobe又想用这个结果去判断全局稳定性结果全局环路增益和相位完全对不上。3.2 坑2方向放反、激励参数异常iprobe箭头方向和流经它的信号方向相反stb结果会表现为相位曲线整体翻转增益曲线基本不变。很多“相位裕度算出来是负的”“曲线看起来像正反馈”的结果其实就是方向放反造成的。遇到这种异常先把iprobe箭头方向反向再跑一次对比是最快的验证手段。还有一个细节stb分析里的测试信号是Spectre内部自动加的微扰不需要你额外设置AC幅度这是它和AC仿真的又一个区别。有些版本支持修改probe frequency参数也就是环路增益曲线的起始频率默认会自动生成通常也不需要手动改。3.3 坑3DC工作点不对导致环路增益异常环路里如果有一个管子处于线性区、截止区或者输出饱和stb的结果看起来可能还是“一条正常曲线”但数值完全不可信。这里要分两种情况来看反馈环路根本没建立起来环路增益低频值只有几dB远远达不到应该有的直流增益相位曲线在低频段就开始反常翻转DC增益掉得离谱。遇到这两种情况先跑DC op检查关键节点电压和各管工作点。对二级、三级放大器还要检查中间级偏置电流确保没有因为反馈内部连接方式导致局部偏置失效。我见过好几个案例设计者拿到异常stb曲线后一直在调补偿参数结果真正原因是一个管子在某个corner下进了线性区工作点错了调补偿纯属浪费时间。3.4 坑4stb不收敛与瞬态不收敛的连锁问题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仿真之后慢慢积累下来的一个实用经验。
返回列表