1. 为什么电源完整性分析绕不开温度这道坎
做硬件的人应该都有过这种经历:一块板子放在实验室常温下测试,电源纹波、压降都没问题,结果整机放进高温箱跑到 60℃、70℃,系统开始时不时重启,或者负载一拉满,电压表读数明显往下掉。
排查下来,大部分时候不是芯片本身罢工,而是电源传输路径先撑不住了。这里面的物理本质并不复杂:铜箔的电阻率会随着温度升高而变大,温度每升高 10℃,铜的电阻大约增加 4% 左右。换句话说,同样的电流、同样的铜皮走线,在高温下产生的 IR 压降更大,发热也更厉害。而发热变多之后,铜皮温度继续升高,电阻继续变大,压降和损耗继续恶化——这就形成了一个正反馈环路。
电源完整性(PI)分析做到后面,真正棘手的就是这个电热耦合问题。传统做法通常是把电和热拆开算:先做直流压降仿真,假设温度恒定在某个值(比如 25℃ 或 50℃),然后把结果拿出来再单独做热仿真。这么做不是不行,但忽略了温度和电阻之间的相互作用,在电流密度比较高、发热比较集中的场景下,仿真结果会和实测差出不少。
Cadence Sigrity 产品线里的 Power DC 模块,是我这几年一直在用的直流电源完整性分析工具。它出名的地方不只是能做常规的 DC IR Drop(直流压降)和电流密度分析,更重要的是它把电、热协同仿真做成了内置功能——不需要来回倒数据,在一套流程里同时解电流场和温度场,收敛之后直接输出带温度影响的电压分布、电流密度分布和整板温度分布。这篇文章就把我实际使用 Power DC 做电热协同仿真的完整思路、设置细节和踩过的坑整理出来。
适合看这篇文章的人,主要是两类:一类是刚接触 Sigrity、正在做 PCB 电源完整性验证的硬件工程师,另一类是已经在用 Power DC 做 DC 压降仿真、但发现结果和高温实测对不上的朋友。这篇文章不打算把界面按钮一个个截图讲——那些官方手册里都有,我更想讲清楚“为什么要这样设”“哪些参数直接决定了仿真可信度”,以及“结果出来后怎么判断有没有算对”。
2. Power DC 的电热协同仿真到底是怎么算的
2.1 从电流路径到焦耳热,再到温度场
电热协同仿真要解决的核心问题,通俗讲就是:电在导体里流动会产生热量,热量反过来改变导体的导电能力,这两个过程必须同时收敛,才能得到真实工况下的电气性能。Power DC 的做法是把整个版图剖分成网格,在每个网格单元上同时建立电流场方程和热传导方程,然后交替迭代求解。
电流场部分,计算的是从电源输出端到负载端每一条通路的电流密度分布,以及对应的直流压降。这个本质上就是求解拉普拉斯方程,只不过边界条件由叠层材料、过孔、铜厚和负载电流共同决定。热场部分,则是根据电流场算出来的焦耳热(即 I²R 损耗)作为热源,再叠加上边界散热条件,求出整个板子的温度分布。
两个场不是各算各的,而是交替迭代:先用某个初始温度算出电流分布,得到焦耳热,再把焦耳热喂给热方程,得到新的温度分布,然后把这个温度更新到材料的电阻率参数里,重新算电流场。如此往复,直到前后两次计算结果的差值小于设定阈值,才算真正收敛。
因此在电热协同仿真的语境下,工具输出的温度分布图不只是“热仿真报告”,它同时也是评估电流路径是否健康的重要依据——温度高的区域,往往也意味着电流密度偏大、损耗集中。
2.2 材料参数的温度依赖关系是整套仿真的地基
Power DC 里对材料电导率的描述,用的不是固定值,而是带温度系数的线性模型或者更复杂的曲线模型。铜的电阻率温度系数大约在 0.0039/℃,这意味着从 25℃ 升到 85℃,电阻率会增大 23% 左右。如果不勾选电热耦合选项,只是用固定常温电阻率去算压降,那么高温工况下 IR Drop 被低估几乎是一定的。
我在实际项目里看到过一组对比数据:某颗核心处理器供电网络,在纯电仿真(固定 25℃)下 VRM 输出到负载端的压降是 75mV,看起来余量很充足;但同一块板子在 70℃ 环境温度下做电热协同仿真,压降飙升到了 138mV。板上有一小段窄铜皮因为集中走线,局部温度超过了 110℃,把这段铜皮的电阻放大了将近三成。道理不复杂,但如果不做电热协同仿真,这个问题根本不会在设计阶段暴露。
温度依赖不只是影响铜箔,过孔内壁的镀铜、连接器的接触电阻、焊料的热导率都会随温度变化。Power DC 里可以针对不同材料单独指定温度系数,并支持自定义材料库。第一次用的时候我建议把这些参数逐一确认一遍,不要依赖工具默认值——层叠叠层里的材料定义和实际板材参数不一致,是仿真结果失真的第一大来源。
2.3 电热协同仿真的迭代收敛逻辑
Power DC 做电热协同仿真时,内部有一套迭代控制逻辑。每次迭代周期分为两步:先固定当前温度分布求解电流场,然后基于电流场的焦耳热求解温度场。求解完成后比较温度场的变化量,如果最大温度变化小于设定的收敛容差,就认为迭代结束;否则用新温度更新材料参数,继续下一轮。
这里有个容易忽略的点:如果初始温度设置得离最终平衡温度太远,迭代次数会显著增加,甚至出现温度震荡不收敛。Power DC 允许用户设置初始猜测温度,我一般会先做一次不勾电热耦合的纯电仿真,看看电流分布集中在哪里,然后根据经验给初始温度一个偏保守的估计,比如取预期最高温升的 60%~70%。这样电热迭代收敛速度快很多,也避免一开始温度振荡把求解器搞得不稳定。
3. 实际操作全流程:从 PCB 版图到电热联合求解
3.1 版图导入之后,先别急着仿真
Power DC 可以直接导入 Allegro 的 BRD 文件、ODB++ 以及多种第三方版图格式。我这里以最常见的 BRD 导入流程来说。
导入之后首先要检查的是叠层信息。叠层里的每一层铜厚、介质厚度、材料类型都会直接参与电场和热场计算——注意,是电和热两个场的计算都要用。比如介质层厚度决定了垂直方向的散热热阻,而铜箔厚度则直接决定导体横截面积和电阻。
检查叠层时特别要留意两点:一是表层铜厚和底层铜厚是否分别设置正确,二是内层电源/地平面的铜厚不要被默认值带偏。不少板子为了控制成本,内层用的是 0.5oz 甚至更薄的铜箔,如果叠层文件里没更新,仿真结果会明显偏乐观。
在这之后要做的是合并电源网络。Power DC 支持把多个同网络的铜皮、过孔自动识别为同一个网络,但复杂的板子上经常会出现孤立铜岛、死铜,还有那些仅通过过孔连接的碎片化铜皮。我习惯在网络可见性检查里先看一遍电源网络的完整度,把影响电流路径的孤立碎片手动处理掉,否则仿真结果里会出现局部电流密度严重集中的假象。
3.2 电源网络指派和负载配置,决定仿真场景和可信度
在 Power DC 里,仿真场景的搭建由几个要素构成:电源源(VRM 或电源连接器)、负载(Sink)、以及参考地网络。
电源源的设置里可以指定电压值和最大输出电流,也可以直接导入 VRM 的输出阻抗特性。负载端则需要给定电流大小,通常以电流密度的形式均匀加载在负载区域的铜皮上。如果你有芯片的功率分布图,比如某颗 FPGA 的内核电流主要集中在封装中心区域,那就可以在 Power DC 里用不规则多边形把负载区域圈出来,按比例分配各区域电流。
这里有一个非常关键的实践建议:负载电流的分配一定不要随便用“均匀加载”了事。比如一颗大规模 BGA 封装的处理器,内核电源从焊球阵列底部吸取电流,不同区域的电流密度差异可能很大。如果只是简单地在整个网络表面均匀加电流,热源分布会跟实际严重不一致,最终温度场和电流密度场都会失真,验证的意义就大打折扣了。
Power DC 提供了一种更精细的办法:把负载电流绑定到具体的器件(比如某个 BGA 的焊球区域),按照器件手册给出的电源引脚分布和电流比例来分配。我在做一个 8 核 ARM SoC 的电源验证时,拿到芯片封装资料后用这个方法按引脚区域分了 5 组电流负载,最后仿真结果和实测最大温差控制在了 5℃ 以内。
3.3 散热边界条件直接决定温度绝对值
电热协同仿真里,散热边界条件设得对不对,对温度结果的影响往往比电流设置还大。很多初次用 Power DC 做电热仿真的工程师容易忽略这一点,导致算出来的温度高得离谱,于是觉得“电热仿真不准”,实际上多半是边界条件没交代清楚。
散热边界条件包括几个部分:环境温度、PCB 表面的对流散热系数、辐射散热系数,以及与结构件接触面的传导边界。在 Power DC 里,你可以设定整板的底面和顶面分别有不同的对流系数——比如板子底面紧贴金属壳体,那底面散热主要靠传导,对流系数设得很低;顶面裸露在空气中,自然对流的典型值可以取 5~10 W/(m²·K),如果加风扇强制风冷,则要看风速大小,通常取 10~30 W/(m²·K)。
我之前碰到过一个实际案例:一块 10 层通信板卡,仿真时默认边界条件设的是自然对流 10 W/(m²·K),算出来核心供电区域温度到了 125℃。后来问了结构同事,确认板卡正面有导流罩,风道风速约 2m/s,把顶面对流系数调到 22 W/(m²·K) 之后,对应点温度降到 89℃,和实测的 85℃ 对上了。每次做电热仿真之前,跟结构/散热团队确认边界条件,比花大量时间优化网格更能提升仿真准确度。
3.4 电热耦合开关和迭代参数设置
在 Power DC 的仿真设置界面,电热协同仿真对应的选项通常是一个“求解类型”或者“启用电热耦合”的开关,勾选后就可以设置迭代参数。
三个参数需要重点关注:
- 收敛容差(通常按温度算):默认值一般是 1℃ 或 0.5℃。如果你只是为了定性评估热点位置,1℃ 够用了;如果想拿仿真结果来对比实测,建议收到 0.2℃ 以内,迭代次数会多一些,但结果稳定很多。
- 最大迭代次数:建议默认值基础上翻一倍。尤其是带大铜皮和多个高功耗器件的板子,迭代次数很可能超过默认上限。如果设置的迭代次数太小,工具会输出一个没收敛的结果,但界面上不一定有醒目的警告,新手很容易被看似合理的温度图骗过去。
- 初始猜测温度:前面说过,先做一次纯电仿真,再用其损耗分布作参考,手动设定一个初始温度,迭代效率会高很多。
在实际操作中,我会在第一次跑电热协同仿真时把最大迭代次数设大一些,然后盯一下中间残差曲线。如果残差是单调下降的,说明初始猜测温度和边界条件都比较合理;如果残差上下波动、反复横跳,先别盲目加迭代次数,回去把边界条件检查一遍。多数震荡来自对流系数过大或初始温度跟实际平衡温度差得太远。
3.5 仿真进行中,我习惯盯几样东西
仿真跑起来之后不是干等它结束。Power DC 可以在迭代过程中输出中间温度场和电压场,我一般会重点观察三件事:核心供电网络的温度收敛轨迹、最热点位置是否变化、以及各器件区域的局部电流密度是否稳定。如果中间温度场在最热点附近来回漂移,说明可能有两个互相竞争的物理效应在博弈(比如某条路径本来温度高、电阻大、电流被分流到旁边路径,导致温度重新分布),这种情况下迭代曲线会表现得“犹豫”,最终结果也容易受收敛容差影响。
4. 结果是出来了,怎么判断仿真靠不靠谱
4.1 三张图,从三个角度交叉验证
跑完电热协同仿真,Power DC 会输出三个核心结果:电压降分布图、电流密度分布图、温度分布图。这三张图叠加在一起看,才是完整的电热联合视图。
电压分布图用于检查从 VRM 到负载的每一段路径上的压降分配,判断哪里是瓶颈。电流密度图用于定位电流拥挤和过孔瓶颈区域,这些区域往往就是热点的前身。温度图则直接反映散热设计的充分性。
真正实用的方法是把三者对应起来看:在温度最高区域,回过去看电流密度是不是也偏高,电压降是不是有一个明显跳变。大多数情况下三者是自洽的——温度高的地方对应电流密度集中的区域,也对应压降图上局部陡降。如果出现温度很高但电压降和电流密度都看不出异常的情况,那就要警惕热模型和电模型之间出了偏差,比如散热边界设错导致局部温度虚高。
4.2 温升趋势比单点绝对温度更要紧
不用纠结某个焊球区域算到 96.3℃ 还是 93.7℃,这种程度的差别,取决于边界条件和材料参数里无数个对估算和近似。更值得关注的是:
- 热点位置是否和已知的高功耗器件、窄铜皮位置一致;
- 从 VRM 到负载的几段铜皮上,温升梯度是否合理;
- 比期望温度高得多的异常热点,往往意味着设计上有可改进的空间。
在实际项目中,我会用 Power DC 跑多个电流工况(轻载、典型负载、满载、短时峰值),画出同一网络的温升曲线。如果在某个工况下热点温升突然出现拐点式的陡增,那通常意味着存在电流分布的雪崩效应——原来温度不高、电阻低、分担了大量电流的路径,在温度升高后电阻变大,电流被挤向旁边设备原本更均衡的路径上,引起新的热点出现。这种“电流拥挤+电热正反馈”导致的突变失效模式,是标准的纯电阻仿真永远发现不了的。
4.3 等值线提取和过孔载流校核
Power DC 除了输出热图颜色分布,还可以提取等值线。我在报告中通常需要标出“某条路径上电流密度等于 X A/mm² 的等值线包围了哪些区域”,用这个来评估铜皮载流是否安全。常规经验是,表层铜皮电流密度最好不要长时间超过 1~2 A/mil²,内层电源平面因为散热条件差,要求更严格,一般取这位数值的 50%~70%。
同时还要特别注意过孔的电流密度。过孔内壁镀铜厚度一般在 20~25μm,理论上比实心铜导体的载流能力低不少。Power DC 会在一个统计表中给出每个过孔的电流值,我通常会设置一个脚本或者手动筛选出载流量超过安全阈值的过孔,再对照 nearby 温度数据判断是否要增加过孔数量或加大过孔孔径。在几个电源板上,这种过孔载流校核帮我找出了不少潜在的“不定时炸弹”——通常是一排看似充足的过孔里,因为地平面切割或者相邻过孔间距过大,导致电流不均匀分配,局部过孔过流超出预期。
4.4 用容差扫描找出设计方案的风险区间
Power DC 还有一个很实用的功能是对材料参数做容差扫描,可以指定铜箔电导率在一定百分比范围内变化,观察目标网络压降的变化幅度。虽然不是严格意义上的蒙特卡洛分析,但对工程判断已经足够。
我之前验证过一块 48V 转 1V 的电源板,PCB 厂家说内层铜厚误差可以控制在 ±10% 以内,但实测几批板子铜厚差异接近 15%。我把 PCB 铜箔参数按这个范围做了容差扫描,得出的电源网络的压降区间从最小的 88mV 到最大的 126mV,相差接近 40mV。这个结果促使我把内层电源走线加宽了 30%,满载压降余量从设计初期的 45mV 提升到了 93mV。仿真不只是为了“出一张好看的图”,把参数不确定性考虑进去后,设计余量才算真的稳。
5. 收敛失败、结果不合理:我踩过的坑和排错路径
5.1 网格精度和收敛性的相爱相杀
电热协同仿真比单纯 DC 仿真更容易出收敛问题,其中一个重要原因是:温度场的计算对网格质量比对电场更敏感。太粗的网格会丢失局部热点的细节,太细的网格又会让迭代矩阵规模爆炸,内存和耗时都扛不住,而且过细的网格在一些几何特征附近容易产生畸形单元,反而破坏数值稳定性。
我的做法是分层差异化管理网格:对电源网络的铜皮区域、狭长走线和过孔区域使用局部加密;对大面积的实心地层和远离热源区域使用较粗的网格。Power DC 支持基于几何特征和网络属性的网格控制,可以指定最大网格尺寸、最小网格尺寸和网格增长率。只要保证主要电源网络区域的最大网格边长不超过铜皮宽度的四分之一,结果基本能满足工程精度要求。
另外有一个小经验:如果电热迭代温度场上出现局部锯齿状图案,通常不是物理现象,而是那一带网格质量太差。把那个区域的网格加密后再跑一次,锯齿基本就消失了。
5.2 环境温度设错,白跑一天
有一次我接手同事跑了一半的项目,他给的仿真结果显示整板平均温度 130℃ 多,项目组一看就觉得离谱。我检查后发现环境温度设置被填成了 100℃——他没改默认值,而那个默认模板是之前一个高温老化测试项目的。
这个坑说出来有点无厘头,但确实容易发生。电热协同仿真里的环境温度对应的是“环境温度”(也就是板子周围的空气温度或腔体温度),不是一个随意填的数值。如果做的是常温验证,环境温度填 25℃ 或者 45℃;如果是高温工况,填 70℃~85℃,但需要和试验条件对应起来。我建议每一个仿真工程文件里,都把环境温度写在备注里,避免换人接手时产生误解。一个好习惯是特定的项目命名规则里包含环境温度信息,比如xxx_board_70C_co-sim,直接在文件名上体现关键工况。
5.3 焊盘和过孔的建模细节
另一个容易被忽视的问题,是焊盘和过孔的建模精度。Power DC 在导入版图时,对 BGA 焊球、表贴焊盘、过孔会有简化的等效模型。如果器件封装资料里有明确的内核直径、焊球材质和尺寸,最好把这些参数手动覆盖进去,而不是用工具默认的等效值。
我记得做一个大电流连接器验证时,连接器引脚等效模型的接触电阻默认值是 0,实际连接器厂商手册上给出的单脚接触电阻是 8mΩ。8mΩ 在单一引脚上看不多,但 48 个引脚并联,分布不均加上温度升高后电化学腐蚀带来的阻值漂移,整体压降差别能到几十毫伏。把接触电阻模型加进去之后,仿真结果和实测就基本贴合了。
5.4 从仿真到改板:热点数据如何指导设计
仿真最终的目标是指导设计改动。用 Power DC 电热协同仿真得出热点后,改板方向一般集中在几个方面:
- 加宽热点区域的铜皮走线,降低局部电流密度;
- 热点区域附近增加散热过孔阵列,把热量引导到另一侧更大面积的铜皮或底层散热板上;
- 调整反馈采样点位置,不要让远端采样点落到高温高阻的区域,避免负载端补偿失效;
- 电源平面跨分割造成的瓶颈,通过调整层叠或增加旁路铜皮消除。
改完版图后重跑一次电热协同仿真,对比改动前后的温度和压降分布图,可以直观看到每个设计修正的实际贡献。我在一块高功耗板卡上做了一轮“仿真—改板—再仿真”的迭代,温度最高点从 118℃ 降到了 86℃,满载压降缩小了 42mV,第二版投板后高温箱实测数据与仿真偏差控制在了一个比较理想的范围。
写在最后:关于用 Power DC 做电热协同仿真,我的一些体会
从第一次用 Power DC 跑出电热耦合温度场,到现在已经有几年了。如果只让我给出一条经验,那就是:电热协同仿真不是让仿真“多了一个漂亮的温度结果”,而是要真正理解温度对电气性能的反噬作用。很多时候硬件工程师已经习惯了固定温度下的电气验证,而环境温度和自热带来的性能漂移,恰恰是现场问题的隐藏推手。
实际操作中,我始终建议团队保留一套“校准用”的实测数据:找一块已经量产的板子,设置好边界条件跑一次电热协同仿真,再和实测热像仪数据、电压测试点数据对比。这个校准过程通常暴露出的问题比想象中多,比如某个位置的散热被结构件挡住、某段铜皮的露出区域和对流系数设置不一致,但每修正一个偏差,工具的“地质模型”就更接近真实地层。下一次遇到新项目,直接沿用这套校准过的设置参数,仿真的可信度会高非常多。
最后分享一个我自己的习惯:把每次电热协同仿真的关键设置和收敛情况记录下来,建一个简单的经验库,包含环境温度、对流系数、网格设置、收敛时间、和实测偏差这几项。累积几轮之后,对新板子仿真设置大致会有一个预感,比如“电源网络在满载下一般温升多少、需要留多少设计余量”。这种直觉不是凭空来的,是用一次次仿真和实测交叉验证堆出来的。对做电源完整性的人来说,这种工程直觉可能比任何一种工具技巧都更值钱。