ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Cadence Virtuoso ADE L六种仿真类型详解:DC、AC、Transient、Noise、DC Sweep与Parametric Analysis

Cadence Virtuoso ADE L六种仿真类型详解:DC、AC、Transient、Noise、DC Sweep与Parametric Analysis 1. 为什么我劝你先把ADE L的仿真类型吃透刚接触Cadence Virtuoso那会儿我最怕的就是打开ADE L之后面对那一排仿真类型选项。DC、AC、Transient、Noise、DC Sweep、Parametric Analysis六个按钮摆在那里点哪个怎么设设完了跑出来一堆波形哪个是对的哪个是错的说实话前三个月我基本是靠“抄别人的ADE state”活下来的。后来带新人多了发现大家卡住的地方惊人地一致不是不会画原理图也不是不懂电路理论而是不知道每种仿真类型到底在算什么、需要填哪些参数、结果怎么读。这就像你手里有一把瑞士军刀但只会用主刀其他工具全当摆设。这篇内容就是把我这些年用ADE L做仿真的经验整理出来围绕DC、AC、Transient、Noise、DC Sweep、Parametric Analysis这六种最常用的仿真类型从设置逻辑到实操细节再到踩过的坑一次讲清楚。不管你是刚入门的微电子专业学生还是从其他EDA工具转过来的工程师只要你在用Virtuoso做模拟电路仿真这些内容都能直接上手用。注意本文基于Cadence Virtuoso IC617/IC618版本ADE L界面。不同版本菜单项可能略有差异但核心逻辑一致。2. 仿真前的准备工作别急着点Run2.1 原理图检查清单在打开ADE L之前有几件事必须先确认。我见过太多人仿真跑不出来最后发现是原理图本身有问题。器件模型是否绑定打开原理图选中任意一个MOS管按Q查看属性。确认Model Name栏填的是有效的模型名比如nmos_18而不是默认的nmos。如果模型名不对仿真器根本找不到器件参数会直接报“器件未定义”的错误。电源和地是否接好这个听起来很基础但我确实遇到过有人在原理图里放了vdc但忘了接gnd跑DC仿真时提示“节点悬空”。检查方法很简单在原理图里按ShiftC调出Check and Save如果有悬空节点会报warning。端口和线网命名输入输出端口建议用有意义的名称比如vin、vout、clk不要用net1、net2这种默认名。后面看波形的时候你会感谢自己。仿真库路径确认你的工艺库已经正确挂载。在CIW窗口Command Interpreter Window里Tools → Library Manager看看你的工艺库是否在列表里。如果不在需要先通过Tools → Library Path Editor添加。2.2 ADE L的启动与基本界面从原理图窗口启动ADE LLaunch → ADE L。或者直接在CIW里输入ade命令。ADE L的界面分几个区域左侧Design区域显示当前仿真的cellview和库信息中间Analyses区域仿真类型设置的核心区域右侧Outputs区域设置你要输出的信号和表达式底部Variables区域设计变量比如W、L、VDD等我习惯先把Variables区域填好。比如VDD1.8W10uL180n这样后面设置仿真参数时可以直接引用变量名改起来方便。2.3 设计变量的合理规划变量命名要有规律。我的习惯是电源类VDD、VSS、VBIAS器件尺寸WN、WP、LN、LP负载类CL、RL温度TEMP这样做的好处是后面做Parametric Analysis的时候直接选变量名就行不用去原理图里翻。实操心得变量值后面一定要带单位。比如1.8写成1.810u写成10u。Cadence默认单位是国际单位制不带单位会被当成1处理这个坑我踩过不止一次。3. 六种仿真类型逐个拆解3.1 DC分析静态工作点的照妖镜DC分析是所有仿真的基础。它算的是电路在直流条件下的工作点——每个节点的电压、每条支路的电流。设置步骤在ADE L的Analyses区域点击Choose → dc。弹出的窗口里主要填两个东西Save DC Operating Point勾上。这样仿真完可以看每个器件的静态工作点。DC Analysis如果只是算工作点这里不用填。如果要扫描某个电压源才需要设置。点OK之后Analyses区域会出现dc的条目。然后点Outputs → To Be Plotted → Select on Schematic在原理图里点你要看的节点。比如点vout的线就会在Outputs里出现vout的电压。结果解读跑完DC之后Results → Print → DC Operating Point。会弹出一个表格列出所有节点的电压和所有器件的电流。重点看几个东西MOS管的region是0截止、1线性区、2饱和区还是3亚阈值区。做放大器的话输入对管必须在饱和区。Vth和Vdsat确认过驱动电压Vov Vgs - Vth是否合理。支路电流比如尾电流源的电流是否和设计值一致。常见问题问题现象可能原因排查方法所有节点电压为0电源没接或没使能检查vdc属性MOS管region0偏置不对检查栅极电压电流为nA级器件模型不对检查Model Name仿真报收敛错误电路有正反馈或悬空节点加初始条件或检查连接注意DC分析不收敛是新手最常遇到的问题。解决方法是在Analyses窗口里勾上“Convergence Aids”或者给关键节点加.nodeset初始电压。3.2 DC Sweep看曲线比看单点有用DC Sweep是在DC分析基础上让某个电压源或电流源从A扫到B步长为C看输出怎么变。设置步骤Choose → dc在DC Analysis区域Component Name选你要扫的电压源比如v1Sweep RangeStart填0Stop填1.8Sweep TypeLinear线性或Logarithmic对数Step Size比如0.01然后Outputs里选vout。跑完之后Results → Direct Plot → DC就能看到vout随v1变化的曲线。典型应用看反相器的电压传输特性VTC曲线扫vin看vout看电流镜的匹配特性扫一个支路的电流看另一个支路的电流看带隙基准的温度特性扫温度看输出电压实操细节扫的时候步长很关键。步长太大曲线会失真步长太小仿真时间会很长。我的经验是线性扫描步长取总范围的1/100到1/500对数扫描每十倍频程取10到50个点踩过的坑有一次扫VTC曲线步长设了0.1结果曲线看起来像折线。后来改成0.01曲线才平滑。所以看曲线细节的时候步长一定要够小。3.3 AC分析频域特性的核心工具AC分析算的是电路在小信号下的频率响应。它会在工作点附近对电路做线性化然后扫频率看增益和相位怎么变。设置步骤Choose → ac。主要填Sweep RangeStart填1HzStop填1GHzSweep TypeLogarithmicPoints Per Decade一般填10到20然后Outputs里设置你要看的表达式。比如看增益就选vout然后在Outputs里点vout右边的表达式栏输入dB20(vout)或者dB20(vout/vin)。结果解读跑完AC之后Results → Direct Plot → AC。会弹出波形窗口显示增益曲线和相位曲线。重点看几个指标DC增益低频时的增益值-3dB带宽增益下降3dB对应的频率单位增益带宽GBW增益降到0dB时的频率相位裕度增益降到0dB时相位离-180度还有多少度相位裕度的计算在波形窗口里用Marker → Trace → Cross找到增益曲线穿过0dB的频率点。然后看这个频率点的相位值相位裕度 180 相位值。比如相位是-120度那相位裕度就是60度。一般要求相位裕度大于45度最好大于60度。常见问题问题现象可能原因解决方法增益曲线不平坦工作点不对先跑DC确认工作点相位从0度开始输出表达式写错检查是否用了dB20高频增益上升存在正反馈检查电路连接曲线有尖峰存在谐振检查寄生电容和电感实操心得AC分析之前一定要先跑DC。因为AC是在DC工作点附近做线性化如果DC工作点不对AC结果完全没有意义。我习惯先跑DC确认所有管子都在饱和区再跑AC。3.4 Transient分析时域波形的直接观察Transient分析算的是电路随时间的变化。它是最直观的仿真类型因为你可以直接看到波形。设置步骤Choose → tran。主要填Stop Time仿真总时长比如1uAccuracy Defaults一般选moderateMax Step最大时间步长比如10n然后Outputs里选你要看的节点。结果解读跑完Transient之后波形窗口会显示电压随时间的变化。重点看上升时间从10%到90%的时间下降时间从90%到10%的时间过冲最大值超过稳态值的百分比建立时间从开始到进入稳态误差带的时间振荡是否有振铃参数选择Stop Time的选择很关键。太短了看不到完整波形太长了仿真时间会很长。我的经验是对于阶跃响应Stop Time取5到10倍的时间常数对于时钟电路Stop Time取几个时钟周期对于振荡器Stop Time取几十个周期Max Step的选择也很重要。太大了波形会失真太小了仿真会跑很久。一般取Stop Time的1/1000到1/10000。常见问题问题现象可能原因解决方法仿真不收敛电路有突变或正反馈减小Max Step加初始条件波形有毛刺步长太大减小Max Step仿真时间过长步长太小或Stop Time太大调整参数波形不对激励源设置错误检查vpulse/vsin参数踩过的坑有一次跑Transient波形一直振荡不收敛。查了半天发现是Max Step设太大了改成1n之后问题解决。所以Transient仿真不收敛的时候第一个要检查的就是Max Step。3.5 Noise分析信噪比的关键Noise分析算的是电路内部的噪声贡献。它会计算每个器件对输出噪声的贡献然后给出等效输入噪声和输出噪声。设置步骤Choose → noise。主要填Sweep Range和AC一样Start填1Stop填1GSweep TypeLogarithmicPoints Per Decade10到20Output Noise选输出节点比如voutInput Noise选输入源比如vin结果解读跑完Noise之后Results → Direct Plot → Noise。会显示两条曲线Output Noise输出端的噪声谱密度单位V/sqrt(Hz)Input Referred Noise等效到输入端的噪声单位V/sqrt(Hz)重点看低频噪声主要是闪烁噪声1/f噪声高频噪声主要是热噪声积分噪声对噪声谱密度积分得到总噪声功率噪声贡献分析在Results → Print → Noise Summary。会列出每个器件对总噪声的贡献百分比。这个功能非常有用可以帮你找到噪声的主要来源。比如你发现某个MOS管的噪声贡献占了80%那就可以考虑增大它的面积来降低闪烁噪声或者增大它的过驱动电压来降低热噪声。常见问题问题现象可能原因解决方法噪声曲线异常工作点不对先跑DC确认噪声贡献集中在某个器件该器件面积太小或电流太大调整尺寸或电流输入噪声远大于输出噪声增益太低检查增益设置实操心得Noise分析一定要在AC分析之后做。因为Noise分析需要先算AC增益才能把输出噪声等效到输入端。如果AC结果不对Noise结果也没有意义。3.6 Parametric Analysis参数扫描的利器Parametric Analysis是在其他仿真类型的基础上让某个设计变量从A变到B看结果怎么变。设置步骤在ADE L里Tools → Parametric Analysis。弹出的窗口里Variable Name选你要扫的变量比如WRange Type选RangeStart/Stop/Step填起始值、终止值、步长然后点Analysis → Start。它会自动跑多次仿真每次改变量值。结果解读跑完之后波形窗口会显示多条曲线每条对应一个变量值。你可以用Marker → Trace → Family来查看不同变量值下的曲线。典型应用扫MOS管宽度看增益和带宽怎么变扫负载电容看建立时间怎么变扫温度看基准电压怎么变扫电源电压看PSRR怎么变实操细节Parametric Analysis可以嵌套。比如你先扫W再扫L就能看到二维的参数空间。但嵌套层数不要太多否则仿真时间会爆炸。注意Parametric Analysis跑之前一定要先手动跑一次单点仿真确认设置没问题。否则Parametric Analysis跑了几十次最后发现设置错了时间全浪费了。4. 仿真设置中的关键参数与计算4.1 精度与收敛的平衡仿真精度和收敛速度是一对矛盾。精度太高仿真跑不动精度太低结果不可信。ADE L里控制精度的主要参数reltol相对误差容限默认1e-3abstol绝对误差容限默认1e-12vntol电压误差容限默认1e-6一般情况用默认值就行。如果仿真不收敛可以适当放宽reltol改成1e-2abstol改成1e-9但放宽之后要确认结果是否仍然可信。我的做法是先用默认值跑如果不收敛再放宽放宽之后和默认值的结果对比一下如果差异不大就接受。4.2 温度设置温度对模拟电路的影响很大。ADE L里设置温度在Setup → Temperature里填温度值比如27摄氏度。如果要扫温度用Parametric Analysis变量名选temp。温度对MOS管的影响阈值电压Vth随温度升高而降低大约-2mV/°C迁移率随温度升高而降低大约-0.5%/°C亚阈值斜率随温度升高而变差所以做温度扫描的时候要同时看增益、带宽、功耗等指标。4.3 初始条件设置有些电路有多个稳态比如锁存器、触发器。这时候需要设置初始条件让仿真从指定的状态开始。设置方法在原理图里选中节点按Q在Initial Condition里填初始电压。或者在ADE L里Setup → Initial Conditions手动添加节点和初始值。实操心得初始条件不要随便设。设错了会导致仿真结果完全不对。我的习惯是先用DC分析确认电路的工作点然后把工作点电压作为初始条件。5. 常见问题与排查技巧实录5.1 仿真不收敛怎么办这是最常见的问题。排查思路检查原理图有没有悬空节点有没有正反馈检查电源电源电压是否合理有没有接错检查器件模型Model Name是否正确调整仿真参数减小Max Step放宽reltol和abstol加初始条件给关键节点加.nodeset分步仿真先跑DC再跑AC最后跑Transient5.2 波形不对怎么办如果波形看起来不对排查思路确认工作点先跑DC看所有管子是否在正确的区域确认激励检查vpulse/vsin的参数是否正确确认输出检查Outputs里选的节点是否正确确认表达式检查表达式是否写对比如dB20还是dB10对比手算用手算的结果和仿真结果对比5.3 仿真速度太慢怎么办仿真速度慢的原因和解决方法原因解决方法步长太小增大Max Step精度太高放宽reltol和abstol电路太大分块仿真仿真时间太长减小Stop Time扫描点太多减少Points Per Decade5.4 常见错误信息速查错误信息含义解决方法Device is not defined器件模型未定义检查Model NameNode is floating节点悬空检查连接Convergence failure不收敛调整参数或加初始条件Singular matrix矩阵奇异检查是否有短路或悬空Time step too small时间步长太小增大Max Step踩过的坑有一次仿真报“Singular matrix”查了半天发现是两个节点之间不小心画了一根短路线。所以原理图检查一定要仔细特别是用复制粘贴的时候。6. 从仿真到设计的闭环仿真不是目的设计才是。跑完仿真之后要做几件事对比设计指标把仿真结果和设计指标对比。增益够不够带宽够不够功耗超没超噪声大不大分析偏差原因如果仿真结果和设计指标有偏差要分析原因。是手算模型太简单还是寄生效应没考虑还是工艺角不对迭代优化根据分析结果调整设计参数重新仿真。这个循环可能要跑很多次。工艺角仿真单点仿真通过之后要做工艺角仿真。至少跑TT、FF、SS三个角。如果要求高还要跑SF、FS。蒙特卡洛仿真如果要求更高还要做蒙特卡洛仿真看良率。我个人的习惯是每次改完电路先跑DC确认工作点再跑AC看频响再跑Transient看时域最后跑Noise看噪声。四个都过了才算这一版设计通过。7. 一些零碎但有用的经验关于ADE L的state保存调好一个仿真设置之后一定要保存state。File → Save State。下次直接Load State就行不用重新设一遍。关于Outputs的表达式Outputs里可以写表达式比如dB20(vout/vin)、deriv(vout)、integ(vout)。这些表达式非常有用可以省去很多手动计算。关于波形窗口的操作波形窗口里按A可以添加曲线按D可以删除曲线按M可以加Marker。这些快捷键用熟了效率会高很多。关于仿真日志仿真跑完之后CIW窗口会输出日志。日志里有很多有用信息比如仿真时间、收敛情况、警告信息。养成看日志的习惯。关于版本差异IC617和IC618的ADE L界面略有不同。IC618的ADE L功能更强但基本操作逻辑一致。如果你用的是IC617有些菜单项可能在稍微不同的位置。关于脚本化如果经常跑同样的仿真可以考虑用Ocean脚本。Ocean是Cadence的脚本语言可以自动化仿真流程。这个内容比较多以后可以单独讲。关于仿真与实测的差距仿真结果和实测结果永远有差距。差距主要来自寄生参数、工艺偏差、温度变化、电源噪声。所以仿真的时候要留足够的余量。我的习惯是仿真结果要比设计指标好20%以上才觉得比较稳妥。关于学习路径如果你是新手建议先从DC分析开始把工作点调对。然后学AC分析看频响。然后学Transient看时域。最后学Noise和Parametric。不要一上来就六个全学容易懵。关于参考资料Cadence自带的帮助文档其实很详细。在ADE L里按F1就能打开。另外Cadence的Support网站上有不少应用笔记。还有就是多逛论坛很多问题别人已经踩过坑了。关于仿真时间的管理仿真跑起来之后不要干等着。可以同时做别的事情比如看论文、写报告、调另一个电路。但要注意仿真跑完要及时看结果否则容易忘记。关于仿真结果的记录每次仿真的结果要记录下来。我习惯用一个Excel表格记录日期、电路版本、仿真类型、关键指标、备注。这样后面查起来方便也能看到设计的演进过程。关于团队协作如果是团队协作仿真设置要统一。比如都用同样的温度、同样的工艺角、同样的精度设置。否则不同人跑出来的结果没法对比。关于仿真与版图的迭代原理图仿真通过之后要做版图然后做后仿真。后仿真会引入寄生参数结果通常会变差。所以原理图仿真的时候要留余量。后仿真通过之后才能tapeout。关于仿真中的“玄学”问题有时候仿真结果很奇怪查了半天查不出原因。这时候可以试试重启Cadence、换一台机器、重新建一个cellview。有些问题就是工具本身的bug不用太纠结。关于持续学习模拟电路仿真是一个需要长期积累的技能。每次遇到新问题解决之后要总结。时间长了你就会形成自己的排查思路和方法论。这比记住某个具体操作更有价值。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进