ARTICLE DETAIL

资讯详情

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

Cadence Virtuoso ADE L仿真全解析:DC、AC、瞬态与噪声设置指南

Cadence Virtuoso ADE L仿真全解析:DC、AC、瞬态与噪声设置指南 1. 为什么DC工作点是一切仿真的地基很多刚接触Cadence Virtuoso ADE L的人上来就想跑瞬态、跑AC结果仿真器报一堆“器件未定义”“节点悬空”的错误回头查半天发现是DC工作点根本没收敛。我见过太多这样的情况一个简单的共源放大器DC仿真跑不通却急着去调AC仿真的频率范围这完全是本末倒置。DC工作点分析DC Operating Point Analysis的本质是让仿真器在没有任何时间变量、频率变量的静态条件下求解电路的非线性方程组找到每个节点的电压和每条支路的电流。这个解就是电路在“静止状态”下的真实偏置。只有这个解存在且合理后续的AC、瞬态、噪声等分析才有意义。你可以把DC工作点理解为盖楼前的地基勘探——地基没探明白上面盖什么都是空中楼阁。在ADE L里设置DC仿真核心就几个参数温度Temperature、设计变量Design Variables和输出保存选项。温度默认是27°C但如果你做的是车规级或工业级电路可能需要扫-40°C到125°C。设计变量则是你在原理图里用parameter定义的符号变量比如W、L、Ibias在ADE L的Variables菜单里给它们赋初值。注意DC仿真不收敛时先别急着改仿真器选项。第一步永远是检查原理图里有没有悬空的节点、有没有器件模型没绑定、有没有电源地没接对。90%的DC不收敛都是原理图本身的问题而不是仿真器设置的问题。1.1 DC仿真的输出到底看什么跑完DC仿真很多人打开Results→Print→DC Operating Point看到一长串节点电压和器件电流就懵了。其实你只需要关注三类信息第一类是关键节点的直流电压。比如放大器的输入共模点、输出点、偏置管的栅极电压。这些电压决定了管子是否工作在饱和区。以NMOS为例你要确认Vgs Vth且Vds Vgs - Vth否则管子要么截止要么在线性区。第二类是晶体管的区域标识。在Results→Annotate→DC Operating Points里Virtuoso会直接在原理图上标注每个管子的region参数0是截止1是线性区2是饱和区3是亚阈值区。这个标注极其直观一眼就能看出哪个管子偏置错了。第三类是支路电流。比如你设计了一个1:1的电流镜参考支路和镜像支路的电流应该基本相等。如果差很多要么是沟道长度调制效应太强要么是镜像管的Vds不匹配。我个人的习惯是DC跑完后先看region标注把所有管子调到饱和区再看关键节点电压是否在预期范围内最后核对支路电流。这三步走完DC工作点才算真正“过关”。1.2 扫描变量DC仿真的进阶玩法单纯的DC工作点只是给电路拍了一张“静态照片”。真正有用的是DC扫描DC Sweep也就是让某个变量在一定范围内变化观察电路的工作点如何随之改变。在ADE L里设置DC扫描需要在Analyses窗口选择dc然后勾选Save DC Operating Point再在Design Variable里选择要扫描的变量设置Start、Stop和Step。比如你想看NMOS的gmoverid随Vgs的变化就可以扫描Vgs从0到1.8V步长10mV。这里有个实操细节扫描步长不能太大否则会错过工作区的转折点也不能太小否则仿真时间成倍增加。我的经验是对于1.8V工艺步长取5mV到10mV比较合适对于3.3V工艺取10mV到20mV。如果你只是粗略看趋势步长可以再放大。扫描完成后用Results→Direct Plot→DC选择你要看的表达式比如ID、gm、gds就能得到曲线。如果你想看gm/ID这个品质因数可以在Calculator里直接写gm()/ID()然后Plot。这个比值在低功耗设计里非常关键它反映了每单位电流能换来多少跨导。2. AC仿真从增益到相位裕度的完整链路AC仿真AC Analysis是分析电路频率响应的标准手段。它的原理是在DC工作点附近对电路进行小信号线性化然后在一个频率范围内扫描计算每个频率点的增益和相位。注意AC仿真必须建立在DC工作点收敛的基础上因为小信号参数gm、gds、Cgs等都是从DC解里提取的。在ADE L里设置AC仿真关键参数有三个频率扫描类型Linear、Logarithmic、Decade、起始频率、终止频率、每十倍频程的点数。对于放大器通常用Logarithmic从1Hz扫到1GHz每十倍频程100个点。点数太少曲线不平滑太多则仿真时间过长。提示AC仿真本身不产生“增益”这个直接输出你需要用Calculator或Direct Plot来提取。最常用的表达式是dB20(VF(/out))其中VF是电压频率函数/out是输出节点。如果是差分电路可以用dB20(VF(/outp) - VF(/outn))。2.1 增益、带宽和相位裕度的提取方法跑完AC仿真打开Direct Plot→AC选择dB20点输出节点就能看到幅频特性曲线。从曲线上你可以直接读出低频增益曲线平坦部分的dB值和-3dB带宽增益下降3dB对应的频率。但相位裕度不能直接读需要同时看相位曲线。在Direct Plot里选择Phase点同一个输出节点得到相频特性。相位裕度的定义是在增益降到0dB即增益为1的频率处相位与-180°的差值。如果相位是-120°那么相位裕度就是60°。我通常会把幅频和相频曲线放在同一个Plot里用双Y轴显示。具体操作是先Plot幅频曲线然后在Results→Direct Plot→AC里再选Phase勾选Append而不是New Window这样两条曲线就在同一张图上了。然后在Graph窗口里右键选择Y Axis→Add Y Axis把相位曲线分配到右侧Y轴。这里有个容易踩的坑如果你用的是差分输出相位裕度要看差分信号的相位而不是单端。单端相位可能在0dB处是-90°但差分相位可能是-180°附近两者差很远。所以一定要确认你Plot的是正确的节点组合。2.2 用AC仿真验证反馈稳定性对于带反馈的电路比如LDO、运放闭环AC仿真更是不可或缺。你需要做的是在反馈环路里“打断”一点注入一个AC小信号然后看环路增益Loop Gain的幅频和相频特性。具体做法有两种一种是直接用stb分析如果仿真器支持另一种是手动在反馈路径里插入一个理想电压源或电流源用AC仿真扫环路增益。手动方法的步骤是在反馈节点处断开串入一个DC为0、AC为1的电压源然后AC仿真输出节点相对于输入节点的增益就是环路增益。环路增益的相位裕度判断标准和普通AC一样在环路增益降到0dB的频率处相位与-180°的差值就是相位裕度。一般要求至少45°最好60°以上。如果相位裕度不够闭环系统会出现振铃甚至振荡。我个人的经验是对于两级运放主极点和次极点的位置决定了相位裕度。如果次极点离单位增益带宽太近相位裕度就会急剧下降。这时候要么增大补偿电容要么降低第二级的跨导。但增大补偿电容会降低带宽所以这是一个折中。3. 瞬态仿真不收敛时的排查思路瞬态仿真Transient Analysis是观察电路时域行为的手段比如阶跃响应、时钟馈通、建立时间等。它的原理是用数值积分方法如Trapezoidal、Gear逐步求解电路的状态方程。瞬态仿真不收敛是新手最常遇到的问题没有之一。在ADE L里设置瞬态仿真关键参数是停止时间Stop Time和最大时间步长Max Step。停止时间取决于你要观察的事件长度比如一个1MHz的时钟周期是1μs你想看10个周期就设10μs。最大时间步长一般设为最小时间常数的1/10到1/20比如你的电路最小时间常数是1ns那Max Step就设50ps到100ps。注意Max Step设得太小会导致仿真时间极长设得太大则会错过快速瞬变。我的建议是先设一个粗略值跑一遍看波形是否平滑如果发现波形有台阶或毛刺再减小Max Step重跑。3.1 瞬态不收敛的五大常见原因瞬态不收敛的原因很多但归纳起来无非五类第一类是原理图错误。比如节点悬空、电源没接、器件模型缺失。这类问题在DC仿真时就会暴露所以先跑DC确认工作点正常。第二类是初始条件冲突。比如电容两端电压突变、电感电流突变。Virtuoso默认用DC工作点作为瞬态初始条件如果电路有多个稳态可能会选错。这时候可以在节点上设置icInitial Condition参数强制指定初始电压。第三类是仿真器选项太激进。比如reltol相对误差容限设得太小abstol绝对误差容限设得太小导致仿真器反复迭代无法收敛。可以尝试把reltol从1e-3放宽到1e-2abstol从1e-12放宽到1e-9。第四类是模型本身不连续。比如某些行为级模型在特定电压下出现导数不连续导致仿真器震荡。这时候需要检查模型表达式或者换用更平滑的模型。第五类是电路存在高频振荡。比如放大器自激、开关电源的开关瞬间产生尖峰。这类问题不是仿真器的问题而是电路本身的问题需要从设计上解决。3.2 用Option调整让瞬态仿真跑起来如果确认原理图没问题但瞬态还是不收敛可以尝试调整仿真器选项。在ADE L的Simulation→Options→Transient里有几个关键参数method积分方法默认是trapezoidal可以改成gear2。Gear2更稳定但精度略低适合刚性电路。maxstep最大步长前面说过减小它可以提高精度但增加时间。reltol相对误差容限默认1e-3可以放宽到1e-2。abstol绝对电流误差容限默认1e-12可以放宽到1e-9。vntol绝对电压误差容限默认1e-6可以放宽到1e-4。gmin最小电导默认1e-12可以增大到1e-9帮助收敛。cmin最小电容默认0可以设一个很小的值如1e-15避免节点悬空。我通常的排查顺序是先跑DC确认工作点再检查Max Step是否合理然后逐步放宽reltol和abstol最后才考虑换积分方法。如果这些都不行那大概率是电路本身有问题需要回到原理图层面排查。4. 噪声仿真从热噪声到闪烁噪声的完整分析噪声仿真Noise Analysis是分析电路本征噪声的手段主要用于低噪声放大器、传感器接口、锁相环等对噪声敏感的场景。它的原理是在DC工作点附近计算每个器件的噪声贡献然后传播到输出端。在ADE L里设置噪声仿真关键参数是输出节点Output Node、输入源Input Source、频率扫描范围。输出节点是你关心的噪声输出点输入源是用来计算等效输入噪声的参考源。频率范围通常和AC仿真一致从1Hz到1GHz。噪声仿真有两种输出输出噪声Output Noise和等效输入噪声Input Referred Noise。输出噪声是输出节点上的总噪声功率谱密度单位是V²/Hz或V/√Hz。等效输入噪声是输出噪声除以增益反映了电路本身对信号的“污染”程度。4.1 热噪声和闪烁噪声的区分方法MOS管的主要噪声源有两个热噪声Thermal Noise和闪烁噪声Flicker Noise也叫1/f噪声。热噪声的功率谱密度是白噪声在整个频段内平坦闪烁噪声的功率谱密度与频率成反比在低频段占主导。在Virtuoso里你可以通过Noise Summary来查看每个器件的噪声贡献。具体操作是跑完噪声仿真后打开Results→Print→Noise Summary会列出每个器件的噪声功率和占比。如果某个管子的闪烁噪声占比很高说明它的面积太小需要增大W×L。提示闪烁噪声与器件面积成反比即Svg ∝ 1/(W×L)。所以降低闪烁噪声最直接的方法就是增大器件面积。但增大面积会增加寄生电容降低带宽所以需要折中。热噪声则与gm有关Sid 4kTγgm其中γ在长沟道器件里约为2/3在短沟道器件里可能更大。降低热噪声的方法是减小gm但减小gm又会影响增益和带宽。所以低噪声设计本质上是在噪声、增益、带宽、功耗之间做多目标优化。4.2 用噪声仿真优化低噪声放大器以一个简单的共源低噪声放大器为例设计目标是在1GHz频率下等效输入噪声小于1nV/√Hz增益大于15dB输入阻抗匹配到50Ω。第一步先跑DC仿真确认管子工作在饱和区且Vgs和Vds在合理范围。第二步跑AC仿真看增益和输入阻抗。如果增益不够可以增大Rd或增大W/L。如果输入阻抗不匹配可以调整W和Ibias。第三步跑噪声仿真看等效输入噪声。如果热噪声占主导说明gm太大可以减小Ibias或减小W/L。如果闪烁噪声占主导说明器件面积太小可以增大W×L同时保持W/L不变。第四步迭代优化。每次调整后重新跑DC、AC、噪声直到所有指标都满足。这个过程可能需要几十次迭代但一旦找到合适的参数组合就能得到性能优异的低噪声放大器。我个人的经验是对于1GHz以下的低噪声放大器闪烁噪声通常是主要瓶颈需要把器件面积做得比较大。对于1GHz以上的热噪声逐渐占主导这时候gm的优化更关键。另外输入匹配网络的无源器件也会引入噪声特别是电感它的品质因数直接影响噪声性能。5. 六种仿真设置的协同工作流前面分别讲了DC、AC、瞬态、噪声四种仿真但实际项目中往往需要多种仿真协同工作。比如你设计一个锁相环需要DC确认偏置、AC看环路稳定性、瞬态看锁定过程、噪声看相位噪声。这四种仿真不是孤立的而是相互依赖的。在ADE L里你可以把多个仿真分析放在同一个ADE窗口里用不同的Analysis条目管理。比如dc1、ac1、tran1、noise1每个分析有自己的参数。跑仿真时Virtuoso会按顺序执行先跑DC再跑AC和噪声最后跑瞬态。注意如果DC不收敛后面的AC、噪声、瞬态都不会执行。所以DC是“守门员”必须第一个跑通。5.1 用Corners和Sweeps批量跑仿真实际项目中你不可能只跑一个工艺角、一个温度、一个电源电压。你需要跑Corners工艺角、Sweeps参数扫描、Monte Carlo蒙特卡洛。ADE L提供了Corners和Sweeps工具可以批量管理这些仿真。Corners工具在ADE L的Tools→Corners里。你可以定义多个工艺角比如TT、SS、FF、SF、FS每个角对应不同的模型库。然后定义温度范围比如-40°C、27°C、125°C。再定义电源电压范围比如1.62V、1.8V、1.98V。Corners工具会自动组合这些条件生成多个仿真任务。Sweeps工具在ADE L的Tools→Parametric Analysis里。你可以选择一个设计变量设置扫描范围然后观察某个输出指标随变量的变化。比如扫描Ibias从1μA到100μA看增益和噪声如何变化。Monte Carlo在ADE L的Tools→Monte Carlo里。你需要先定义器件的统计模型然后设置采样次数比如100次仿真器会随机采样器件参数生成统计分布。这对于评估良率非常重要。5.2 仿真结果的保存与复用跑完仿真后结果默认保存在simulation目录下。如果你需要复用这些结果可以用Save State功能把当前ADE窗口的所有设置保存成一个state文件。下次打开时直接Load State就能恢复所有设置。另外仿真波形可以用Export功能导出成CSV或CSV格式方便在Excel或Python里做后续分析。我通常会把关键波形导出成CSV然后用Python的pandas和matplotlib做自定义绘图和统计分析。提示Virtuoso的仿真结果默认保存在~/.cadence/simulation目录下如果磁盘空间不够可以修改cds.lib里的simulation路径指向一个更大的磁盘分区。6. 从仿真到流片那些仿真器不会告诉你的事仿真跑通了指标也达标了是不是就可以直接流片了远远不够。仿真和实际芯片之间还有巨大的鸿沟这个鸿沟里藏着无数“仿真器不会告诉你的事”。第一件事是寄生参数。仿真时你用的是理想连线实际芯片里每根金属线都有电阻和电容。这些寄生参数会改变电路的频率响应、噪声性能、甚至DC工作点。所以流片前必须做后仿真Post-layout Simulation把提取的寄生参数反标回原理图。第二件事是工艺偏差。仿真时你用的是典型模型实际芯片里每个器件的参数都在一定范围内随机分布。这就是为什么需要Monte Carlo仿真。但Monte Carlo也只能覆盖已知的统计分布实际工艺中还有未知的系统性偏差。第三件事是温度梯度。仿真时你设的是均匀温度实际芯片里不同区域的温度可能差几十度。功率管附近的温度远高于输入管这会导致偏置点漂移、匹配恶化。第四件事是封装应力。封装时芯片会受到机械应力改变载流子迁移率和阈值电压。特别是对于高精度模拟电路封装应力可能导致几个毫伏的失调。第五件事是电源噪声。仿真时你用的是理想电源实际电源上有纹波、尖峰、地弹。这些噪声会通过电源抑制比PSRR耦合到输出影响电路性能。我个人的经验是仿真只能保证“设计意图”是正确的但不能保证“实际芯片”是正确的。从仿真到流片中间需要大量的工程判断和经验积累。每一次流片都是一次学习机会不管成功还是失败都要仔细分析仿真和实测的差异逐步建立自己的“设计直觉”。6.1 后仿真与前仿真的差异处理后仿真和前仿真的最大差异来自寄生参数。对于高频电路寄生电容可能改变谐振频率对于高精度电路寄生电阻可能引入失调对于大电流电路寄生电阻可能导致IR Drop。处理这些差异的方法是在前仿真阶段就预留足够的裕度。比如增益要求20dB前仿真就做到24dB相位裕度要求60°前仿真就做到70°噪声要求1nV/√Hz前仿真就做到0.8nV/√Hz。这样即使后仿真有退化也能满足指标。另外后仿真的仿真时间远长于前仿真因为节点数可能增加几倍到几十倍。所以后仿真通常只跑关键分析比如AC和瞬态不跑全频段噪声。如果后仿真发现指标退化严重需要回到版图阶段优化布线减少寄生。6.2 仿真设置中的常见误区最后说几个仿真设置中的常见误区这些都是我踩过的坑误区一DC仿真不收敛就改仿真器选项。前面说过90%的DC不收敛是原理图问题改选项只是掩盖问题。误区二AC仿真只看增益不看相位。增益再高相位裕度不够闭环也会振荡。误区三瞬态仿真Max Step设得太大。波形看起来平滑但可能错过了关键的尖峰和振铃。误区四噪声仿真只看总噪声不看噪声来源。不知道噪声来源就无法优化。误区五仿真跑完不检查警告信息。Virtuoso的警告信息里往往藏着重要线索比如器件工作区异常、模型参数越界等。误区六不做Corners和Monte Carlo就流片。这是最危险的因为典型条件下的仿真结果没有任何统计意义。误区七后仿真不做就流片。寄生参数可能让电路完全失效特别是对于高频和高精度电路。这些误区看起来简单但每一个都可能导致流片失败。我见过太多项目因为忽略了其中一条而付出惨痛代价。所以每次流片前我都会对照这个清单逐条检查确保没有遗漏。
返回列表