
干了这些年硬件见过太多板子死在电源上。功能仿真跑得再欢一上电 DONE 信号就是纹丝不动用示波器打在 VCCINT 上才发现电压跌了 80mV就这几十毫伏直接把内核电压干出了器件手册给的 ±3% 容差。FPGA 不是单片机供电这件事从一开始就得当正经项目来做。这次聊的 PMIC Reference Designs for Xilinx FPGAs and SoCs是官方和电源芯片厂商一起打磨出来的地图哪些电压轨、什么顺序、多大电流、怎么监控全部列得明明白白。适合硬件工程师、在校学生、以及所有被 FPGA 上电时序折磨过的人。1. 先把电源轨掰开揉碎Xilinx 各型号到底要几路电1.1 电压轨比你想象的要多很多第一次做 FPGA 板卡的工程师以为供电就是 1.0V 内核加 3.3V IO 两路完事。真打开数据手册人直接就傻了。拿 7 系列来说VCCINT内核、VCCBRAMBRAM 专用、VCCAUX辅助电源、VCCO各 IO Bank还要看有没有高速收发器有的话就再加 MGTAVCC 和 MGTAVTT。如果你用的是 Zynq SoCPS 域还会拉出来 VCCPINT、VCCPAUX、VCCPLL、DDR 供电等一路一路的电源域。到了 Zynq UltraScale MPSoC 和 Versal 这一代电源轨数量更是膨胀到十路往上。PS 有低功耗域、全功耗域、辅助域PL 又有自己的内核和 BRAMDDR 控制器还要单独的 PHY 电源。这些轨虽然名字绕口但每一路都对应着芯片内部一块独立的功能区域谁没供上电谁就不工作甚至会影响别的域。所以参考设计第一件事就是帮你把到底需要几路电这个问题给定下来而不是让你对着上百页数据手册自己猜。1.2 电压容差与瞬态响应为什么这么严格电源轨数量多只是表面真正的难点在于每一路精度都有要求。FPGA 的数据手册会给每路电源一个推荐工作范围比如 7 系列 VCCINT 标称 1.0V总容差通常要控制在 ±3% 以内。这个 3% 不是芯片厂商故意刁难而是基于芯片内部晶体管阈值、时序裕量和可靠性的综合评估。也就是说稳态时电压要在 0.97V 到 1.03V 之间动态时也不能越界。FPGA 内部逻辑翻转会产生非常快的负载跳变局部可能瞬间抽取几安培电流这个瞬间如果电源环路响应不够快电压就会被拉低哪怕只低几十毫伏也可能导致内部触发器建立时间不足出现偶发的时序违例。这一点直接用普通线性稳压器很难满足因为 LDO 在压差大时效率太低电流一大发热就压不住动态响应也未必好。这就是为什么 FPGA 板上的内核电源几乎全部采用 DC-DC而且要求输出电容和环路补偿认真设计过。2. 关键一步电流估算与电压容差怎么卡2.1 官方各产品线的电源轨参考表不同产品线的电压轨差异还挺大我整理了一张常用对照表方便大家在做方案时快速定位。电源轨7 SeriesUltraScaleUltraScaleZynq UltraScale MPSoCVCCINT1.0V0.95V0.85V0.85VPLVCCBRAM1.0V0.95V0.85V0.85VPLVCCAUX1.8V1.8V1.8V1.8VPLVCCO1.2/1.5/1.8/2.5/3.3V同左同左同左VCCINT_IO-1.0V1.0V-PS 域---0.85V/1.8V 多路MGTAVCC/MGTAVTT1.0V/1.2V1.0V/1.2V0.9V/1.2V0.9V/1.2V注意这只是个快速参照具体器件型号、速度等级、温度等级不同数值会有差异最后还是要以对应数据手册为准。有一个容易忽略的点同一颗 FPGA 在不同速度等级下工作电压范围可能不一样选 PMIC 之前一定要把器件的 speed grade 也纳入核对范围。2.2 用 XPE 和 Vivado 做电流估算知道用几路电之后下一步就是算每路需要多少电流。千万别拍脑袋也别问别人你的板子 1A 够不够这种问题因为 FPGA 的功耗跟你逻辑写得好不好、时钟跑多快、IO 驱动多少负载直接相关。最快的办法是用 Xilinx 官方的功耗估算工具。早期版本是一个叫 XPE 的 Excel 表格现在 Vivado 里直接有 Report Power。你可以把综合后的网表跑一遍设置好时钟约束、翻转率、IO 负载工具会给出比较详细的各路电流。我习惯在估算结果上再乘 1.2 到 1.5 倍作为设计余量这么做不是浪费而是给 PMIC 留出瞬态响应和温度降额的空间。举个例子一个 Kintex-7 325T 的板子综合后逻辑利用率大概 60%、时钟 200MHzReport Power 显示 VCCINT 电流约 2.1A。我在选 PMIC 时不会选刚好 2A 的而是找 3A 以上那档这样即使在高温环境下输出能力下降也依然能保证内核电压稳定。手写 XPE 表时要注意把翻转率设得贴近实际默认值经常偏低。我就见过有人全用默认参数估出来电流比实际小 40%结果板子上 PMIC 热保护频繁触发排查了半天才发现是功耗估算压根就不准。3. 参考设计核心三件事选型、时序、监控3.1 PMIC 芯片选型集成还是分离拿到电源轨清单和电流估算后接下来就该决定用什么芯片来实现。市面上的方案大致分两类。一类是集成 PMIC电源管理集成电路比如 TI 的 TPS65023、TPS650861以及针对 Versal 推出的配套电源管理芯片。这类芯片通常把三到四路 DC-DC 加上几路 LDO 塞进一颗封装通过 I2C/PMBus 接口配置电压和时序。优点很明显占板面积小、时序可以统一管理特别适合电源轨多但单路电流不算夸张的场景。中小规模 FPGA 板卡上一颗 PMIC 把所有非 IO 电源轨全部接下板面会显得非常清爽。另一类是分离式方案每个电源轨用一颗 DC-DC 或者 µModule 稳压器实现。比如 LTM4677 这类双通道模块单颗就能输出几十安培适合 UltraScale 这种内核电流需求很大的器件。这种方案灵活可以按需选择电流等级和品牌代价是电路面积和调试工作量更大。参考设计里通常两种都会给。我自己的经验是小到中等规模、板上空间有限的产品直接用 PMIC大电流、追求极致成本的大批量板卡不要硬上集成方案。3.2 上电时序从手册要求变成电路行为FPGA 对上电时序的要求是参考设计里最容易被低估的部分。以 Zynq UltraScale MPSoC 为例手册会明确要求 PS 电源域先于 PL 电源域上电因为 PS 内部有个平台管理单元PMU它在系统启动早期就要开始工作如果 PL 的电先到可能在 PMU 初始化完成之前触发不必要的状态变化。传统 7 系列 FPGA 相对宽容但也会建议 VCCINT、VCCBRAM 先于 VCCAUX 上电。其中原因跟芯片 I/O 的 ESD 结构和内部隔离电路有关如果 VCCAUX 先上电而 VCCINT 还是 0V部分电路会处于不明确的状态长时间这样工作会加速老化。除了顺序上升沿的单调性也很关键。FPGA 内部的 POR上电复位电路会检测电源电压是否越过某个阈值如果电压先超过阈值又掉回来再升可能触发保护或导致启动异常。这也是为什么参考设计里强调 ramp 过程要平滑不能出现台阶或跌落。把时序要求变成电路行为常见做法有三种。第一种是直接用 PMIC 内置的时序功能通过寄存器配置每个 DCDC 和 LDO 的使能顺序和延时第二种是用硬件使能链上一路电源的 PGOOD 信号去使能下一路 DC-DC 的 EN 引脚第三种是用专用的电源定序器芯片适合电源轨特别多、时序要求非常苛刻的场合。这三种方式各有适用场景PMIC 内置时序最省心硬件使能链最直观专用定序器最灵活。实际项目里经常混合使用。3.3 监控与电压裕量调节别小看这两件事参考设计里还有一块容易被忽略的内容就是监控和裕量调节。PMIC 一般都会提供 PGOOD 信号和 I2C/PMBus 遥测接口前者告诉系统我这路电压已经稳定后者可以实时读回输出电压、电流和温度。PGOOD 信号一定要接到 FPGA 或其他管理逻辑里。常见做法是把各路电源的 PGOOD 全部与逻辑后作为全局复位信号。没有这层保护一旦某路电源失效FPGA 会带着半供电的 IO 状态乱跑干扰总线上的其他设备。电压裕量调节则是生产和调试神器。通过 PMBus 写入一个下限电压值可以模拟极端供电条件来验证 FPGA 设计是否有足够的裕量写入上限电压值又可以在量产时做快速筛选。对做板级测试的人来说这个功能比手调电位器不知道好用多少倍。4. 一个能直接抄的方案TPS650861 给 Artix-7 供电实操4.1 原理图搭建的关键细节纸上谈兵这么多不如直接看一个具体方案。以 TI 的 TPS650861 为例它有三路 DC-DC 和四路 LDO很适合给中小规模 7 系列 FPGA 供电。我们可以这样分配DCDC1 输出 1.0V 给 VCCINTDCDC2 输出 1.0V 给 VCCBRAMDCDC3 输出 1.8V 给 VCCAUXLDO 输出分别给 VCCADC、MGTAVCC 和 MGTAVTT 等对噪声敏感的模拟和收发器电源。注意 DCDC 输出端一定要按照参考设计手册里的建议放置输出电容并且反馈采样要从负载端单独走线回来不要直接接到输出引脚附近的电容上。原理图阶段就要把 remote sense 这种细节画进去不然 PCB 阶段再改会非常痛苦。TPS650861 的电压和时序靠寄存器配置通常通过 I2C 接口烧写。调试时可以用 TI 的 Fusion Digital Power Designer 软件图形化配置点几下鼠标就能生成寄存器序列非常方便。量产时既可以在产线统一烧写也可以选用预配置的型号。4.2 MPSoC/RFSoC 供电方案怎么加码规模上到 Zynq UltraScale MPSoC 之后一片 TPS650861 就不够用了。这种器件 PS 域带 0.85V 的低功耗域和全功耗域、1.8V 的辅助域、1.8V 的 DDR PLLPL 域还有自己的内核和 BRAM 电源。参考设计通常按系统管理域和 PL 域分组用两颗 PMIC 分别管理中间用 PGOOD 信号做握手。两颗 PMIC 挂在同一条 I2C 总线上时要注意地址区分通过芯片的 ADDR 引脚配置不同地址避免配置时互相覆盖。RFSoC 就更特殊它的 RF-ADC 和 RF-DAC 对电源噪声极为敏感纹波稍微大一点频谱上就会出现杂散。这类电源轨一般不用 DC-DC 直出而是先由 DC-DC 降到合适的中间电压再用超低噪声 LDO 做二次整形并串上磁珠和 RC 滤波。参考设计里这部分标注得非常细致照着做就是了。再说个经常被问到的点RFSoC 裸机开发时是不是需要 pmu 文件。这个 pmu 文件指的是 Zynq UltraScale 的平台管理单元固件 PMUFW它属于软件侧的东西跟电源硬件设计没有直接关系。但反过来如果板子上 PS 域电源时序没有按手册做PMU 根本起不来PMUFW 烧进去也没有意义。所以电源设计这里始终是前置条件。5. 从原理图到量产板Layout、散热跟验证不能省5.1 Layout 经验sense 线和去耦电容怎么摆FPGA 的布局布线尤其是电源部分我踩过的坑也不少。最值得说的一条是 sense 线。DC-DC 的远端采样线必须走成一对细线从负载端直接反馈回芯片的 FB 引脚中途不要过孔不要跟其他信号并行最好用地线包住。这样做的目的是把负载端的真实电压反馈回去而不是让采样点电压因为 PCB 走线压降而失真。去耦电容要按照由小到大、由近到远的原则放置。最靠近 FPGA 电源引脚的是 100nF 这类小容值陶瓷电容负责高频瞬态再往外是 1uF、10uF 的 MLCC覆盖中低频最外层才用大容量的钽电容或者聚合物电容用来撑住长时间的大电流跌落。5.2 散热评估一个简单的计算PMIC 的散热通常不会特别夸张