资讯详情

资讯详情

Zynq-7010电源设计与启动配置实战指南

1. 为什么Zynq-7010的电源设计不能照搬普通FPGA很多人第一次画Zynq-7010核心板的时候脑子里想的还是传统FPGA那套供电逻辑——一个3.3V、一个1.2V顶多再加个1.8VLDO一排就完事了。但Zynq-7010跟纯FPGA芯片有一个本质区别它内部集成了ARM Cortex-A9双核处理器PS端和可编程逻辑PL端两套独立又耦合的系统。这两套系统的上电时序、电压精度、纹波要求、电流需求都不一样如果按普通FPGA的思路去设计最典型的结果就是板子能下载程序但PS端跑不起来或者跑起来了但DDR初始化随机失败。我见过不少初学者在这块栽跟头现象千奇百怪有的板子JTAG能识别芯片但SD卡启动永远卡在FSBL阶段有的板子PL端逻辑跑得好好的一开PS端就复位还有的板子常温能用一上高温就死机。这些问题追到根上十有八九是电源设计或者启动配置出了问题。Zynq-7010虽然是个小芯片但它的电源轨数量一点都不少核心电压的精度要求也比普通FPGA严格得多。这篇文章面向的是正在做Zynq-7010最小系统板核心板或开发板的硬件工程师和FPGA开发者不管你是第一次画Zynq板子还是之前画过但启动老出问题这里的内容都能帮你把电源设计和启动配置这两块硬骨头啃下来。我会从电源轨的分配逻辑讲起把每一路电压为什么需要、需要多少电流、上电顺序怎么定讲清楚然后再把启动模式的选择和配置引脚的接法一步步拆开。中间会穿插我在实际项目中踩过的坑和验证过的方案尽量让你少走弯路。2. Zynq-7010电源轨的完整拆解与电流估算2.1 PS端和PL端的供电需求差异Zynq-7010的电源引脚在数据手册里分得很清楚但很多人看手册的时候容易忽略一个关键点PS端和PL端的供电是分开的而且PS端的供电要求比PL端严格得多。PS端负责ARM核、DDR控制器、外设接口这些必须稳定运行的部分PL端则是可编程逻辑阵列相对皮实一些。具体来说Zynq-7010的电源轨大致可以分成以下几类电源轨典型电压主要供电对象精度要求典型电流7010VCCPINT1.0VPS端内部逻辑核心±3%0.8~1.2AVCCPAUX1.8VPS端辅助电路、PLL±5%0.3~0.5AVCCPLL1.8VPS端PLL专用±5%低噪声50~100mAVCCO_DDR1.5VDDR3接口IO±5%0.5~1.0AVCCINT1.0VPL端内部逻辑核心±5%0.3~0.8AVCCAUX1.8VPL端辅助电路±5%0.2~0.4AVCCO_MIO3.3V/1.8VMIO Bank IO±5%0.1~0.3AVCCO_HR3.3V/2.5V/1.8VPL端HR Bank IO±5%视外设而定这张表里的电流值是针对7010这个级别芯片的典型估算实际值取决于你的PS端外设开了多少、PL端逻辑资源用了多少、DDR频率跑多高。但有一个原则是不变的VCCPINT的电流需求最大而且对精度要求最高这一路的设计质量直接决定PS端能不能稳定跑起来。2.2 电流估算的实操方法很多人问电流怎么估其实Xilinx提供了两个工具一个是XPEXilinx Power Estimator一个是Vivado里的Report Power。XPE适合在画原理图之前做粗略估算Vivado的Report Power适合在逻辑设计完成后做精确分析。我的习惯是先用XPE把最坏情况估出来然后电源芯片选型时留30%以上的余量。以Zynq-7010跑DDR3-1066、PS端开UART和SD卡、PL端用30%逻辑资源为例XPE估出来的结果大概是VCCPINT约1.0AVCCPAUX约0.4AVCCO_DDR约0.7AVCCINT约0.5AVCCAUX约0.3A。这些数字看起来不大但你要注意这是典型值不是峰值。DDR在频繁读写的时候VCCO_DDR的瞬态电流可能冲到1.5A以上所以去耦电容的配置非常关键。提示XPE里有一个Thermal选项卡可以设置环境温度和散热条件估出来的电流会更接近实际。很多人忽略这一步结果电源选型偏小板子跑起来就烫得不行。2.3 电源芯片选型的几个关键考量Zynq-7010的电源方案通常有两种思路一种是全部用LDO另一种是DCDC加LDO混合。全LDO的方案简单、噪声低但效率差、发热大适合输入电压不高、电流需求小的场景。混合方案效率高但DCDC的开关噪声可能影响PS端的PLL和DDR性能需要仔细布局和滤波。我个人的经验是VCCPINT和VCCINT这两路1.0V大电流用DCDCVCCPAUX、VCCPLL、VCCAUX这几路小电流用LDOVCCO_DDR用DCDC因为电流可能比较大VCCO_MIO和VCCO_HR根据外设情况灵活选择。这样既保证了效率又保证了关键电源轨的噪声性能。具体芯片选型上TI的TPS62130、TPS54332这些DCDC芯片在Zynq板子上很常见LDO可以用TPS7A7001、TPS7A8101这些低噪声型号。如果你不想自己搭电源树也可以用现成的PMIC比如TI的TPS650250或者Maxim的MAX8660这些芯片专门为Zynq系列设计集成了多路DCDC和LDO还支持上电时序控制省事不少。3. 上电时序与复位电路的配合逻辑3.1 Zynq-7010的上电时序要求Zynq-7010的数据手册里明确规定了上电顺序VCCPINT先上然后是VCCPAUX和VCCPLL最后是VCCO_DDR和VCCO_MIO。这个顺序不是随便定的而是因为PS端的内部逻辑核心需要先建立稳定的1.0V电源PLL和辅助电路才能正常工作最后IO电源上电后才能与外部DDR和 peripherals通信。如果上电顺序反了比如VCCO_DDR先上而VCCPINT还没稳DDR控制器可能会进入一个不确定的状态导致FSBL阶段DDR初始化失败。这种问题有时候不是必现的可能十次里失败一次调试起来非常头疼。实现上电时序的方法有几种最简单的是用PMIC自带的时序控制功能比如TPS650250就有专门的SEQ引脚通过外接电容或电阻设置各路输出的上电顺序和延迟。另一种是用分立方案用DCDC的Power Good信号级联控制下一路电源的Enable引脚。还有一种是用CPLD或小MCU做时序控制灵活但成本高。3.2 复位信号的正确处理Zynq-7010的复位信号有两类PS端的PORPower-On Reset和SRSTSystem Reset以及PL端的复位。POR信号在电源稳定后需要保持一定时间的低电平确保内部电路完成初始化。数据手册里建议POR低电平保持时间至少1ms实际设计中我一般留10ms以上用RC延时或者专用的复位芯片如TPS3808来实现。这里有一个容易踩的坑很多人把POR引脚直接接一个10k上拉电阻加100nF电容觉得这样就能产生复位脉冲。但Zynq的POR引脚内部有施密特触发器阈值电压和普通CMOS不一样RC参数选不好可能导致复位脉冲宽度不够或者被噪声误触发。我的建议是用专用的复位芯片比如TPS3808G01它可以精确设置复位延时而且输出是开漏的可以直接拉到POR引脚。注意POR引脚不能悬空也不能只靠外部RC一定要保证在电源稳定后有一个干净的低电平脉冲。我见过一个案例板子偶尔启动失败最后查出来是POR引脚的RC时间常数太小复位脉冲只有几百微秒换成专用复位芯片后问题消失。3.3 复位与启动模式的配合Zynq-7010的启动模式由MIO[8:7]等引脚在POR复位释放时的电平决定。这意味着复位信号和启动模式配置是紧密耦合的如果复位信号不干净芯片可能在复位释放时采到错误的启动模式导致从错误的设备启动。比如你配置的是SD卡启动但因为复位抖动芯片采到了JTAG模式结果就是板子没反应。解决这个问题的办法有两个一是保证复位信号的干净用专用复位芯片二是启动模式配置引脚加上拉或下拉电阻确保在复位期间电平稳定。MIO[8:7]这些引脚在复位期间是输入状态内部有弱上拉但为了可靠外部还是要加4.7k~10k的上下拉电阻。4. 启动模式配置与QSPI/SD卡启动实战4.1 启动模式的选择逻辑Zynq-7010支持几种启动模式JTAG、QSPI Flash、SD卡、NAND Flash。对于最小系统板来说最常用的是QSPI和SD卡两种。QSPI适合量产程序固化在板子上上电就跑SD卡适合开发和调试换程序方便把BOOT.bin拷到SD卡里就行。启动模式由MIO[8:7]和MIO[5:3]等引脚决定具体配置如下启动模式MIO[8:7]MIO[5:3]说明JTAG00xxx调试用不固化程序QSPI01xxx从QSPI Flash启动SD卡10xxx从SD卡启动NAND11xxx从NAND Flash启动实际设计中我通常会把MIO[8:7]做成跳线帽或者拨码开关方便切换启动模式。如果板子空间紧张也可以只留QSPI和SD卡两种模式用0欧电阻选择。4.2 QSPI Flash的电路设计要点QSPI Flash的电路看起来简单就是几根SPI信号线加电源和地但有几个细节容易出问题。首先是Flash的电源通常用3.3V但有些Flash支持1.8V要跟VCCO_MIO的电压匹配。如果VCCO_MIO是1.8V而Flash是3.3V就需要电平转换否则可能通信失败。其次是QSPI的片选信号CSZynq的QSPI控制器支持单Flash和双Flash并行模式。如果只用一片FlashCS要接到Flash的片选引脚同时Zynq的QSPI_CS引脚要配置正确。我见过有人把CS接错了结果Flash识别不到启动失败。还有一点是QSPI的时钟频率Zynq的QSPI控制器最高支持100MHz左右但实际能跑多高取决于Flash芯片和PCB布线。如果布线太长或者阻抗不匹配高速下可能读写错误。我的经验是如果板子不大QSPI走线控制在5cm以内一般跑50MHz没问题。4.3 SD卡启动的配置细节SD卡启动比QSPI简单一些因为SD卡座子通常直接焊在板子上信号线也不多。但有一个关键点SD卡的检测引脚CD和写保护引脚WP如果不用要正确处理否则可能影响启动。CD引脚一般接地或接GPIOWP引脚可以悬空或接上拉。SD卡的电源也要注意Zynq的SD控制器支持3.3V和1.8V两种电压如果SD卡是3.3V的VCCO_MIO对应的Bank要设成3.3V。另外SD卡的时钟线要加串联电阻通常22~33欧姆做阻抗匹配数据线也可以加但要看布线长度。提示SD卡启动时BOOT.bin文件要放在SD卡的第一个分区FAT32格式文件名必须是BOOT.bin大小写敏感。很多人把文件放错分区或者文件名不对结果启动失败查半天以为是硬件问题。4.4 启动失败的排查链路Zynq-7010启动失败的原因很多我一般按以下顺序排查电源是否正常用示波器测每一路电源的电压和纹波特别是VCCPINT和VCCO_DDR。如果纹波超过50mV就要检查去耦电容和DCDC布局。复位信号是否干净测POR引脚的波形看低电平脉冲宽度是否足够上升沿是否干净。启动模式是否正确测MIO[8:7]在复位释放时的电平确认跟设计一致。QSPI/SD卡通信是否正常用示波器或逻辑分析仪抓SPI或SD信号看有没有波形时序对不对。FSBL是否跑起来如果JTAG能连上可以用Vivado的XSCT工具加载FSBL看串口有没有输出。如果有输出但卡在某一步根据输出信息定位问题。这个排查链路看起来简单但每一步都有细节。比如测电源纹波的时候示波器探头的地线要尽量短用弹簧地针否则测出来的纹波大部分是探头引入的噪声。再比如测MIO电平的时候要注意复位释放的瞬间因为MIO在复位期间是输入释放后才变成输出或保持输入。5. 去耦电容配置与PCB布局的实战经验5.1 去耦电容的容值选择和摆放Zynq-7010的电源引脚很多每个引脚旁边都要放去耦电容。但放什么容值、放多少、怎么摆这里面有讲究。我的经验是每个电源引脚放一个0.1uF的陶瓷电容靠近引脚放置每路电源再放几个1uF和10uF的电容做中频去耦整板再放一两个100uF以上的电解或钽电容做低频储能。容值的选择不是越大越好因为大电容的等效串联电感ESL也大高频响应差。所以通常是小电容0.1uF负责高频中电容1uF~10uF负责中频大电容100uF负责低频。摆放的时候小电容最靠近芯片引脚大电容可以远一点。注意去耦电容的接地回路要短最好直接打到地平面不要用长走线。我见过有人把电容放在芯片背面通过过孔连接这样也可以但过孔要足够多一般每个电容至少两个过孔。5.2 PCB叠层与电源平面设计Zynq-7010的PCB至少要用4层板顶层信号、内层地、内层电源、底层信号。如果条件允许用6层或8层更好可以有独立的电源平面和地平面电源完整性更好。4层板的话电源平面要做分割不同电压的区域分开避免相互干扰。电源平面的分割要注意VCCPINT和VCCINT都是1.0V但一个是PS端一个是PL端最好分开走线最后在一点连接。VCCO_DDR是1.5V要单独一个区域。3.3V和1.8V也要分开。分割的时候不同电源区域之间的间距至少20mil避免爬电和耦合。5.3 DDR布线的特殊要求DDR3的布线是Zynq板子设计的难点之一因为DDR的时钟频率高1066Mbps以上对走线长度、阻抗、匹配要求严格。我的经验是DDR的数据线要等长误差控制在±50mil以内地址和控制线也要等长可以放宽到±100mil时钟线要差分走线阻抗100欧姆长度尽量短。DDR的电源去耦也很关键VCCO_DDR的电容要靠近DDR芯片的电源引脚0.1uF和1uF搭配使用。VREF电压通常是VCCO_DDR的一半要用分压电阻产生并加电容滤波VREF的精度直接影响DDR的读写可靠性。6. 常见问题与调试技巧6.1 板子能下载但PS端不跑这是最常见的问题之一。JTAG能识别芯片说明PL端的电源和JTAG电路没问题但PS端不跑通常是VCCPINT或VCCPAUX的问题。先测这两路电源的电压和纹波如果电压对但纹波大检查去耦电容如果电压不对检查DCDC或LDO的反馈电阻。还有一种可能是FSBL的问题。如果FSBL没有正确加载PS端也不会跑。可以用Vivado的XSCT工具手动加载FSBL看串口有没有输出。如果有输出但卡住根据输出信息定位。6.2 SD卡启动偶尔失败SD卡启动偶尔失败通常是复位信号或启动模式配置的问题。先测POR引脚的波形看复位脉冲是否干净。然后测MIO[8:7]在复位释放时的电平确认启动模式正确。如果都没问题可能是SD卡的兼容性问题换一张卡试试。另外SD卡的时钟频率也可以降低试试。Zynq的SD控制器默认频率可能比较高如果SD卡质量一般可能高速下通信失败。可以在FSBL里降低SD时钟频率看是否改善。6.3 QSPI Flash烧写后不启动QSPI Flash烧写后不启动先确认BOOT.bin是否正确烧写到Flash的起始地址。Zynq的QSPI启动是从Flash的0地址开始读如果烧写地址不对肯定启动不了。然后确认QSPI的片选和时钟信号是否正常用示波器抓波形看。还有一个容易忽略的点QSPI Flash的写保护引脚WP和保持引脚HOLD如果不用要接上拉电阻否则Flash可能处于写保护状态烧写不进去。6.4 温度升高后不稳定板子常温能用高温死机通常是电源芯片或DDR的问题。先测高温下各路电源的电压和纹波看是否超标。DCDC芯片在高温下效率下降输出纹波可能增大如果余量不够就会出问题。DDR在高温下刷新率需要提高如果FSBL里没有正确配置DDR参数也可能不稳定。我的经验是电源芯片的余量至少留30%DDR的参数要用Xilinx的DDR配置工具生成不要手动改。散热方面如果板子空间允许加散热片或者用导热垫把热量导到外壳上。7. 个人实操体会与几个实用建议做了这么多Zynq-7010的板子我最大的体会是电源设计和启动配置这两块看起来是硬件的事但实际上跟软件配置紧密相关。电源的余量、复位的时间、启动模式的选择每一个参数都会影响FSBL能不能跑起来、DDR能不能初始化成功。所以硬件工程师和FPGA开发者一定要多沟通不要各做各的。另外调试工具很重要。一台好的示波器带宽至少500MHz、一个逻辑分析仪、一个稳定的JTAG下载器能帮你省很多时间。我刚开始做Zynq的时候用的是一个便宜的示波器测电源纹波的时候总是测不准后来换了好设备才发现问题所在。最后分享一个小技巧如果你不确定电源设计有没有问题可以先做一个最小系统板只焊电源、Zynq芯片、JTAG和串口不焊DDR和Flash先验证PS端能不能通过JTAG加载程序并跑起来。如果能跑再逐步加外设这样排查问题会容易很多。这个办法我用了很多次每次都能快速定位问题是在电源还是在其他部分。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →