板子贴片回来那天,我用示波器去量DDR4的VDDQ,纹波直接干到了100mV。按标称1.2V正负5%的规格,上限是60mV,这板子等于白打了。那一刻我意识到,PDN设计不能等到板子回来再验证,必须在Layout阶段就用SIWave把电源完整性仿真跑透。
所以我今天想把这套东西完整写下来。这不是那种"点几个按钮出张图"的教程,而是把我踩过的坑、填过的参数、反复试过的优化手法全部串起来,从数据准备到直流压降、交流阻抗、去耦电容优化,一直到常见的模型陷阱,一条线走完。适合正在做PCB Layout、硬件调试,或者刚接触电源完整性但不知道从哪下手的工程师参考。
SIWave本质上不是一个仿真软件,而是一个"PDN体检中心"。它把VRM、电源平面、去耦电容、过孔、芯片封装当成一套完整的供水系统来建模,然后告诉你:哪个楼层水压不够、哪根管道太细会发热、水箱放在哪里最合适。搞懂它的工作逻辑,比学会按钮位置重要一万倍。
1. 先弄清楚SIWave到底在仿什么——一次PDN设错的血泪教训
1.1 PDN的本质:一座城里的供水系统
我习惯把PDN(Power Distribution Network,电源分配网络)比作城市供水系统。VRM就是自来水厂,电源平面和走线是市政管道,去耦电容是每栋楼顶上的水箱,芯片引脚就是每家每户的水龙头。
问题是,电流需求是瞬变的。CPU从空闲到满载,电流可能在纳秒级内跳变几个安培。这时候你不能指望自来水厂(VRM)把压力隔空传过来——VRM的响应速度有物理极限,环路电感和电容延迟决定了几十纳秒内它基本"帮不上忙"。真正扛住瞬态电流的,是离芯片最近的那些去耦电容,也就是楼顶水箱。
SIWave干的事,就是把这个系统完整建模:水管粗细(铜箔厚度和宽度)、水箱数量和位置(电容)、水厂位置(VRM)、水龙头开多大(芯片电流负载),全部放进去,然后仿真不同频率下的阻抗特性和直流压降分布。这一步如果不做,等板子焊好再去量纹波,发现问题只能加电容、飞线、甚至是重新改板,成本直接翻好几倍。
我之前接手过一个项目,原设计者图省事,把10uF电容全放在板边,芯片引脚附近一个去耦没有。SIWave跑完交流阻抗,目标频率3MHz处阻抗峰值飙到87mΩ,目标阻抗是30mΩ,超标接近3倍。实际测出来的纹波和仿真几乎吻合——78mV。这就是没做电源完整性仿真的代价,一版板子的钱就这么烧掉了。
1.2 SIWave能做什么,不能做什么
先说能力的边界。SIWave主要覆盖三种分析:
- 直流分析(IR Drop):看稳态压降分布、电流密度、热点位置,评估铜箔和过孔是否够用。
- 交流分析(Impedance Profile & S参数):看PDN随频率变化的阻抗曲线,找出超过目标阻抗的谐振峰,评估去耦电容布局是否合理。也可以提取S参数给信号完整性仿真用。
- 谐振模式分析(Resonant Analysis):找电源平面间因驻波效应产生的谐振频率点,一般配合电容放置来抑制。
它不擅长的是时域瞬态仿真,例如完整系统级EMI辐射。时域纹波波形更适合用SPICE或CST等工具联合仿真。SIWave是"频率域体检",先把PDN的阻抗属性理清楚,再去其他工具看瞬态响应,这是我推荐的流程。
另外要说清楚,SIWave的仿真精度取决于你喂给它的模型。叠层参数不准、电容ESL模型拉胯、VRM用理想源代替,出来的曲线就只能"仅供参考"。很多时候仿真和实测对不上,不是SIWave不行,是输入模型不行。
2. 仿真前的数据准备:叠层、VRM、电容和电流负载一个都不能少
常用的电源完整性方程式有两个,贯穿整个仿真过程:
- 目标阻抗公式:Ztarget = (V × Ripple%) / ΔI
- 谐振公式:f = 1 / (2π√(LC))
无论你是做直流压降还是交流阻抗,本质上都是在围绕这两个公式转。但是公式好背,数据难凑。数据是仿真里价值最高的部分,我花在整理数据上的时间通常比仿真本身还多。
2.1 必查的数据清单和来源
动手之前,我会把下面这张表填完整,缺一项都可能让仿真失真:
| 数据项 | 来源 | 用途 | 容易忽略的坑 |
|---|---|---|---|
| 叠层文件 | 板厂/EDA工程师 | 铜厚、介质厚度、介电常数,决定回路电感和平面电容 | 介质厚度写的是"压合后"还是"压合前",差很多 |
| VRM输出模型 | 电源模块厂商手册 | 定义低频源阻抗和响应边界 | 偷懒用理想电压源会低估低频峰 |
| 电容BOM及模型 | 物料库/厂商规格书 | 容值、耐压、ESR、ESL,中频段阻抗特性 | 相同容值不同封装,ESL差异能到5倍以上 |
| 芯片电流需求 | 芯片数据手册/Power Model | 直流压降和瞬态纹波目标 | 用平均电流代替最大瞬态,结果偏乐观 |
| 电源网络映射 | 原理图 | 确定哪些网络是电源、哪些是地 | 电源网络命名不一致,SIWave导入后网络识别失败 |
叠层这块我要多说一句。SIWave是从Gerber或ODB++这些导入物理版图的,之后叠层管理器里填的介质厚度、铜厚、介电常数直接决定RLGC参数的计算结果。低频时这影响不大,但到了几十上百MHz,平面间回路电感主要靠介质厚度决定,填错了整条阻抗曲线都会偏移。
2.2 目标阻抗是怎么算出来的
目标阻抗不是拍脑袋定的,常见做法是先看芯片手册对电源轨的要求。举个例子,一颗FPGA内核电压0.9V,额定电流6A,最大瞬态变化ΔI=3A,允许纹波3%。
代进公式:
Ztarget = 0.9 × 3% / 3 = 0.9 × 0.03 / 3 = 9 mΩ
这个9mΩ就是整条PDN从VRM到芯片引脚,在目标带宽内的阻抗上限。如果布局合理、电容充足,就能保证3A电流突变时,压降不超过27mV。
值得注意的细节是,ΔI怎么取。不少工程师直接用最大电流减去最小电流,算出来的结果偏保守,要求更苛刻。如果你的系统有动态电源管理、负载切换场景,我建议用"最坏情况瞬态电流变化量",也就是从低功耗跳到满载的差值。如果拿不准,宁可取大一点,目标阻抗算下来低一些,后续设计余量也大一些。
2.3 文件格式:ANF还是ODB++
SIWave支持好几种导入格式,我用得最多的两种:
- ANF(Ansoft Neutral File):从HFSS、Designer或SIWave自身导出的中性格式,包含完整的版图几何、网络、端口和叠层信息。第三方EDA工具也有插件可以导出。
- ODB++ / IPC-2581:PCB行业标准格式,比Gerber多保留了网络连接信息,兼容性最好。
如果只有Gerber,我建议先找EDA工程师把ODB++导出来,或者至少把叠层文件整理齐。纯Gerber导入的话,没有网络连接信息,全得靠人工映射网络,费时费神还容易出错。
3. SIWave建项目与模型检查的完整流程
3.1 从导入到网络检查,一步步走
先交代一下我的环境:Ansys Electronics Desktop 2023 R2,SIWave界面。国内不少公司还在用老版本EDB或者HFSS 18+,菜单位置会有点差别,但逻辑基本一致。
第一步,启动Electronics Desktop,新建项目后在Project菜单里选Insert PI(或者直接点SIWave图标)。
第二步,导入版图。在SIWave主界面选导入,文件类型选ODB++,路径选择解压后的文件夹。单位统一用毫米(导入时选)。
第三步,设置叠层。导入完成后进入Layer Stack设置,逐层核对:铜厚(1oz=35um还是2oz=70um)、介质材料、介电常数(FR4常规4.2~4.4)、介质厚度。很多项目的数据手册不会直接给Dk值,只有板材型号,这里要用板厂压合叠层书的参数填,别靠猜。
第四步,网络映射。这是最考验耐心的一步。把原理图里的电源地网络名和版图网络对起来。如果ODB++里有完整网络信息,这一步半自动完成;如果是Gerber导入,就得一个一个手动指定。我习惯把所有电源网络名列一个Excel表,导入后逐项核对,尤其是不同名字代表同一物理网络的情况,比如VCC和3V3可能是同一根铜皮在不同层上的不同命名。
3.2 模型完整性自查:三分钟排除低级错误
导入完成后千万别急着仿真。我吃过大亏,模型里一条3cm的走线没保留铜,仿真结果直接废掉。现在我会用三分钟做一次自查:
- 3D视图扫一遍:切到3D战国视图,看铜皮、过孔、焊盘是否都在。铜皮缺一块或者过孔乱飞,视觉上很容易看出来。
- 网络统计核对:在模型管理里看网络数量和名称,和原理图对一遍,少一个就查。特别是GND网络,经常被自动命名成GND1、GND2。
- 叠层完整性:确认所有信号层和电源层都有对应的介质和铜厚数据,没用的层也不能空着,会算成空气间隙,影响回路电感。
检查完保存,项目路径不要有中文和特殊符号,这能省掉一堆玄学问题。
3.3 SIWave仿真的两类设置路径
SIWave主界面经常有两个入口:一个是"DC IR Drop"分析,一个是"AC Impedance"。各自有独立的求解设置和后处理。这两个分析不能在一个求解中同时跑完,建议分别保存项目版本,或者用Project Variants来管理。
顺便提一句,如果你是想做电源/地平面谐振分析,可以在Edit菜单下的Excitation里选Sources,然后跑Resonant Analysis,出来的结果会显示哪些频率在平面边缘电压最大。这个是进阶玩法,本文先不展开,先打好直流和交流两块基础。
4. 直流压降仿真:从设置到判定目标的实操
4.1 设置VRM:别把电源端口当摆设
直流分析的第一步是给每个电源网络指定VRM。操作路径:Assign Excitation -> Voltage Regulator,然后选择VRM的Source(电源输出引脚对应的过孔或焊盘)和Sink(负载端需要供电的引脚)。
这里有一个最常见的坑:Source和Sink不能只选一侧。SIWave需要知道电流从哪进、从哪出,才能建立完整回路。Source指向VRM输出,Sink指向芯片的电源引脚和地引脚对,两边都选齐。
在VRM设置面板里,需要填写空载电压(No Load Voltage)和负载调节范围(Load Regulation)。比如一个标称0.9V、调节精度±1%的VRM,空载电压写0.909V,负载范围内压降约0.009V。如果你的VRM手册没给具体调节范围,可以先按空载电压=标称电压+1%,后续再修正。
4.2 电流负载:用数据手册的硬数据
直流仿真需要知道每个电源引脚抽多少电流。操作路径:Assign Excitation -> Electronic Current Source,然后逐个选择芯片的电源引脚,输入对应电流值。
这里交个底:一颗BGA芯片几十上百个电源引脚,一个个填会疯掉。实际做法是打开芯片厂商提供的Power Model(通常是Excel或XML格式),里面会给出每个电压域的总电流和引脚分布。如果只有功耗和电压,那电流就是P/V。比如内核功耗4W、电压1.0V,总电流就是4A。把这4A按引脚数量均匀分配下去,先跑一版,后面再按热分布细化。
4.3 求解和后处理:压降、电流密度、热点一网打尽
设置完成后,选择DC IR Drop分析,频率设为0Hz(纯直流),运行求解。
求解完成后进入后处理界面,SIWave会默认显示电压分布图。此时我会做三件事:
- 看压降量级:用Report里的Set Plot Range把色标上下限锁在目标范围。比如0.9V电源,想看谁低于0.873V(0.9-3%),就把色标下限锁在0.873V,低于这个值的地方会变成警示色。如果不锁量程,SIWave会自动拉伸色标,0.89V和0.899V可能显示成同一个颜色,视觉上"没有压降"。
- 看电流密度:切换显示电流密度J,重点关注从VRM电源平面进入芯片区域的路径。红色高亮区域意味着铜箔电流密度超标,典型阈值可以参考:外层铜箔一般不超过30A/mm²,内层减半。超过就要加宽铜皮、增加过孔数量,或者换2oz铜。
- 看热点温度:如果做了电热耦合,还可以看温升图。这个需要额外材料属性和边界条件,前期不需要开。
判定标准不是"最差电压接近目标"就完事,我一般要求最差压降位置预留20%以上的余量。举个例子:芯片最低工作电压0.873V,仿真出来最差节点0.880V,只余下7mV,这并不安全。因为温度变化、批量生产、老化等因素都会让实际压降更差,留20%余量是标准做法。
4.4 直流仿真的一个真实判定案例
之前做一款网关设备,DDR4 VDDQ 1.2V,芯片允许纹波5%,也就是60mV,目标最低电压1.14V。仿真跑完,最差压降出现在内存颗粒远端角落,1.158V,余量18mV。看着是过了,但电流密度图显示从VRM到内存颗粒的一段1.5mm宽走线,电流密度高达22A/mm²,我要求的是15A/mm²以下。
后来在下一版Layout里,把这段走线拓宽到2.5mm,增加一排0.5mm过孔换层,再仿真压降直接降到1.172V,电流密度降到12A/mm²。这个改动放在第一版,能省掉一版工程费。这就是直流仿真的价值:不是算一个"过或不过",而是找出所有可能成为瓶颈的部位,在物理上把钱花在正确的地方。
5. 交流阻抗仿真:找准目标阻抗的四个步骤
5.1 为什么要看Z(f)而不是只看纹波
直流压降看的是稳态,但电源完整性真正让人头疼的是瞬态。芯片电流突变的时候,PDN的寄生电感会产生电压降,这个降落的幅度取决于PDN阻抗:ΔV = ΔI × Z。但是PDN阻抗不是常数,它是频率的函数。电容在低频时阻抗很高,高频时走线电感阻抗上升,中间某个频段可能出现谐振尖峰。
交流仿真的目标就一句话:在目标频段范围内,保证PDN阻抗处处不超过目标阻抗Ztarget。
所以第一步还是算Ztarget。用DDR4的1.2V、5%纹波、ΔI=2A来算,Ztarget = 1.2 × 0.05 / 2 = 30mΩ。有了这条线,下面的仿真和优化就有了锚点。
5.2 设置VRM交流模型和电流源
和直流不同,交流分析里VRM的模型很关键。不能只给一个理想电压源,那样求解出的低频阻抗会是个多余的0,完全失真。我在交流仿真里给VRM的设置是:
- 电压源:1V理想源
- 串联电阻:1mΩ
- 串联电感:0.5nH~1nH
这个串联阻抗用来模拟VRM的输出阻抗和反馈环路响应带宽。实际VRM的闭环输出阻抗在几千赫兹以下是毫欧级别,到几十千赫兹以后开始上升,模型里的一小段电感就能很好体现这个趋势。
电流负载的设置和直流类似,但激励类型要选AC,幅值随便给1A就行。因为Z(f)本身就是阻抗,跟电流源幅值无关,给1A只是为了归一化计算。
5.3 频率扫描范围和求解器选择
频率范围怎么划?我习惯从10kHz扫到100MHz。低频到10kHz以下主要由VRM决定,通常不会出问题;100MHz以上主要由封装和模具决定,SIWave的平面建模精度也会下降。如果有特殊情况,比如时钟在200MHz附近的电源抖动问题,可以适当延展到500MHz,但要注意封装模型精度。
每个decade的采样点数设40到60个点,太疏会把谐振峰漏掉,太密求解时间不成比例地增加。求解器选Impedance Profile,SIWave默认使用频域直接求解,它会把所有电源网络都跑一遍,输出每条电源网络的Zcurve。
5.4 如何看懂Z(f)曲线
跑完之后,后处理里会看到多个曲线,每个电源网络一条,横轴是频率,纵轴是阻抗,还有一条目标阻抗水平线(Ztarget)。
我们来拆解一条典型的阻抗曲线:
- 低频段(10kHz以下):曲线平稳且很低,这是VRM的功劳。如果此段就高于目标线,说明VRM模型或远端电容不足。
- 中频段(10kHz~几MHz):曲线先上升后出现尖峰,这些尖峰就是谐振峰,包括体电容的ESL谐振、电容和平面电容的反谐振等。峰值超过目标线就说明该频段去耦不足。
- 高频段(几十MHz以上):曲线主要由回路电感和芯片封装决定,通常单调上升。如果这里超标,加电容已经不太管用,得优化电源/地平面间距或过孔布局。
判断标准很简单:曲线任何一处超过Ztarget线,就需要优化。
我之前做过一块FPGA板,5V电源在2MHz出有一个45mΩ的峰,目标线30mΩ。实际测试时,这个电源轨在FPGA动态配置时纹波到达74mV,远超5%规格。后来加了两颗330uF的聚合物钽电容在负载附近,2MHz峰降到22mΩ,纹波回到36mV。整个过程仿真和实测的吻合度在15%以内,这是交流仿真最让人放心的时刻。
6. 去耦电容优化,让阻抗峰降下来的真正做法
6.1 从仿真反推电容数量和位置
阻抗峰超标之后,不是随便加电容就行。我会按照一个固定的流程来做去耦电容优化:
- 先确定缺口频段:在Z(f)曲线上看哪个频段超过Ztarget,比如10MHz处的峰。
- 算单个电容的谐振频率:选择一个小容值、低ESL的电容,它的自谐振频率SRF=1/(2π√(LC))。比如100nF电容,ESL约0.4nH,SRF约25MHz。如果目标频段是10MHz,选100nF就太偏了,更适合选1uF(SRF约8MHz)。
- 估算所需数量和布局:在缺口频段,目标是让该频段的总阻抗降到Ztarget的一半以下,留出裕量。单个电容在该频段的阻抗值Zc,需要的并联数量就是Zc/Ztarget,再乘2。
- 仿真迭代:加完电容后重新跑Z(f),看峰是降了还是只是平移。峰值降低后,再盯着有没有新产生的反谐振峰。
SIWave里加电容有两种方式:一种是在Layout文件里直接放置电容器件(在版图模式下手动放封装、赋容值),一种是在Designer里通过Netlist文件虚拟添加。我建议前期用虚拟添加,先算清楚容值和数量,最后再回头在Layout里落地。
6.2 布局位置的优先级排序
电容放在哪,比放多少个更重要,因为过孔电感和走线电感决定了高频段的实际去耦效果。
我执行的位置优先级是这样的:
- 芯片电源引脚的正下方:距离小于30mil,过孔直接连到电容焊盘。这部分电容负责最高频段的去耦。
- 芯片封装边缘向外0.5cm范围:第二圈,负责中高频段。
- 电源平面边缘或分割区域边缘:用于平面谐振抑制,位置需要结合谐振模式仿真。
- 板边或负载远端:体电容,负责低频段,距离要求不高。
优先级1和2做好,高频段阻抗基本就稳了。优先级4做得再好,也不可能弥补高频段的缺口。
6.3 反谐振峰的识别和处理
多级电容并联时有个典型的"反谐振"现象:大电容和小电容并联,各自有谐振频率,两个谐振峰之间的交叉点会因为并联LC谐振出现一个阻抗尖峰——反谐振峰。
处理思路很简单:不让两个电容的谐振频率太接近,用不同数量级的容值拉开距离。比如10uF(SRF约1MHz)和100nF(SRF约25MHz)之间,中间加一颗1uF(SRF约8MHz)做过渡,反谐振峰高度能压下去不少。
SIWave的阻抗曲线上,反谐振峰会很明显地突出在目标线之上,比如之前做过的2.2mΩ目标线电源,加了10uF和100nF各若干后,1MHz处出现9mΩ的尖峰。后来在中间补了5颗1uF,尖峰降到4mΩ,再用0.1uF的小电容在高频段压了一道,全频段才稳定低于目标。
这段过程听起来简单,实际迭代了七八轮,每一轮都要重新跑一遍Impedance Profile。这就是为什么我强烈建议先虚拟加电容做参数扫描,而不是每次都在Layout里实际摆放——省下的时间不是一点半点。
7. 我也曾踩过的坑:文件格式、模型精度和迭代效率
7.1 叠层单位错误导致的"假超标"
有次仿真结果疯狂超标,低频段阻抗直接高出两个数量级。查了一圈,最后发现叠层介质厚度填的是"mil",但实际上叠层书给的是"um",一英寸25.4倍的偏差,直接把平面间电容算小了一大截。
从那以后,我导入叠层后干的第一件事就是抽查一层,拿已知的板厚数据反算一遍。比如整板1.6mm、8层板,介质厚度叠加总和约等于1.6mm减去铜厚总和,差太多就说明哪里填错了。这个检查花不了1分钟,但能避免后面的所有分析全部白做。
7.2 电容模型:用厂商模型,不要自己"造"
很多工程师喜欢用理想电容模型(纯容值)去做仿真,出来的曲线和实测差得离谱。真实电容在高频下受ESR、ESL主导,尤其是0402以下的小封装,ESL量级直接决定SRF位置。
现在主流的电容厂商,比如Murata和TDK,都提供准确的SPICE/IBIS模型,里面包含完整的寄生参数。SIWave也内置了Ansys元件库,可以直接搜料号拉取模型,精度比手动填ESR/ESL好得多。
如果手头没有厂商模型,我会按经验值设定:0402的ESL约0.4nH,0603约0.6nH,0805约1nH。ESR看规格书给的DCR和谐振阻抗,没有就按1mΩ先填,后续用实测校准。
7.3 迭代速度:把参数扫描玩明白
去耦电容优化本质上是参数扫描。SIWave支持的参数化方式是:在电容对象上把容值、ESL、ESR设成变量,然后设置扫描范围,一次性跑完所有组合,提取目标频段的阻抗峰值。
举个例子,我把10uF电容的ESL设成变量,从0.5nH扫到1.5nH,5个变量值,每个全仿真跑一遍,最后对比不同ESL下1MHz阻抗峰值。找到最优区间,再反过来指导选型。这种思路比"加几颗再看一眼曲线"效率高一个量级。
另外,做优化前用简化模型先跑通流程,再替换成全精度模型。SIWave提供模型简化选项,可以先忽略部分高频效应,跑一个大致的趋势,确认方案可行后再开完整仿真。时间紧张的时候,这个习惯能救急。
7.4 实测结果对不上仿真时的排查顺序
仿真和实测总会有差距,但如果差距明显超过15%,我按下面的顺序排查:
- 实测点位置是否对应仿真端口:示波器探头夹在芯片引脚上,还是夹在去耦电容上,结果显著不同。要在仿真里找到对应的参考点。
- 电容是否全部贴装:检查BOM里有没有省料,尤其是0402小电容,贴片时容易漏贴或者贴错位置。
- VRM实际输出阻抗:拿频谱分析仪测一下实际VRM环路阻抗,和模型里的1mΩ+0.5nH对比。很多反馈环路设计不好的VRM,低频阻抗能高出好几倍。
- 过孔背钻/残桩:高速场景下过孔残桩会对高频段阻抗造成明显影响。
按这个顺序排查,绝大多数对不上的情况都能定位到模型边界条件或者测试方法本身的问题。
8. 结语:仿真不是终点,而是设计决策的起点
最后说一点个人体会。SIWave的仿真结果再漂亮,也不能替代示波器上的最终验证。它真正厉害的地方,是让你在画板子的阶段就知道该把电容放在哪里、铜皮加多宽、过孔打多少,而不是等板子回来才在实验室里手忙脚乱。
我现在做项目的习惯是:布局定稿前,必跑一轮IR Drop找瓶颈;电容方案定了,必跑一轮Impedance Profile看余量;改版时,只看仿真对比报告,快速定位变化是否引入新的电源隐患。
如果让我只留一个建议给你,那就是:第一次用SIWave跑项目时,别求全,把一路电源轨的直流和交流跑通、把结果和实测对一遍,建立你自己的"仿真口径"和"安全裕量"经验值。这比你套用任何教程里的参数都更有价值。后面你每做一个新产品,这套经验会变成你最可靠的底牌。