FPGA电源设计:同步降压稳压器的输出跟踪与时序控制

发布时间:2026/8/31 23:28:01
FPGA电源设计:同步降压稳压器的输出跟踪与时序控制 大概两年前我调试一块FPGA数据采集板卡时遇到一个极其诡异的故障板卡上电后JESD204B高速串行链路经常锁不住有时连JTAG都无法识别到器件。我最初以为是时钟芯片的抖动超标换了三款时钟缓冲器又怀疑是PCB走线的阻抗不连续折腾了两周毫无进展。直到有一天我用示波器同时抓了FPGA所有电源轨的上电波形才意识到问题根本不在数据链路而在电源VCCOI/O电源比VCCINT内核电源提前了大约20ms到达稳态这直接违反了FPGA的上电时序要求。从那一刻起我才真正理解带输出跟踪与时序控制的同步降压稳压器为什么是FPGA和微处理器供电设计的核心命题。这篇内容不是教科书式的原理堆砌而是我从这次故障出发把同步降压稳压器在FPGA/微处理器供电中的工作原理、输出跟踪Output Tracking和时序控制Sequencing的完整实现方法、参数计算以及实测避坑经验逐一拆解。如果你正在设计FPGA板卡、微处理器最小系统或者正在被上电顺序不对这类问题折磨这篇文章应该能帮你省下几个星期的排查时间。1. 一次上电失败逼我查清了FPGA电源的全部底细1.1 故障现场链路锁不住和JTAG失联的共性那个故障的本质是我对FPGA电源架构不够敬畏。FPGA不是一颗简单的数字芯片它内部有多个独立的电源域每个电源域对应不同的功能和不同的电压等级。以我当时的板卡为例用的是Xilinx Kintex-7系列的FPGA涉及四路电源VCCINT1.0V内核、VCCBRAM1.0V块RAM、VCCAUX1.8V辅助、VCCO1.8V I/O。四路电源看似独立但内部通过ESD保护二极管和衬底结构相互牵连一旦上电顺序不对就可能形成寄生电流通路。我当时的问题是VCCINT还在爬坡过程中VCCO已经稳定在1.8V。由于I/O bank的ESD二极管从VCCO到VCCINT之间存在正向导通路径当VCCINT电压低于VCCO的0.7V以上时VCCO就会通过ESD二极管向VCCINT灌电流。这个电流一方面让VCCINT的上升波形出现一个奇怪的平台另一方面在I/O PAD上产生了不确定的电压状态导致JTAG状态机无法可靠复位高速收发器的复位时序也被破坏。链路锁不住只是表象根源是电源轨之间的寄生电流通路。1.2 元凶浮出水面I/O轨跑到了内核轨前面用示波器抓到波形的那一刻其实我是有点羞愧的。原理图设计时就看过FPGA数据手册中的上电顺序要求但当时觉得只要最终电压都对顺序差个几十毫秒应该没关系。事实证明这个想法非常危险。FPGA厂商在数据手册中给出的上电顺序建议不是推荐而是必须——如果VCCO先于VCCINT上电轻则器件工作异常重则损坏FPGA内部结构。我后来专门查了几个主流FPGA和微处理器的手册发现几乎所有器件的上电要求都遵循同一个原则核心电源先行I/O电源殿后。具体到Xilinx 7系列要求是VCCINT和VCCBRAM先上电VCCAUX随后VCCO最后Intel Cyclone V的要求类似VCCINT先于VCCIO。而很多ARM核处理器比如Cortex-A系列也要求VDD_CORE先于VDD_IO和DDR电源。这个认知转变让我决定重新审视整个电源设计方案。与其继续用一个电源上电后延迟一段时间再开启下一路的粗放方式不如直接采用具备输出跟踪和时序控制能力的同步降压稳压器在硬件层面就保证电源轨之间正确的启动关系。这也是这篇文章真正想分享的东西。2. FPGA和微处理器到底需要什么样的电源架构2.1 一个典型的FPGA电源树分析设计FPGA电源系统前首先要画一棵完整的电源树。以我最近设计的Zynq UltraScale EV器件为例它的电源轨数量相当可观这里列一个典型清单电源轨电压等级典型电流供电对象VCCINT0.85V10-30AFPGA核心逻辑、DSP、BRAMVCCINT_IO0.85V1-2AI/O逻辑内核VCCBRAM0.85V1-3ABlock RAMVCCAUX1.8V1-3A配置、时钟管理、辅助逻辑VCCO1.2V-3.3V1-5AI/O BankVCCO_MGT0.9V-1.2V1-3A高速串行收发器VCC_PS0.85V-1.0V5-15A处理系统ARM核DDR_VCC1.2V3-5ADDR4存储器DDR_VTT0.6V1-3ADDR4端接电压看到这个表你就明白FPGA电源设计不是一颗稳压器就能搞定的问题。大电流的内核电源通常需要多相降压稳压器或一棵功率级并联的Buck拓扑辅助电源和I/O电源则是中等电流的单相Buck。更重要的是这些电源轨的启动顺序不能随便拍脑袋。Zynq UltraScale要求VCCINT和VCCINT_IO最先上电VCCBRAM随后VCCAUX在其后最后是VCCO和VCCO_MGT而PS侧电源和PL侧电源之间的顺序也有明确规定。2.2 为什么同时上电不等于安全上电我遇到过不少工程师问既然上电顺序这么讲究那我用一个总的电源开关让所有电源同时启动行不行答案是不行。所谓同时启动只是说各路的使能信号在同一时刻发出但每路同步降压稳压器的软启动时间、环路建立时间、输出电容充电速度都不一样最终各路电压的上升斜率是千差万别的仍然会出现一路已经到1.8V、另一路还在0.3V的中间状态。对FPGA内部电路来说这种瞬态压差足够触发ESD二极管导通。所以真正可靠的做法是把启动顺序和上升过程中的电压关系都控制住。这就是输出跟踪Tracking要解决的问题——它不只是让各路电源先后启动还要让它们在上升过程中保持特定的比例关系从而从根本上杜绝瞬态压差导致的寄生电流通路。比如DDR的VDD和VTT之间要求VTT始终保持VDD的一半FPGA的VCCINT和VCCBRAM如果电压相同可以设置两路重合跟踪让它们从0V开始就以相同的斜率同步爬升。这类需求用传统的使能延时方案是做不到的必须靠带跟踪功能的同步降压稳压器或专门的电源时序控制方案来实现。3. 同步降压稳压器凭什么成为FPGA供电的主流选择3.1 同步整流与普通Buck的效率差异FPGA供电对效率的要求近乎苛刻。一个20A的内核电源如果采用非同步Buck架构续流二极管的正向压降按0.5V计算光续流损耗就有10W。这10W散在PCB上不仅烫还要额外设计散热措施。而同步Buck架构把续流二极管换成了低边MOSFET导通压降只有I×RDS(ON)。以一个典型的4mΩ低边MOSFET为例20A电流时的导通损耗是20²×0.0041.6W比二极管方案省了8W多。这个差距在FPGA这种动辄几十安培的负载场景下直接决定了系统能不能稳定工作。除了效率同步Buck还有两个对数字负载至关重要的特性一是开关频率可以做得比较高500kHz-2MHz让瞬态响应速度更快二是可以轻松实现多相并联满足FPGA大电流需求的同时还能把电感尺寸和输出电容数量降下来。现在的FPGA高速串行收发器对电源纹波和瞬态跌落非常敏感JESD204B这类接口在速率过高时如果电源在负载跳变时跌落了50mV以上链路抖动就会超标。同步Buck配合合适的输出电容能把瞬态跌落控制在几十毫伏以内这是普通LDO或非同步Buck很难做到的。3.2 选型对照从效率、瞬态到跟踪/时序功能我在选择FPGA电源方案时会重点看以下几个维度维度关键指标为什么重要拓扑同步整流/跨导决定大电流下效率和热表现输入电压范围4.5V-17V或2.5V-5.5V是否需要中间总线架构输出电流按负载的1.2倍预留保证瞬态响应余量开关频率500kHz-1MHz以上影响瞬态响应和EMI反馈环路带宽尽量高高速收发器对电源敏感跟踪功能TRACK/SS引脚决定能否实现比例跟踪时序功能EN/PG/SEQ引脚决定能否实现级联时序保护功能OCP/OVP/OTP保护FPGA不被异常电源损伤以我常用的一类中功率同步降压稳压器为例芯片集成了高边和低边MOSFET外部只需要电感、电容和反馈电阻不需要外部驱动级TRACK引脚可以把输出电压拉低到任意外部设定的斜坡上实现输出跟踪EN引脚和PG引脚分别用于接收使能信号和输出电源良好状态配合起来就能做级联时序控制。这种单芯片方案做FPGA的辅助电源轨非常合适一颗芯片负责一路电路简单调试也直观。4. 输出跟踪的实现细节比例跟踪与重合跟踪怎么算、怎么接线4.1 两种跟踪模式的定义与适用场景输出跟踪有两条路线比例跟踪Ratiometric Tracking和重合跟踪Coincidental Tracking。比例跟踪的意思是从电源轨的电压在整个启动过程中始终与主电源轨保持一个固定比例。比如主电源轨最终目标是3.3V从电源轨最终目标是1.8V比例就是1.8/3.3≈0.545。启动过程中的任何一个时刻从电源轨的电压都约等于主电源轨电压的0.545倍。因为两路电压同时按比例爬升所以它们几乎在同一时刻到达各自的最终目标值。这个模式非常适合DDR供电场景VTT0.75V与VDD1.5V需要始终保持一半的关系。重合跟踪则更简单直接从电源轨的上升斜率与主电源轨完全相同两路电压在启动过程中处于同一个斜坡上如果最终电压也一样它们就同时到达稳态。这个模式适合多路相同电压等级的电源轨比如FPGA的两个VCCO都是1.8V或者VCCINT和VCCBRAM都是0.85V。选择哪种模式完全看电路的实际要求。如果两路最终电压不同但需要在启动全程保持比例选比例跟踪如果两路电压相同且需要同步上升选重合跟踪。这里有个容易混淆的点很多人以为时序控制就是让后一路比前一路晚几百毫秒启动但跟踪的本质是让两路在过程中保持协同而不是单纯的先后关系。4.2 分压网络计算从一个DDR VTT的例子说起明白了概念还得能算。拿最常见的DDR3/DDR4供电举例VDD需要1.5VDDR3或1.2VDDR4VTT需要VDD/2。VDD由主同步Buck产生VTT由另一颗带TRACK引脚的同步Buck产生要求VTT在启动过程中始终等于VDD的一半。很多同步Buck的TRACK引脚内部基准电压V_REF是0.6V反馈网络的稳态关系是VOUT V_REF × (1R1/R2)。先设定VTT的主反馈电阻使输出电压0.75V假设DDR3选R110kΩR220kΩ0.6×(110/20)0.9V不对让我重新算。反馈公式是VOUT V_REF × (1R1/R2)要VOUT0.75VV_REF0.6V则1R1/R21.25R1/R20.25选R110kΩR240kΩ0.6×(110/40)0.75V正确。然后算跟踪分压。要让VTT在启动过程中跟随VDD的一半TRACK引脚的电压应为V_TRACK VDD × (V_REF / VTT_TARGET) VDD × (0.6/0.75) 0.8 × VDD。不对这样算出来跟踪分压比是0.8而我们要的是VTTVDD/2在稳态时VTTVDD/20.75VTRACK引脚应该是0.6V所以V_TRACK VDD/2 × (V_REF/VTT_TARGET)再理一下。从电源的TRACK引脚在跟踪模式下接管内部基准此时VOUT V_TRACK × (1R1/R2)。我们要VOUT VDD/2。代入反馈网络1R1/R2 VTT_TARGET/V_REF 0.75/0.6 1.25。所以V_TRACK VOUT/1.25 (VDD/2)/1.25 0.4 × VDD。也就是说TRACK引脚的分压网络要把VDD分压成0.4倍。选R_TOP60kΩR_BOTTOM40kΩ分压比40/(6040)0.4满足要求。这样启动时TRACK引脚电压始终是VDD的0.4倍VTT输出就是0.4×VDD×1.250.5×VDD完美跟踪。这个计算里有个关键细节TRACK引脚内部还有一个电流源通常是10µA量级它会向分压网络注入电流导致实际分压比偏移。所以分压电阻的阻值不能太大一般选在10kΩ-100kΩ范围让内部电流源产生的偏移小于1%以内。如果阻值太大跟踪精度会恶化。我习惯把R_TOP和R_BOTTOM的并联值控制在50kΩ以下这样10µA电流源造成的偏移大概只有0.5V×10k/50k0.1V实际上要算分压节点的灵敏度但工程上控制阻值范围就够了。4.3 布线与PCB布局的注意事项跟踪分压网络的布线看起来简单实际容易踩坑。TRACK引脚的信号是模拟小信号非常容易被开关节点耦合噪声干扰。我有一次做DDR电源的跟踪设计示波器上看到VTT在启动过程中有毛刺排查后发现是TRACK引脚的走线紧挨着电感输出节点开关噪声直接耦合进了参考路径。解决办法是加宽地回流、把TRACK走线换到内层并在靠近TRACK引脚处加一个1nF的旁路电容滤除高频噪声。但电容也不能太大太大会影响跟踪的响应速度导致启动过程中VTT跟不上VDD的变化。另一个布局问题是分压网络的接地。R_BOTTOM的地应该单独走线回到稳压器的AGND引脚不能在输出电容的地上就近打孔。因为输出电容的地承载着很大的开关纹波电流在这个地参考点上取的电压会叠加噪声让参考地电位抖动最终反映在输出跟踪的起始点有偏差。这些问题在原理图上完全看不出来只有实测波形才能暴露。5. 时序控制的三种落地方式以及我选型的理由5.1 方案一使能级联EN Daisy Chain的电路设计最朴素也最常用的时序控制方式是利用每颗稳压器自身的EN和PG引脚做级联。PG引脚在输出电压达到标称值的90%左右时拉高连接下一颗稳压器的EN引脚就能实现前一路稳定后后一路才开始启动的效果。这个方案成本最低不需要额外的控制芯片PCB占板面积也小非常适合中等规模的电源系统。以之前提到的Zynq UltraScale电源树为例四路电源的时序可以这样设计VCCINT先上电它的PG输出接到VCCBRAM的ENVCCBRAM的PG接到VCCAUX的ENVCCAUX的PG接到VCCO的EN。这样从VCCINT开始一路一路地解锁后级。如果需要在两路之间增加延时可以在PG和EN之间串一个RC网络调整时间常数来控制延迟。RC延时的原理是PG拉高后对电容充电EN引脚电压超过使能门限后稳压器才启动。需要注意的是EN引脚通常有内部上拉电流计算RC时需要查数据手册的EN引脚漏电流和门限电压否则实际延时和理论值差别很大。5.2 方案二用外部时序控制芯片处理复杂上电逻辑当电源轨数量多、时序关系复杂时EN级联就不够看了。比如有些FPGA系统有8路、10路电源每路的上电延时都要求精确到毫秒级级联方案很难精细调节。这时我会用专门的电源时序控制芯片或电压监控芯片。这类芯片通常有多个开漏输出和多个可编程的延时设置可以通过外部电阻或I2C接口配置每路的延时和顺序还能监测所有电压轨的故障状态一旦某一路过压或者欠压可以立即关断所有电源起到保护作用。在上一块板卡上我用了这种方式一颗时序控制器管理6路电源上电顺序通过引脚配置设置为VCCINT→VCCBRAM→VCCAUX→VCCO_MGT→VCCO→DDR_VCC每路之间的间隔设为10ms。这个方案的优点是调试方便改顺序只需要换电阻或改配置不需要改PCB缺点是多了一颗芯片成本略高而且如果选型不当芯片本身的逻辑配反了会带来新的排查负担。5.3 方案三可编程PMIC的集成化路线对于追求集成度和PCB面积的项目可编程PMIC电源管理IC是更好的选择。这类芯片内部集成了多路同步降压稳压器通过I2C/SPI/PMBus接口可以非常灵活地配置各路电源的电压、上电顺序、软启动时间、保护阈值。一颗大芯片就能搞定整个FPGA电源树调试时用软件就能修改时序不用动硬件。但PMIC也有短板。首先集成度越高散热就越集中大电流通道之间的热耦合需要考虑其次PMIC的开关频率和电感选择通常有限制不同电源轨共用相同频率时可能产生差拍干扰需要仔细规划最后是灵活性反而不如分立器件如果有一路需要特殊的纹波指标PMIC的固定拓扑可能难以满足。所以我一般把PMIC用在对面积敏感的产品上比如板卡尺寸受限的嵌入式系统在实验室开发和宽电源域需求的板卡上我仍然倾向于分立同步Buck加时序控制器。5.4 我的选择与完整上电时序参数综合考量后最近这个FPGA项目的电源方案定为VCCINT用一颗大电流同步Buck控制器加外置MOSFET的方案电流余量做到35AVCCBRAM、VCCAUX、VCCO分别用三颗中功率同步Buck稳压器通过PG级联实现时序。DDR_VCC和VTT用一颗带跟踪功能的同步Buck加外部跟踪分压网络实现VTT跟踪。整个系统实测的上电参数如下电源轨目标电压软启动时间上电顺序VCCINT0.85V5ms最先VCCBRAM0.85V3ms第二VCCAUX1.8V3ms第三VCCO_MGT0.9V3ms第四VCCO1.8V3ms第五DDR_VCC1.2V4ms最后DDR_VTT0.6V跟踪DDR_VCC同时这套方案在实际板卡上跑了几个月JESD204B链路建立稳定没有再出现过JTAG失联的问题。6. 实测复盘示波器上看到的波形和踩过的坑6.1 上升斜率与时序的实测方法电源时序控制得好不好最终还要靠实测波形说话。我会用四通道示波器设成直流耦合带宽设20MHz滤掉开关纹波同时测量VCCINT、VCCBRAM、VCCAUX、VCCO四路电压。触发方式设成单次触发触发电平设在0.3V左右这样可以从电源开始爬升时就把整个时序过程抓下来。实测中最关键的观察点有三个各路电压的启动时刻是否满足设计顺序、相邻两路之间是否有后一路提前启动、各路上升斜率是否符合设定值。很多示波器的默认水平时基是1ms/格抓上电波形显得太密我会放大到200µs/格同时打开数学跟踪功能可以同时看到多路电压的上升斜率曲线。如果发现某一路在上一路还没有达到PG门限时就提前启动多半是PG和EN之间的RC延时参数出了问题。6.2 两个常见问题跟踪斜坡台阶与电源反弹有一次我在验证VTT跟踪DDR_VCC的波形时发现VTT的上升曲线不是在0V到0.6V之间平滑上升而是在0.4V附近出现了一个短暂的平台像台阶一样。查了一遍原理图发现是分压网络的R_BOTTOM上并联了一个过大的滤波电容导致TRACK引脚电压上升变慢稳压器的环路认为参考电压稳定了输出就被卡在某个中间值。把滤波电容从100nF减小到1nF后台阶消失。另一个典型问题是电源关闭时的电压反弹。同步Buck在输出端有一个很大的输出电容阵列如果负载是FPGA这种低功耗待机状态输出电容放电很慢但后级的EN信号已经拉低前级的功率级停止开关输出电压会缓慢下降。如果这个下降过程出现反弹回升可能是在放电过程中输出电感和电容之间发生了能量交换形成阻尼振荡。这个问题的处理办法是给每路电源加一个放电RCD电路或者选用带内部主动放电功能的稳压器在EN拉低后把输出去耦到地确保快速而单调地放电。FPGA数据手册一般也要求上电和掉电都是单调的避免配置逻辑出现不定态。6.3 一些写给后来人的经验经历了那次上电顺序故障之后我总结了几条硬经验第一原理图设计阶段就要把FPGA数据手册的电源章节打印出来逐条对照上电顺序要求。不要凭经验猜不同厂家的要求有差异同一厂家不同系列的差异也不小。第二选择同步Buck时TRACK引脚、EN引脚、PG引脚的功能灵活性要作为核心筛选条件而不仅仅是看效率和输出电流。T为了省几块钱选了一颗没有跟踪功能的芯片到后面需要加时序时往往只能堆RC延时或者改板成本反而更高。第三跟踪分压网络用到的电阻精度至少要1%温漂系数选25ppm/°C或者更好。因为跟踪比例直接决定了两路电源在启动过程中的电压关系电阻温漂过大会导致高温下跟踪失配。第四也是最重要的一条不要指望仿真软件能完全预测上电时序问题。电源轨之间的寄生路径、PCB的寄生参数、负载的等效电阻电容都很难在仿真里精确建模。最好的办法是快速打样上电后用示波器实测把波形和时序截图存到设计文档里。设计评审时拿出实测波形比任何仿真报告都有说服力。现在每次设计FPGA板卡我都会在电源调试阶段专门留出半天时间用示波器把每一路电源的上电波形、下电波形、跟踪关系完整记录一遍。看起来多花了时间但相比后期在高速链路稳定性上反复排查这个前期投入实在是太值了。