news 2026/10/25 1:06:05

多核SoC电源完整性PI设计:从谐振机理到去耦网络落地

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
多核SoC电源完整性PI设计:从谐振机理到去耦网络落地

前阵子我们一款多核SoC回片测试,CPU单跑一切正常,可一旦NPU和GPU挂上联合负载,DDR接口就开始零星报错。示波器怼到核心电源域上看,毛刺直逼几百毫伏,频率恰好落在封装寄生电感跟片内去耦电容谐振出来的那个峰上。这种问题在流片前如果能靠PI(Power Integrity,电源完整性)设计提前压住,根本不用等芯片回来再熬夜查。

我入行这几年接过不少芯片项目的后端和封装协同设计,说句实在话,多核、多电源域的谐振电源噪声,已经成了先进工艺下回片后最头疼的几大问题之一。它的难处不在原理多深,而在于噪声源多、频段宽、耦合路径杂,传统单电源域那套"堆电容"的思路根本应付不过来。这篇东西就把我实际做过的PI设计方法拆开讲,包括谐振怎么算、去耦网络怎么铺、仿真怎么建模、工程里哪些坑最好提前避开。适合正在做芯片后端、封装设计或者信号电源完整性仿真的同行参考,也适合刚接触PI想建立整体认知的初学者。

1. 先讲清楚谐振噪声是什么:封装里那根隐形的“LC回路”

1.1 一次回片实测引爆的问题

前面提到的那个项目,具体现象是这样的:芯片核心电压0.8V,规格书上允许的纹波是±3%。实测时核心域的瞬态电压跌落到了0.72V左右,换算成跌落幅度就是10%,显然超标。等我把示波器FFT打开,发现噪声能量主要集中在30MHz到40MHz这一段,再对比封装寄生参数,答案就浮出来了——封装走线电感加片内去耦电容,正好构成一个自谐振频率在35MHz附近的LC回路。

这个现象在芯片行业有个日常叫法:谐振电源噪声。简单理解就是,电源分配网络(PDN,Power Delivery Network)里既有电容又有电感,任何一个RLC电路都有自己的谐振频率。当芯片内部电路瞬态抽流的频率分量刚好落在谐振点附近时,阻抗会被放大,一点点电流波动就能转换成很大的电压噪声。这跟我们推秋千一样,推的频率对了,幅度就越荡越大。

1.2 PDN的寄生电感才是噪声放大器

很多人第一次接触PI会觉得奇怪:电源网络明明铺了一大片铜,为什么还会产生噪声?答案是寄生电感。芯片要工作,电流必须从PCB上的电源模块出发,穿过过孔、板级走线、封装基板走线、凸点(bump)或键合线,最终进到硅片内部。这些路径上的每一段金属都有电感,频率越高,感抗越大。

按公式算,感抗是 Z_L = 2πfL。假设封装回路电感L为500pH,在35MHz下感抗不过0.11Ω,看着不大?可问题是同一回路里还并着一堆片内去耦电容,两者一谐振,阻抗峰值可以比单看电感或单看电容高出十倍不止。这个峰值一旦对准芯片实际工作时的抽流频段,就会表现为明显的电源纹波甚至时序违规。

更加隐蔽的是,谐振分很多阶。片内电容跟封装电感谐振是一阶,封装外接的几组不同容值MLCC之间还会产生反谐振(稍后细说)。所以PDN的频域阻抗曲线从来不是平直的,而是高低起伏的一组峰和谷。PI设计的目标,说穿了就是把这条曲线压到目标阻抗门限以下,别让峰冒头。

1.3 为什么多核一跑,谐振峰就被“撞”上了

单核芯片时代,内核开关频率固定,负载电流变化相对单一,只要避开了谐振点,问题不大。多核就完全不同了:CPU、GPU、NPU、DSP、DDR控制器各跑各的,时钟频率不同,任务负载不同,瞬态电流的频谱变得非常宽。你在某一次测试里避开了35MHz,换个负载组合,噪声能量跑到60MHz去了,那边可能正好蹲着另一个谐振峰。

我自己遇到过最典型的场景:CPU变频瞬间的大电流抽走,会在低频段砸出一个很大的电压跌落;GPU高负载运行时周期性的电流纹波,会激励起中频段的封装谐振;而NPU和DDR接口并发的随机翻转,又会把高频毛刺引到敏感模拟域。噪声源头不再是"一个主要开关电流",而是一堆时间上重叠、频段上分散的电流脉冲。这种情况下,如果PDN阻抗曲线到处是峰,总有一个会被撞上。

这就是为什么标题把"多核多电源域"单独拎出来——它不是把单核的问题重复几遍,而是产生了一种全新的、必须从系统层面重新设计PDN的挑战。

2. 多电源域的耦合路径:噪声不会老老实实待在自己的地盘

2.1 三条耦合路径:公共阻抗、衬底、相邻走线

多电源域的第一层麻烦,是域与域之间的噪声串扰。很多人以为电压域分开了就干净,实际上噪声照样能从三条路跑过去。

第一条是公共阻抗耦合。多个电源域共用同一个封装基板层、同一组电源/地平面、同一排供电凸点,哪怕它们在硅片上分得清清楚楚,到了封装和板级,回流电流还是会在地平面上汇合。某域的地电流波动,会在公共地阻抗上产生压降,直接变成另一个域看到的"地弹"。

第二条是硅衬底耦合。同一颗芯片里,内核域和模拟域做在同一块衬底上,衬底不是绝缘体,高频电流可以通过衬底电阻窜到模拟电路的地参考上。对PLL、ADC这类对噪声极敏感的模块,这往往是致命的。

第三条是相邻走线耦合。封装基板和PCB上,不同电源域的走线之间、电源线与高速信号线之间都存在寄生电容和互感,高频信号一跑,能量就串过去了。

2.2 分割平面与缝合电容:切断回流不代表切断耦合

为了抑制域间干扰,最常见的做法是分割电源平面——一个域一块铜皮,中间留隔离带。这个方法对直流和低频段有效,但到了高频段,分割槽本身会切断回流路径,让电流绕远路,反而增加了回路电感,把谐振峰往低频方向推。

所以现代设计里,平面分割之后必须在分割线附近跨接缝合电容(stitching capacitor)。它的作用是在高频段给回流电流提供一个低阻抗的跨越通道,否则回流电流只能绕着边界走,绕出来的那圈大电感会变成新的噪声源。缝合电容的容值和数量不是随便定的,一般取0.1µF到1µF的0603或0402,沿着分割缝每隔一段距离放一颗,具体密度取决于你允许的最大回流路径绕行电感。

另外在硅片层面,深N阱隔离和Guard Ring(保护环)也是常用的衬底噪声隔离手段。模拟域周围打一圈接地的保护环,加宽隔离阱深度,能把衬底耦合压低不少。代价是面积和设计复杂度,所以通常只对PLL、SerDes这类高敏感模块使用。

2.3 DVFS让谐振点“漂移”的麻烦

多核芯片标配动态电压频率调节(DVFS)。电压和频率切换时,负载电流的幅值和变化速率都在变,激励频谱跟着变。今天跑低频省电模式,电流变化慢,低频段能量高;明天跑高频性能模式,dI/dt变大,高频段能量显著增强。

这就带来一个很要命的工程问题:你谐振点没动,但撞上它的激励变了。有些芯片在不同性能模式下噪声表现完全两样,并不是设计有什么错,纯粹是工作点不同导致的频谱重心移动。所以做PI验证时,至少要在最高频、最低频和典型频率三个工作点上分别跑一次瞬态仿真,只看一个工况就下结论,回片后大概率会翻车。

3. 目标阻抗与去耦网络:PI设计的定量起点

3.1 目标阻抗公式怎么用才不踩坑

PI设计所有工作围绕一个核心数字展开:目标阻抗Ztarget。在频域里,它表示PDN在任意频率下允许呈现的最大阻抗。超过这个阻抗,同样的瞬态电流就会产生超过允许范围的电压纹波。

目标阻抗的经典粗算是:

Z_target = (VDD × 允许纹波百分比) / I_transient

举个例子:VDD=0.8V,允许纹波3%,即24mV;瞬态电流变化量按60A算,那Z_target = 0.024 / 60 = 0.0004Ω,也就是0.4mΩ。这个数字从DC一直到芯片需要关心的最高频率都必须守住。

实际用的时候有三个坑。第一,I_transient不是稳态电流,而是最大瞬态变化量,用平均值算出来会偏乐观。第二,目标阻抗不是一条水平线,低频段由电源模块的输出阻抗和Bulk电容决定,高频段则由片内、封装去耦决定,每一段的限值可以不同。第三,现代芯片还要考虑多个端口同时抽流的情况,单一端口的Ztarget算出来不够,需要看阻抗矩阵。

我通常的做法是先用粗算公式定一个全频段底限,再根据功耗仿真给出的实际电流频谱,在能量弱的频段适当放宽,省下不必要的去耦成本。这个"看谱放宽"要靠经验,也是PI设计和纯教科书计算拉开差距的地方。

3.2 多级去耦的分频段策略

PDN从片内到板级,隔着好几层物理结构,每一层都有自己擅长覆盖的频段。去耦设计的基本逻辑,就是让每一层各管一段,把整条阻抗曲线压到Ztarget以下。划分大致是这样的:

频段主要去耦手段典型容值对应物理位置
DC-1MHz板级Bulk电容、电源模块输出电容几十µF到几千µF主板
1MHz-10MHzMLCC陶瓷电容1µF-100µFPCB近封装区
10MHz-100MHz小封装MLCC、封装基板埋容0.01µF-1µF封装基板、BGA附近
>100MHz片内去耦电容、硅电容、深沟槽电容几nF到几百nF芯片内部

这个频段分配不是拍脑袋。低频段电流变化慢,电容主要用来存电荷,容值越大越好;高频段电流变化极快,电容要能在纳秒级时间内把电荷送到开关电路门口,这时候决定响应速度的不是容值,而是电容自身的串联电感和回路电感。一颗100µF的大电容,因为封装太大、引脚太长,自谐振频率可能只有几MHz,到了100MHz它反而像个电感,不但帮不上忙,还添乱。

所以高频段宁可要一堆100nF的小封装电容,也不要几颗大电容。这就是为什么芯片周围会密密麻麻摆一圈0402甚至0201封装的MLCC,每颗容值看着不起眼,但自谐振频率高、回路电感小,配合片内去耦,才能压住上百MHz的谐振峰。

3.3 反谐振峰:多电容网络之间的“看不见的敌人”

去耦电容数量堆够了,阻抗曲线却可能冒出新的峰,这就是反谐振。每颗电容都带寄生电感,可以看成LC串联谐振器。两档电容的谐振频率不同,比如说片内网络谐振在60MHz,封装外接MLCC网络谐振在3MHz,那么在这两个频率之间,前一个电容已经变成感性,后一个还没完全变成容性的频段,两个网络的并联阻抗反而会冲出一个峰。

反谐振峰的危害在于:它常常不出现在你认真盯着的那几个频点,而出现在两个去耦档位覆盖范围的交界处。很多仿真曲线乍看低频、高频都达标了,仔细一扒,中间某段悄悄顶超高,正是反谐振在作怪。

抑制手段有几个:一是拉开相邻档位的谐振频率间隔,每十倍频程一档,互相重叠;二是在峰点附近加装合适容值的吸收电容;三是引入串联阻尼电阻,牺牲一点点低频阻抗,把峰的尖锐度磨平。第三种在做敏感模拟域时很常见,因为阻尼电阻能把Q值打下来,峰就不那么吓人了。

3.4 一个双核SoC去耦预算的完整演算

拿我之前经手的一个模拟项目举例:某双核SoC,核心域VDD 0.8V,瞬态电流从20A跳到60A、变化时间2ns,允许纹波24mV。

先粗算目标阻抗:0.4mΩ。再算需要多少片内去耦电容撑住2ns内的高速抽流:

C_die = I × Δt / ΔV = 60 × 2ns / 24mV = 5µF

5µF放在片内,按逻辑工艺的MOS电容密度估算,大概要占掉不小的有效面积,而且栅氧电容漏电可观。实际我们只放了1.5µF片内decap,剩下靠封装级和板级分摊。理由很简单:片内decap覆盖的是百兆赫兹以上的极高频段,2ns这个时间尺度其实已经落到封装/板级的中频段了。把过多面积砸在片内,性价比很低。

封装级我们放了两档电容:一档是12颗100nF、0201封装,靠近核心域对应的BGA区域;另一档是4颗1µF、0402封装,放在封装基板边缘。板级再放8颗22µF的大容量MLCC和2颗470µF的Bulk电容。仿真拉平之后,10MHz以下的阻抗由板级压住,10-100MHz由MLCC和封装电容压住,100MHz以上交给片内decap和封装寄生电容,整条曲线基本能贴着Ztarget走。

这个分配的比例不是固定的。某个项目的功耗越集中、dI/dt越大,片内占比就要往上提;封装基板层数多、走线短,外去耦的压力就小。每次都要拿实际功耗波形重新过一遍仿真,别直接抄别家的配置。

4. 芯片-封装-板级协同仿真:从模型到曲线的完整链路

4.1 三个层级的模型精度怎么取舍

PI仿真要出靠谱结果,建模必须覆盖芯片、封装、板级三层,每一层的模型精度直接决定仿真可信度。

芯片层通常用晶体管级或门级的去耦模型——片上所有的扩散电容、栅电容、金属寄生电容汇总成一个随频率变化的网络。这个模型不需要每个晶体管都建出来,但decap的容值和等效串联电阻要准确,否则谐振点算偏了,后面全白做。封装层推荐直接用三维电磁场求解器提取S参数,把凸点、走线、过孔、平面、焊接球的寄生都包括进来。板级则是电源模块输出阻抗模型加PCB走线和BGA封装区域的RL提取。

这里有个人经验:封装层的提取最花时间,但最不能省。很多项目为了赶进度,拿手算的RLC集总模型代替三维提取,结果谐振峰位置偏出去二三十兆赫兹,后面的时域仿真全部作废。我宁可多花两天把封装模型提细,也不愿意回片后用两星期去查为什么实测跟仿真对不上。

4.2 频域阻抗曲线怎么读:看着Z(f)找问题

频域仿真的输出是一条Z(f)曲线,横轴频率、纵轴阻抗,再画上Ztarget的门限线。合格的曲线整段埋在门限以下,不合格的曲线会有若干个峰冒出来。拿到曲线先别急着调电容,按顺序做三件事:

第一,找第一个冒头的峰在哪个频段。低频峰多半是电源模块环路带宽不够或者Bulk电容ESR偏高;中频峰大概率是板级MLCC与封装电感谐振;高频峰基本是封装寄生与片内decap在打架。

第二,看峰的Q值。Q值高(峰又尖又高)说明回路损耗小,可以考虑串阻尼电阻;Q值低(峰宽而矮)说明损耗本身够,缺的是容值或电感控制。

第三,对照芯片的实际电流频谱。峰落在有能量的频段必须处理;峰虽然超标但对应频段完全没有电流激励,可以留一点裕量后放过,不过要有仿真数据支撑,不能凭感觉放。

4.3 时域瞬态仿真:激励波形比求解器更重要

频域曲线达标是必要条件,但最终拍板还得靠时域瞬态仿真——直接把芯片各电源域的电流波形加载到PDN模型上,算出真实的电压波动波形。经验告诉我,这块最大的误差来源不是求解器,而是激励。

电流波形要从功耗仿真里拿,常见来源是RTL级的功耗估计工具或者门级仿真里的翻转率(toggle rate)统计。最怕的就是拿一个平均电流当瞬态波形用,那样算出来的电压跌落会严重偏小。真实电流波形要能体现:负载跳变的瞬间变化率、时钟同步翻转产生的周期性电流峰、不同电源域之间的相位关系。

我这边的标准做法是至少取三组波形:一组最高负载跳变、一组最大dI/dt、一组不同域错相最严重。每组波形分别用于时域仿真,看最坏情况下的电压包络有没有超过规格。三组都过,才敢签PI设计完成。

5. 工程落地中的权衡与避坑实录

5.1 片内去耦电容:面积、漏电与噪声的三角账

片内去耦电容是最贵的去耦手段,因为它直接消耗硅片面积。而且逻辑工艺里常见的MOS电容有栅极漏电,静态功耗嗖嗖往上飙,这对低功耗产品是硬伤。我见过一个项目,为了压某高频谐振把片内decap翻了一倍,结果漏电功耗多了三百毫瓦,直接被产品经理打回来重做。

更实际的做法是分类对待:对漏电不敏感的标准单元区域,多用普通MOS电容;对低功耗待机域,换用漏电极低的高密度电容或者深沟槽电容。另外,片内decap位置也很有讲究,贴着瞬态电流最大的宏单元摆,比均匀撒在全芯片效果好得多,因为电源网络在高频下的IR压降和回路电感是局部的。

5.2 封装凸点与回流路径:最短原则背后的物理

封装设计里,电源凸点的数量和位置直接决定PDN的回路电感。电流从板级进封装,再到硅片,走一个回路,环路的面积越小,电感就越低。把电源凸点和地凸点交错紧挨着放,能让回流电流贴着供电电流走,环路面积急剧缩小,高频阻抗显著下降。这跟高频PCB设计里"信号紧挨回流地"是同一个道理。

实操中要注意球珊阵列(BGA)的电源球位置和封装基板电源平面的开槽。有些封装为了布线方便,把某几个电源域的地平面局部掏空,结果那块区域的回路电感比别人高一倍,谐振峰直接砸到敏感频段。这种问题仿真能查出来,但要在封装设计早期就定好规则,不然后面改版成本很高。

5.3 板级电容的摆放与ESL陷阱

板级电容有个经典误区:只看容值,不看封装带来的等效串联电感(ESL)。同一颗1µF电容,0603封装和0402封装的自谐振频率能差出一倍多。高频去耦不要贪大容值,要贪小封装、低ESL。

摆放位置同样关键。电容离芯片电源引脚越远,中间那段走线的寄生电感就越大,高频去耦效果断崖式下跌。最理想的是电容放在芯片正面的BGA投影区内、尽量靠近电源过孔;次之放在芯片四周最近的一圈;最怕的是为了布线方便,把去耦电容统一堆到PCB背面很远的地方。没有走线电感的小封装电容,可能还不如一颗放得近的大电容。

还有过孔的学问。电容两端的过孔要是共用一个回流过孔,电感会叠加;用双过孔甚至四过孔并联,电感能降下来不少。这个细节在频域仿真里看得很清楚,两条曲线一对比,谐振峰高度差一截。

5.4 一条可复用的PI自查清单

做了几个项目之后,我整理了一份PI设计自查清单,每次都按它过,踩雷概率低了很多:

  • 每个电源域的目标阻抗线画出来了吗?全频段都低于Ztarget吗?
  • 有没有对拍反谐振峰?相邻两档电容的谐振频率间隔是否合理?
  • 片内decap的总量和漏电预算对齐了吗?是否贴紧要害模块摆放?
  • 封装凸点阵列里,电源/地是否交错?有没有地平面被开槽掏空?
  • 板级去耦电容是靠近BGA还是堆在远处?每颗电容的ESL考虑过吗?
  • DVFS的至少三组工作点都跑过瞬态仿真吗?最坏电流波形是否覆盖?
  • 多域之间的缝合电容数量、位置是否经过回流路径分析?
  • 敏感性模块(PLL、SerDes、ADC)有没有做域间噪声耦合专项检查?

这八条看着朴素,但每一条背后都有实际翻车案例。PI设计做到最后,拼的不是会不会用软件,而是有没有把物理规律吃透、在工程约束里做取舍。多核多电源域的谐振噪声问题,本质上是对设计者系统观的一次考验——从硅片看到板级,从频域看到时域,从单一域看到跨域耦合,每一步都扎实了,回片后的惊喜就会少很多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/25 1:06:05

哈夫曼编译码器课程设计:从原理到C++实现与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/25 1:05:42

嵌入式转型真相:硬件-软件-物理世界协同思维才是核心门槛

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/25 1:05:28

MIPI D-PHY调试实战:从CTS参数到信号完整性排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/25 1:05:08

SAP client copy 静默失败根因排查与三道身份关通关指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/25 1:04:38

WPS PIN码算法破译复现与无线路由器防御自检

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/25 1:03:43

板卡上电浪涌I²t计算与保险丝选型实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华