Xilinx FPGA/SoC电源设计实战:读懂官方PMIC参考设计
前阵子一块 Zynq UltraScale+ 平台的新板卡样机回来,上电后 PCIe 链路训练始终过不了,示波器一抓,发现 VCCINT_IO 这路电源纹波在系统跑起来之后接近 80mVpp,而 FPGA 数据手册里这路轨的建议纹波上限非常苛刻。后来顺着 Xilinx 官方 PMIC Reference Designs 的思路重新整理了电源树、换掉了反馈采样点、调整了 PMIC 的排序配置,问题才彻底解决。这次折腾给我最大的感受是:很多做 FPGA 板卡的工程师,包括我自己早期,都把电源设计理解成"凑够电压、凑够电流",但实际上 Xilinx FPGAs 和 SoCs 的供电,是一套涉及多路电源轨、上电时序、动态调压、纹波和瞬态响应的系统工程,而官方 PMIC 参考设计文档恰恰是解决这套问题的最重要拐杖。这篇博文就围绕 PMIC Reference Designs 这个话题,把参考设计怎么读、怎么用、怎么落地到自己的板卡,以及我在实际项目里踩过的坑,一次讲透。
1. 先从一次板卡供电翻车聊起:FPGA 的电源设计不是“凑够电压就行”
1.1 一块 UltraScale+ 板卡上到底有多少路电源要伺候
一个典型的 Zynq UltraScale+ MPSoC 板卡,电源轨数量通常会让第一次接触 FPGA 供电的人头皮发麻。PL 域(可编程逻辑)里有 VCCINT、VCCINT_IO、VCCBRAM、VCCAUX、VCCAUX_IO,还有根据引脚分组的多个 VCCO 电平域。PS 域(处理系统)里又分 VCC_PSINTLP、VCC_PSINTFP、VCC_PSAUX、VCC_PSDDR_PLL,再加上为 DDR 控制器供电的专用轨。如果板卡上还有高速收发器,那就多了 MGTRAVCC 和 MGTRAVTT。还没算外围的 PSIO 电压、DDR 的 VDDQ/VTT、各种 PLL 的模拟供电,以及启动配置电路用的 VCCO_0 到 VCCO_3。
这些电源轨的电压往往不是一个档位能覆盖的。VCCINT 在 UltraScale+ 上通常是 0.85V 甚至更低,VCCBRAM 是 0.9V,VCCAUX 是 1.8V,MGTRAVCC 看代次可能在 0.9V 到 1.0V 之间,MGTRAVTT 常见 1.2V。电压种类多就算了,各路电流差异也很大:VCCINT 可能轻松到几十安培,MGT 轨只有几安培但对噪声极其敏感。多电压、大电流、高敏感,如果要完全靠离散的 DC/DC 加 LDO 一个个搭,先不说 PCB 面积撑不住,光是每一路的上电时序和监测电路就够画原理图画到怀疑人生。
这也是 Xilinx 官方大力推广 PMIC Reference Designs 的第一个原因:它不是给你一颗芯片的参考电路,而是在给你一套经过验证的电源树方案。参考设计会把每路电源轨的电压、供电能力、默认排序、PG 监控方式、甚至 PCB 布局时的去耦电容建议一起给你。
1.2 当普通独立DCDC方案遇上FPGA,最容易出问题的地方
我见过不少团队在 FPGA 板卡上沿用以前单片机或 ARM 板的老方法:每路电源用一个独立 DC/DC,上电顺序靠 RC 延时或者 EN 引脚串电阻分压来实现。这种方案在低功耗、轨数少的场合确实能跑,但在 FPGA 板卡上,至少有四个地方非常容易翻车。
第一是上电时序。FPGA 对上电顺序的要求不是"差不多同时上就行",而是有明确的先后要求,比如 VCCINT 先于 VCCBRAM、VCCBRAM 先于 VCCO,VCCAUX 又往往有自己的要求。用 RC 做延时,温漂和电容老化都会让时序变得不可靠,尤其是多路电源。样机阶段调好没问题,产品量产一段时间后就可能出现不定期的上电失败、DDR 初始化异常。
第二是电压监控。Xilinx FPGA 的配置流程里,带 Power-on Reset 检测。如果某一路电压在启动过程跌落到阈值以下,轻则配置失败,重则损伤芯片长期可靠性。独立 DC/DC 方案经常只做输出指示,做不到对所有轨做全局监控和故障联动关断。
第三是纹波和动态响应。FPGA 是典型的瞬态负载,在配置加载、DDR 刷写、收发器训练这些瞬间,电流变化速率非常快。一颗稳压器如果动态响应不过关,无论电压初始值调多准,负载突变时照样跌出允许范围。很多 PCIe 或 GTX/GTH 收发器初始化失败,最后追溯原因都是供电瞬态没扛住,而不是逻辑代码的问题。
第四是调试成本。多路独立电源一旦出问题,排查链路极长。PMIC 参考设计里往往通过 I2C 总线暴露了大量寄存器,电压、电流、温度、PG 状态都能读出来,配合 Xilinx 的 Vivado 或者 SDK 调试工具,排查效率高很多。
所以,PMIC Reference Designs 真正解决的,不是"能不能少用几颗电感"这种面积问题,而是把电源从"纯粹的功率电路"升级成了"可监测、可配置、有时序管理的子系统"。理解这一点,后面读参考设计图纸时才会有正确的思路。
2. 官方 PMIC 参考设计到底是什么:三种形态与获取渠道
2.1 参考设计的三层含义:板卡图纸、应用笔记、电源树文档
说到"PMIC Reference Designs for Xilinx FPGAs and SoCs",很多工程师首先想到的是 Xilinx 官网上那些参考板卡的设计文件。这没错,但只理解了其中一半。我理解中的官方参考设计,其实是三层内容叠加在一起的。
第一层是参考板卡的完整原理图和 PCB 设计文件。Xilinx 官方评估板,比如 ZCU102、ZCU104、ZCU106、VCU118、VCK190 这些,在官网都能下载到原理图 PDF,部分板卡还能拿到 Cadence 格式的源工程。这些图里信息量极大:电源树拓扑、每颗 PMIC/DC/DC 的型号和外围参数、MOSFET 或负载开关的选型、去耦电容数量与位置、PG 信号的连接方向,全部都是经过官方验证的。对做硬件的人来说,这就是最权威的"参考答案"。
第二层是电源相关应用手册和电源树说明。Xilinx 的文档站点上有大量与电源相关的文档,比如面向 UltraScale 架构的 PCB 设计指南、面向 7 系列 FPGA 的电源要求手册,以及各种应用笔记。这些文档会给出每路电源轨的电压和电流范围、上电斜坡时间要求、纹波建议、PG 时序要求。官方还会针对特定器件给出"Recommended Power Supply"表格,里面直接列了符合要求的 PMIC 型号清单。
第三层才是严格意义上的 PMIC 厂商参考设计。TI、Renesas、ADI、MPS 这些电源厂商会和 Xilinx 合作,针对特定 FPGA 系列推出"Xilinx-ready"的 PMIC 评估板和参考设计,比如针对 UltraScale+ 的 TPS650864 系列,针对 Zynq-7000 的一些多通道 PMIC 方案。这些参考设计文档里会给出非常细的寄存器配置表,告诉你哪路输出接 VCCINT、哪路接 VCCAUX、各路上电延时怎么设。你拿到的往往是一整套可以导入到原型板的参考电路。
也就是说,不要只盯着某一个文档,要把这三层结合起来看。板卡原理图解决"别人怎么搭"的问题,电源手册解决"芯片需要什么"的问题,PMIC 厂商参考设计解决"PMIC 怎么配置"的问题。三份资料对照着读,才能在不踩坑的前提下把设计抄对。
2.2 电源树该怎么读:照抄之前先看这三张图
我自己的习惯是,拿到一份参考设计或官方板卡原理图,先不看具体每颗 PMIC 型号,而是先把电源树画出来。电源树不只是一张供电连接图,它要包含三张维度完全不同的图。
第一张是"电压-电流分布图"。找到原理图里的电源部分,把所有电源轨按电压归类,再标注上每路是从哪一颗 DC/DC 或 PMIC 通道出来的、最大能提供多少电流、接到了 FPGA 的哪些引脚组。这张图决定了你板卡的功率预算是否合理。如果某一路的输出能力连 FPGA 规格书里该轨的最大电流都覆盖不了,那后面再优化都白搭。
第二张是"上电时序逻辑图"。FPGA 官方手册会给出上电排序的要求,参考板卡原理图里会通过 PMIC 的 EN 引脚连接、PG 信号级联、或者控制器的 GPIO 配置来体现这套时序。读图的时候,要把每颗 IC 的 EN 来源、PG 去向、以及排序器的配置都理清。很多 PMIC 内部有可编程的时序引擎,默认配置和外部上拉电阻决定的电平,共同决定了最终的上电行为。
第三张是"故障响应图"。当某一路过压、欠压或过流时,系统会怎么反应?是这一路独立关断,还是通知 PMIC 主控把全部轨关掉?PG 信号有没有接到 FPGA 的复位逻辑?这直接关系到系统的可靠性。参考设计里,好的故障响应设计会做到:任何一路电源异常,都让系统进入一个确定的、安全的停止状态。
把这三张图理清楚,参考设计才真正变成了你自己的设计。很多人抄板卡原理图抄得很像,最后产品一出问题就无从下手,往往就是因为只抄了器件连接,没有抄到背后的电源树逻辑。
2.3 三种方案的适用场景和取舍逻辑
再看官方的多种参考设计,你会发现 PMIC 参考设计大体上可以分成三类。
第一类是纯 PMIC 方案,也就是用一颗多通道 PMIC 同时管理多路电源轨。这类方案最典型的应用场景是 Zynq UltraScale+ 这种既有 PS 又有 PL 的异构芯片。PMIC 内部集成了多路 DC/DC 转换器和 LDO,还带有可编程的上电时序、I2C 配置、电压电流监测,甚至支持动态调压。优点是单板面积小、配置灵活、监控功能全。缺点是单一器件集总了主要功率路径,如果某一路电流需求特别大(比如 VCCINT 需要 40A),单颗 PMIC 往往不够。
第二类是"独立 DC/DC + 电源排序器"方案。这个组合在很多官方高速板卡上很常见,比如用多颗高效大电流 DC/DC 芯片分别承担 VCCINT、VCCAUX 等功率轨,再用一颗专门的排序器/监控器去统一控制 EN 顺序、监控 PG。像 TI 的 UCD90120A、UCD90160A 这类器件,就是干这个的。这类方案适合功耗很大的高规格 FPGA 板卡,比如 Virtex UltraScale+、某些 RFSoC 平台,各路电流大到没法用单颗 PMIC 覆盖,或者设计要求各路电源单独做功率优化和散热布局。
第三类是电源模块方案。把 DC/DC 控制器、电感、甚至电容都封装在同一个模块里。这类方案在官方参考设计里也会出现,尤其是需要快速验证的场合。优点是布板简单,电源完整性设计压力小;缺点是成本和体积通常比独立方案高一些。
三类方案没有绝对的好坏,更多看平台和需求。7 系列 FPGA 的 VCCINT 电流大但电源轨数量相对少,用分立 DC/DC 加简单排序就能满足;而 UltraScale+/MPSoC 这种轨数多、还要 DVFS 的,纯 PMIC 方案的性价比就显得很高。后面我专门展开讲讲选型逻辑。
3. 选型不只看功耗:PMIC 方案与分立方案的边界
3.1 7 系列和早期SoC,为什么用“DC/DC + 排序器”更顺手
Xilinx 7 系列 FPGA,包括 Artix-7、Kintex-7、Virtex-7,以及 Zynq-7000 SoC,它们的电源轨数量相比 UltraScale+ 要少一些。VCCINT、VCCBRAM、VCCAUX、VCCO,再加上 MGT 相关轨和 Zynq 的 PS 域,大概在六到十路之间。这个数量和电压范围,用几颗性能不错的 DC/DC 芯片加上 LDO,是完全可以覆盖的。
而且 7 系列的 VCCINT 电流常常很大,一颗集成 PMIC 的电流能力很难满足高密度器件的需求。这时候如果在官方的 7 系列参考板上看,会很惊讶地发现,它们大量使用了分立的高效 DC/DC 方案。利用 TI 的 TPS 系列、MPS 的单片同步降压芯片,每个通道输出二三十安培,再配合电源排序器做多路 EN/PG 管理。这一套组合在 7 系列时代非常成熟,很多公版设计甚至在 PCB 布局上都有相对固定的模板。
在这个平台选型的时候,我一般建议优先看参考板的电源树,跟着官方选型逻辑走。不要一上来就找一颗"万能 PMIC"硬套,因为 7 系列的大电流轨意味着 PMIC 里的功率 MOSFET 可能长期处于高负荷,散热和可靠性都会受到影响。反而独立的 DC/DC 在热设计上更灵活,允许你把发热源分散到 PCB 不同位置,避免局部热点。
当然,如果用的是 Zynq-7000 里偏小型的型号,电源轨少、电流小,用一颗多通道 PMIC 也是合理的,毕竟面积能省不少。关键是,参考设计会告诉你哪一档密度选 PMIC 合适,哪一档必须走分立方案。
3.2 UltraScale+/MPSoC/RFSoC 相对 PMIC 的天然亲近
到了 UltraScale+ 架构,情况完全不一样。以 Zynq UltraScale+ MPSoC 为例,电源轨数量明显更多,除了 PL 域的 VCCINT、VCCINT_IO、VCCBRAM、VCCAUX,还多了 PS 域的多路电源:VCC_PSINTLP、VCC_PSINTFP、VCC_PSAUX、VCC_PSDDR_PLL,以及 DDR 的 VDDQ/VTT。多路电源还要求精确的上电序列,常常是 PS 域的几路先起来,然后 PL 域按顺序起来。如果全靠外部排序器去搭,那 PCB 上到处是 EN 和 PG 的连线,布线难度陡增。
PMIC 在这种场景下的天然优势,正是 Xilinx 官方参考设计力推它的原因。一颗 PMIC 集成多路独立同步降压通道,内部自带时序引擎,可以通过配置寄存器定义每一路的上电延时,从"上电先后逻辑"到"通道间延时"全部可调。外加 I2C/PMBus 总线,可以实时读取电压、电流、温度,还能做动态电压调整。MPSoC 的 CPU 域和 GPU 域往往支持 DVFS(动态电压频率调节),PMIC 的可编程输出电压就成了刚需。
RFSoC 平台更是如此。RFSoC 里集成了采样率极高的 ADC/DAC 和大量的 SerDes 收发器,这些模拟前端对供电噪声极其敏感。PMIC 参考设计里会针对 RF 敏感轨提供低噪声 LDO 或专用滤波电路,并且在板上布局、去耦电容选择上给出明确建议。照抄这类参考设计,能省掉大量"噪声从哪来"的排查时间。
在选型时还有个容易忽略的点:PMIC 的开关频率和相移设置。多路降压转换器如果开关频率相近且没有做相移,会产生明显的差拍噪声,进而耦合到 FPGA 高速收发器的电源轨。官方 PMIC 参考设计里通常会对每一路的相移做明确推荐,这是把高速收发器稳定性的问题前置到电源设计阶段的典型思路。
3.3 大电流轨的层级扩展:PMIC、外部功率级与电源排序器
很多人会有个误解:既然官方推荐 PMIC,那我 VCCINT 需要 40A,是不是就得找一颗能出 40A 的 PMIC?其实不用。PMIC 参考设计的价值恰恰在于提供了多种层级扩展方式。
第一种,直接用更强电流能力的型号。比如针对大功耗 FPGA,TI 的 TPS650864 系列本身就区分了不同的输出电流等级,有面向中低功耗和面向高功耗的变体。厂商做参考设计时,通常会把同系列不同电流等级对应到不同档位的 FPGA 型号。
第二种,PMIC 负责控制、外部功率级负责出力。有些 PMIC 输出的控制信号可以驱动外部 MOSFET 或功率级模块。这种情况下,PMIC 内部的 DC/DC 通道可以承担传统的小电流轨,而 VCCINT 这种大电流轨由外部功率级承担,PMIC 负责它的使能、反馈补偿和 PG 监测。这种"主从架构"在服务器板卡级别很常见。
第三种,PMIC 与独立排序器混合。如果板卡电流需求极端,各路电源都很大,就不必强求用 PMIC 提供所有功率路径,可以退回到"独立 DC/DC + 排序器"的思路,让 PMIC/排序器做时序大脑,各路独立电源做功率肌肉。Xilinx 官方参考设计里,有时就是这么干的,并不是所有板卡都清一色用同一类方案。
选型时我的判断标准很简单:先数清楚电源轨数量,再看每路电流需求,最后看有没有动态调压需求。轨数多、电流中等、要 DVFS,优先 PMIC;轨数少、电流极大、对成本敏感,优先分立 DC/DC 加排序器。清楚了这一点,再去看官方参考设计,就不会被各种方案的宣传带偏。
4. 把参考设计落到自己板卡上的完整步骤
4.1 上板前先算:用 XPE 把每路电流算清楚再抄原理图
拿到官方参考设计,最忌讳的就是直接照着原理图把 PMIC 电路抄过来,自己板卡的 FPGA 型号、逻辑资源利用率、高速收发器数量、DDR 配置跟参考板完全不同,电流需求怎么可能一样?
正确做法是先做功耗评估。Xilinx 官方提供了功耗估算工具 XPE(Xilinx Power Estimator),有 Excel 版本,也可以直接在线打开。在建工程的时候,把器件型号、逻辑资源利用率、翻转率、时钟频率、IO 标准、SerDes 数量、DDR 配置等信息填进去,XPE 会给出每一路电源轨的预估电流,还会标出不同置信度下的范围。
这一步非常关键。比如 VCCINT 电流,在逻辑资源利用率 30% 和 80% 之间,可能差出两三倍。如果你抄参考板的时候参考板是低功耗配置,而你的设计里塞满了 DSP 和 BRAM,那 PMIC 对应通道很可能过流。反过来,如果按最高配置预留过多电流,PMIC 选型又会偏大,成本和面积都不划算。
算完电流之后,再把参考设计里的 PMIC 或 DC/DC 每一路的电流能力列成一张表,和自己板卡的估算电流逐路对齐。注意,不是对齐峰值,而是对齐"峰值 + 一定裕量"。电源输出电流建议留 20% 到 30% 的裕量,特别是瞬态大的轨。这一步做完,你才会知道自己该用哪一档 PMIC、哪些通道需要并联、哪些通道甚至要外部功率级扩展。
4.2 那些容易被抄丢的引脚:EN、PG、GPIO、默认寄存器
抄原理图的时候,大部分工程师会把电源芯片的输入输出电容、电感照抄,但最容易漏掉的是控制引脚和配置引脚。
EN 引脚。PMIC 的每一路使能,未必都是直连前一级 PG。很多 PMIC 的 EN 带有内部上拉或下拉,外部还需要 RC 延时。参考设计里给的 RC 数值不是随便来的,它决定了该路在上电时序里的具体延迟位置。当你减少或增加了一个通道的 EN 延时,后续所有 PG 级联逻辑都会跟着变。照抄时一定要把 EN 的来源、拉电阻和延时电容都抄完整。
PG 引脚。PG 通常是一个开漏输出,需要外部上拉电阻到正确的电压域,而且这个电压域必须是已经稳定的电源。如果上拉电压选错了,比如在 VCCO 还没起来的时候 PG 就被拉高,下游逻辑会误判电源正常。参考设计里 PG 的连接链路,包括 PG 到下一路 EN、PG 到 FPGA 复位引脚、PG 到系统监测,都要原样保留或按需重连。
GPIO 和 strap 引脚。PMIC 的默认输出电压、上电地址、甚至一部分时序逻辑,往往是通过外部电阻拉高拉低来配置的。这些 strap 引脚在原理图上看起来不起眼,但你如果漏了一个电阻,上电后 PMIC 输出的电压可能完全不对。我遇到过某块板卡 VCCAUX 上电只有 1.5V,查了半天才发现是一颗地址配置电阻位置错了,PMIC 进入了完全不同的输出配置。
寄存器配置。这是最容易"抄丢"的非实物内容。很多 PMIC 在上电后还要通过 I2C 写入初始化序列,才能真正工作在正确状态。参考设计文档里通常会提供寄存器配置表,甚至是一段可以直接烧录的配置脚本。如果你在原理图里用了参考设计的 PMIC,但固件里没有配上对应的寄存器初始化,板卡可能能上电,但某些功能(比如 DVFS、动态监测、某些通道的时序)就是不对。这块建议和软件同事提前对齐,把 PMIC 配置脚本纳入板卡初始化流程。
4.3 抓时序:示波器四通道加一次完整上下电的验证流程
新板卡样机回来,第一件事不是跑逻辑,而是抓电源时序。我自己固定会用示波器四通道加一个逻辑分析仪来做这件事。
示波器四通道可以同时抓四路关键电源轨。第一次抓的时候,优先抓 VCCINT、VCCBRAM、VCCAUX、VCC_PSINTLP 这四路,顺序是先看 PS 域和 PL 域的相对顺序对不对。把探头地线用最短的弹簧接地,每路探头都接到 FPGA 电源引脚附近的测试点,不要接在电源输出电容两端,不然测到的是电容旁路的假象。
触发方式上,不要用单通道边沿触发,建议用 VCCINT 上升沿做触发,这样每次上电都能固定一个时间基准,各通道之间的先后关系一目了然。示波器采样率不用太高,20M 到 50M 足够,但要开启足够长的采集时间,把完整的上电序列都记录下来。比如从 VCC_PSINTLP 开始上升到 VCCAUX 稳定,整个过程可能在几十毫秒,要确保时基覆盖。
第一轮抓完,对照 FPGA 手册里的上电时序要求逐项比对。常见的问题有两个:一是某一路比要求晚了几毫秒,这通常需要调整 PMIC 对应通道的延时寄存器;二是某一路在上电过程中出现明显跌落,也就是"台阶",这说明负载太重或软启动时间不够,往往需要增大输出电容或者调整 PMIC 的上电斜坡。
验证完上电,别急着下结论,还要做一次完整的掉电测试。FPGA 对掉电顺序也有要求,一般要求跟随着上电顺序的逆序来。PMIC 如果内部有 discharge 功能,掉电顺序通常都能满足,但如果某些通道有外部负载还在耗电,可能会出现某一路掉得特别慢,反而违反了掉电要求。掉电测试同样用示波器抓一遍,确认没有问题再开始跑软件。
5. 参考设计之外,最考验人的是纹波与动态响应
5.1 纹波测试的第一课:不是换示波器,是换接地方式
电源纹波测量,是我见过新手和老手差距最大的一个环节。很多工程师拿示波器探头直接点到电源输出上,探头的接地夹子一长条甩在那里,结果测出来的纹波轻松超过 100mVpp,于是开始怀疑 PMIC 设计有问题。实际上,那个 100mVpp 里可能有一半是探头地线这个天线捡到的空间噪声。
测量纹波标准做法是:用探头自带的短弹簧地,或者用同轴线直接焊接在测试点上。探头带宽限制到 20MHz,这是电源纹波测量的行业惯例,因为大部分 DC/DC 的开关噪声集中在几百 kHz 到几 MHz 范围,20MHz 以上的尖峰更多是测量环境和数字电路耦合噪声,不代表真实的电源纹波。当然,如果你在做高速收发器相关的电源噪声分析,可能还需要看更高频段的噪声,那就另当别论。
参考设计文档里通常会给出去耦电容的布局建议,比如在 FPGA 电源引脚附近放多少颗 100nF、多少颗 1µF/10µF,这些电容的位置直接影响实际纹波和瞬态表现。如果你做的板子 PCB 面积紧张,电容数量打了折扣,那测试时就要特别关注纹波是否超标。我曾经在一块板卡上把 VCCINT 附近的大电容从参考设计的 18 颗减到了 8 颗,静态纹波测出来没差太多,但一跑 PCIe 压力测试就复位,后来加回去电容就稳定了。
5.2 瞬态响应才是FPGA电源的“致死点”
纹波测的是稳态,瞬态响应测的才是动态。FPGA 的负载变化有多猛?举个例子,DDR 控制器从空闲切换到连续读写,SerDes 从低速进入高速训练,或者 CPU 域从低功耗模式唤醒跑满频率,这些瞬间的电流变化速率可以达到几十安培每微秒级别。如果 PMIC 的环路响应不够快,输出电压会瞬间跌落,哪怕只有几微秒,也可能导致 FPGA 内部逻辑出现亚稳态、DDR 读写错误、收发器失锁。
瞬态响应测试需要电子负载,但用电子负载做恒流阶跃和 FPGA 实际负载行为还是有差别。更贴合实际的做法,是在板卡上跑专门的电源压力测试逻辑。比如在 Vivado 里综合一个大量使用 BRAM 和 DSP 的计数器阵列,让它们同步翻转,把 VCCINT 的电流快速拉高;再比如用收发器做高速回环测试,观察 MGT 供电轨在锁存/失锁过程中的行为。一边跑负载,一边用示波器 DC 耦合看电压跌落幅度和恢复时间。
如果发现瞬态跌落超标,参考设计文档里给出的补偿网络和输出电容值就是首要怀疑对象。PMIC 的环路补偿参数和输出电容的 ESR/ESL 密切相关,你换了不同规格的电容,环路稳定性可能就变了。我见过有人把参考设计里的陶瓷电容全部换成钽电容,结果环路振荡,电源输出出现几十 kHz 的自激,板子根本没法正常工作。所以,改输出电容之前,先确认改动会不会影响环路稳定。
5.3 PMIC 的软件面:DVFS、PMU固件与裸机供电管理
到了 MPSoC 这一代,PMIC 参考设计里很大一部分工作其实在软件层面。以 Zynq UltraScale+ MPSoC 为例,芯片内部有一个 Platform Management Unit(PMU),这是一个独立的电源管理处理器,负责上电顺序、复位、时钟管理和电压控制。很多做裸机开发的工程师会问:我不用 Linux,裸机程序是不是就不需要 PMU 固件了?答案是大多数情况下仍然需要。
PMU 固件在芯片启动的早期阶段就要运行,它负责初始化 PMIC/电源系统、检查电源状态、配置各路电压。即使是裸机应用,只要用到了 PS 域,PMU 固件通常都是启动流程的一部分。PMIC 参考设计中提供的 I2C 配置脚本,很多时候就是配合 PMU 固件运行的。PMU 固件内部定义了上电时要去读哪些 PMIC 寄存器、把电压设置到什么值。如果 PMIC 寄存器和 PMU 固件的预期不匹配,轻则某些电源轨不工作,重则整个系统卡在启动阶段。
在 Linux 系统下,PMIC 通常还会有对应的 regulator 驱动。设备树里会描述 PMIC 的通道、默认电压、是否支持动态调压。Xilinx 官方内核里已经包含了针对常见 PMIC 的驱动,比如相关平台上的 TI 或 Renesas PMIC。参考设计里给出的设备和寄存器配置,基本上可以直接搬到设备树里。
软件调压在实际项目里最常用的是 DVFS。比如 CPU 域在满负荷运行时需要 1.0V,空闲时降到 0.72V,通过 PMIC 的 I2C 动态调节,能在保证性能的前提下降低功耗。这部分如果没有参考设计里的寄存器配置说明,自己去试会比较痛苦,因为调压过程中要保证输出电压斜坡不能太快也不能太慢,太快可能触发欠压保护,太慢可能导致 CPU 供电不足死机。
6. 给同行们的零散经验:这些坑我基本都踩过
6.1 参考电压采样点决定稳压精度
PMIC 和 DC/DC 的输出电压,是通过反馈引脚来维持精度的。参考设计里反馈采样点放在哪里,常常决定你板卡上实际电压值准不准。很多 PMIC 支持远端采样,也就是反馈线连到负载端(比如 FPGA 电源引脚附近)而不是电源输出电容上。这样做可以补偿 PCB 走线的压降。
在 UltraScale+ 这类大电流低电压场景,走线压降非常可观。VCCINT 0.85V,如果 PCB 走线电阻有 5 毫欧,电流 20A,压降就是 0.1V,到 FPGA 引脚实际电压可能已经是 0.75V,已经低于正常工作范围了。所以参考设计里如果有远端采样,务必照做。采样线最好走成差分对形式,远离开关节点,避免捡到开关噪声。
6.2 掉电顺序和上电顺序同样重要
上电顺序大家都会测,掉电顺序却容易被忽略。FPGA 手册里通常也会对掉电顺序提出要求,特别是对某些内部结构有闩锁风险的产品。PMIC 如果内部带输出放电电阻,一般能满足要求,但如果你在外部还挂了负载电容或者有些模块需要保持供电,掉电顺序就可能被破坏。
我建议在测试项目里把掉电顺序测试也列成必测项。方法很简单,用示波器抓掉电时各路的下降沿顺序,观察有没有哪一路掉得明显比其他路慢。如果发现问题,可以调整 PMIC 通道的放电电阻配置,或者在慢的那路增加一个外部放电电路。
6.3 从电源反推的PCIe/SerDes眼图问题
最后分享一个排查思路。很多时候 PCIe 链路训练失败、GTY/GTM/GTH 收发器眼图收不拢,大家第一反应是去查时钟和 PCB 走线,查来查去发现都没问题,最后才想到电源。其实电源噪声对 SerDes 的影响非常直接:MGT 供电轨上的噪声会直接调制到收发器内部的 PLL,进而恶化输出抖动。
如果你怀疑电源是 SerDes 问题的根源,建议在跑收发器压力测试的同时,用示波器监控 MGTRAVCC 和 MGTRAVTT 的噪声。观察噪声是否会随着数据速率的切换或训练序列的进行而大幅变化。如果噪声明显异常,优先检查 PMIC 给 MGT 轨供电的通道是不是和数字大电流轨共用了输入级,或者滤波网络是不是被简化了。
在 Xilinx 文档里,针对 MGT 电源轨会有更严格的纹波建议,参考设计里也往往会给出一级或二级 LC 滤波电路。这部分千万别为了省成本去删。做高速板卡,电源滤波上的投入最后都会体现在眼图上,在我在实际项目中验证了很多次,这个结论基本不离谱。
说了这么多,最后还是想强调一点:PMIC Reference Designs 不是让你无脑照抄的图库,而是一套把厂商多年电源设计经验浓缩成可复用的系统方法。读懂它、用好它、再根据自己板卡的实际情况调整,你会发现 FPGA/SoC 的电源设计并没有想象中那么玄乎。把电源树梳理清楚、把时序验证做扎实,剩下的就是按部就班的工程化执行了。
