ARTICLE DETAIL

资讯详情

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

Cadence Virtuoso IC 618 中 LDO 仿真环境搭建与调试实战指南

Cadence Virtuoso IC 618 中 LDO 仿真环境搭建与调试实战指南 1. 为什么LDO仿真值得在IC 618里从头搭一遍LDO这个电路说简单也简单一个误差放大器加一个功率管再配个反馈电阻分压网络教科书上两页纸就讲完了。但真到了要在Cadence Virtuoso IC 618里把它跑通、跑准、跑出能拿去做后仿的结果你会发现事情远没有想象中那么顺利。我见过太多人第一次搭LDO仿真环境时卡在模型库挂载、DC收敛、环路稳定性仿真这些环节上折腾两三天连个像样的DC工作点都出不来。这篇内容面向的是已经装了IC 618、但还没完整跑通过一个模拟电路仿真流程的工程师或学生。不管你是刚进组的研一新生还是从数字转模拟的职场人只要你需要在Virtuoso里搭建一个LDO的仿真环境这里面的每一步操作、每一个参数背后的理由、以及那些让人抓狂的报错怎么解决我都会尽量讲透。LDO的全称是Low Dropout Regulator低压差线性稳压器。它的核心价值在于当输入电压和输出电压之间的压差很小时仍然能稳定输出一个干净的电压。这在电池供电的芯片里非常关键——电池从4.2V放到3.0V的过程中LDO要始终输出稳定的1.8V或1.2V压差最小的时候可能只有几百毫伏。这就对功率管的尺寸、误差放大器的增益、环路相位裕度提出了很高的要求。而Virtuoso IC 618是Cadence在2018年前后推出的版本相比之前的IC 617和IC 616它在仿真器收敛算法、ADEL状态管理、Maestro视图等方面都有不小的变化。很多老教程里的操作路径在618里已经找不到了这也是为什么我建议即使你之前用过旧版本也值得重新梳理一遍完整流程。接下来的内容会按照一个真实的搭建顺序来走先搞清楚仿真环境需要哪些前置条件再一步步搭原理图、配仿真、跑DC和AC、最后做瞬态和环路稳定性验证。每个环节我都会说明为什么这么做以及我实际踩过的坑。2. 动手之前IC 618仿真环境的隐性前置条件2.1 PDK挂载不是装上就完事很多人以为PDK解压到指定目录、在Virtuoso里attach一下就算完事了。实际上PDK的挂载涉及三个层面的配置工艺库文件路径、模型库Model Library的corner定义、以及仿真器需要引用的模型文件路径。在IC 618里工艺库通过cds.lib文件来管理。你需要在工作目录下创建一个cds.lib内容大致是DEFINE your_pdk /path/to/your/pdk_directory INCLUDE /path/to/your/pdk_directory/cds.lib这里有个容易忽略的点INCLUDE语句引入的路径必须是PDK自带的cds.lib文件而不是你自己的工作目录。如果你写错了Virtuoso启动后Library Manager里能看到库名但打开原理图时器件符号会显示成方框。模型库的配置在ADE L或ADE XL里通过Setup - Model Libraries来添加。你需要找到PDK目录下的models/spectre文件夹里面通常有*.scs文件。不同corner对应不同文件比如tt.scs是典型 cornerff.scs是快 cornerss.scs是慢 corner。做LDO仿真时至少要把tt、ff、ss三个corner都挂上否则后面跑corner仿真时还得回来补。注意IC 618的ADE XL在模型库路径里不支持通配符批量添加必须逐个文件添加。如果你有几十个corner文件建议先在文本编辑器里整理好路径列表再逐个粘贴。2.2 仿真器版本与Spectre的匹配问题IC 618默认调用的Spectre版本是18.1或更高。如果你之前装过旧版本的MMSIM环境变量里可能还残留着旧路径。检查方法是在终端里输入which spectre spectre -Wspectre -W会输出当前版本号。如果版本低于18.1建议在.bashrc或.cshrc里把IC 618自带的Spectre路径提前。具体路径一般在$CDSHOME/tools/spectre/bin下面。另一个常见问题是License。IC 618的仿真需要Spectre的License如果你同时开了多个ADE窗口跑仿真可能会遇到License排队。建议在跑大批量corner仿真前先确认License服务器上的可用数量。2.3 工作目录的命名禁忌这一条听起来像是玄学但我确实遇到过。Virtuoso的工作目录路径里如果包含空格、中文、或者特殊字符比如#、在某些情况下会导致仿真网表生成失败。报错信息通常是Cannot open netlist file或者Illegal file name。最稳妥的做法是工作目录用纯英文、无空格、尽量短的路径。比如/home/user/ldo_sim就比/home/user/My Project/LDO仿真#1安全得多。我一般会在用户根目录下建一个sim_workspace文件夹所有项目都放在里面路径干净省去很多麻烦。3. 从空白原理图到可仿真网表LDO核心模块的搭建细节3.1 误差放大器五管OTA还是折叠共源共栅LDO的误差放大器决定了整个环路的增益和带宽。对于一般的片上LDO五管OTAOperational Transconductance Amplifier是最常用的结构因为它结构简单、功耗低、输出摆幅大。但如果你的LDO需要驱动较大的负载电容比如1uF以上或者对电源抑制比PSRR有较高要求折叠共源共栅Folded Cascode会更合适。在IC 618里画原理图时我建议先用五管OTA搭一个最小可仿真版本确认整个仿真流程跑通之后再替换成更复杂的结构。五管OTA的NMOS输入对管尺寸可以先设为W10u, L1uPMOS电流镜负载设为W20u, L1u尾电流源设为W10u, L2u。这些值不是最优的但足够让DC仿真收敛。画的时候注意IC 618的符号编辑器里MOS管的端口顺序默认是D、G、S、B。如果你从PDK里调出来的器件符号端口顺序不对可以在Symbol编辑器里调整。我遇到过有人把PMOS的源漏画反了DC仿真时电流方向不对查了半天才发现是符号端口映射的问题。3.2 功率管的选型与版图意识功率管是LDO里最占面积的器件。在原理图阶段你就要考虑它的版图实现方式。通常功率管会用多个finger并联比如W50u, L0.5u, fingers20等效宽长比就是1000u/0.5u。在IC 618里PDK的MOS管符号通常有fingers参数直接填数字就行。但这里有个坑有些PDK的MOS管模型在fingers大于某个值时模型参数会自动调整比如源漏电阻的寄生参数。如果你在原理图里设了fingers20但仿真模型里没有正确引用多finger的寄生参数仿真结果会和实际流片差很多。建议在跑完功能仿真后用版图提取的寄生参数再做一次后仿。功率管的栅极驱动能力也要考虑。如果误差放大器的输出驱动能力不够功率管的栅极充放电会很慢导致LDO的瞬态响应变差。在原理图阶段你可以通过在误差放大器输出和功率管栅极之间加一级缓冲器Source Follower来改善但这会增加环路的极点需要重新评估稳定性。3.3 反馈电阻网络阻值选择与噪声权衡反馈电阻分压网络决定了LDO的输出电压[ V_{out} V_{ref} \times \left(1 \frac{R_1}{R_2}\right) ]其中(V_{ref})是带隙基准的输出通常是1.2V左右。如果你要输出1.8V那么(R_1/R_2 0.5)。阻值的选择需要权衡几个因素阻值太大反馈节点的噪声贡献会增加而且容易受漏电流影响阻值太小会白白消耗静态电流降低效率。一般选择在几十千欧到几百千欧之间。比如(R_150k\Omega)(R_2100k\Omega)总电流约12uA对大多数LDO来说是可以接受的。在IC 618里电阻器件从PDK的analogLib库或者工艺库里的res类别下调出来。注意有些PDK的电阻模型有w和l参数需要根据方块电阻值计算。比如方块电阻是(300\Omega/\square)你要做一个(50k\Omega)的电阻就需要约167个方块。如果电阻宽度是1u长度就是167u。这些计算在原理图阶段就要做好否则仿真出来的阻值和你预期的不一样。提示IC 618的ADE里可以直接在原理图上用Annotate - DC Operating Point查看每个器件的实际工作点包括电阻的实际阻值。如果发现阻值偏差很大检查一下电阻的w和l参数是否设置正确。4. 仿真配置DC、AC、瞬态和环路稳定性怎么设4.1 DC仿真让电路先“站”起来DC仿真是所有仿真的基础。如果DC工作点不对后面的AC和瞬态都是白搭。在ADE L里DC仿真的设置很简单Analyses - Choose - dc然后勾选Save DC Operating Point。但LDO的DC仿真经常遇到收敛问题。原因通常是误差放大器的增益太高导致反馈环路在DC分析时出现数值振荡。解决方法有几个在误差放大器输出和功率管栅极之间加一个大的电阻比如1GΩ和电容比如1pF组成的RC网络人为降低DC增益。这个技巧叫DC negative feedback专门用来帮助仿真器找到工作点。在ADE的Simulation - Options - Analog里把convergence相关的参数调松一些比如把reltol从1e-3改成1e-2先让仿真跑起来再逐步收紧。用nodeset语句给关键节点设初始电压。在ADE的Simulation - Convergence Aids - Nodeset里给误差放大器输出节点设一个接近最终值的电压比如0.8V。我一般会先用nodeset跑一遍DC确认工作点合理后再去掉nodeset重新跑确保电路能自己收敛。4.2 AC仿真环路增益和相位裕度怎么测LDO的稳定性取决于环路的相位裕度。在IC 618里测环路增益有两种方法一种是stb分析Stability Analysis另一种是断开环路加AC源。stb分析是Spectre自带的稳定性分析工具在ADE里选择Analyses - Choose - stb然后指定探针器件通常是iprobe。iprobe是一个零电压源串联在反馈环路里。仿真器会自动计算环路增益和相位裕度不需要你手动断环。但stb分析有个限制它假设环路是线性的如果LDO里有大的开关动作或者非线性很强的模块stb的结果可能不准。这时候就需要用传统的断环法在反馈节点处断开加一个AC源然后跑AC仿真看输出和输入的比值。断环法的关键是断开点的阻抗要匹配。如果断开点一边是高阻节点另一边是低阻节点直接断开会导致负载效应测出来的环路增益不准。解决方法是在断开点加一个理想变压器或者大电感大电容组成的bias tee但这样会增加仿真复杂度。对于大多数LDO直接用stb分析就够了。相位裕度的目标值一般是60度以上。如果只有45度瞬态响应会有明显的振铃如果低于30度电路可能会振荡。在AC仿真结果里找到环路增益降到0dB时的频率看对应的相位与-180度的差值就是相位裕度。4.3 瞬态仿真负载阶跃和线性调整率瞬态仿真用来验证LDO对负载变化和输入电压变化的响应。在ADE里设置Analyses - Choose - tran时间范围根据你的应用场景定。比如负载电流从1mA跳到100mA跳变时间1us观察输出电压的下冲和恢复时间。负载阶跃用PWLPiecewise Linear电流源来实现。在原理图里放一个isource设置成pwl类型然后编辑波形0s 1m 1u 1m 1.01u 100m 10u 100m这表示电流在1us时从1mA跳到100mA持续到10us。仿真时间设20us观察输出电压的恢复过程。线性调整率是输入电压变化时输出电压的变化。用vsource的pwl设置输入电压从3.0V慢慢升到4.2V看输出电压的波动。这个仿真时间可以设长一点比如1ms因为线性调整率通常变化很慢。瞬态仿真最容易遇到的问题是不收敛。如果仿真报Time step too small可以尝试在ADE的Simulation - Options - Analog里把method从trap改成gear2后者更稳定但速度慢。减小maxstep比如设成1n让仿真器走小步长。检查电路里有没有理想元件导致的数值突变比如理想开关或者理想运放。4.4 Corner仿真PVT全组合怎么跑Corner仿真是在不同工艺角Process、电压Voltage、温度Temperature下验证电路性能。在IC 618里用ADE XL来跑corner最方便。创建ADE XL视图后在Data View里添加corner组合。工艺角从PDK的模型库文件里选电压和温度手动添加。比如Corner名称工艺角电压温度TT_25C_3.3Vtt3.3V25CFF_-40C_3.0Vff3.0V-40CSS_125C_3.6Vss3.6V125C跑corner仿真时每个组合都会生成独立的仿真结果。ADE XL会自动汇总成表格方便对比。注意corner数量不要一次跑太多否则License和计算资源都会紧张。我一般分批跑先跑tt、ff、ss三个典型角确认没问题再扩展到全组合。5. 那些让我熬夜的报错常见问题与排查链路5.1 DC收敛失败从报错信息反推原因DC仿真报错最常见的是Notice from spectre during DC analysis dcOp. Convergence difficulties have been encountered.这个报错本身不告诉你哪里出了问题。我的排查顺序是先看Simulation - Output Log里面会显示哪个节点或哪个器件导致不收敛。通常会有Node xxx failed to converge或者Device xxx has extreme value。如果是某个节点电压异常比如误差放大器输出节点在0V和VDD之间来回跳说明环路极性可能反了。检查误差放大器的正负输入端是否接反。如果是某个MOS管的工作区异常比如Vgs远大于Vth但Vds接近0说明这个管子被压在了线性区。检查它的偏置电路。如果以上都正常尝试加nodeset或者icInitial Condition语句给关键节点设初始值。我遇到过一次DC怎么都不收敛最后发现是反馈电阻的w参数设成了0导致电阻阻值无穷大反馈环路断了。这种低级错误在原理图阶段很难发现因为符号看起来是正常的只有仿真时才会暴露。5.2 AC仿真结果异常相位裕度为负是怎么回事AC仿真跑完后如果发现相位裕度是负的说明环路在0dB频率处已经满足了振荡条件。可能的原因误差放大器的输出阻抗太高导致主极点频率太低次极点提前进入0dB带宽。功率管的栅极电容太大和误差放大器的输出电阻形成了一个低频极点。反馈电阻网络的寄生电容在反馈节点引入了额外的极点。解决方法在误差放大器输出和功率管栅极之间加一个Miller电容利用米勒效应把主极点往低频推同时让次极点往高频走。电容值一般取几皮法到几十皮法具体值需要扫描。在IC 618里可以用Parametric Analysis扫描米勒电容的值看相位裕度随电容值的变化。设置方法在ADE里Tools - Parametric Analysis选择电容的c参数设置扫描范围比如从1p到20p步长2p。跑完后看相位裕度的曲线找到满足60度以上的最小值。5.3 瞬态仿真报Time step too small的三种解法这个报错的意思是仿真器在某个时间点无法继续减小步长来满足精度要求。通常发生在电路中有快速跳变或者强非线性的时候。解法一改积分方法。在Simulation - Options - Analog里把integration method从trap改成gear2。gear2是隐式方法数值稳定性更好但会引入数值阻尼可能让仿真结果偏保守。解法二加maxstep限制。在瞬态分析设置里把maxstep设成跳变时间的十分之一。比如负载跳变时间是1usmaxstep设成100n。这样仿真器不会在跳变点附近走太大的步长。解法三检查电路里的理想元件。理想电压源和理想电流源在跳变时会产生无限大的di/dt或dv/dt仿真器很难处理。如果可能给理想源串联一个小电阻比如1mΩ或者并联一个小电容比如1fF让跳变变得平滑一些。5.4 模型库路径错误Cannot find model file这个报错通常是因为ADE里的模型库路径写错了或者PDK的模型文件被移动了。检查步骤在ADE里Setup - Model Libraries看每个文件的路径是否存在。如果路径里有变量比如$PDK_ROOT确认这个环境变量在Virtuoso启动前已经设置好。如果路径是相对路径确认它是相对于哪个目录。IC 618的ADE默认以启动目录为基准如果你在别的目录启动Virtuoso相对路径就会失效。我一般建议用绝对路径虽然看起来长但不会出错。如果PDK路径经常变可以在.bashrc里设一个环境变量然后在ADE里用$VAR的形式引用。6. 仿真跑通之后结果解读与设计迭代6.1 工作点检查每个管子都在该在的区域吗DC仿真跑通后第一件事是检查每个MOS管的工作区。在ADE里Annotate - DC Operating Point - Region原理图上会显示每个管子的工作区0是截止区1是线性区2是饱和区3是亚阈值区。对于误差放大器的输入对管必须工作在饱和区2。如果显示1说明Vds太小需要调整偏置或者增大管子的W/L。对于功率管通常也要求工作在饱和区但如果压差很小功率管可能进入线性区这时候它的等效电阻会变小环路增益会下降需要重新评估稳定性。电流镜的管子也要检查。如果镜像比例不对比如你设的是1:2但实际电流比是1:1.5说明两个管子的Vds不匹配存在沟道长度调制效应。解决方法是在电流镜的参考支路和镜像支路之间加一个cascode管提高输出阻抗改善匹配。6.2 环路增益和相位裕度的实际读数AC仿真跑完后在Direct Plot里选择Loop Gain和Loop Phase。IC 618的stb分析会直接给出Loop Gain的幅频和相频曲线。读数方法找到增益曲线穿过0dB的频率点记为(f_{0dB})。然后看相位曲线在(f_{0dB})处的值相位裕度 180度 相位值。比如相位是-120度相位裕度就是60度。如果相位裕度不够除了加米勒电容还可以增大功率管的栅极电阻降低次极点频率但这样会增加功率管的开关损耗。在反馈电阻上并联一个小电容引入一个零点抵消次极点。电容值需要计算(C 1/(2\pi f_z R))其中(f_z)是你要引入的零点频率(R)是反馈电阻值。降低误差放大器的输出阻抗把主极点往高频推。这通常需要增加偏置电流代价是功耗增加。6.3 瞬态响应的关键指标下冲、恢复时间和振铃负载阶跃仿真跑完后重点看三个指标下冲Undershoot负载电流突然增大时输出电压会瞬间下降然后慢慢恢复。下冲的幅度和环路的带宽有关。带宽越宽下冲越小但相位裕度会降低。这是一个权衡。恢复时间Settling Time输出电压从下冲最低点恢复到最终值±1%范围内的时间。这个指标反映了环路的响应速度。振铃Ringing如果相位裕度不够输出电压在恢复过程中会出现振荡。振铃的频率和环路的自然频率有关幅度和阻尼系数有关。我一般会在ADE里用Calculator工具自动测量这些指标。比如用overshoot函数测下冲用settlingTime函数测恢复时间。这些函数在Calculator - Function - Special Functions里。6.4 从仿真到流片还有哪些没做的仿真跑通不代表可以直接流片。至少还有几件事要做蒙特卡洛仿真验证工艺偏差对LDO性能的影响。在ADE XL里添加Monte Carlo分析设置采样次数通常100次以上看输出电压的分布。后仿真用版图提取的寄生参数重新跑一遍所有仿真。寄生电容和电阻会改变环路的极点和零点相位裕度可能下降。ESD和Latch-up检查虽然这是版图阶段的工作但在原理图阶段就要预留ESD保护器件的位置。电源抑制比PSRR仿真在输入电压上叠加一个小信号AC扰动看输出端的抑制能力。PSRR是LDO的关键指标尤其是对射频电路供电的LDO。PSRR仿真在ADE里的设置在输入电压源上串联一个AC源跑AC仿真看输出端的增益。PSRR 20log(Vout_ac/Vin_ac)。好的LDO在1kHz处PSRR应该在60dB以上在1MHz处也要有40dB左右。7. 一些让我少走弯路的操作习惯7.1 原理图命名规范别用默认的instance nameIC 618默认给每个器件分配的名字是M0、M1、R0、C0这样的。电路一复杂你根本分不清哪个是误差放大器的输入对管哪个是电流镜。我习惯在放好器件后立刻重命名M_inp、M_inn、M_tail、M_load_p、M_load_n、R_fb1、R_fb2。这样在ADE里看仿真结果时一眼就能找到对应的器件。重命名的方法选中器件按q打开属性在Instance Name里改。或者在原理图编辑器里Edit - Rename。7.2 ADE状态保存别让辛苦调的参数丢了ADE L的状态包括仿真设置、模型库路径、变量值可以保存成state文件。在ADE里File - Save State选一个目录存下来。下次打开时File - Load State所有设置都回来了。我一般会在项目目录下建一个sim_states文件夹每次调完参数就存一个状态命名带上日期和版本号比如ldo_tt_20250101。这样即使后面调乱了也能快速回到之前的版本。ADE XL的状态保存更复杂一些它把每个test的设置都存成独立的cellview。建议在跑corner仿真前先Save整个ADE XL视图避免意外关闭后重新配置。7.3 仿真日志的阅读技巧Spectre的仿真日志很长但关键信息通常在前面几十行和最后几十行。前面是模型库加载和电路网表的信息最后是仿真结果汇总和报错。我习惯用grep过滤日志grep -i error\|warning\|notice spectre.out这样能快速找到报错和警告。有些警告可以忽略比如Model xxx is not used但有些警告必须处理比如Node xxx has no DC path to ground这说明电路里有悬空节点会导致仿真结果不可信。7.4 版本管理别只靠Virtuoso自带的Library ManagerVirtuoso的Library Manager有版本管理功能但不太好用。我建议用Git来管理原理图和仿真状态文件。虽然Virtuoso的二进制文件不能直接diff但你可以把关键设置导出成文本文件比如网表、状态文件然后用Git跟踪这些文本文件的变化。具体做法在项目目录下git init把cds.lib、*.scs、ADE状态文件、仿真日志都纳入版本管理。每次调完参数git commit一下写清楚改了什么。这样即使几个月后回头看也能知道当时为什么改了某个参数。8. 最后再聊几句实在的LDO仿真环境的搭建说到底是一个熟练工种。第一次搭可能要两三天第二次可能半天就搞定了。关键是要理解每一步背后的原理而不是机械地照搬教程。比如为什么DC仿真要加nodeset为什么AC仿真要用stb而不是直接断环为什么瞬态仿真要不收敛时要改积分方法——这些问题的答案都在仿真器的算法原理里。IC 618相比旧版本在用户体验上好了不少但坑也换了一批。我上面提到的这些问题都是我在实际项目中遇到过的。有些坑花了我一整个下午有些坑让我重新画了一遍原理图。希望这些经验能让你少走一些弯路。如果你在搭建过程中遇到了上面没提到的问题我的建议是先看仿真日志再看器件工作点最后检查仿真设置。大部分问题都能通过这三步定位到。实在搞不定的时候把电路简化到最小可工作版本先让仿真跑起来再逐步加回复杂模块。这个方法我用了很多次几乎每次都能找到问题所在。
返回列表