资讯动态

Cadence Virtuoso两级运放仿真全流程:从原理图到工艺角扫描

发布时间:2026/9/28 21:30:53 来源:尧图企业网站定制
做模拟IC设计Cadence Virtuoso这套工具基本绕不开。两年前我第一次完整跑通两级运放从原理图到工艺角仿真时才真正明白“工具只是载体核心是流程”那之后我再看到群里有人问Cadence怎么仿运放我都会劝他们别急着点按钮先把整条链路该怎么走想清楚。这篇文章就按我实际操作的顺序来从环境准备、原理图搭建、DC/AC/瞬态仿真到最后的工艺角扫描中间遇到的问题和排查思路也会一起写出来。适合刚接触Cadence的在校学生也适合从其他EDA平台转过来的工程师照着做一遍。两级运放这个例子选得特别好它结构不复杂但覆盖了模拟仿真里最常见的AC、瞬态、PVT分析跑通一次后面换别的电路基本就是举一反三。1. 两级运放仿真要准备什么1.1 先搞清Cadence工具链里谁干什么模拟IC设计日常提到的Cadence指的主要是Virtuoso平台那几个核心组件。原理图输入用的是Virtuoso Schematic Editor符号和版图则在Virtuoso Layout Editor里完成仿真的前端操作界面是ADEAnalog Design Environment现在新版本里常见的是ADE L和ADE XL真正的仿真内核通常是Spectre或者APS前者是经典SPICE级仿真器后者是加速版的并行求解器。刚开始不用把所有组件都吃透推荐先把一条最小链路跑顺Schematic Editor画电路在ADE L中设置模型库和仿真类型调用Spectre跑DC和AC再用Calculator和Waveform窗口分析曲线。等到需要跑多组工艺角或蒙特卡洛时再上手ADE XL因为ADE XL有集成的工艺角表格和结果对比面板效率会高很多。我个人的经验是第一遍千万别直接在ADE XL里折腾复杂设置先老老实实把ADE L的每个选项过一遍。ADE L虽然界面老但信息非常直白——模型库加载在哪、设计变量有几组、输出表达式怎么填都是一目了然的对理解仿真原理特别有帮助。1.2 工艺库和模型库的配置仿真前需要让Cadence知道你的晶体管模型放在哪里。工厂会提供PDK里面包含器件模型、参数和参数化单元pcell。如果是学校的实验环境或者公开PDK通常也会给你一个或多个.scs格式的模型文件。最基础的做法是在电路库所在目录下配置好lib.defs或cds.lib文件然后在ADE窗口的Setup - Model Libraries里把模型文件和工艺角设置好。很多初学者一上来就画电路结果仿真器报“模型未定义”或“器件未找到”90%都是因为模型库没有加载或者加载的模型与原理图器件名字对不上。注意添加模型库时不光要指定文件路径还要确认corner那一栏没有选错。如果工艺文件里有tt、ss、ff、sf、fs几组工艺角先选tt典型做第一轮调试后面做工艺角分析时再切换或扫描。1.3 先把设计指标写清楚没有目标的仿真就是瞎点按钮。做两级运放之前我建议先写下一组明确的指标哪怕它们只是初步估计值。比如一个典型的例子指标目标值说明电源电压 VDD1.8V0.18um工艺常见开环增益 60dB约1000倍单位增益带宽 GBW10MHz小信号频响交叉点相位裕度 60°保证稳定性负载电容 CL2pF输出端负载与寄生假设功耗 0.5mW由总偏置电流决定压摆率 SR由电流和CL决定可用SRIbias/CL估算这些指标不要求一开始就是最终值。仿真的意义就在于验证设计猜想然后通过调整尺寸和偏置来逼近目标。但定了指标你就知道第一个AC曲线出来时应不应该去调电流而不是看着曲线发呆。2. 原理图设计与尺寸推导2.1 选择经典拓扑我这次采用最经典的两级结构PMOS输入差分对加NMOS电流镜负载做第一级再级联一个PMOS共源放大管做第二级中间用米勒电容Cc和调零电阻Rz做频率补偿。之所以大部分教材都拿它做例子是因为它能直观反映增益分配和极点分离的思想。第一级把差分信号变成单端信号并给足够高的输出阻抗第二级负责提供主要的电压摆幅Cc把主极点往低频推、同时通过Rz抵消右半平面零点的影响。输入管选PMOS还是NMOS主要看共模输入范围。PMOS输入对可以让输入共模电压接近地NMOS输入对适合接近电源电压。在1.8V电源下我习惯用PMOS输入对这样偏置电路简单而且PMOS的闪烁噪声通常比NMOS小在小信号放大场景里更友好。2.2 尺寸参数从哪儿来晶体管尺寸不是拍脑袋定的。可以先做手工估算再回到Cadence里修正。假设偏置电流源Ibias20uA输入差分对的尾电流也取20uA那么每条支路的电流就是10uA。第一级增益大约等于输入管跨导与输出阻抗的乘积而输出阻抗主要由输入管、负载管的沟道长度调制决定所以如果想提高增益就加大L而不是一味加大W。第二级电流可以取50uA左右输出管摆幅和压摆率都依赖于这一级的电流。单位增益带宽的近似计算公式是GBW gm_in / (2π * Cc)。如果目标GBW是10MHzCc取1pF反推gm_in大约需要2π * 10MHz * 1pF也就是62.8uA/V左右。再结合每条支路电流10uA过驱动电压Vov大约在0.32V附近对应的(W/L)可以从gm 2*Id/Vov来估算再根据工艺参数折算出具体宽度。调零电阻Rz一般取1/gm_second或略大一点用来把右半平面零点移到左半平面或推到高频去。我这里不会给出一个看似万能的固定尺寸表因为不同工艺模型差异太大。更合理的方法是把上面这几个手算值当初始点仿真后根据工作点和频率曲线再迭代W、L、偏置电流。很多人喜欢一步到位调出一个漂亮曲线但那样往往不知道每个参数在扮演什么角色。我建议每改一个参数就记录一次变化这样你对电路的理解会扎实得多。2.3 在Schematic Editor里把管子放上去打开Virtuoso Schematic Editor后从analogLib库里调用nmos4、pmos4这种四端管子也可以直接放PDK提供的模型符号。注意区分schematic符号和layout用的pcell仿真阶段只需要schematic符号。摆放管子时建议把差分输入对的两个PMOS管子左右对称放置电流镜负载两个NMOS也对称第二级独立拉出来偏置电流源单独放在底部。电路层次清晰后期检查工作点和改连线会省很多事。连线尽量用总线方式处理电源和地避免一堆细线在图上绕来绕去。端口用输入、输出、电源、地几种类型命名成Vinp、Vinn、Vout、VDD、VSS。画完原理图后可以给整个运放建一个symbol方便在顶层测试电路里统一调用。右键原理图界面选Create SymbolCadence会自动根据端口生成方形符号也可以把线条调整得更像经典三角形运放符号。这个操作不复杂但值得花几分钟做后面测试bench会清爽很多。2.4 偏置电路别偷懒两级运放工作点不理想十次有八次是偏置的问题。我习惯在原理图里直接用理想电流源analogLib里的isource先代替偏置电路把核心运放工作点调对再在后续工程化时替换成实际的电流镜偏置。这样有两个好处一是初始仿真阶段少一个变量定位问题更快二是等核心拓扑稳定后再考虑偏置电路自身的电源抑制和温漂逻辑更清晰。用理想电流源时要注意节点在瞬态仿真中可能因为没有直流通路而不收敛所以电流源两端一定要有到地的直流通路。这里说的直流通路指电流有地方流走。如果某个高阻节点只有电容连接没有电阻或晶体管构成直流泄放路径DC仿真会直接报不收敛。3. 仿真设置与第一轮调试3.1 DC工作点检查画完原理图第一次跑仿真建议就做DC Operating Point。在ADE L里Analysis选择dc勾选Save DC Operating Point然后运行。一般几十毫秒就能跑完。重点是打开Result - Print - DC Operating Points在原理图上直接查看每个节点的电压和每个管子上的工作状态。对饱和区的判断标准我一直这么记NMOS要Vds Vgs - VthPMOS要保证源漏压差满足饱和条件原理图注释时表现为管子旁边出现绿色状态标志。如果看到红色说明管子进入线性区或者截止那就要查偏置和尺寸了。第一次跑完我通常会先看输出节点是不是稳定在预期的共模电平。如果偏离太远可能是电流镜比例不对或者负载影响了静态点。3.2 AC小信号分析怎么设AC分析要先在原理图里给输入加一个交流小信号源。常见做法是在输入端口接一个vdc设置AC magnitude为1这样输出幅度在数值上等于电压增益读取曲线最直观。然后在ADE里Analysis选ac扫描范围从1Hz到100MHz或1GHz用对数扫描。跑完以后打开频率响应曲线找到单位增益频率幅频曲线穿过0dB的点和相位裕度0dB处对应的相位减去-180度。我习惯在Calculator里直接写表达式取增益的dB值等于0时的频率点。这样就不用肉眼去曲线上找交叉点了。如果第一轮跑出来相位裕度不足一般先加大Cc同时确认Rz是否已经能和第二级跨导匹配。如果GBW不达标优先增大输入管的gm也就是增大尾电流或加大输入管的W/L。注意加W/L会同时增加寄生电容进而改变极点位置所以这一步要配合看相位曲线。3.3 瞬态仿真看大信号AC分析只管小信号运放真实建立过程还得靠瞬态。在顶层测试电路里把运放接成单位增益或反相放大结构输入给一个阶跃信号然后跑tran。规模上第一遍可以先跑1us到5us步长用默认的automatic等确认大概波形后再细分。瞬态波形主要看三件事输出是否会跟着输入建立到目标值建立过程中有没有明显过冲或振铃以及上升沿和下降沿的斜率能不能满足压摆率要求。压摆率的实测方法很简单给大阶跃输入在输出斜坡段取最大斜率单位V/us。如果压摆率偏低就提高第二级电流或减小输出节点上的等效电容。瞬态仿真不收敛是另一个高频话题后面我会单开一节细说。先提醒一句如果仿真器报时步太小或者无法收敛最先检查的不是算法参数而是电路里有没有节点只有电容连接或电流源悬空了。3.4 把功耗和共模范围也纳入第一轮验证很多人只盯着增益和带宽功耗和输入共模范围完全不在仿真列表里。我建议在原理图里给电源串联一个电流源符号或者在Calculator里用表达式计算VDD支路的平均电流再乘以电源电压就得到功耗。这是一个非常简单但容易被忽略的指标。输入共模范围可以用DC扫描来测固定差分输入为零扫描共模电压观察输出增益或工作点什么时候发生突变。这组数据在你后期设计输入接口或系统集成时特别重要不要省。4. 工艺角分析的完整流程4.1 工艺角到底模拟的是什么晶圆制造过程中MOS管的阈值电压、栅氧厚度、沟道有效长度都会随着光刻、掺杂、温度等条件波动。工艺角就是把这些波动打包成几种极端情况TT指典型NMOS和典型PMOSSS指慢NMOS慢PMOSFF指快NMOS快PMOS还有SF和FS这种交错组合。温度则一般取-40°C、25°C、85°C或125°C电源电压再叠加±10%的偏差。做工艺角分析不是为了证明它在某个条件下能工作而是要确认它在所有定义的极端组合下都能保住关键指标。尤其是相位裕度在FF角下所有管子都快高频极点位置变化很大特别容易翻车。4.2 在Cadence里跑工艺角的几种做法最直观的方式是在模型库设置界面把corner列出来然后逐个手动跑。缺点是费时且容易漏项。更好用的是ADE XL的工艺角表格或者利用Cadence的corner特性将corner定义为一个设计变量在参数分析里自动遍历。如果用的是ADE L可以在仿真前把model library设置里的corner域改成一个变量名比如cornername然后在ADE L的Design Variables里把cornername赋值为tt再用Parametric Analysis去扫描这个变量把ss、ff、sf、fs一起扫一遍。每次仿真结果会被拆到不同曲线里然后在同一个波形窗口里对比不同工艺角下的增益和相位一眼就能看出哪些指标处于临界边缘。如果项目要求更严格建议升级到ADE XL。ADE XL里可以建一个完整的corner表每行定义一组工艺角加温度、电压的组合。跑完后直接从Results面板里导出汇总表格百分比良率相关的Monte Carlo也能在同一个环境里衔接效率会高很多。实操心得第一次跑多工艺角时别让每颗管子上的所有参数都随着工艺角变化。先只打开MOS模型的主corner参数关掉电阻、电容的corner变化这样定位性能差异来源时思路更清楚。等全链路仿真时再把所有器件corner都打开。4.3 结果怎么看假设我们用0.18um工艺1.8V电源负载2pF手调后的两级运放工艺角仿真结果大致应该长下面这样工艺角温度开环增益GBW相位裕度功耗TT25°C68 dB11.2 MHz63°0.38 mWSS-40°C65 dB8.1 MHz58°0.31 mWFF125°C71 dB14.6 MHz55°0.49 mWSF25°C66 dB10.3 MHz61°0.36 mWFS25°C67 dB9.4 MHz60°0.39 mW这组数字是示意性的但规律有普遍性SS工艺角下晶体管的gm变小GBW往往偏低输出摆率也会下降FF工艺角下载流子迁移率变大GBW升高但内部寄生电容变化快相位裕度容易变差。如果你的仿真里相位裕度在FF角掉到50°以下线性度会变差、瞬态容易过冲那就要考虑增大补偿电容或优化调零电阻Rz。还有一个容易忽视的点速度快的工艺角不一定功耗是最高因为功耗还跟偏置电流镜的Vth变化有关。所以做工艺角分析时功耗曲线要用瞬态或DC扫描的平均电流去看不能只看手算。4.4 温度和电压怎么和工艺角组合单独的工艺角还不够业界更常见的做法是PVT组合工艺角Process、电源电压Voltage、温度Temperature。我给自己的习惯是至少跑9组TT/SS/FF三个工艺角每个工艺角再取低温加高电源、常温标称电源、高温低电源三种组合。别嫌多一些公司内部的设计文档中甚至要求跑几十组。具体在Cadence里除了把corner定义成变量还可以把电源电压VDD也设成设计变量。比如VDD的标称值是1.8V那么可以设三个值1.62V、1.8V、1.98V然后在参数分析里同时扫描VDD和工艺角。如果你担心结果太多没法看就先扫工艺角和温度把关键的GBW、PM、功耗提取出来再单独跑一次电压最恶劣的组合。还有一点经验温度扫描可以用sweep功能直接在分析里做不需要把温度写成变量反复跑。选温度扫描时模型会自动计算对应温度下的器件参数这样能显著减少手动配置的错误。5. 常见问题与排查技巧5.1 瞬态仿真不收敛怎么处理“瞬态仿真不收敛”可能是Cadence仿真里出现频率最高的一条报错。常见的内部原因有三个电路存在高阻抗节点没有直流路径、初始条件设置不合理、仿真器最小步长下探得过小。处理顺序我一般是先用DC仿真查看各个节点电压是否合理如果DC都不收敛那就是电路结构的问题如果DC能过而瞬态挂了就去改初始条件或者在Analysis里把skipDc设成no确保瞬态起始点是从DC工作点开始的。还可以在仿真器选项里把gmin和cmin设成一个很小的值比如gmin1e-15cmin1e-18给每个节点加一点数值上的导通能力。再有就是把迭代次数上限调大从默认的1000调到5000甚至更多。这些不是万能药但能解决大部分数值抖动问题。避坑千万不要为了强行收敛而把精度参数调到离谱比如reltol设成0.1那样跑出来的波形根本没参考价值。先解决电路问题再考虑数值参数。5.2 器件一直报未定义或找不到模型我碰过最多的情况是模型文件加载了但原理图里的器件符号是从analogLib拉的而模型名和PDK里的Model名字不同。解决方法是先看仿真输出日志里的error信息指出哪颗管子缺模型再去原理图里确认它的model name属性。如果用的是PDK自带符号通常不会有这种问题。如果日志里说的是cannot open file那就是模型路径放错了。检查模型文件的相对路径是否和当前工作目录匹配。一个很土但很有效的方法是把所有模型文件复制到仿真工作目录下把路径写死成相对路径避免每次换目录都报路径错。5.3 原理图纸上警告提示怎么看Cadence原理图检查时如果器件的引脚类型和连接网络类型不匹配会冒出一堆警告。比如电源引脚被连到了普通的信号网络或者输出端口类型设成了input这样仿真时经常会出现奇怪的问题。解决方式是双击器件属性把pin type统一成input、output、inputOutput、power这几种规范类型。另一个常见警告是有节点未连接这时要检查原理图里是不是有悬空引脚。模拟电路里悬空的高阻输入是灾难通常先接一个高阻到地或到合适电位不要放任不管。5.4 波形看起来对但数据对不上有时候波形形态很漂亮但读出来的增益、带宽和手算差很多。这种时候我会去验证AC分析时输入信号源的AC幅值是否设成1。如果AC幅值是0.5那读取的增益就要再乘2很多人会在这里吃亏。另外单位增益带宽的提取要确保是从幅频曲线0dB点去读而不是从直流增益下降3dB的截止频率去读这两个是完全不同的概念。再有就是相位裕度的读取。一定要在增益为0dB的那个频率点上看相位不能随便抓一个频点。我见过有人把低频相位或者是高频相位拿出来算PM结果数字完全没意义。稳妥的办法是在Calculator里直接调用phaseMargin函数或者用bandwidth和phaseAt0dB这种探索函数自动定位。5.5 常见问题速查表现象可能原因排查方向DC仿真不收敛高阻节点无直流通路、电流源悬空检查节点连接给泄流通路瞬态不收敛初始条件不对、步长过小从DC工作点启动调gmin/cmin增益远低于手算管子不在饱和区AC幅值不是1查看工作点检查输入源设置相位裕度为负补偿不够、零点位置不对增大Cc重算Rz换工艺角后性能崩掉偏置没有跟着调、补偿不足做完整PVT组合分析模型未定义库加载错误或名字不匹配检查模型库路径与器件Model name6. 一些属于我的操作习惯过程中有几点操作习惯我认为对提升效率很有用分享出来。我习惯在每次修改原理图前先把上一轮的仿真结果存一个快照或者在ADE里导出CSV。这样当一次大改后性能反而变差时能快速定位是哪次改动引入的问题。在实际项目中这种版本控制思维比任何技巧都重要。第二点调尺寸时不要一次只改一颗管子。把有相关性的管子成组看比如差分输入对的两管永远同步改电流镜负载的两管也同步改。否则你在波形上看到一个变化很难判断到底是哪边引起的。第三点尽量用变量定义晶体管的W和L而不是直接在原理图里写死。比如在Design Variables里定义W1、L1、W2、L2原理图器件的width和length属性填成变量名。这样在Parametric Analysis里扫描尺寸时就不用手动一次次去改原理图了。我后来做Monte Carlo和优化时这套变量体系帮了大忙。最后再分享一个小技巧做工艺角分析时可以把多个corner的AC曲线叠加在同一窗口里然后把目标指标用标尺标出来比如0dB和-180度这两条参考线。这样你一眼就能看到哪个角最靠近悬崖边缘不用对着表格一个个比对。两级运放的Cadence仿真流程并不神秘难的是把每一步都做得可重复、可解释。当你把原理图、工作点、频响、瞬态和工艺角结果整合成一套自己的检查清单再复杂的模拟模块也就变成流水线上的标准动作了。

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

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

免费获取报价 →
↑