在ADS中用Momentum做电源完整性分析:流程与实战
干了这么多年射频仿真说实话第一次有人让我在ADS里用Momentum做电源完整性分析时我心里是打了个问号的。ADS不是做射频电路仿真的吗Momentum不都是用来仿滤波器、差分线、微带天线的吗直到有一次我调试一块射频板电源噪声在某个频点怎么压都压不下去SPICE里加了十几颗电容也没用最后用Momentum扫了一遍电源平面才发现问题根本不在于电容不够而是电源层和地层之间在那个频点恰好形成了一个谐振腔。从那以后我开始认真对待“ADS里跑PI”这件事也踩了不少坑。这篇文章就把我总结出来的完整流程和心得掏出来给准备在ADS里用Momentum做电源完整性分析的朋友一个参考。这篇文章适合谁如果你在射频/微波板卡上遇到过供电网络异常谐振、去耦电容加了很多但纹波还是超标的场景或者你在做PA供电、PLL供电、高速数字核心供电又或者你不想为了PI单独再学一套专用工具想直接在ADS里面把电磁场效应吃透——这篇文章都能给你一条可以照抄的路径。我会把从原理到层叠设置从端口配置到网格处理从跑仿真到联合优化的完整过程都讲一遍并且把那些文档里不写、但你一定会遇到的坑提前给你标出来。1. 为什么在ADS里做电源完整性Momentum的定位与适用边界1.1 电源平面的本质一段被忽略的平行板波导很多做射频的工程师有个思维定势觉得电源完整性是数字电路工程师的事跟射频仿真没关系。但真正把PCB上的电源平面和地平面切开来看你会发现它们夹着介质层本质就是一个巨大的平行板波导。数字电路翻转时瞬态电流从电源平面注入这个电流在高频下会以波的形式在平面之间传播遇到边界就反射反射波和入射波叠加就会在某些特定频率形成驻波——也就是谐振。这个谐振的后果是严重的。在谐振频点上电源平面呈现在负载端的阻抗会突然抬升可能从几十毫欧飙到几欧甚至十几欧。欧姆定律推算一下即使只有几百毫安的纹波电流也能在电源网络上造成几百毫伏的压降波动直接让你的射频链路出现杂散、相位噪声恶化或者功放线性度失真。而SPICE仿真里常见的做法是把电源网络建模成RLC集总网络这种模型在低频几MHz以内还算准确可一旦频率升高到几百MHz甚至GHz集总模型就会失效——因为你没法用一个L和几个C去精确描述一个尺寸和工作波长可相比拟的平面结构。这就是Momentum这种全波电磁仿真工具介入的根本原因它能直接基于Maxwell方程求解平面上的电流分布得出结构本身的S参数和Z参数把分布效应和腔体谐振全部考虑进去。1.2 Momentum与其他PI分析工具的差异我知道有人会问做电源完整性业界不是有SIwave、PowerSI、HFSS这些吗干嘛非要绕道ADS里的Momentum这个问题的答案取决于你的工作流。如果你整条链路都在ADS里设计信号链、匹配网络、功放匹配那再用Momentum顺带把电源平面问题解决掉是最省事的一条路。你不需要把一个几何模型从别的工具导来导去也不用在两个软件之间反复切换对版本。从技术角度看Momentum是基于矩量法MoM求解的2.5D平面电磁场工具。相对于HFSS这种全3D有限元工具Momentum在处理扁平结构PCB层叠、平面多边形、大面积的电源/地平面时网格量和内存开销通常小得多计算速度也快很多。相对于SIwave这类专门做PI的软件Momentum的通用性更强你能拿到S参数、Z参数、远场、电流密度、近场分布自由度更高也不局限于PDN这一个应用。Momentum在ADS里还有一个杀手锏仿真完的结构可以直接生成emModel以电路元件的形式放进原理图里和晶体管模型、无源器件模型一起做谐波平衡、瞬态或包络仿真甚至可以在原理图里对去耦电容做参数扫描和优化。这就等于你把电磁场效应的“硬骨头”在Momentum里啃掉了剩下的“电路级”迭代全部留在原理图里快速完成。这个联合仿真玩法后面我会专门用一节讲。1.3 什么时候该用Momentum做PI什么时候别用不是所有PI问题都适合用Momentum。以我的经验下面这几种情况用Momentum效率最高你要研究的是电源层和地平面之间的阻抗特性板子以平面结构为主。你需要在多个候选位置布放去耦电容想快速对比不同位置和容值的影响。你要把电磁仿真结果纳入整个ADS原理图做系统级验证。但以下几种情况Momentum可能并不是最优解目标结构是非常复杂的三维实体比如几十个BGA球栅阵列、密集的过孔阵列、封装内部键合线。Momentum的2.5D特性决定了它在垂直方向上的建模能力有限这种场景建议直接用HFSS这样真正的3D全波工具。你要做的是整个多板系统的电源完整性从背板到子卡再到芯片封装全链路分析。这种系统级问题专业PI工具比如SIwave在流程上更顺手。仿真频率低到几百kHz以下且板子尺寸远小于波长。这种情况用SPICE/lumped模型已经足够没必要动用全波求解。记住一句话工具是拿来解决问题的不是拿来说明自己水平的。Momentum做PI的核心竞争力是把“平板谐振”这件事算准而不是替代所有PI分析手段。2. 动手前的关键准备层叠、网格与端口设置2.1 层叠建模的取舍在Momentum里做电源完整性层叠设置是第一道坎也是很多人一上来就设置错的地方。一个非常常见的错误是试图把整块PCB的所有层都搬进Momentum。实际上Momentum分析的是金属层之间的介质谐振腔你的关注点通常是一条供电路径比如LDO或者DC-DC输出的一层电源平面它正下方对应的完整地平面以及它们之间夹着的介质。这两层金属和一层介质就构成了最基本的谐振腔结构其他层的存在只会让你的仿真复杂十倍却不会显著改变你要看的谐振频点和阻抗趋势。以一块典型的两层射频板为例我在做仿真时通常这样设置层叠层名称类型材料 / 参数厚度TOP电源层Metal铜电导率5.8e7 S/m35 um1ozDIELECTRICDielectricFR4εr4.4tanδ0.021.6 mmBOTTOM地平面Metal铜35 um如果你是做高频射频板介质层也可能是Rogers 4350Bεr3.66tanδ0.0037或者RO4003C这个按实际板材来。介质厚度h非常关键因为它直接决定了平行板单位面积的电容密度也就影响了整体阻抗水平。厚度越大平面间电容越小谐振阻抗越高去耦难度越大。这也是为什么在高速数字和射频电路里电源层和地层之间的介质都尽可能压薄。关于介质的介电常数和损耗角正切一定不要拍脑袋瞎填。有条件就向板材厂商要准确的测试数据不同频率下εr和tanδ都略有变化没条件就用数据手册里的典型值但心里要有数εr偏差5%谐振频率就会偏2%~3%左右。在Momentum里面设置层叠路径是Layout窗口 - Momentum - Substrate或者直接点工具栏里的层叠图标。在弹出的Substrate Editor里按从上到下的顺序把Metal、Dielectric逐层加进去。设置完成后建议用View 3D看一眼层叠结构对不对很多时候错误在3D视图中一眼就能看出来。2.2 网格剖分的三个坑Momentum的网格设置是个经验活大多数人第一次跑出来的网格要么太粗导致结果不对要么太细导致内存爆炸。第一个坑叫做“网格频率设置得过低”。在Momentum的Simulation Setup里有一个Mesh Frequency参数它决定了基础网格密度。经验做法是把这个频率设为你要分析的最高频率的1/2到1/3。举个例子如果你要看到3GHz那Mesh Frequency设1GHz足够了。这不是偷懒而是因为Momentum网格细化规则是“每个波长多少个网格”如果直接用最高频率作为Mesh Frequency网格密度会成倍增长但精度提升非常有限。第二个坑是Edge Mesh边缘网格选项。Momentum里可以勾选Edge Mesh它的作用是在金属边缘额外加密网格。为什么要加密边缘因为高频电流有趋肤效应电流集中在导体边缘和表面如果边缘网格太粗仿真出的损耗和Q值都会偏高谐振峰也会显得不真实。在PI分析中谐振峰的准确度直接影响到你对去耦方案有效性的判断所以Edge Mesh建议打开。对于很薄的金属层远小于趋肤深度勾选Thin Conductor对于较厚的金属比如压铸件、散热片选Thick Conductor模式。第三个坑是被“自适应网格”绑架。Momentum的自适应网格剖分是个好东西但别把Mesh Frequency设得很低然后完全依赖自适应去加密。自适应网格是围绕电流梯度变化来做局部加密的对于谐振腔这种“全局模式”的问题基础网格太粗会导致初始解都歪了后面再自适应也很难修正回来。我习惯的做法是先按经验设置一个中等密度的基础网格跑完先看粗结果是否合理谐振点是否符合理论预估再决定要不要进一步加密验证。后面我会给一个谐振频率的理论估算公式帮你快速确认仿真结果有没有跑偏。2.3 端口与参考阻抗端口怎么设在电源完整性分析里非常关键而且和射频电路里习惯的50欧姆思维方式完全不同。在Momentum里做PI最常用的端口类型是Internal Port内部端口。内部端口直接定义在所选的金属层和参考金属层之间相当于在平面上人为制造了一个“注入点”或者“观测点”。你放置的位置通常有两个含义一个是电源进入平面网络的位置比如DC-DC输出的焊盘另一个是敏感负载的位置比如PA的供电引脚。很多人会问我端口阻抗设在50欧姆行不行如果你最终只想看Z参数端口阻抗设置成多少其实影响不大——Momentum内部会先算出通用阻抗矩阵再根据端口阻抗归一化输出S参数。但如果你习惯直接看S11来理解阻抗就要格外小心一个50欧姆归一化的S110.9换算成阻抗其实只有大约2.6欧姆你会觉得“反射很大”但这对电源网络来说其实是非常低的阻抗。所以做PI分析时我建议把端口参考阻抗设置得很低比如0.01欧姆这样在S参数视图里也能直观看出“这地方阻抗很低”同时直接导出的Z参数也更容易解读。Momentum里的操作方式是放置端口后双击端口可以在Port Impedance里修改参考阻抗。如果你实在不想改后续也可以在数据显示窗口里直接把S参数用公式转换成Z参数单端口的公式很简单Z Z0 × (1 S11) / (1 - S11)但相信我提前把端口阻抗设好后面省去一堆换算的麻烦。在电源完整性语境下这种做法更符合工程师的直觉你关心的就是那个阻抗值而不是反射系数。3. 完整实操流程从Layout到Z(f)曲线3.1 新建工程与层叠参数配置第一步在ADS里新建一个Workspace然后新建一个Cell类型选择Layout。不要选Schematic我们要画的是物理图形。在打开的Layout窗口中第一步建议先把单位设置成毫米mm这一步虽然不起眼但后期画图省心很多。路径是Edit - Preferences - Units。接着按2.1节说的方式打开Substrate Editor把层叠配号。我以一个实际项目为例一块两层射频控制板顶层是3.3V电源平面区域第二层是完整的地平面介质是FR4厚度1.0mm铜厚1oz。在Substrate Editor里设置完以后点击View 3D确认渲染结果你会看到类似“两块铜片夹着一层半透明介质”的结构。配置层叠时注意容易出现的一个问题层序搞反。Momentum的层顺序默认从上往下显示很多人在第一行画了地平面第二行画了电源平面结果内部端口放在电源和地之间时电性方向完全反了。设置完以后用3D视图检查磁性的约定是先建好概念上层金属是你要注入电流的电源平面下层金属是参考回流平面。3.2 构建电源/地平面模型并布放端口层叠配号之后回到Layout画图。在Momentum里构建平面用的不是原理图里的元件而是Layout中的多边形Polygon。你可以用画矩形或画多边形的工具在TOP层画一个100mm x 80mm的矩形这就是你的电源平面区域。然后在BOTTOM层画同样尺寸的矩形这就是地平面。为了仿真出真实的边界效应两块金属形状的轮廓最好和实际PCB的电源层形状一致——如果是异形铜皮别嫌麻烦照着实物的外轮廓描一遍。画完以后有个细节如果电源平面中间有开槽或者隔离带比如为了分割模拟地和数字地就用“Cut”功能把对应区域删掉。开槽的形状和位置对谐振影响很大开槽本身相当于在谐振腔里引入了一个扰动可能把一个高频谐振点移到更低的频段也可能把一个宽频带的谐振拆成两个尖峰。这些行为在SPICE里完全看不出来但电磁仿真中都会如实反映。接下来是放置端口。按我之前的建议在电源平面的左下角放一个内部端口作为电源注入点在平面的右上角比如PA供电焊盘位置放另一个内部端口作为负载观测点。这样我们后续可以分析从注入点到观测点的Z11和Z21阻抗。放置端口时注意选择正确的Metal层和参考层通常是TOP作为正极端BOTTOM作为参考端。如果板子上还有去耦电容的位置你可以在对应的焊盘位置提前布好端口的“备份”或者干脆在后期联合仿真时再处理。我的经验是第一轮仿真先不要加任何电容直接看裸平面的阻抗响应摸清楚谐振点在哪里再一步步加电容。3.3 跑Momentum仿真与后处理现在可以设置仿真参数了。在Layout窗口里点Momentum - Simulation - S-Parameters弹出仿真设置对话框。对于PI分析频率范围的设定要看你关注的噪声频段。一般来说DC-DC开关频率的谐波会延伸到几十MHz数字控制器的时钟谐波可能到几百MHz射频功放的包络和偏置网络的谐振问题可能到几GHz。我经常用的保守设置是10MHz到3GHz采用对数步进让低频段和高频段都有足够的点数。如果你想更快也可以用线性步进从10MHz扫到1GHz。网格设置里Mesh Frequency按经验设1GHz勾选Edge Mesh其他选项保持默认。点击Simulate跑仿真。以100mm x 80mm这样尺寸的平板结构在普通工作站上通常几分钟到十几分钟就能跑完。跑完以后在数据显示窗口Data Display里添加一个新的矩形图数据类型选择Z参数画出Z(1,1)的幅值曲线。你大概率会看到一条在多个频率点上有尖峰的曲线——这些尖峰就是电源平面的谐振模式。第一个尖峰出现的频率可以用矩形平板谐振公式做理论预估来验证仿真是否合理f_mn c / (2√εr) × √((m/a)² (n/b)²)其中a和b分别是平板的长度和宽度m和n是模式序号。对于第一阶模m1, n0一个100mm x 80mm、εr4.4的FR4平板估算下来第一个谐振大约在0.7GHz附近。如果仿真出来的第一谐振点偏离这个值太远先检查层叠参数和平面尺寸别急着改电路。拿到裸平面的Z(f)曲线后接下来就是“对症下药”。你会看到某些频点阻抗尖峰几十欧姆甚至上百欧姆再对比一下目标阻抗问题一目了然。目标阻抗怎么算简单粗暴的公式是这样Z_target (VDD允许的纹波电压) / (瞬态电流变化量ΔI)举个例子数字核心供电1.0V允许±5%纹波也就是±50mV瞬态电流变化2A。那目标阻抗就是50mV ÷ 2A 25mΩ。意思是说在我们关注的频率范围内电源网络从注入点到负载的阻抗都应该尽量低于25mΩ这样即使出现2A的瞬态电流突变纹波也不会超过50mV。显然裸平面的阻抗曲线远远达不到这个目标——低频段靠平面电容能压住但谐振点附近阻抗动不动就几欧姆甚至几十欧姆。这时候去耦电容就该上场了。3.4 将Momentum结果接入原理图做联合仿真现在到了Momentum最有价值的一步不重新跑电磁仿真把已经算好的平面阻抗结果作为S参数网络插入原理图在原理图里做去耦电容的迭代优化。在Momentum界面中选择Generate Model或者直接拖拽“emModel”到原理图ADS会自动生成一个代表该Momentum结构的电路元件。这个元件内部封装了你刚才跑出来的S参数网络端口数量和顺序和Layout中的端口一一对应。这也正是热搜词里常提到的“emModel与emCosim联合仿真模式”的核心用法Momentum负责提取无源结构的电磁特性原理图负责加入有源器件和无源器件的模型跑系统级仿真。然后在原理图里在对应端口位置添加去耦电容的模型。最理想的情况是你有电容厂商提供的S参数模型村田、TDK都提供直接导入。 如果没有也可以用ADS内置的Murata电容库或者用RC串联寄生电感的等效模型电容值C由目标频段决定等效串联电阻ESR几毫欧到几百毫欧等效串联电感ESL贴片电容通常在0.3nH到1nH之间关于容值选择有一个经验参考电容的自谐振频率SRF公式是SRF 1 / (2π√(LC))一个100nF的0402贴片电容假设ESL0.5nHSRF大约在22.5MHz。这意味着它在22.5MHz以下呈容性在22.5MHz以上反而呈感性。如果想压住GHz级别的谐振常规做法是并联多个不同容值的电容一个大容值电容比如10uF负责低频段一颗100nF负责中频一颗10nF或者1nF负责高频再配合0.1uF/100pF的射频电容覆盖更高频段。放好电容后直接在原理图里做S参数仿真S_Param仿真控件扫频范围和你之前Momentum仿真一致。你会看到加入电容后的Z(f)曲线明显被压低。如果某个频点还冒出尖峰说明当前容值在这个频点处于自谐振状态或者反谐振状态需要调整电容组合。这个迭代过程由于不用重跑电磁仿真每次只要几十秒到几分钟效率非常高。等原理图里的组合优化得差不多你可以选择把最终的优化结果对应的电容值映射回Layout里重新跑一次Momentum做一次全波验证。这步不是必须的——如果你的电容是直接并联在平面上且安装电感很小原理图联合仿真的结果已经足够可信但如果电容位置和走线引入了明显的寄生电感那么最后这次全波复核还是值得做的。4. 常见问题与排查技巧实录4.1 低频段Z曲线乱跳、数值不稳定这是跑PI仿真时最容易遇到的问题之一。当你在Momentum里设置仿真频率从1MHz或者更低开始扫频时低频段的Z参数可能会出现明显的数值噪声甚至出现负电阻这种荒谬的结果。原因在于矩量法在极低频率下存在“低频崩溃”问题——电场和磁场的耦合在低频时数值上会出现病态导致矩阵求逆不稳定。这也是为什么我前面建议频率下限设在10MHz左右而不是1MHz。如果确实想看到更低频段可以做一个技巧把端口参考阻抗继续压低同时适当增加网格密度强迫求解器在低频段使用更充足的数值精度。另外用对数步进比线性步进更容易得到平滑的低频曲线因为对数步进在低频段分布了更多采样点。4.2 网格爆炸、内存不足Momentum的矩量法矩阵是一个稠密矩阵网格数量翻倍内存占用不是翻倍而是近似平方级上涨。几万个网格就已经能吃掉好几个GB内存。遇到网格爆炸先别急着升级机器。第一步检查你的Mesh Frequency是不是设得过高——很多人习惯直接把网格频率设成最高仿真频率这在PI分析中没必要第二步确认模型里没有画一些尺寸夸张的小结构比如一个0.1mm的焊盘放在100mm的平面上这种“大马拉小车”会让网格局部密度失控第三步如果还不行就把电源平面拆成几个区域分别仿真——只仿你关心的那一块区域外围用理想吸收边界代替效率提升非常明显。4.3 谐振点和理论值对不上如果你发现仿真得到的第一个谐振频率和公式估算值相差超过20%大概率是三个原因第一层叠参数里介电常数填错了先回去核对第二平面形状不是完整矩形开槽、缺角都会显著影响等效谐振长度第三边缘场的辐射效应使平板的有效尺寸比物理尺寸略大这会让实际谐振频率比公式估算值偏低几个百分点这是正常现象。如果想验证仿真收敛性可以把网格密度提高一倍再跑一次看看谐振频率移动了多少。移动小于1%可以认为结果已经可靠如果移动超过5%说明网格还没收敛需要继续加密。4.4 为什么加了去耦电容谐振峰还在有些朋友在联合仿真里加了好几颗电容结果Z(f)曲线确实被压下一个尖峰但另一个位置的尖峰纹丝不动。这种情况通常不是电容没起作用而是你在“错误的位置”加了电容。电源平面谐振的本质是驻波。驻波的波腹位置是阻抗最高、电压波动最大的地方而波节位置电流最大、电压波动最小。如果你把去耦电容放在波节位置它对抑制电压谐振基本没有贡献。所以电容不是随便摆的要摆到谐振模式的“高阻抗点”去。这也是为什么裸平面的电流密度分布图远比阻抗曲线更有指导意义——在Momentum后处理里画出谐振频点的电流密度分布你一眼就能看到哪些区域是电流波腹需要放电容哪些区域是电压波腹需要吸波或重构平面。4.5 导出S参数后在原理图里数值异常如果你把Momentum的S参数导出成Touchstone文件再导入原理图发现Z参数跟显示窗口里看到的对不上最可能的原因就是端口参考阻抗不一致。Momentum显示窗口默认按当时设置的端口阻抗换算如果你在导出时选择了50欧姆归一化而原来的端口阻抗是0.01欧姆那导出的S参数当然和原来的Z参数不是一个口径。解决方法是要么在Momentum仿真设置里把端口阻抗统一成你最终要用的口径再导出要么在原理图里把Touchstone元件的端口阻抗设置成和Momentum一致的数值。这类问题非常隐蔽我见过不少人排查了一整天最后发现只是阻抗口径没对齐。4.6 常见问题速查表现象可能原因排查与处理低频段Z曲线跳变/负阻求解器低频病态频率下限提到10MHz以上压低端口参考阻抗网格量爆炸内存不足Mesh Frequency过高或小结构过多网格频率设为最高频率1/2~1/3精简模型细节谐振点严重偏离理论值介电常数或厚度设置错误核对层叠参数确认平面实际尺寸加电容后谐振峰不消电容放到了驻波波节位置查看电流密度分布移动到高阻抗/高电压点S参数与Z参数对不上端口参考阻抗口径不一致统一端口阻抗设置或导出参数口径仿真结果与实测差很大过孔/封装寄生效应未建模增加过孔与封装模型或改用3D工具复核5. 关于实用性的几点补充从我个人的实操习惯来说完整的电源完整性分析流程可以概括成四步空腔扫描、定点分析、联合优化、全波复核。空腔扫描就是不加任何电容直接跑裸平面的Z(f)先把谐振点全部找出来定点分析是在谐振点对应的位置深挖电流密度分布和阻抗大小联合优化是在原理图里用emModel配合电容模型做快速迭代全波复核是最关键的一步在最终方案确定后回到Momentum做一次全波验证确保没有因为走线、过孔或电容焊盘引入的新寄生效应。很多人问Momentum到底能多准我的回答是在扁平结构、正确层叠、合理网格的条件下Momentum提取Z参数的精度对于电源完整性分析是足够的。但要注意仿真永远模拟不了实物中所有的不确定性——过孔的寄生电感、电容焊盘的安装电感、甚至电容本身批次之间的差异都会让实测的谐振点比仿真偏移。所以做设计时别把目标阻抗压到理论值的极限留下20%~30%的余量才算正经做法。另外一个很容易被忽略的小技巧Momentum里仿完一次可以把S参数保存成Touchstone文件这类文件除了在ADS原理图里使用还能导出到其他时域仿真器里做瞬态响应分析。比如你想看某个瞬态电流激励在电源平面上的电压波动把Momentum网络放进ADS的瞬态仿真Transient里激励加一个实际的电流脉冲就能看到非常直观的电压波形。这个分析维度比只看Z(f)曲线要实用得多同时也让Momentum这套方法不局限于频域思维。电源完整性这门功夫说穿了就是“和看不见的谐振作斗争”。在ADS里用Momentum做PI分析更像是一种把射频思维引入供电网络设计的实践。如果你刚开始接触这套流程我建议你先拿一块现成的、已知有电源噪声问题的板子练手——把问题复现出来再一步步往下分析。当你第一次看到那块让你加了无数电容都压不下来的板子在Momentum仿真里清晰地展示出那个罪魁祸首谐振峰时那种“原来如此”的痛快感就是这套方法最大的价值所在。