3、电源完整性(PI):目标阻抗设计、去耦电容网络、PDN阻抗曲线、同步开关噪声(SSN)、VRM建模

电源完整性,圈里人常叫PI。说实话,很多硬件工程师对PI的理解,就是“多放几个电容”。嗯,我以前也这么干过。直到有一次,一块8层板的DDR3跑533MHz死活不稳,眼图乱成一锅粥。我折腾了三天,最后发现是PDN阻抗在300MHz处有个尖峰。从那以后,我再也不敢小看PI了。

今天咱们就把PI的几个核心问题掰开揉碎。目标阻抗怎么定?电容网络怎么搭?PDN曲线怎么看?SSN怎么压?VRM怎么建模?一个一个来。

3.1 目标阻抗设计——先定个小目标

目标阻抗,说白了就是给芯片供电的“水管”有多粗。你想想看,芯片瞬间要吸一大口电流,如果水管太细,电压就会掉下去。掉多少?公式很简单:

Z_target = (Vdd × Ripple%) / I_transient

举个例子。1.2V的核电压,允许5%的纹波,瞬态电流变化3A。那么:

Z_target = (1.2 × 0.05) / 3 = 0.02Ω = 20mΩ

20毫欧。这个数字意味着什么?意味着从VRM到芯片焊盘,整个PDN的阻抗都不能超过20mΩ。注意,是整个频段,不是只在直流点。

关键点:目标阻抗不是一条直线,而是一条上限线。你的PDN阻抗曲线必须全程趴在这条线下面。我见过有人只算直流阻抗,高频段完全不管,结果板子一跑高速就翻车。

我个人习惯,会把目标阻抗再留20%的余量。比如算出来20mΩ,我按16mΩ去设计。为什么?因为PCB加工有公差,电容有ESR偏差,留点余量心里踏实。

3.2 去耦电容网络——电容不是越多越好

很多新手喜欢“电容海战术”,板子上密密麻麻全是电容。其实没必要。电容网络的设计,核心是频段覆盖

不同容值的电容,自谐振频率不同。比如:

电容值 封装 典型ESL 自谐振频率 有效频段
10μF 0805 0.8nH ~1.8MHz DC ~ 5MHz
1μF 0603 0.6nH ~6.5MHz 1MHz ~ 20MHz
0.1μF 0402 0.4nH ~25MHz 5MHz ~ 80MHz
10nF 0402 0.3nH ~92MHz 20MHz ~ 300MHz
1nF 0201 0.2nH ~355MHz 100MHz ~ 1GHz

看到了吗?每个电容只管一段频率。你要做的,就是用不同容值的电容,把目标频段“铺满”。

我的经验:不要用超过4种容值。太多容值反而会在交接处产生反谐振峰。我一般用10μF + 1μF + 0.1μF + 10nF,四层就够了。高频段靠PCB的电源地平面电容来搞定。

还有一个坑——电容的安装电感。你选了个ESL 0.3nH的电容,结果焊盘到过孔走了5mm长的线,额外加了0.5nH。自谐振频率直接腰斩。所以,电容要尽量靠近芯片焊盘,过孔要打在焊盘旁边

3.3 PDN阻抗曲线——看懂这张图,你就入门了

PDN阻抗曲线,横轴是频率,纵轴是阻抗。理想情况是一条平直的线,低于目标阻抗。但现实嘛……

典型的PDN曲线长这样:

  • 低频段(DC ~ 1MHz):VRM主导。阻抗很低,但VRM响应慢,瞬态电流一上来,电压先掉一截。
  • 中频段(1MHz ~ 100MHz):电容网络主导。这里最容易出问题——不同容值的电容在交接处会产生反谐振峰。比如10μF和1μF的阻抗曲线交叉点,如果没处理好,阻抗会突然飙高。
  • 高频段(100MHz ~ 1GHz+):电源地平面主导。靠PCB的层叠电容来提供低阻抗。层间距越小,电容越大,阻抗越低。

我曾经遇到过一个案例:板子在80MHz处PDN阻抗飙到了80mΩ,目标阻抗才30mΩ。查了半天,发现是0.1μF和10nF的交接处,两个电容的安装电感都偏大,反谐振峰直接超标。解决办法?把0.1μF换成更小封装的,安装电感降下来,反谐振峰就压下去了。

注意:PDN阻抗曲线一定要用仿真工具跑一遍。别凭感觉。我用的是Sigrity PI-DC和PI-AD,免费的可以用LTSpice搭个RLC网络粗略看看。但最终还是要用场求解器验证。

3.4 同步开关噪声(SSN)——一群IO同时跳变,电源就崩了

SSN,也叫同时开关噪声。说白了,就是几十个甚至上百个IO同时从0变1或者从1变0,瞬间电流大得吓人。这个电流流过电源路径的电感,产生压降:

V_noise = N × L_eff × (di/dt)

N是同时开关的IO数量。L_eff是电源路径的有效电感。di/dt是单个IO的电流变化率。

举个例子。32位DDR数据线同时翻转,每个IO的di/dt是0.1A/ns,电源路径电感是0.5nH。那么:

V_noise = 32 × 0.5nH × 0.1A/ns = 1.6V

1.6V的噪声!如果VDDQ是1.35V,这噪声直接超过电源电压了。信号还能看吗?

怎么解决?三个方向:

  • 降低L_eff:用更短的电源路径,更多的电源地过孔,更小的回路面积。我习惯在BGA扇出区打满电源地过孔,每4个信号过孔配1个地过孔。
  • 降低di/dt:用缓启驱动(slew rate control),或者加串联电阻。但注意,这会牺牲时序。
  • 降低N:用数据总线反转(DBI)编码,或者分时翻转。DDR4开始就支持DBI,能有效减少同时翻转的位数。

避坑指南:我曾经设计过一块FPGA板,SSN导致DDR3的DQS信号抖动超过100ps。查了半天,发现是FPGA的VCCIO电源平面被分割了,回流路径绕了一大圈。把电源平面连成一片,SSN立刻降了60%。记住,完整的电源平面是SSN的天敌

3.5 VRM建模——别把VRM当理想源

很多仿真把VRM当成一个理想的0Ω电压源。嗯,省事是省事,但结果不准。VRM有输出阻抗,有带宽限制,有瞬态响应时间。

VRM的简化模型:一个电压源串联一个电阻和一个电感。电阻是VRM的输出阻抗,电感是VRM到PCB的走线电感。典型值:

VRM类型 输出阻抗 输出电感 带宽
LDO 10 ~ 100mΩ 1 ~ 10nH DC ~ 1MHz
DC-DC(开关) 1 ~ 10mΩ 0.5 ~ 5nH DC ~ 100kHz
POL(负载点) 0.5 ~ 5mΩ 0.2 ~ 2nH DC ~ 500kHz

你看,VRM在低频段表现不错,但到了几百kHz以上,阻抗就开始往上翘。所以,中高频的去耦主要靠电容和平面,别指望VRM。

我个人做仿真时,会从VRM的datasheet里找到输出阻抗曲线,直接导入仿真工具。如果找不到,就用一个R-L串联模型代替。R取输出阻抗的典型值,L取VRM到第一个大电容之间的走线电感。

小技巧:VRM的环路带宽决定了它能响应多快的瞬态。如果芯片的瞬态电流变化速度超过了VRM的带宽,那VRM基本帮不上忙,全靠电容撑着。所以,高频数字芯片旁边一定要放足够多的MLCC。

3.6 总结一下

电源完整性,说白了就是一句话:在整个工作频段内,把PDN阻抗压到目标值以下。具体怎么做?

  1. 算目标阻抗,留余量。
  2. 选电容,用4种左右容值覆盖频段。
  3. 仿真PDN曲线,找反谐振峰,调电容值和安装电感。
  4. 关注SSN,用完整平面和地过孔来压。
  5. VRM别当理想源,用R-L模型或者实测曲线。

嗯,今天就聊到这儿。下一章咱们讲信号完整性的另一个大头——串扰。到时候我会分享一个让我加班到凌晨三点的串扰案例,保证让你印象深刻。