ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

HI3516A板卡电源压降仿真全流程:Cadence Sigrity Power DC实操与踩坑记录

HI3516A板卡电源压降仿真全流程:Cadence Sigrity Power DC实操与踩坑记录 开头直接从一个真实场景切入。有位朋友找我排查一块LPDDR4板卡现象挺玄板子放了一晚上再上电内存训练大概率失败放上几天通过的几率又明显回升。一开始怀疑是虚焊、颗粒批次问题查了一圈都没定位到。最后导出PCB用电源完整性工具扫了一遍DDR电源网络发现压降余量正好卡在临界值——温度和电压稍有波动训练就失败。这个案例让我想起自己第一次给HI3516A板卡跑电源压降仿真时的经历。当时用的就是Cadence Sigrity Power DC过程不算顺利但把报错一个个啃下来之后后面的项目基本都能一把过。这篇就把完整流程和踩坑记录整理出来适合刚接触PI仿真、正准备给自己的板卡做电源体检的硬件工程师参考。1. HI3516A板卡的电源压降问题为什么必须仿真而不是拍脑袋1.1 一个反直觉的现象放几天就好了先把这个玄学案例解释清楚。LPDDR4训练不通过放几天后又通过表面看像是接触不良或者静电损伤但真正的原因往往是电源压降工作在临界状态。PCB上的铜箔电阻不是固定的。铜的电阻率随温度升高而增大25℃时约1.72×10^-8 Ω·m到85℃时会增加约20%。板卡存放几天环境温度、湿度变化芯片和PCB的温度应力释放接触面的微氧化层状态也会改变。这些因素叠加起来让原本就卡在阈值边缘的电源电压产生了几个毫伏到几十个毫伏的随机漂移。内存颗粒对电压敏感阈值附近稍微一偏训练就失败。这种问题最难排查的地方在于用万用表量静态电压是正常的用示波器看纹波也在范围内。因为问题是大电流流过电源网络时产生的直流压降不是一个点上的问题而是整个电源路径所有阻抗累加的结果。1.2 HI3516A的电源域特征决定了压降预算很紧张HI3516A是海思的一款视频处理SoC典型的监控摄像机/视频采集板卡主控。这类芯片的电源系统有个共同特点电源域多、电压低、电流大。拿典型的多电源域SoC来说通常会包含电源域典型电压压降预算3%-5%主要负载内核0.9V - 1.1V27mV - 55mVCPU/ISP/编解码DDR接口1.2V - 1.35V36mV - 67mVDDR颗粒IO1.8V / 3.3V54mV - 165mV外设接口PLL/模拟1.8V / 2.5V54mV - 125mV锁相环、ADC注意看内核电源如果设计电压是1.0V按3%预算算只有30mV的可接受压降。而一块板卡上从电源模块输出到芯片引脚中间要经过磁珠、过孔、走线、平面每一段都有电阻。整条路径上的直流电阻哪怕做到20mΩ1.5A的电流就会产生30mV压降预算直接耗尽。所以对于HI3516A这类芯片电源压降不是一个大概看一下的问题而是一笔必须算清楚的账。1.3 手算为什么算不准三维电流路径和并联分流有工程师会说我用欧姆定律手算一下电源线电阻不就行了PCB走线的电阻公式是RρL/A这样确实能估算一段走线。但现实中的电源网络是铜皮平面、过孔阵列、多层结构三维互联的。举个例子一个电源平面灌入电流后电流会从平面各个方向往芯片引脚方向汇聚。靠近芯片的区域电流密度大远离的区域电流密度小。你要手算出平面上每一个点的电位需要解拉普拉斯方程——这在简单几何下能算在真实板卡上几乎不可能。另外多个过孔并联的分流效应、铜皮挖空区域的电流绕行效应、参考地平面的回流路径这些都会影响实际压降分布。手算只能算一个大概的路径电阻而仿真可以给出完整的电位分布云图让工程师一眼看见瓶颈在哪里。1.4 为什么选Power DC而不是其他工具市面上能做电源压降仿真的工具不少ANSYS SIwave、Mentor HyperLynx PI、Keysight PowerSI都能做。但我个人在HI3516A这个项目上选Cadence Sigrity Power DC主要看重几点第一与Allegro同源。工程文件从Allegro导出后网络名、器件位号、叠层信息基本无缝衔接不用在网表映射上耗费大量精力。第二Power Tree电源树可视化管理很好用。从VRM到负载的电源路径能图形化显示哪个环节压降大一目了然这对多路电源域的SoC板卡特别友好。第三脚本化和批量处理能力强。改一个Sink电流值、换一组叠层参数用脚本批量跑完输出对比报告对多版本迭代很有价值。当然工具只是工具核心还是前面说的电源树理清楚电流需求搞准确仿真结果才有参考意义。2. 仿真前的数据准备这些工作做不好仿真就是自欺欺人2.1 从Allegro导出几何数据时的三个关键选项数据准备是整套流程里最枯燥但最要命的一环。很多人仿真结果异常回头排查半天发现是导入的几何文件本身就有问题。从Allegro导出给Power DC使用的文件我习惯用ANF格式Allegro Netlist Format也就是在File - Export里选择生成.anf文件。导出时注意三个选项单位选择我踩过最蠢的坑是公制英制混用。板框是毫米导出设置成了mil叠层厚度差了25.4倍仿真出来的压降全部偏小。导出前确认设计单位ANF文件头里会写明UNITS字段。包含整板还是只含电源层电源压降仿真理论上只需要电源/地平面和连接它们的过孔、走线。但实际导出时建议保留完整板卡让工具自己去判断电流路径。手动剔除信号层反而容易误删电源层上的关键连接。输出路径无中文和空格Cadence工具链对非英文字符的支持很差导出文件放在纯英文路径下不仅导入不会报错后续生成临时文件也会少很多莫名其妙的毛病。2.2 叠层材料数据铜厚、电导率、粗糙度导入几何文件后Power DC会根据叠层信息生成层叠结构。但这里有个很容易被忽略的问题从Allegro导入的叠层只有厚度数据材料参数需要手动确认。默认情况下铜的电导率设为5.8×10^7 S/m这个值对应的是纯铜的理想值。真实PCB上铜箔的电导率会因镀层工艺、晶粒结构略低通常在5.0×10^7到5.8×10^7 S/m之间。如果是DC压降仿真用默认值问题不大但如果做高精度仿真或者仿真结果刚好卡在阈值的上下建议用实测值。铜厚方面常见换算关系是铜厚标称实际厚度方阻参考值0.5oz17.5μm约1.0mΩ/□1oz35μm约0.5mΩ/□2oz70μm约0.25mΩ/□所谓方阻sheet resistance就是一块正方形铜皮的相对边到相对边的电阻。这个数值在估算过孔阵列、窄铜皮瓶颈时很有用。比如一条5mil宽的1oz铜走线每100mil长度大约就有10mΩ的电阻过2A电流就是20mV压降——这个量级已经能吃掉内核电源近七成的预算了。2.3 电流需求从哪来数据手册与功耗估算这是整个仿真里最核心的数据输入也是最容易被拍脑袋的地方。HI3516A这类SoC正规做法是查数据手册里的电流参数。但很多工程师面临的现实是设计阶段拿不到完整手册或者手册里只有典型值没有最大值。这时候可以退而求其次用功耗估算反推。电流 功耗 / 电压比如某个电源域功耗估算约1.2W电压1.0V那这条电源路径至少要流1.2A电流。但这里有个重要的安全余量问题估算功耗如果偏低仿真结果会偏乐观。我的习惯是按照典型功耗的1.2-1.5倍设置Sink电流覆盖峰值负载和高温场景。另一个容易忽略的是DDR电源域的瞬态电流。DDR在行列激活、读写切换时电流波动很大虽然DC仿真不考虑瞬态但Sink电流要按最大平均电流设而不是待机电流。我曾见过有人用待机电流跑仿真结果板卡实测满载时压降超标整整一倍。2.4 电源树Power Tree梳理用表格做一次电源体检正式在Power DC里放VRM和Sink之前我强烈建议先在EXCEL里把电源树理一遍。不是说Power DC的Power Tree功能不好用而是因为先在表格里整理能逼你搞清楚每个电源域的完整路径。一个典型的电源树条目长这样网络名源端中间环节负载端设计电压预估电流VCC_COREDC-DC SW1磁珠FB1 → 过孔阵列 → L4平面U1引脚A1-A201.0V1.5AVCC_DDRDC-DC SW2过孔阵列 → L3平面U1引脚D1-D181.35V1.2AVCC_IOLDO走线 → 过孔 → L2平面U1引脚C1-C93.3V0.3A整理这张表的收获在于你会主动去检查磁珠的额定电流、过孔的数量是否足够、平面的窄颈在哪里。仿真只是验证你的判断而这张表本身就是一次电源设计审查。2.5 准备阶段的三个低级错误我全犯过经验之谈准备阶段最常见的三个错误网络名不一致。原理图里叫VCC_1V0PCB里叫VCC_CORE仿真工具导入后识别成两个独立网络电源路径被切断仿真结果自然全错。解决方法是做一张原理图和版图的网络名对照表导入后逐条核对。磁珠模型被忽略。磁珠的直流电阻虽然小通常10mΩ-100mΩ但在大电流下压降不可忽略。Power DC里磁珠要作为电阻/感性元件显式建模不能只靠平面传导。用100mΩ的磁珠过2A电流就是200mV压降这是直接决定能不能达标的关键项。过孔未连通内层平面。PCB设计中过孔的Anti-pad、Thermal relief设置不当信号层的过孔本意要连接电源平面但热焊盘抬高了电阻。仿真前用3D视图检查关键过孔的连接状态能避免大量仿真压降巨大的假报警。3. Power DC操作全流程从导入到出云图的关键动作3.1 新建工程与导入几何文件打开Power DC第一个界面选择新建工程。注意工程名用英文路径也要纯英文。工具本身不强制但工程中的临时文件和日志文件如果有中文字符某些版本会出现无法预料的读写异常。导入几何文件的位置在菜单File - Import。选ANF格式然后指定之前从Allegro导出的文件。导入过程中Power DC会弹出导入选项对话框有几个复选框需要留意Import DRC errors如果PCB上有未连接的引脚或孤铜建议勾选导入这样能在仿真前看到设计本身的电气连接问题。Merge nets by name勾选后同名的网络会被合并。这个选项通常保持勾选。Create thermal shapes涉及热焊盘/散热焊盘的处理建议勾选。不勾选的话某些连接了多个过孔热焊盘的平面会被误判为断路。导入完成后先别急着往下走。在层叠管理界面里逐层检查每层厚度、材料、铜厚是否和板厂提供的叠层参数一致。特别是外层铜箔厚度和内层铜箔厚度往往不同外层常做电镀加厚要按实际值填入。等这些都确认无误了再开始设置电源网络。3.2 把电源网络指定给正确的网络名Power DC不是自动知道哪个网络是电源、哪个是地。你需要手动指定。在Netlist管理器中把VCC_CORE、VCC_DDR、VCC_IO这些网络标记为Power/Mixed把GND标记为Ground。这里有个小技巧可以批量选择所有VCC和VDD命名的网络一次标记完成省去逐条操作的时间。标记完之后建议在3D视图里看一眼电源平面的形状。这一步不是走形式——你会发现某些电源平面被过孔背钻、隔离槽切得支离破碎电流路径被迫绕行。这些信息在2D视图里容易被忽略在3D视图里一目了然。3.3 VRM放置输出源放在哪里最合理VRM在Power DC里代表电源输入端它输出的电压就是整个电源网络的源电压。放置VRM的位置有讲究。原则是放在实际电源模块输出端的位置而不是随便放在板的边缘。如果是DC-DC电路放在输出电感之后、第一个滤波电容之前如果是外部电源输入放在连接器引脚处。放置操作通常在版图视图里进行选择添加VRM然后左键点击放置位置。放置后双击VRM符号在弹出的属性面板里设置Voltage输入该电源域的标称输出电压比如VCC_CORE填1.0V。Positive Net指定VRM输出的网络名。Negative Net返回路径通常指定为GND。3.4 Sink放置电流负载的分配逻辑Sink代表消耗电流的负载。对HI3516A这样的芯片Sink放在哪个引脚上、每个Sink灌多少电流直接决定仿真结果的可信度。实际操作中我通常给每个电源域建立一个或多个Sink。放置位置选择在芯片对应的电源引脚处。如果没有精确到每个引脚的电流分布数据用等分法处理比如VCC_CORE域有20个电源引脚总电流1.5A那每个引脚分配75mA。但如果知道某些引脚是国家引脚Keeper或功耗集中区域可以按比例加权。这里有一个值得注意的细节Sink的电流方向。Power DC中Sink是从网络抽取电流所以电流值填正数代表从外部电源流向芯片。填反了仿真结果会荒谬——电压不是下降而是升高。3.5 运行DC IR Drop分析前的参数微调VRM和Sink都放置完成后点击分析设置选择DC IR Drop分析类型。进入分析前有四个参数值得手动调整温度在全局设置里把温度设为实际工作环境温度的上限比如85℃。前面说过铜的电阻率随温度升高而增大85℃下铜电阻率比25℃高约20%仿真结果更保守。网格细化等级Mesh RefinementPower DC默认用自适应网格求解。如果某个区域的电流密度特别高网格会自动加密。但有时默认网格在过孔群区域不够细会导致过孔电流密度偏大或偏小。这种情况下手动在过孔阵列周边画一个局部网格加密区域加密等级设为2或3。收敛容差默认值通常够用。如果遇到不收敛的情况不要盲目放松容差——那只是掩盖问题。优先检查模型有没有悬空网络、Sink是不是放在没连接铜皮的孤立焊盘上。最大迭代次数默认值一般不调整。如果仿真提示达到了最大迭代次数仍然不收敛说明模型有根本性问题不是在参数上微调能解决的。3.6 结果云图与数据报告的读取方法仿真跑完后Power DC会生成电压分布云图。默认色标是蓝-绿-黄-红蓝色代表电压高接近VRM输出电压红色代表压降最大。真正专业的读图方式是先看芯片引脚处的电压而不是看整个平面的颜色。因为芯片关心的是引脚上实际拿到的电压不是某个偏远角落的平面电压。菜单里选择Probe Pin直接点芯片的电源引脚读出该引脚的电压值。然后计算压降百分比压降百分比 (VRM输出电压 - 引脚实际电压) / VRM输出电压 × 100%对照前文表格里的3%-5%预算判断是否达标。如果所有引脚压降都在预算内这个电源设计基本合格。除了云图Power DC会生成报告文件包含每个网络的电阻矩阵、电流密度最大值、功率损耗。这里值得关注的是IR Drop Report里每个电源网络的电阻值——如果某个网络电阻异常大往往是路径上存在窄铜皮或过孔不足。4. 常见报错与排查方法每一步都是真金白银换来的经验4.1 报错导入文件后网络全是悬空的Floating Nets这是新手最容易撞见的问题。报错信息类似Floating nets detected: VCC_CORE, VCC_DDR...打开连接关系管理器一看网络名下只有孤零零几个焊盘没有铜皮、没有走线。排查思路按顺序来第一步检查导入的格式是否完整。ANF文件在导出时如果勾选了Exclude Unused Nets会把没有布线的网络自动剔除。重新从Allegro导出时去掉这个勾选再重新导入。第二步检查单位是否错乱。单位错误会导致过孔和铜皮错位本该连接的物体在空间上偏离了几十倍距离。打开叠层管理器确认所有层厚度、坐标数据的单位与实际设计一致。第三步检查网络名是否大小写敏感。Cadence工具链的网络名匹配有些版本区分大小写。VCC_CORE和vcc_core会被当成两个网络。统一命名规则导出前就统一。4.2 报错Extraction failed / Resistance extraction failure这个报错出现在提取直流电阻的环节意味着工具无法从几何模型中生成电阻网络。常见原因有两个叠层材料参数不完整。某层的材料电导率为0或者介质层厚度缺失。打开材料管理器逐层检查重点看有没有导入后丢失参数的层。介质材料的介电常数和损耗角对DC仿真不重要但电导率必须非零。存在未定义的三维导体结构。比如某些特殊的埋容、埋阻层Power DC不认识这种叠层结构。解决方法是把埋置元件层简化为普通介质层器件本体用集中参数模型在原理图中补充。排查这类报错有个小技巧在叠层管理器里逐层隐藏、逐层显示当隐藏到某一层时报错消失说明问题就出在这一层。4.3 报错Sink / VRM放置后仍提示未连接明明已经把Sink放在了芯片电源引脚上工具却提示元件未连接到任何网络。这个报错我踩过最深的一次原因出在引脚和铜皮不在同一层。芯片的电源引脚如果通过过孔从顶层连接到内层平面而Sink默认放在顶层过孔的连接属性如果有问题Sink和平面之间就是断的。排查要点在3D视图里旋转视角确认Sink图标是否和引脚焊盘/过孔产生空间重叠。检查过孔是否设置了Stitching属性某些情况下pads不会被识别为电气连接。确认Sink的参考网络设置正确在Sink属性面板里Positive Net要明确指定为VCC_CORE不能留空。4.4 报错求解不收敛Power DC的DC分析本质是求解大型稀疏线性方程组不收敛说明矩阵病态。在实际操作中最常见的原因是模型中有死胡同结构比如一段只连接了一个过孔的走线另一个过孔没有打到任何平面形成一个悬空的导体残段。排查方法是用Net Connectivity Check功能工具会列出所有只连接了一端的导体。把这些无意义残段删掉或忽略重新运行。另一种情况是VMR和Sink之间没有低阻抗回路。电源网络和地网络之间只有极高阻抗的路径导致电流无法正常返回。检查GND平面是否连续、Sink的Negative Net是否指定了正确的GND网络。4.5 报错仿真结果全为0或者数值爆炸结果全为0通常是Sink没有加载电流。检查每个Sink的属性确认Current值不为0确认Sink处于Enable状态。数值爆炸电压出现几百伏、电流几百安通常是单位理解错误。Power DC里的电流单位是安培A电压单位是伏特V。如果你习惯用毫安mA填Sink电流时要把数值除以1000再填入。类似地如果在叠层设置里把35μm的铜厚错填成35mm电阻会缩小1000倍电流仿真结果就会放大1000倍。数值爆炸的另一个常见原因是两个不同电压的VRM通过网络名误标记被短接。比如VCC_CORE和VCC_DDR两个网络因为名称模糊匹配被合并导致两个电压源直接并联。检查网络合并列表确认没有不该合并的网络被合并了。4.6 报错内存不足或程序崩溃大板卡的完整模型导入后网格划分可能需要几十GB内存。遇到内存不足不要急着加内存条先做两件事一是关闭不需要的分析域。如果只做DC IR Drop在分析设置里把AC分析和EMI分析全部关闭能节省大量资源。二是只保留需要分析的网络。在Power DC里可以把不相干的网络设为Not Analyzed工具会跳过这些网络的网格划分和求解。对只有少数电源域需要分析的板卡这个设置能让仿真速度提升数倍。5. 从云图到改板仿真结果怎样指导PCB优化5.1 云图判读经验别盯着大面积平面看要盯芯片引脚前面提过判断仿真结果达不达标核心是看芯片引脚的电压值。云图颜色的作用不是看整板漂不漂亮而是帮你快速定位瓶颈区域。我的读图习惯分三步第一步调整色标范围。默认色标会把整个平面的电压范围拉满导致平面中心区域全是蓝色看不出压降分布。手动把色标上限设为VRM输出电压下限设为VRM输出电压减去压降预算比如1.0V减30mV等于0.97V。这样云图上出现的任何非蓝色区域都是压降超预算的区域。第二步锁定红色区域。红色区域代表的压降最严重的位置通常是电流瓶颈。放大看这个区域的三维结构是一段细走线是过孔阵列不足是铜皮被隔离槽切开后的通道这一步能找到具体的物理原因。第三步检查过孔群。电流必须通过过孔从一层流向另一层时过孔群的总电阻决定了压降大小。在云图上如果过孔群周围出现明显的压降梯度说明过孔数量不够。计算需要的过孔数量可以用这个经验公式每个孔径0.3mm的标准过孔直流电阻约0.5-1mΩ允许压降30mV、电流2A时总电阻预算15mΩ那么至少需要15-30个过孔并联。5.2 电源压降超标时的优化优先级排序仿真发现压降超标别急着盲目加宽所有电源走线按优先级处理第一优先级磁珠和电感等串接器件的直流电阻。这通常是压降大头。替换为更低DCR的型号或者干脆换用0Ω电阻并评估噪声代价。100mΩ DCR的磁珠在2A电流下就是200mV压降换成50mΩ型号能直接省下100mV。第二优先级过孔阵列数量。过孔是改变直流电阻最便宜的手段。在一个瓶颈过孔区域增加过孔数量成本几乎为零效果立竿见影。用0.3mm孔径的过孔每增加10个并联等效电阻降低约5-10mΩ。第三优先级铜皮宽度与铜厚。加宽平面铜皮或者把内层电源层从1oz改为2oz效果明显但涉及板厂工艺和成本需要评估。2oz铜厚比1oz的方阻减半整条路径压降大约能降低20%-30%。第四优先级布局调整。把电源模块靠近负载芯片缩短电源路径物理距离。这个动作效果最明显但需要和结构、散热方案协同周期最长。5.3 仿真与实测的偏差控制为什么实测总比仿真小很多工程师做完仿真后拿着万用表去实测发现实测压降往往比仿真小。这不是仿真不准而是测量方式带来的差异。万用表测的是输入输出两端电压走的是表笔和测试点的路径而仿真算的是整个网络的电位分布。实测点在平面的一角仿真关注的是芯片引脚两者本来就不是同一个位置。另一个原因是电流负载条件不同。仿真时按1.2-1.5倍满载电流设置实测时芯片未必跑在同样的负载强度。要验证仿真精度建议实测时让芯片跑满负载用示波器探头直接接触芯片电源引脚附近的测试点同时记录电流然后和仿真结果对比。如果多次对比后仿真始终偏大或偏小可以反向修正模型参数。把仿真结果除以实测结果得到一个修正系数把这个系数应用到整条电源路径的电阻参数上。这是工程上常用的模型校准方法尤其适合同一平台多次迭代的项目。5.4 一个真实案例VCC_CORE压降从110mV降到38mV给一个我之前做过的HI3516A板卡实际优化案例作为参考。第一版设计VCC_CORE网络仿真结果VRM输出1.0V芯片引脚最低电压0.89V压降高达110mV远超3%预算。云图显示瓶颈有两处一是磁珠DCR 80mΩ贡献了大部分压降二是BGA区域底部过孔数量只有12个总等效电阻约6mΩ。优化动作把磁珠换成DCR 30mΩ的型号压降直接降低约75mV将BGA底板过孔增加至28个等效电阻降到约2.6mΩ压降降低约7mV。改版后仿真结果引脚最低电压0.962V压降38mV达标。板卡贴片后实测满载压降约32mV和仿真偏差在可接受范围内。这个案例说明仿真最大的价值不是给你一张好看的云图而是帮你在打样之前锁定该改的地方。一次改版成本几千块一次仿真软件许可的成本摊到项目里性价比是显而易见的。6. 个人经验总结与一点补充技巧如果让我给第一次做电源压降仿真的工程师三个建议我会说第一仿真前一定要花时间把电源树理透。工具只是验证平台你的判断力和经验才是核心。画电源树表格的过程比跑一百次仿真都有价值。第二Sink电流设置要敢于按最恶劣工况取。数据手册最大值、功耗估算结果乘以1.2-1.5倍余量、再加上温度修正。仿真结果偏保守不是坏事板卡实测验证通过后你会感谢当时的过分谨慎。第三报错不可怕但要学会系统性地排查。先把单位、网络名、叠层材料这些基础项全部检查一遍再怀疑模型和工具本身。我见过的绝大多数Power DC报错根因都在准备阶段。最后分享一个小技巧。Power DC里可以保存多组配置Configuration把常温典型工况、高温满载工况、低温低功耗工况分别存成不同的配置。投板前把这三组配置都跑一遍对比结果能帮你在设计阶段就预判板卡在不同环境下的表现。尤其是那种放几天就好了的诡异问题很多时候就是在工况边界上压降余量不足导致的——仿真能把这种边界状态提前暴露出来避免板卡量产后再去排查薛定谔的内存训练失败。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进