1. 为什么我劝你先把ADE L的六种仿真吃透
刚接触Cadence Virtuoso那会儿,我最怕的就是仿真。原理图画完了,器件参数也填了,结果一打开ADE L,满屏的选项直接把人看懵。DC、AC、Tran、Noise、DC Sweep、Parametric——六个仿真类型摆在那里,每个里面还有一堆设置项,点错了要么跑不出来,要么跑出来的结果根本不对。后来带新人,发现大家卡的地方几乎一模一样:不是不会画原理图,而是不知道怎么把仿真设对。
这篇内容就是把我这些年用ADE L做仿真的经验整理出来,从DC到Noise,六种常用仿真一次讲清楚。不管你是刚学Virtuoso的在校学生,还是转岗做模拟IC的工程师,只要跟着走一遍,至少能少踩我当年踩过的坑。核心关键词就几个:Cadence、Virtuoso、ADE L、DC、Noise,围绕这几个点展开,把每种仿真的设置逻辑、参数含义、常见报错和排查方法都讲透。
先说清楚一件事:ADE L是Virtuoso里最基础的仿真环境,虽然现在很多人用ADE XL或者Maestro,但ADE L是根。你把ADE L玩明白了,换到任何上层工具都是平移。而且很多老工艺库、老项目,跑仿真还是得回到ADE L。所以别急着跳过它。
下面按六个仿真类型逐个拆。每个都会讲清楚三件事:这个仿真到底在算什么、关键参数怎么设、跑完之后怎么看结果。中间会穿插我实际踩过的坑和排查思路,这些是文档里不会写的。
2. 六种仿真类型逐个拆解与实操设置
2.1 DC分析:静态工作点到底怎么看
DC分析是六种仿真里最基础也最重要的一个。它算的是电路在直流条件下的静态工作点——每个节点的电压、每条支路的电流。听起来简单,但实际用起来,很多人第一步就卡住了:DC分析跑完,结果在哪看?
在ADE L里,DC分析的结果默认不会自动画图,而是存在一个叫"DC Operating Point"的地方。你需要点Results → Print → DC Operating Point,然后选你要看的节点或器件。或者更直接的办法:在原理图上点中某个节点,按快捷键p,它会弹出那个节点的所有直流参数。
设置上,DC分析本身没什么好调的,主要注意两个地方:
- Save DC Operating Point:这个选项一定要勾上,否则跑完看不到工作点。位置在ADE L的Outputs → Save All → DC Operating Point。
- Design Variables:如果你的电路里有变量(比如W、L、R的值),确保这些变量在ADE L里已经定义好了。没定义的话,仿真会直接报"undefined variable"。
我见过最常见的问题是:DC跑完了,但某个MOS管显示在截止区或者线性区,不是饱和区。这时候别急着改电路,先检查两件事:一是电源电压设对没有,二是偏置电压是不是被其他支路拉偏了。我一般会先跑一遍DC,把所有关键节点的电压列出来,对着手算值一个一个比。差得不多就调偏置,差得离谱就回去查原理图连接。
提示:DC分析跑之前,建议先把所有器件的初始条件设一下。特别是电容、电感这些储能元件,不设初始条件的话,DC分析可能会报"no convergence"。
2.2 DC Sweep:扫描变量找最优工作点
DC Sweep是在DC分析基础上加了一个扫描变量。比如你想看某个偏置电压从0V扫到1.8V时,输出电流怎么变,就用这个。设置上比DC多了一个"Primary Sweep"选项,里面选你要扫的变量、起始值、终止值和步长。
这里有个经验:步长别设太小。我见过有人扫0到1.8V,步长设0.001V,结果跑了半小时还没完。一般先粗扫,步长0.1V或者0.05V,找到大致区间后再细扫。细扫的时候步长可以到0.01V甚至0.001V,但只扫你关心的那一段。
扫描变量可以是电压源、电流源,也可以是设计变量。如果是扫描设计变量(比如MOS管的W),那就在Design Variables里选。扫描结果会自动画成曲线,横轴是扫描变量,纵轴是你选的输出。
常见问题:扫描跑完了,曲线是断的或者跳变的。这通常是因为仿真器在某些点上不收敛。解决办法有两个:一是把步长调大一点,让仿真器跳过那些难收敛的点;二是在ADE L的Simulation → Convergence Aids里,把reltol和abstol放宽一点。但放宽精度要谨慎,别放太宽,否则结果不可信。
2.3 AC分析:频率响应和稳定性怎么看
AC分析算的是小信号频率响应。它会在你设定的频率范围内,对电路做小信号线性化,然后算增益和相位随频率的变化。这个分析主要用来看带宽、相位裕度、增益裕度这些稳定性指标。
设置上,AC分析需要指定频率范围。一般从1Hz扫到1GHz或者更高,看你的电路工作频率。扫描类型选"Logarithmic",因为频率响应通常看的是对数坐标。每十倍频程的点数(Points Per Decade)一般设10到100,设太少曲线不平滑,设太多跑得慢。
AC分析的关键是交流源。你需要在电路里放一个AC源,设好它的AC幅度(一般设1V),然后把这个源作为输入。ADE L里在Inputs → AC里选这个源。没设AC源的话,AC分析跑出来全是零。
跑完AC之后,看两个东西:增益曲线和相位曲线。增益曲线看-3dB带宽,相位曲线看相位裕度。相位裕度一般要求大于45度,最好大于60度。如果相位裕度不够,电路可能会振荡。
我踩过的坑:AC分析跑出来增益是负的。后来发现是AC源的幅度设成了0,或者输入节点选错了。还有一种情况是,电路里某个节点没有直流通路,导致小信号分析时那个节点浮空,结果完全不对。这时候需要在那个节点加一个大电阻到地,给它一个直流通路。
2.4 Tran分析:瞬态仿真不收敛怎么办
Tran分析是瞬态仿真,算的是电路在时域上的响应。比如你给一个阶跃信号,看输出怎么变化。这个分析主要用来看建立时间、过冲、振铃这些时域指标。
设置上,Tran分析需要指定仿真时间。一般设成你关心的时间的2到3倍。比如你看1us的建立过程,就设3us。步长可以设成自动,也可以手动指定最大步长。手动指定的话,一般设成最小时间常数的1/10到1/20。
Tran分析最容易出的问题就是不收敛。报错信息通常是"Timestep too small"或者"Convergence failure"。我总结了几种常见原因和解决办法:
| 报错信息 | 可能原因 | 解决办法 |
|---|---|---|
| Timestep too small | 电路里有快速变化的节点 | 减小最大步长,或者加snubber电路 |
| Convergence failure | 初始条件不对 | 设初始条件,或者用nodeset |
| Singular matrix | 节点浮空 | 加大电阻到地 |
| Overflow | 数值溢出 | 检查电源电压和器件参数 |
还有一个经验:Tran分析跑之前,先跑一遍DC,确保静态工作点是对的。DC都不对,Tran肯定跑不对。另外,如果电路里有振荡器或者正反馈,Tran分析可能会一直振荡不收敛,这时候需要设初始条件或者用ic语句。
2.5 Noise分析:噪声仿真到底在算什么
Noise分析算的是电路的噪声性能。它会算每个器件对输出噪声的贡献,然后给出等效输入噪声和输出噪声。这个分析主要用来看信噪比、噪声系数这些指标。
设置上,Noise分析需要指定输入源和输出节点。输入源就是你电路里的信号源,输出节点就是你要看噪声的那个节点。频率范围一般和AC分析一样,从低频扫到高频。输出类型选"Output Noise"或者"Input Referred Noise",看你要什么。
Noise分析的结果一般看两条曲线:输出噪声谱密度和等效输入噪声谱密度。单位是V/√Hz或者V²/Hz。看的时候注意,噪声是功率量,所以是平方关系。比如噪声从10nV/√Hz降到5nV/√Hz,功率降了4倍。
我踩过的坑:Noise分析跑出来噪声特别大,后来发现是某个电阻的热噪声没算对。检查后发现是电阻的阻值设错了,多了一个零。所以跑Noise之前,一定要把电路里所有电阻、电容的值核对一遍。另外,Noise分析对仿真精度比较敏感,reltol设太宽的话,噪声结果会偏大。
2.6 Parametric分析:批量扫描参数找最优解
Parametric分析是在其他分析基础上加了一个参数扫描。比如你想看MOS管的W从1u到10u变化时,增益怎么变,就用这个。设置上,Parametric分析需要指定扫描变量、起始值、终止值和步长,然后选一个基础分析(比如AC或者DC)作为子分析。
这个分析的特点是:它会自动跑多次仿真,每次改一个参数值,然后把结果画在一起。所以跑起来比较慢,特别是扫描范围大的时候。我一般先用粗扫找到大致区间,再用细扫精确定位。
常见问题:Parametric分析跑完了,但曲线只有一条。这通常是因为扫描变量没设对,或者子分析没选。检查一下Parametric的设置,确保扫描变量在Design Variables里已经定义,并且子分析选的是你想要的。
提示:Parametric分析可以和DC Sweep叠加使用,但一般不建议,因为跑起来太慢。如果非要叠加,先把其中一个的步长设大一点。
3. 从零跑通一个完整仿真的实操流程
3.1 环境准备与原理图检查
在开始仿真之前,先把环境准备好。打开Virtuoso,新建一个库,把工艺库挂上。工艺库一般是PDK提供的,里面有器件模型和仿真模型。挂库的时候注意,不同工艺的库名可能不一样,但一般都有tt、ff、ss这些工艺角。先选tt,跑通了再换其他角。
原理图画完之后,别急着开ADE L。先做三件事:
- 检查连接:用
Check and Save,确保没有悬空节点、没有短路。 - 检查器件参数:特别是MOS管的W、L、M,电阻的阻值,电容的容值。我一般会把这些参数列个表,对着手算值一个一个核。
- 检查电源和地:确保电源和地都接对了,电源电压设对了。
这三步做完,再打开ADE L。ADE L的启动方式:在原理图窗口点Launch → ADE L,或者直接在CIW里输ade。
3.2 建立仿真环境与变量定义
ADE L打开之后,第一件事是Setup → Design,确认设计库和单元选对了。然后Setup → Model Libraries,把工艺库的模型文件加进来。模型文件一般是.scs或者.lib格式,里面定义了器件的仿真模型。
接下来定义设计变量。在ADE L的Variables → Copy From Cellview,可以把原理图里的变量自动导进来。导进来之后,给每个变量设一个初始值。比如W设1u,L设0.18u,R设1k。这些值不用太精确,先跑通再说。
然后设输出。在Outputs → To Be Plotted → Select On Schematic,然后在原理图上点你要看的节点。比如你要看输出节点的电压,就点那个节点。选完之后,ADE L会自动在Outputs里加一条。
注意:输出节点选的时候,尽量选你真正关心的节点。选太多的话,跑完看结果会很乱。我一般只选3到5个关键节点。
3.3 六种仿真的参数设置与运行
环境建好之后,开始设仿真。在ADE L的Analyses → Choose,里面列出了所有可用的仿真类型。选一个,然后设参数。
以AC分析为例:选ac,设频率范围1到1G,扫描类型Logarithmic,Points Per Decade设20。然后点OK,回到ADE L主界面。这时候Analyses里会多一条ac。点那个绿色的运行按钮,仿真就开始跑了。
跑完之后,结果会自动弹出来。如果没有自动弹,点Results → Direct Plot → Main Form,然后选你要看的曲线。AC分析一般看增益和相位,选dB20和Phase。
其他仿真的设置类似,只是参数不同。DC分析不用设频率,但要勾Save DC Operating Point。Tran分析要设仿真时间。Noise分析要设输入源和输出节点。Parametric分析要设扫描变量。
3.4 结果查看与数据导出
仿真跑完之后,结果查看是个技术活。ADE L的结果窗口里,你可以直接看曲线,也可以把数据导出来。导出的方式:在结果窗口点File → Export → CSV,然后选你要导的曲线。导出来的CSV可以用Excel或者Python处理。
我一般会把关键数据导出来,用Python画图。因为ADE L自带的画图工具功能有限,Python的matplotlib更灵活。比如你要把不同工艺角的结果画在一起对比,用Python就很方便。
导出的时候注意,ADE L导出的CSV有时候会有表头行,用Python读的时候要跳过。另外,导出的数据点可能很多,如果只是看趋势,可以先降采样。
3.5 仿真日志与错误定位
仿真跑失败的时候,别慌。先看仿真日志。日志在ADE L的Simulation → Output Log,或者直接在CIW里看。日志里会告诉你哪一步出错了,报什么错。
常见的错误和定位方法:
- "undefined variable":变量没定义。检查Design Variables,确保所有变量都有值。
- "model not found":模型库没挂对。检查Model Libraries,确保路径和文件名都对。
- "convergence failure":不收敛。先跑DC,看静态工作点对不对。不对的话调偏置。
- "singular matrix":矩阵奇异。通常是节点浮空,加个大电阻到地。
定位错误的时候,我一般用二分法:先把电路分成两半,分别跑,看哪一半出问题。找到出问题的那一半,再继续分。这样比从头查到尾快得多。
4. 常见问题与排查技巧实录
4.1 仿真不收敛的六种排查思路
仿真不收敛是新手最常遇到的问题。我总结了六种排查思路,按优先级排:
- 先跑DC:DC都跑不通,其他仿真肯定跑不通。DC跑通了,再看其他。
- 检查初始条件:电容、电感这些储能元件,不设初始条件的话,仿真器不知道从哪开始算。设个合理的初始值。
- 加nodeset:在难收敛的节点上加
nodeset语句,给仿真器一个初始猜测值。 - 放宽精度:在Simulation → Convergence Aids里,把
reltol从1e-3放到1e-2,abstol从1e-12放到1e-9。但别放太宽。 - 减小步长:Tran分析里,把最大步长减小。步长太大,仿真器可能跳过快速变化的区域。
- 加snubber:在快速变化的节点上加RC snubber,吸收高频振荡。
这六种方法不是孤立的,可以组合使用。我一般先用1和2,不行再用3和4,再不行用5和6。
4.2 结果不对的五个检查点
仿真跑通了,但结果不对,这种情况更让人头疼。我一般按五个检查点来查:
- 检查电源和地:电源电压对不对,地接没接。我见过有人把电源和地接反了,结果跑出来全是负的。
- 检查器件参数:W、L、R、C的值对不对。特别是单位,1u和1m差1000倍。
- 检查模型库:工艺角选对没有。tt、ff、ss的结果差别很大。
- 检查输出节点:选对没有。选错节点的话,看的是别的地方的信号。
- 检查仿真设置:频率范围、扫描范围、步长对不对。
这五个检查点,我一般从第一个开始查,查到哪个不对就改哪个。大部分问题都出在前三个。
4.3 提升仿真速度的四个实用技巧
仿真跑得慢,特别是Parametric和Noise,跑一次要等很久。我总结了四个提速技巧:
- 减少输出节点:只选你真正关心的节点。选太多的话,仿真器要算很多没用的东西。
- 放宽精度:在不影响结果的前提下,把
reltol和abstol放宽一点。 - 用粗扫代替细扫:先粗扫找到大致区间,再细扫。别一上来就细扫。
- 并行跑:如果机器性能够,可以开多个ADE L窗口,同时跑不同的仿真。
还有一个技巧:把常用的仿真设置存成脚本。ADE L支持ocn脚本,可以把设置写成脚本,下次直接跑脚本,不用重新设。这个我后面会单独讲。
4.4 工艺角仿真的批量处理方法
工艺角仿真是必须做的,但手动跑太慢。我一般用两种方法批量跑:
方法一:用ADE XL。ADE XL是ADE L的升级版,支持批量跑工艺角。设置好之后,点一下就能把所有角跑完。但ADE XL学习曲线比较陡,新手可能需要适应一下。
方法二:用脚本。写一个ocn脚本,里面循环所有工艺角,每次改模型库,跑仿真,存结果。这个方法的优点是灵活,想怎么跑就怎么跑。缺点是写脚本需要一点编程基础。
我一般先用ADE XL跑一遍,看看大致结果。如果某个角有问题,再用脚本单独跑那个角,细看。
4.5 仿真结果与手算不符时的调试方法
仿真结果和手算不符,这种情况最考验人。我一般按三步走:
第一步:确认手算对不对。手算的时候,有没有忽略什么?比如MOS管的输出电阻、体效应、寄生电容。手算一般是简化模型,仿真用的是完整模型,有差异是正常的。
第二步:确认仿真设置对不对。仿真设置里,有没有什么选项会影响结果?比如AC分析的频率范围、DC分析的初始条件。
第三步:逐步简化电路。把电路简化到最简单,跑一遍,看结果对不对。对的话,逐步加回原来的部分,看哪一部分导致差异。这个方法比较笨,但很有效。
我踩过的坑:有一次仿真结果和手算差了20%,查了半天,发现是手算的时候忘了算体效应。加上体效应之后,结果就对上了。所以手算的时候,一定要把主要效应都考虑进去。
5. 我这些年攒下的ADE L使用心得
5.1 快捷键与效率提升
ADE L里有很多快捷键,用熟了能省不少时间。我常用的几个:
F2:保存当前设置F5:运行仿真F8:查看结果Ctrl+D:复制当前分析Ctrl+E:编辑当前分析
还有一个技巧:把常用的分析存成模板。在ADE L里,点File → Save As Template,把当前设置存成模板。下次新建仿真的时候,直接选模板,不用重新设。
5.2 脚本自动化入门
ADE L支持ocn脚本,可以把仿真设置写成脚本。比如:
simulator('spectre) analysis('dc ?saveOppoint t) desVar("W" 1u) desVar("L" 0.18u) temp(27) run() selectResult('dc)这个脚本设了DC分析,定义了W和L两个变量,设了温度27度,然后跑仿真。跑完之后,用selectResult选结果。
脚本的好处是:可以批量跑,可以参数化,可以自动化。我一般把常用的仿真写成脚本,跑的时候直接改参数就行。
5.3 版本差异与兼容性注意
Cadence Virtuoso的版本很多,不同版本之间有些差异。我用的比较多的是IC617和IC618。IC618比IC617多了些功能,比如更好的ADE XL支持、更快的仿真速度。但IC618对机器要求也高一些。
如果你从IC617换到IC618,注意两件事:一是模型库的格式可能变了,需要重新挂;二是有些老脚本可能不兼容,需要改。我一般换版本之前,先把老项目备份一份,免得改坏了回不去。
5.4 与ADE XL的配合使用
ADE L和ADE XL不是替代关系,是互补关系。ADE L适合快速验证、单点仿真。ADE XL适合批量仿真、工艺角扫描、优化。
我一般的工作流是:先用ADE L把电路调通,确认静态工作点对、基本功能对。然后用ADE XL跑工艺角、跑蒙特卡洛、跑优化。ADE XL跑出来的结果,如果有问题,再回到ADE L细看。
ADE XL的界面和ADE L不太一样,但底层是一样的。你把ADE L玩明白了,ADE XL上手就快。
5.5 我踩过的三个典型坑
坑一:忘了挂模型库。有一次跑仿真,报"model not found",查了半天,发现是Model Libraries里没挂工艺库。挂上之后就好了。所以跑仿真之前,一定要确认模型库挂对了。
坑二:变量没定义。有一次跑Parametric,扫描变量没在Design Variables里定义,结果跑出来只有一条曲线。后来把变量定义上,就好了。
坑三:输出节点选错。有一次看AC增益,结果一直是0dB。查了半天,发现输出节点选的是电源节点,不是输出节点。改过来之后,增益就对了。
这三个坑,说到底都是粗心。所以跑仿真之前,一定要把设置检查一遍。我一般会列个检查清单,一项一项过。
6. 从DC到Noise的完整仿真检查清单
6.1 仿真前的十项检查
跑仿真之前,我一般会过一遍这个清单:
- 原理图Check and Save过了没有
- 电源和地接对了没有
- 器件参数核对过了没有
- 模型库挂对了没有
- 设计变量定义全了没有
- 输出节点选对了没有
- 仿真类型选对了没有
- 仿真参数设对了没有
- 温度设对了没有
- 工艺角选对了没有
这十项,每一项都确认一遍,能避免大部分低级错误。
6.2 仿真后的五项验证
仿真跑完之后,别急着看结果,先做五项验证:
- 仿真日志有没有报错
- 静态工作点对不对
- 关键节点电压对不对
- 结果曲线有没有异常跳变
- 和手算值差多少
这五项验证做完,再细看结果。如果哪一项不对,先解决那一项,再看其他。
6.3 结果归档与复现要点
仿真跑完之后,结果要归档。我一般会把这几样东西存下来:
- 原理图文件
- ADE L设置文件(
.ocn或者.scs) - 仿真结果(CSV或者
.raw文件) - 仿真日志
- 一份简短的说明,写清楚这次仿真跑了什么、结果怎么样、有什么问题
归档的好处是:下次跑同样的仿真,直接调出来就行,不用重新设。而且如果结果有问题,可以回溯,看是哪一步出的错。
复现的时候注意:不同版本的Virtuoso,设置文件可能不兼容。所以归档的时候,最好把版本号也记下来。另外,模型库的路径可能变了,复现的时候要重新挂。
6.4 进阶方向:从ADE L到ADE XL
ADE L玩熟了之后,可以往ADE XL走。ADE XL支持更多功能,比如:
- 批量工艺角仿真
- 蒙特卡洛分析
- 参数优化
- 结果对比
从ADE L到ADE XL,不是重新学,而是平移。ADE L里的设置,ADE XL里都有对应的。只是ADE XL的界面更复杂,功能更多。
我一般建议:先把ADE L的六种仿真跑熟,再学ADE XL。ADE L都没跑熟,直接上ADE XL,容易懵。
6.5 我个人的仿真工作流分享
最后分享一下我个人的仿真工作流:
- 画原理图,Check and Save
- 打开ADE L,挂模型库,定义变量
- 先跑DC,确认静态工作点
- 跑AC,看频率响应和稳定性
- 跑Tran,看时域响应
- 跑Noise,看噪声性能
- 跑DC Sweep和Parametric,找最优参数
- 用ADE XL跑工艺角和蒙特卡洛
- 归档结果,写仿真报告
这个工作流不是固定的,根据电路类型可以调整。比如纯数字电路,可能不需要Noise分析。射频电路,可能AC分析更重要。但大体思路是一样的:先DC,再AC,再Tran,最后Noise和Parametric。
跑仿真这件事,说到底就是细心加耐心。设置检查一遍,结果验证一遍,大部分问题都能避免。剩下的那些疑难杂症,靠经验积累。我这些年踩过的坑,上面都写了,希望能帮你少走点弯路。