一块六层板,叠层打样回来,上电后在稳定录像状态下测内核电压,示波器读数比标称值低了一百多毫伏,刚开始以为是电源芯片反馈电阻焊错,查了一圈发现是PCB上那段从DCDC输出到SoC核心供电管脚的通路压降太大。这其实不是个例,海思HI3516A这类多路视频编码SoC,供电轨又多又密,内核、DDR、各类IO、模拟域各走各的,整棵电源树如果只靠人工核对原理图,很难发现平面上那些“隐形的坑”。
这篇就以我的实际板卡为例,聊一下怎么用Cadence Sigrity把HI3516A的PCB电源树(PowerTree)自动提取出来,并且在此基础上做压降和去耦优化。适合正在做视频板卡、嵌入式硬件、或者刚接触电源完整性仿真的工程师,尤其是手里有Allegro和Sigrity工具但一直没系统跑通整个流程的人。
1. 整体设计思路:为什么非要把PowerTree单独拎出来做仿真
1.1 HI3516A这类SoC电源树到底长什么样
HI3516A的供电系统不是“一个5V进来,三个稳压器输出”这么简单。实际板卡上通常有一颗主电源芯片作为核心DC-DC,旁边还有几路低压差线性稳压器、负载开关、磁珠、0欧电阻用于分轨和滤波,再往下才是芯片上不同功能的电源管脚组。每一路都对应不同的电压、电流和纹波要求。
拿我当时板卡上的分配举例:核心供电区域例如VCC_CORE按设计手册要求工作在1.1V左右,瞬态电流经过评估接近1.8A;DDR部分单独一路,电压更低但电流不小,还要考虑和主控的时序配合;IO、MIPI、HDMI、模拟参考电压等又各自分出支路。把这些电源网络从输入接口一直追到芯片引脚,就是一棵典型的电源树。
问题在于,PCB上每一条电源通路都会因为铜箔厚度、走线宽度、过孔数量、平面切割缝隙产生电阻。平时的原理图设计只关心“电压对不对、电流够不够”,很少有人逐段核算过从DCDC输出到负载引脚之间到底损失了多少毫伏。仿真工具的价值就是把这件事量化,而自动提取PowerTree是第一步,也是最重要的一步。
1.2 自动提取比“照着原理图手动画”强在哪
Sigrity的PowerTree自动提取,核心逻辑是根据版的网络连接关系、器件模型和电源器件类型,自动识别出哪些是源、哪些是负载、哪些是去耦电容,再把它们之间的拓扑关系画成树状结构。
这个能力最直接的价值是省时间。一套六层板,动辄几千个网络,电源相关的网络也有几十个,靠人工在原理图上一路一路找,再去PCB Layout里手动建拓扑,既痛苦又容易漏。尤其那种多路磁珠和0欧电阻分割的网络,原理图上看着是一路,实际上PCB板子上被平面切割分成好几个孤岛,人工核对很容易忽略。
自动提取还有一个容易被低估的好处:可重复性。比如调整了Layout,电源平面加宽了,或者换了一个DCDC芯片,只要重新跑一遍提取,拓扑图就会自动更新。版本迭代过程中,这种“一键刷新”的能力能让电源完整性检查跟着Layout走,而不是等板子打样回来才发现问题。
1.3 我这次项目里的整体流程一览
完整流程大致分四步:
- 从Allegro PCB设计环境中把板卡数据送入Sigrity PowerDC,或者通过ODB++、IPC2581等格式导入;
- 在PowerDC里设置电源器件、负载器件和关键网络,运行自动PowerTree提取;
- 对提取出的电源树做直流IR Drop仿真,查看每条支路的压降分布、电流密度和热点;
- 根据仿真结果做优化:调整铺铜宽度、过孔数量、去耦电容容值和位置、平面切割方式,然后回归验证。
整个过程并不需要把原理图和PCB搬到别的平台,Allegro和Sigrity本身就是同一生态,流程衔接很顺。后面我会把每一步的操作细节和容易踩的坑展开讲。
2. PowerTree提取前的准备:原理、参数和模型
2.1 理解电源树模型里的三类节点
PowerTree看似复杂,拆开看其实就三类节点:源、通路、负载。
源是供电的起点,通常是DC-DC转换器的输出、LDO的输出、电源输入端口的连接器焊盘。通路是源与负载之间的所有导电连接,包括走线、铜皮、过孔、磁珠、0欧电阻。负载是真正消耗电流的地方,在电源完整性仿真里,负载的模型决定了抽取电流的分布方式和瞬态响应特征。
HI3516A这类芯片内部有多个电源域,在仿真模型里通常会被拆成多个负载节点。这时不能只看芯片整体的“总电流”,还要按手册上各电源域的最大电流去设置。我见过有人图省事,直接给整个网络设一个2A电流源挂在芯片中心,结果仿真出来的压降云图完全失真,因为实际电流是从几十个管脚流进芯片内部的,管脚的位置和数量直接影响平面上的电流路径。
2.2 提取前的三个基础输入:网表、叠层和器件模型
网表决定了网络连接关系,叠层决定了铜厚和介质参数,器件模型决定了源和负载的行为。三者缺一个,自动提取结果都会有偏差。
叠层参数最容易忽略。很多板厂给出的叠层表里铜箔厚度默认是1oz(35微米)或0.5oz,但内层经过电镀补偿后实际厚度可能略有差异。做IR Drop仿真时,铜厚直接决定方块电阻,差20%就足以让压降仿真结果偏离真实值。我每次新建仿真工程的第一件事,就是把PCB叠层参数从板厂确认回来,再填进PowerDC的叠层设置里。
器件模型方面,Sigrity对VRM模型和负载模型都有专门的定义方式。VRM模型如果缺失,工具会默认把它当成理想电压源,这会在一定程度上低估源端电压跌落。负载模型如果缺失,工具会按纯电阻或者恒定电流处理,静态IR Drop还能看个大概,动态仿真就没有意义了。所以模型路径要提前设好,别等提取完了才发现芯片模型全是默认值。
2.3 目标阻抗怎么算:以内核1.1V供电为例
优化电源树不能只看“压降低不低”,还要看电源阻抗是否满足动态需求。目标阻抗是一个绕不开的指标。
目标阻抗的计算公式不复杂:Ztarget = ΔV允许值 / ΔI瞬态变化量。ΔV允许值通常取电源纹波规范的一半,ΔI瞬态变化量取负载电流阶跃的一部分,具体数值要看真实工作状态。
我当时用的HI3516A内核供电是1.1V,按设计规范允许2.5%的纹波,也就是27.5mV。假设瞬态切换时电流变化量折合下来大约是0.9A(这是一个示意值,实际项目里要以芯片手册和实测波形为准),那么目标阻抗就是:
Ztarget = 27.5mV / 0.9A ≈ 30.6毫欧
这个数字意味着,在感兴趣的频段内,从电源模块输出端到芯片核心管脚,整个电源分配网络等效阻抗至少要压到30毫欧以下。IR Drop优化只解决直流部分的30毫欧预算,动态部分还要靠去耦电容把高频阻抗压下来。
2.4 去耦电容的频段分工:一个大水桶和一堆小水杯
去耦电容为什么不能只靠一个大电容应付,原因在于电容本身有等效串联电感和等效串联电阻。一个100uF的大容量电解电容,虽然“蓄水”能力强,但ESL往往有几十纳亨,高频下阻抗反而升高。小容值的MLCC,比如0.1uF,容量不大,但封装小、ESL低,在高频段更有效。
打个比方:大容量电容像厂里的蓄水池,解决的是长时间、大范围的供水波动;小容值MLCC像每个工位身边的水杯,解决的是瞬间渴了但水龙头还没送到水的那几毫秒。PCB电源完整性设计必须把两者配合使用。
从频段上讲,1MHz以下主要靠大容量的体电容和电源模块本身控制;1MHz到十几MHz靠4.7uF、1uF这类MLCC;十几MHz以上的高频分量则由0.1uF、0.01uF小电容以及电源平面的分布电容来吸收。这也是为什么目标阻抗曲线会在不同频段出现不同的“台阶”,每个台阶对应一层去耦方案。
3. 实操记录:从Allegro到PowerDC的完整实现
3.1 工程数据整理和导入的细节
开始之前,先确认Allegro的数据库完整。电源地网络必须正确赋予电源属性,也就是在设计规则管理器里把VCC、VDD这类网络设为电源网络,把GND设为地网络。这一步如果不做,PowerDC自动识别时会把普通信号线也拿来当作电源通路,提取出来的PowerTree会非常混乱。
导入方式我常用两种:一种是在Allegro PCB Editor里直接选择PowerDC菜单,软件会自动把当前板卡数据同步过去,是最顺的方式。另一种是导出ODB++格式再导入Sigrity,适合跨团队协作或者需要脱机处理的场景。注意导出时一定要把层叠信息和钻孔数据一起带上,否则后面仿真时过孔参数会缺。
导入之后,第一个动作是检查叠层设置。我习惯把板厂给的叠层表截图放在旁边,逐层核对介质厚度、铜厚、正负片属性。正负片属性特别关键,负片层在仿真里如果设置不对,平面完整性分析结果会差很多。
3.2 PowerTree自动提取的具体步骤
在PowerDC里做自动提取,登台操作大概是:
- 打开PowerDC,加载板卡数据;
- 在“Power Integrity”相关设置里,把DCDC输出网络、LDO输出网络标记为电源源;
- 把HI3516A芯片以及DDR、EMMC等耗电器件标记为负载;
- 设置陶瓷电容和极性电容的模型库路径,确保去耦电容被正确识别;
- 运行PowerTree提取,生成整个电源树拓扑。
生成之后,重点关注树的主干和关键支路是否和原理图一致。比如DCDC_U1的输出0.9V网络,从芯片输出脚出来之后,经过一个0欧电阻分成两路,一路进主控,一路给DDR端接电源。自动提取通常会把0欧电阻识别成连接元件,在树上显示成一个节点。如果这里没显示出来,说明0欧电阻的类型定义有问题,需要去元件模型里改成“resistor”或者“zero ohm link”。
3.3 IR Drop仿真:从全局到局部定位压降瓶颈
PowerTree验证没问题之后,我习惯先跑一版全板直流IR Drop。这个是快速摸底。仿真的基本设置是:每个源按数据手册给出的典型输出电压设置,每个负载按设想的典型工作电流设置,器件的管脚寄生参数先用默认值。
跑完之后,第一眼看的是各电源网络的压降云图。重点关注DCDC输出端到SoC管脚之间的电压差,如果某个网络的颜色从源端的深色到负载端出现明显梯度,说明这条支路的电阻偏大。
实际项目里,我当时遇到的问题是HI3516A核心电源网络有一处窄铜皮。从DCDC输出到芯片核心供电管脚,平面上有一个地方要穿过密集的BGA区域,铜皮被严重“挤压”,从2mm宽变成了0.5mm,这段铜皮的电阻占了整条通路电阻的三分之一。云图上还能看到过孔周围有明显的电压阶梯,说明过孔数量也不够。
确定瓶颈之后,做优化就有依据了。把那段窄铜皮改成完整平面,同时在瓶颈处多打两排过孔,重新跑一遍仿真,压降立刻由原先的160mV降到70mV左右。后来又调整了去耦电容的摆放位置,把大容量MLCC往负载端靠,动态阻抗曲线也明显改善。
3.4 基于仿真结果的去耦和平面优化策略
优化并没有固定套路,但有三个方向值得优先考虑:
第一是平面完整性和电流通道。如果仿真显示某段铜皮电流密度超标,优先加宽铜皮或增加铺铜层数,不要一上来就加电容。电容解决不了直流电阻问题,IR Drop是“道路太窄”的问题,得先修路。
第二是过孔阵列。过孔是电流从表层到内层之间的“立交桥”,单个过孔电阻很小,但并联数量不够时,桥就变成了卡口。一般我会在电源入口、去耦电容地脚、负载热区附近预留成对的电源过孔和地过孔。仿真云图上如果出现过孔位置的压降突变,就说明这里的过孔数量或排列方式需要调整。
第三是去耦电容的容值和放置。电容离负载引脚越近,回路上寄生电感越小,效果越好。当时我把0.1uF电容从芯片外围挪到BGA引脚背面,目标阻抗的最高峰就下降了约12%。这个幅度听起来不大,但对动态电流大的内核供电来说,可能就是稳定性和偶发花屏之间的区别。
优化完不能只看单点数据,必须做回归仿真。回归的意义是确认改动没有引入新问题,比如把某个网络的铜皮加宽后,旁边的地平面被切得更碎,导致另一个网络的回流路径变差。这种“按下葫芦浮起瓢”的情况,在多层板优化里太常见了。
4. 常见问题与排查技巧实录
4.1 PowerTree提取出来是“乱树”或“断链”怎么办
提取结果最常见的问题是树断了:某个负载找不到自己的源,或者两个电源网络被错误识别成短路。这个问题的根源通常是网络属性设置。
排查优先级建议从高到低:一是检查漏标了电源网络,信号网络属性没改成电源,工具不认为它是供电通路;二是检查0欧电阻和磁珠是否被识别成“连接件”,如果被当成普通电阻,IR Drop会错误地在这一段产生巨大压降;三是检查原理图中用网络标签连接、但实际PCB上没有铜连接的电源,工具不会帮你补上不存在的物理连接。
“断链”还有一种隐蔽情况:电源平面在BGA区域被大量散热焊盘或隔离孔切开,物理上已经成了孤岛,但网络名没变,原理图看不出来。这种问题恰好是自动提取和IR Drop仿真的强项,仿真结果里那个孤岛上的负载电压会明显偏低,一眼就能圈出来。
4.2 器件模型缺失时的降级方案
模型缺失是家常便饭,尤其芯片模型不是每个项目都能从原厂拿到。拿不到HI3516A的IBIS或专用电源完整性模型时,退而求其次的办法是把芯片按“恒定电流源”处理,电流值取自手册上的典型功耗除以电压。
这个降级方案做静态IR Drop偏保守,结果偏离程度通常在可接受范围内,但动态分析就别指望了。另一个办法是参考同系列芯片的模型迁移过来,比如用其他海思芯片的电源模型改管脚名和功耗值,至少能把去耦电容的谐振特性模拟个大概。迁移模型有个前提:管脚封装寄生参数要重新核对,不能直接沿用原芯片的全部寄生参数。
4.3 仿真不收敛或者结果明显偏离实测
不收敛的常见原因有三类:叠层设置里正负片属性错误、电压源设置了反向极性、网格划分在关键区域过疏。前两个查起来相对容易,第三个需要经验。
网格和结果精度是个矛盾。整板全用极限细网格,仿真时间会爆炸;但关键区域网格太粗,电流密度就会平均化,看不出局部热点。我的做法是先用默认网格跑一遍,锁定热点区域后,再对热点区域做局部细网格加密,这样既快又不影响精度。
结果明显偏离实测,排除网格原因后,十有八九是源端模型或者负载电流值给得不对。尤其是DCDC的输出电压,模型里默认值经常是理想值,没有算上反馈点采样位置的影响。反馈采样线如果接在负载端,那板上的直流压降会被电源自身补偿掉一部分,仿真结果要比实际更差才对得上。遇到这类问题,先回头核对源的模型定义和负载的电流分布。
4.4 常见问题速查表
| 问题现象 | 可能原因 | 处理建议 |
|---|---|---|
| PowerTree出现一堆孤立节点 | 电源网络未正确标记 | 在规则管理器中将电源/地网络属性改为电源网络 |
| 0欧电阻或磁珠在树上变成“大电阻” | 元件类型被识别为普通电阻 | 在器件模型中指定为连接件/零欧链接 |
| 某负载区域压降低于周边 | 平面被BGA/过孔切割成孤岛 | 优化平面的连续性和过孔布置 |
| 仿真不收敛 | 正负片属性设错或网格过疏 | 核对叠层正负片,局部加密网格 |
| 直流压降仿真合格但板上实测偏低 | 反馈采样点位置影响电源补偿 | 确认VRM反馈网络位置,调整仿真源设置 |
| 高频纹波超标 | 去耦电容数量不足或放置过远 | 增加小容值MLCC,尽量靠近负载管脚 |
4.5 一个容易被忽略的坑:回流路径
电源树仿真做到后面,很容易只盯着电源平面看,把地平面忽略了。实际上电源网络的IR Drop和地网络的IR Drop是一对孪生兄弟。负载实际承受的电压是电源网络压降与地网络压降之差,地平面太碎,电源做得再好也没用。
所以优化完电源网络,务必把地网络也拉出来看一眼。我当时板卡上有一个地平面被螺丝孔和隔离带切得比较碎,仿真显示地网络在芯片附近有约40mV的压降,直接把本来合格的电源裕量吃掉了。后来在芯片周围补了更多接地过孔,又优化了螺丝孔附近的禁止布线区域,地压降才降下来。
5. 最后一点个人体会
把整个项目跑下来,我的一个强烈感受是:Sigrity的PowerTree自动提取只是开始,真正的价值在于它把“供电关系”从抽象的电路图变成了可以量化的物理模型。以前评审PCB,大家凭经验互相“感觉哪里会有问题”,现在可以直接指着云图说,这里铜皮窄了,那里缺过孔。
另一个心得是:自动提取不等于完全不用管。工具给出的拓扑还是要花十分钟人工核对一遍,尤其是芯片的多组电源域,原理图上分了VCC_CORE、VCC_DDR、VCC_IO,工具能不能准确对应到负载模型,直接决定后面仿真的可信度。
还是那句话,电源完整性仿真是用来缩小风险范围的,不是用来替代实测的。仿真通过之后,板子回来该测的还是要测,但至少带着问题去测,总比板子回来一脸懵地拿热风枪拆了装、装了拆要靠谱得多。