做电源完整性仿真的工程师,第一次用Cadence Sigrity Power SI做AC阻抗仿真时,通常会有两个极端感受:要么觉得太简单,把版图导入、选个网络、放两个探针,点一下Run就出曲线了;要么觉得太复杂,频率范围怎么设、VRM模型怎么建、结果到底合不合格,完全是一头雾水。这篇博文我想把Power SI里的AC阻抗仿真从头到尾讲透,包括仿真之前需要想清楚的原理、工具里每一个关键设置背后的原因、以及结果超标时怎么一步步去优化。内容偏工程实践,适合刚接手电源完整性仿真、或者已经在跑仿真但总觉得结果心里没底的朋友。
1. 在做AC阻抗仿真之前,先把电源完整性这事捋清楚
1.1 明明板子能点亮,为什么还要做电源完整性仿真
先说一个我经常被问的问题:板子都能正常开机、跑系统了,为什么还要做电源完整性仿真?这个问题要从芯片工作时的真实需求说起。芯片内部成千上万个晶体管在同一个时钟沿翻转,瞬间需要一个很大的电流。这些电流不是从远处的电源模块直接拉过来的,而是由芯片周围的去耦电容、PCB平面、以及电源模块共同构成的供电网络来供给。
这个供电网络在业界叫PDN,也就是电源分配网络。它从VRM开始,经过Bulk电容、PCB走线、电源平面、过孔、表贴去耦电容,一直到芯片的电源引脚,甚至还要算上封装基板和裸片内部的电路。PDN最核心的指标之一就是阻抗。当芯片有一个瞬态电流变化ΔI流过PDN时,根据欧姆定律,电源引脚处的电压波动就是ΔV = ΔI × Z。Z越大,电压波动越大,轻则电源纹波超标,重则触发芯片掉电复位、逻辑误翻、高速接口误码。
这些故障往往是间歇性的,示波器去抓又很难复现,排查起来非常头疼。做AC阻抗仿真的目的,就是在设计阶段把这个“Z”算清楚,看它在芯片可能需要的整个频段内,有没有超过一个允许的阈值。只要阻抗被压在阈值以下,瞬态电压波动就大概率在可控范围内。这就是为什么板子能点亮,依然要做电源完整性仿真的根本原因。
1.2 目标阻抗:AC阻抗仿真的一把尺子
有了阻抗曲线,还得有一把尺子去衡量它,这把尺子就是目标阻抗。目标阻抗的计算公式不复杂:
Z_target = (VDD × 允许纹波比例) / ΔI
其中VDD是电源电压,允许纹波比例一般取3%到5%,ΔI是芯片可能出现的最大瞬态电流变化量。举个例子,一颗0.9V的内核电源,允许3%的纹波,瞬态电流变化10A,那么目标阻抗就是:
Z_target = (0.9 × 0.03) / 10 = 0.027Ω = 27mΩ
注意这个27mΩ是整个频段内的一个天花板。也就是说,从几Hz到几百MHz,从芯片电源引脚看进去的输入阻抗,理论上都要低于27mΩ才算安全。这里多说一句,实际项目中很多人会把目标阻抗当成一个固定的全局指标,严格来讲它和负载的瞬态电流频谱有关,是一个频变的量。但工程上为了简单,普遍用这个公式算出一个恒定值,然后要求全频段阻抗低于它,这个做法在大部分场景下是够用的。
理解了目标阻抗,AC阻抗仿真的意义就落到了实处:不是看曲线好不好看,而是看曲线有没有穿破那条目标阻抗线,穿破了就说明这个频段的PDN阻抗偏大,需要补电容、改布局、或者优化电源模块设计。
2. Sigrity Power SI AC阻抗仿真到底在研究什么
2.1 从S参数到Z参数:AC阻抗仿真的数学底色
很多人第一次接触AC阻抗仿真,会以为它就是拿欧姆表去测量,实际上Power SI内部处理的是完整的频域电磁场问题。在GHz频段以下,PCB上的电源平面、过孔、走线早就不是简单的理想导线了,它们有寄生电感、寄生电容,还有电阻损耗。要精确得到从某个端口看进去的阻抗,需要用场求解器算出整个网络的端口特性。
Power SI这里处理的实际上是Z参数。你可以把芯片电源引脚看成一个端口,仿真器在这个端口注入一个已知的交流电流,然后计算端口电压,两者的比值就是输入阻抗。在高频段,PCB上的平面和过孔之间存在复杂的耦合,单纯靠RLC集总模型已经算不准,必须用全波求解器或者经过验证的2.5D求解器来做。Power SI的优势在于,它能在不太牺牲速度的情况下,把平面、过孔、走线、电容模型统一放到一个电磁场环境里求解。
这里我想强调一个概念,就是仿真的频率范围。很多人在建AC阻抗仿真时习惯拍脑袋填1MHz到1GHz,这其实是错的。电源网络的谐振行为从几kHz就开始了,尤其是大容量的Bulk电容和VRM输出电感构成的谐振峰,往往在几十kHz。如果你从1MHz开始扫,低频段的峰值完全看不到,等于白做。一般建议从100Hz甚至10Hz开始,上限到芯片封装和裸片能影响的频率,通常在1GHz到10GHz之间,根据实际需要设定。
2.2 影响阻抗曲线的三个频段和“老熟人”们
一条完整的AC阻抗曲线从低频到高频,会呈现多个峰谷,看着很复杂,其实背后的物理规律非常清晰。不同频段起主导作用的元件完全不同,你只需要分频段去看。
低频段,一般是10kHz以下,主导的是VRM的环路响应和Bulk电容。VRM不是理想电压源,它内部有误差放大器、功率管、输出电感,这些决定了它从直流到几十kHz的输出阻抗。这个频段的阻抗曲线通常会先随频率上升然后下降,形成一个由VRM输出电感和输出电容谐振产生的峰。
中频段,大约10kHz到几MHz,主导的是板级去耦电容,包括容值较大的Bulk电容和容值稍小的陶瓷电容。每个电容都有一个自谐振频率,这个频率由电容本身容值和寄生电感决定。多个电容并联会在各自的自谐振频率附近呈现低阻抗,但在容值差异较大的电容之间会产生反谐振峰。反谐振峰是电源完整性设计中最大的敌人,它出现在不同谐振频率的电容交替切换的频带上,如果芯片瞬态电流的频率分量恰好落在反谐振峰附近,电压波动会被明显放大。
高频段,几MHz到GHz,起主导作用的是PCB电源平面本身的特性、过孔的电感、以及芯片封装和裸片内的寄生。这个频段想靠电容去压低阻抗已经很吃力了,更多依赖平面耦合、过孔质量、以及芯片封装本身的去耦能力。
想清楚这三个频段的物理图像,你就知道看仿真结果时应该把注意力放在哪里。看到一个峰,先判断它落在哪个频段,再去找对应频段的电源网络元件,优化方向马上就清晰了。
2.3 反谐振是怎么来的,为什么电容越多越容易出现尖峰
反谐振这个问题值得单独拿出来讲,因为它太容易把新手绕晕。我给一个生活中比较容易理解的类比:并联电容就像一组不同大小的蓄水池,每个水池通过一根管道接到用水点。管道本身有电感,水池越大、管道越长,等效电感越难降低。
在某一频率下,容值大的电容已经接近甚至进入感性区,而容值小的电容还处在容性区。感性区意味着阻抗随频率上升,容性区意味着阻抗随频率下降。两者并联后,如果相位正好相反,总阻抗会在这两个电容的谐振频率之间出现一个峰值,这个峰值往往远高于单个电容的阻抗,这就是反谐振。
反谐振的本质是电容并联系统中不可避免的一个现象,无法完全消灭,只能控制它的幅度。控制方法通常是让不同容值的电容交叉排列,让容值比不要太大,比如10nF和22nF交替,而不是100nF和1nF两种极端容值。容值平缓过渡,反谐振峰就会明显缓和。这一点在做AC阻抗仿真结果分析时非常有用,因为你在曲线上看到的那些“尖刺”,很多都是反谐振造成的,不是仿真算错了。
3. Power SI里AC阻抗仿真的完整流程
3.1 从版图到仿真模型:准备工作不能省
先说版图导入。Power SI通常有独立界面,也可以在Sigrity Suite Manager中启动Power SI。新建工程后,导入格式选择对应的PCB工具输出格式,主流流程是Cadence Allegro输出.brd文件,然后直接选择。其他EDA的版图需要转换或导出中性格式,比如ODB++,这一步务必确认转换后的叠层、网络、器件信息没有丢失。
导入之后第一步不是急着设仿真,而是检查叠层和材料参数。叠层里的介质材料、介电常数Dk、损耗因子Df、铜箔电导率和粗糙度,都会影响高频段的阻抗结果。很多公司有标准的叠层模板,直接套用就行;如果没有模板,要去跟PCB Layout确认实际叠层厚度和材料,别用软件默认值。默认Dk和Df与实际板材差太远的时候,仿真出来的谐振频率会整体偏移,高频段尤其明显。
接下来是网络识别。你要在版图中指定哪些是电源网络、哪些是地网络。Power SI通常会自动识别铜皮和网络,但有些孤岛、没有连接的铜皮不会自动归属到任何网络,仿真时会表现为悬空。悬空的电源平面会在局部形成意外的谐振,甚至导致曲线出现莫名其妙的尖峰。我习惯在仿真前用软件的网络检查功能把所有网络过一遍,确认每个电源网络都有完整的回流路径,也就是有对应的地平面与之耦合。
设置完叠层和网络,还要对所有器件做模型分配。这一步是很多新手最容易卡住的地方。软件的器件库会自动匹配一部分电阻电容模型,但库里没有的器件会变成“未定义”状态。未定义的电容在AC阻抗仿真里等于不存在,会导致结果整体偏大。我建议养成一个习惯:进入仿真前,检查BOM里每个电容是否都有对应的等效模型,至少要有ESR和ESL,理想的纯电容模型在中高频段误差会非常大。
3.2 新建AC阻抗仿真:一个可以照抄的流程
模型准备妥当后,就可以正式建仿真了。我按照自己的习惯,把整个流程拆成下面几步,照着做基本不会漏:
第一步,在Power SI菜单里新建一个AC Impedance仿真,选择导入的版图文件和叠层模板。
第二步,在仿真配置界面里添加要分析的电源网络。通常一个工程会有多个电源域,比如0.9V内核、1.8V IO、3.3V模拟电源等,如果你一次导入的版图包含多个电源网络,建议分开做,或者一次选多个网络但分别查看结果,避免曲线互相混淆。
第三步,设置仿真频率范围。前面说过,低频要足够低,我一般取10Hz或100Hz起,上限到1GHz到3GHz。如果芯片封装和裸片是重点研究对象,或者你是做先进封装设计,上限可以推到10GHz以上。扫描点数设成对数分布,比如每十倍频程100个点,既保证频段覆盖完整,又不至于让中低频段太稀。
第四步,在芯片电源引脚位置放置一个AC电流激励源,或者更准确地说,放置一个阻抗探针。这个位置极其关键,它决定了你算出来的是“从芯片看进去”的阻抗,还是从其他位置看到的阻抗。为了完整评估,我通常会同时在电源入口(VRM输出端)、芯片电源引脚、以及板端主要去耦电容布局密集区各放一个探针,这样能同时看到不同位置的阻抗差异。
第五步,运行仿真。Power SI会先做一次模型提取,然后进行频域求解。提取时间取决于板子的复杂度和频率点数,简单板子几十秒,复杂服务器主板可能要好几个小时。求解完成后,界面上会直接画出各端口的阻抗曲线。
这个流程看起来简单,但我在实际工作中还是见过很多人把探针放错位置,导致结果和真实情况完全对不上。一个实用的检查方法是:在低频段,从芯片电源引脚看进去的阻抗应该趋近于VRM输出端阻抗和所有电容的低频串联阻抗之和,你可以手工估算一个量级,再和仿真结果对比,差太远说明探针位置或者模型设置有问题。
3.3 关键参数设置背后的“为什么”
整个流程里最容易被忽略的是参数设置的理由,我挑几个经常出问题的点详细解释一下。
先说频率范围和扫描点数。电源完整性的核心矛盾在于:低频段VRM和Bulk电容行为显著,中频段陶瓷电容主导,高频段平面和过孔主导。如果在低频段只用很少的点,VRM的谐振峰很容易被漏掉。对数分布的点保证了低频段和高频段都能有足够的解析度。另外,如果你发现某个频率点附近曲线特别陡,可以单独从1kHz扫到1MHz、加密点数,再和全频段曲线拼起来,这是一种很实用的局部放大手段。
再说VRM模型。很多工程人员图省事,把VRM设成理想电压源,这样低频段阻抗会趋近于0,看起来特别漂亮,但这是假象。实际VRM有环路响应和输出电感,从仿真角度至少要在VRM输出端串联一个与真实电源模块输出电感量级的电感,比如100nH到2uH,具体值参考电源芯片数据手册。不这么做,低频段的阻抗曲线会严重偏低,你误以为很安全,实际产品在低频瞬态响应时就会掉电。
最后说一说探针和激励源的关系。AC阻抗仿真本质上是在端口注入电流源,然后测量端口电压,算V/I得到阻抗。你可以在多个位置放多个探针,每个探针都会给出一条独立的阻抗曲线。不同探针之间的结果差异其实也很有价值,比如你在电源入口和芯片端各放一个探针,两条曲线之间的差异可以帮你判断板级去耦在哪个频段起作用,哪个频段完全是靠VRM或平面在硬扛。
3.4 提高仿真效率与精度的技巧
Power SI的AC阻抗仿真和DC IR drop仿真不太一样,它要求在很宽的频段内做电磁场求解,板子一复杂,计算量就上来了。这里分享几个我常用的提速和精度平衡技巧。
首先是网络分割。如果你的板子有多个完全独立的电源域,可以只选择目标网络参与求解。Power SI允许你在分析中包含或者排除特定网络,把无关网络去掉,速度能提升不少。不过要注意一点:芯片和地平面通常是要保留的,因为回流路径依赖地网络,去掉地会导致高频阻抗明显偏大。
其次是模型精度分级。对于去耦电容这类规模大、数量多的元件,用Spice模型精度最高,但仿真速度最慢。纯RLC模型精度稍低,但速度能快很多。我的做法是:第一次快速扫描时全部用RLC模型,先把整体曲线轮廓跑出来,确认谐振点分布合理;如果个别频段细节需要看得很准,再针对那些频段的电容用Spice模型重新跑。这样既保证效率,又能验证结果。
最后是利用合理的网格剖分选项。Power SI的平面求解器会自动做网格剖分,网格越细精度越高但速度越慢。新版软件的自适应网格已经做得相当聪明,我通常用默认设置,只有在平面边缘、过孔密集区域结果出现异常时才手动加密局部网格。
4. 仿真结果怎么看、怎么修
4.1 解剖一条阻抗曲线:从低频到高频一步步读
仿真跑完之后,界面上会弹出一堆曲线,很多人盯着看了一阵子还是不知道到底算不算合格。我一般按下面顺序读曲线。
第一步看低频平台。从最低频开始,阻抗应该先是一个很小的值,然后随着频率上升出现一个峰,这个峰就是VRM和Bulk电容的谐振峰。如果这个峰超过了目标阻抗,说明VRM的输出电感太大,或者Bulk电容容量不足、距离VRM太远,导致电感偏大。
第二步看中频段走势。从几十kHz到几MHz,你会看到几个明显的谷和尖峰。谷对应的是某组电容的自谐振频率,尖峰就是不同电容之间的反谐振。我首先关注的不是那些已经很低的谷,而是尖峰的峰值有没有超过目标阻抗。反谐振峰是压指标的难点,因为它往往不是单纯加电容就能解决的。
第三步看高频段。过了几MHz以后,曲线通常迅速上升,最后几乎是一条单调上升的直线。这段主要由过孔和平面电感和封装的寄生决定。高频段超过目标阻抗很常见,但未必都是问题,关键在于芯片的实际瞬态电流在高频区有多大的能量。除非是做高速接口、大电流功率芯片,一般高频段的超标可以适度放宽。
顺着这个思路,你就能把一条复杂的曲线拆成三个独立的子问题来分别检查,而不是整条曲线拿去看,那样往往会被低频或中频的峰干扰判断。
4.2 阻抗超标怎么办:对症下药的PDN优化方法
曲线超了先别慌,超标不可怕,可怕的是不知道怎么修。我把不同频段超标时的对策整理成一份笔记:
低频段超标,核心是VRM环路和Bulk电容。对策包括:换用输出电感更小的VRM模块,或者调整电源模块的环路补偿让它的环路带宽变高;增加Bulk电容总容量,选择低ESR的大容量钽电容或者电解电容;把Bulk电容尽量靠近电源模块输出端放置。
中频段超标,核心是去耦电容的选型和布局。对策包括:在目标频段附近增加自谐振频率合适的陶瓷电容,比如1MHz到10MHz区域多用1uF到10uF的X5R/X7R;把容值从小到大均匀混合,避免出现容值差距过大的并联组合;增加去耦电容与芯片电源引脚之间的过孔数量,减小连接电感。
高频段超标,核心是平面和过孔。对策包括:电源平面和地平面尽量靠近,缩小介质厚度,增加平面电容;在芯片正下方和电源引脚旁边密集布置小容值电容,比如100nF、10nF的0201封装;优化过孔排布,每组电源/地过孔尽量靠近,形成低电感回路。
这些都是工程上被反复验证有效的手段,具体怎么组合,还是要回到AC阻抗曲线上去验证。每做一次改动就重新仿真,看曲线的变化是否符合预期,不要一次改太多变量,否则很难判断到底是哪个改动起了作用。
4.3 一个0.9V内核电源阻抗全频段压到10mΩ以下的案例
说一个我经手过的真实场景。某FPGA内核电源0.9V,目标阻抗计算出来大约10mΩ。第一次仿真结果非常难看:低频50kHz附近有个大峰,峰值到了80mΩ;5MHz附近还有一个反谐振,到了25mΩ,而目标只有10mΩ。
低频这个大峰经过分析,原因是VRM输出电感太大,加上Bulk电容数量明显不足。优化动作很直接:把电源模块输出电感规格从680nH降到330nH,同时在VRM输出端附近增加了6颗470uF的聚合物钽电容。仿真验证后,50kHz的峰从80mΩ降到了12mΩ附近,基本贴近目标线。
中频反谐振的问题就复杂了。查看原始设计发现,板上27uF和1uF电容各占了一大半,中间容值几乎没有,所以27uF朝1uF的过渡区出现了一个很陡的反谐振。我们的做法是拿一部分1uF替换成4.7uF和2.2uF,让容值按27uF、10uF、4.7uF、2.2uF、1uF的顺序平滑过渡,同时保证总容量不变。结果5MHz附近的反谐振峰从25mΩ降到了9mΩ,曲线整体压到了目标线下。
这个案例想说明的其实是迭代方法的重要性。先低频后高频,先大器件后小器件,一次只动一类参数,每次仿真后记录曲线变化,这是PDN优化最笨但最可靠的做法。
5. 常见问题与排查技巧实录
5.1 仿真跑不通:模型未定义、网络悬空、曲线异常
用Power SI的过程中,几乎每个人都会遇到一些让人抓狂的报错,我把高频问题排除一下。
最常见的报错是仿真器件未定义。这种问题通常出现在工程导入以后,软件找不到部分器件的仿真模型。解决办法是回到模型库为每个未定义器件分配一个可用的模型,没有库的话可以手工创建一个RLC串联模型,参数从器件数据手册里查。不要跳过未定义器件,它们会直接干扰仿真结果。
还有一种情况是曲线在某个频率点突然出现一个孤立的非常深的尖刺,这种情况八成是某些区域产生了虚拟谐振,尤其容易发生在悬空铜皮上。检查一下有没有孤岛网络,把它们接地或者删除,尖刺一般就会消失。
网络热词里还经常有人搜“cadence瞬态仿真不收敛”,这在Sigrity工具里也时有发生。AC阻抗仿真不收敛通常和高频点数太多、网格剖分过细有关,可以试试降低最高频率、放宽收敛判据,或者把求解器换成更稳定的选项。另外,如果你在某个节点手动加了一个无源器件但极性接反了,也会导致不收敛,检查器件方向也是一个常见排查手段。
5.2 仿真与实测对不上:最容易被忽略的几个原因
仿真结果和实测差距大,几乎是所有电源完整性工程师的共同痛点。我踩过几次坑之后,总结了三个最典型的原因。
第一个原因是VRM模型太理想。很多人在仿真里把VRM当理想源,低频阻抗被算得很低,实际产品用专业阻抗分析仪去测,低频阻抗普遍比仿真高不少。解决办法是给VRM模型加上输出电感和ESR,至少要和数据手册给出的等效参数一致。
第二个原因是电容模型不够准。我们经常只知道一颗电容的容值和封装尺寸,但ESL和ESR往往被忽略。ESL在自谐振频率以上的频段是主角,ESR直接决定谐振谷的最低阻抗。用理想的LCR模型和用厂商提供的精确频变模型,在中高频段的结果差异非常显著。
第三个原因是探针位置与实测位置不一致。仿真里你放在芯片电源引脚,实测时探针却放在电容附近,两者之间隔了一段电源平面,高频段的阻抗自然对不上。实测之前,先想清楚你要验证的是哪个端口的阻抗,并尽量在仿真里和实测时选择一致的位置。
我把这些典型问题整理成了速查表,方便排查时直接对照:
| 症状 | 可能原因 | 排查路径 |
|---|---|---|
| 低频阻抗异常偏低 | VRM模型设置成理想源 | 给VRM加输出电感和ESR后重跑 |
| 中频出现异常尖峰 | 电容模型ESL过大或容值过渡剧烈 | 核对电容模型参数;调整容值排布 |
| 曲线高频整体偏高 | 地网络未包含在仿真中 | 检查分析网络设置,确认地网络参与 |
| 尖刺出现在孤立频率点 | 悬空铜皮或孤岛平面 | 删除或接地悬空铜皮后重跑 |
| 仿真与实测差异大 | 探针位置不一致 | 统一仿真与实测的测量位置 |
| 报错器件未定义 | 器件没有分配模型 | 全量分配RLC/Spice模型后再跑 |
5.3 关于AC阻抗仿真和TDR仿真的一个提醒
顺便提一句,很多人搜索“sigrity怎么仿真tdr”,是把它和AC阻抗仿真混在了一起。TDR是时域反射计仿真,主要用来观察传输线的特征阻抗变化,定位阻抗不连续点,比如走线换层、过孔残桩、连接器焊盘等,它和电源完整性的AC阻抗仿真用途完全不同。
但在电源完整性领域,TDR仿真也有它的用处,比如你怀疑某个过孔或者某段平面拼接存在明显的阻抗不连续,可以用TDR仿真的波形去定位具体位置。Signal Integrity和Power Integrity虽然在工具里是不同模块,实际分析思路是相通的。我的建议是AC阻抗仿真解决“够不够低”的问题,TDR仿真解决“在哪里断了”的问题,两者可以互补使用。
6. 最后再分享一个实战里的小习惯
做了几年电源完整性仿真,我自己最大的体会是:不要一上来就跑全板仿真,先花几分钟手工估算一下低频段的等效阻抗,再用仿真去验证。比如粗略算一下VRM输出电感和Bulk电容的谐振频率,预测一下曲线在哪个频点出现峰,然后再去看仿真结果。这个预判的过程,能让你非常快地发现仿真设置里的错误,也能让你对曲线异常更敏感。
AC阻抗仿真只是电源完整性设计中的一个环节,后续还可以继续做DC IR Drop分析、时域瞬态仿真、去耦电容优化,甚至和信号完整性联合分析。每一步之间都是互相印证的,跑熟了AC阻抗这条链路,后面这些东西上手会快很多。先把这一条曲线看明白,电源完整性设计你就已经入了正门。