ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Kintex-7 FPGA板级原理图实战:电源、时钟与高速接口设计

Kintex-7 FPGA板级原理图实战:电源、时钟与高速接口设计 第一次看到 S4-FPGA-K7 这个命名我基本能判断出它的定位一块以 Xilinx Kintex-7 系列为核心的中端 FPGA 板卡前面那个 S4 大概率是项目或板卡编号。K7 这个档位很有意思它夹在低成本的 Artix-7 和高端的 Virtex-7 之间逻辑资源、DSP 切片、以及 GTX 高速收发器的数量都到了一个能做正经事的水平价格又还没到让人肉疼的程度。所以围绕它做板级原理图硬件实战是很多人从点灯玩家往系统设计者跨越的必经一站。我写这篇东西不是要给你一份器件手册的中译版而是想把一块 K7 板子从需求到原理图、从电源树到高速接口、从画图到上电调试的完整链路拆开来讲。适合两类人一类是刚接触 FPGA 硬件、手里攥着原理图却不知道每个电阻电容为什么这么放的新人另一类是做软硬结合、想把板子当成自己系统底座的中级工程师。全程我会夹带大量实际踩过的坑因为板级原理图这个东西的残酷之处在于——画错一根线可能要用一个月去查。下面直接进正题。1. 先想清楚这块板子为谁而做K7板级设计的整体架构1.1 从应用需求倒推硬件规格我见过太多人一上来就打开原理图软件先摆一个 FPGA 符号在正中间然后开始接外设。这是典型的顺序错误。板级原理图硬件实战的第一步永远不是画图而是写清楚这块板子要干什么。K7 这种量级的器件你多挂一路 DDR3、多引一组 GTX都会牵动 Bank 分配、电源轨数量、层叠结构牵一发动全身。我的习惯是先在纸上列一张功能-接口-资源对照表。比如你打算做图像处理那 K7 至少要有足够 BRAM 做行缓存要有一路高速接口接摄像头或者 ADC如果你做的是工业测控那重点可能是多路 LVDS、AD7606 这类并口 ADC、以及一大堆 GPIO 隔离。需求不同硬件规格天差地别。下面这张表是我在几个 K7 项目里反复用过的需求推演模板你照着填基本不会漏功能模块对应资源硬件接口是否必须备注主控K7 器件型号—是决定封装与 Bank 数配置存储SPI FlashSPIx4是上电自动加载掉电易失外存DDR3存储 Bank视需求影响 PCB 层数高速数据GTX 收发器差分对视需求需专用电源调试JTAG14 针是必备时钟晶振/差分MRCC/SRCC是决定时钟树把这张表填完你才知道自己要选什么封装。K7 常见的 FFG、FBG 封装里Bank 数量和 GTX 通道数差异很大选大封装结果一半 IO 空着是浪费选小了 IO 不够用那只能重画。所以器件选型本质上是需求-封装-价格的三角平衡不是越贵越好。1.2 K7器件选型、封装与Bank规划Kintex-7 的 Bank 结构是理解整个原理图的钥匙。每个 I/O Bank 有独立的 VCCO 供电这意味着同一个 Bank 里的所有 IO 电平标准必须兼容。很多人第一次画图把一个 Bank 里一半接 3.3V 外设、一半接 1.8V 外设结果 VCCO 只能选一个值剩下的全废了。这是新手最常见的群死事故。我的做法是先按电平标准给外设分组再往 Bank 上贴。3.3V 的常规 GPIO、SPI、UART 放一组1.8V 的 DDR3 相关信号单独占 Bank高速差分对必须落到带 GTX 或者 HR/HP Bank 的专用引脚上。这里有个关键细节——HPHigh PerformanceBank 支持更高频率和更多电平标准HRHigh RangeBank 支持的电平范围更宽但速率略低。DDR3 最好挂在 HP Bank 上而普通慢速 IO 挂在 HR Bank 上就行。还有一个绕不开的点是配置引脚。K7 的配置相关引脚分布在 Bank 0 和 Bank 14/15像 CCLK、DONE、PROGRAM_B、INIT_B 这些它们的上拉、下拉电阻是硬性要求不能省。我踩过的坑是DONE 引脚忘了上拉结果配置完成后 FPGA 不进入用户模式死活不工作查了两天才发现是一颗 4.7k 电阻的锅。所以 Bank 规划的时候把这些特殊引脚单独圈出来画图时重点核对。1.3 原理图的模块化拆分思路我的原理图从来不画成一张大图。K7 这种板子我会拆成电源页、配置与时钟页、存储页、高速接口页、低速外设页、连接器页这么几大块。模块化不是为了好看是为了可维护和可复查。当你后面要改一个 DDR3 的终端电阻或者换一颗 Flash你只需要动一个页面网表关联关系一目了然。每页之间用一个统一的页间连接符系统命名规则统一比如所有电源网络用P3V3、P1V0这种前缀所有时钟用CLK_前缀所有复位用RST_前缀。这样做的好处是等你导出网表跑规则检查ERC的时候命名混乱导致的假连接会少一大半。我个人的经验是命名规范定得越早后面返工越少这块投入的回报率极高。2. 电源树FPGA板级原理图里最不能省心的地方2.1 把电压轨一条条拆开K7 的电源轨比很多人想象的复杂。你以为 FPGA 就一个核心电压错了。一颗 K7 身上常见的电压轨至少有VCCINT核心通常 1.0V、VCCBRAM块存储1.0V、VCCAUX辅助1.8V、VCCAUX_IOIO 辅助1.8V 或 2.0V、以及各个 Bank 的 VCCO。如果用到 GTX 收发器还要额外加 MGTAVCC1.0V和 MGTAVTT1.2V。XADC 如果用还要 VCCADC1.8V。这么一算七八条轨是常态。我把这些轨整理成下面这张表方便你画电源页的时候对照。注意电压值是典型值具体要以你选的器件和速度等级的数据手册为准不同等级可能有细微差异电源轨典型电压用途备注VCCINT1.0V内核逻辑电流最大VCCBRAM1.0V块 RAM常与 VCCINT 共用VCCAUX1.8V辅助电路敏感需干净VCCAUX_IO1.8V/2.0VIO 辅助视速度等级VCCO1.2/1.5/1.8/2.5/3.3VIO 供电按 BankMGTAVCC1.0VGTX 核心仅带 GTX 时MGTAVTT1.2VGTX 终端仅带 GTX 时VCCADC1.8VXADC使用 XADC 时理解这张表的关键在于谁能共用、谁必须独立。VCCBRAM 和 VCCINT 都是 1.0V如果电流预算允许可以合并成一条轨省一个电源芯片。但 VCCAUX 必须独立而且对噪声极其敏感因为它给内部的配置电路、时钟管理提供参考脏了会直接导致时钟抖动变差、配置不稳定。我一般会给 VCCAUX 单独配一颗低噪声 LDO而不是图省事从大电流 DCDC 上分。2.2 上电时序与使能链设计这是 K7 板级设计里最容易被忽视、后果又最严重的一环。Xilinx 7 系列有明确的上电顺序推荐VCCINT → VCCBRAM → VCCAUX → VCCAUX_IO → VCCO。如果用到 GTX还有 MGTAVCC → MGTAVTT 的顺序。为什么要有顺序因为如果辅助电压比核心电压先建立FPGA 内部的一些结构可能进入不确定状态长期这么用会造成漏电甚至损伤。那怎么实现顺序上电有两种常见做法。第一种是用带 Power GoodPG信号的电源芯片把前一级的 PG 接到后一级的 EN 使能脚形成级联的使能链。这种方法简单可靠缺点是一级有问题后面全起不来排查时要有耐心。第二种是用专门的时序控制芯片或者 CPLD 做上电管理灵活性高但成本也高。对于 K7 这种板子我通常用第一种够用且便宜。这里有个细节很多人忽略使能链的 RC 时间常数要留够。我见过有人把前级 PG 直接怼到后级 EN中间没有任何延时结果因为前级电压还没完全稳定就触发了后级上电瞬间电流冲击很大。我的做法是在 EN 脚上加一个 RC 延时网络让后级电压晚几十毫秒建立给前级留出裕量。这个几十毫秒的延时对整个系统启动几乎无影响但能显著提升上电可靠性。2.3 DCDC/LDO选型与去耦布局选电源芯片的核心是两个数字输出电压和最大电流。输出电压上面说了最大电流要靠 Xilinx Power EstimatorXPE或者 Vivado 的综合报告去估。我的经验是估算出来的电流乘个 1.3 到 1.5 的裕量因为实际运行中动态功耗会随逻辑翻转率波动满载时往往比静态估算高。VCCINT 这条轨尤其要注意它往往是整板电流最大的动辄几安培必须用大电流 DCDC。DCDC 和 LDO 怎么选简单说DCDC 效率高、能出大电流但有开关噪声LDO 干净、纹波小但效率低、发热大。所以常见策略是大电流、对噪声相对不敏感的轨VCCINT、VCCBRAM用 DCDC小电流、对噪声敏感的轨VCCAUX、VCCADC用 LDO。如果预算允许甚至在 DCDC 后面再串一级 LDO 做二次稳压把纹波压下去。去耦电容的布局是另一个战场。K7 的数据手册会给出每个电源引脚推荐的去耦电容值和数量比如 0.1uF、0.01uF、甚至 1uF 混用。这些东西不是随便加的它们各自负责不同频段的噪声旁路。小电容0.01uF、0.1uF离引脚越近越好负责高频大电容10uF、100uF可以稍远负责低频和储能。我习惯是每个电源引脚旁边必放一个 0.1uF这是底线不能省。然后在电源入口附近放一批大电容做整体储能。画 PCB 的时候这些电容的回路面积要尽量小否则高频去耦效果会打折扣。提示电源页画完后一定要拿一颗红笔在原理图上把每条轨的电流来源标注出来从哪颗芯片出来、经过哪个电感、到哪个引脚。我靠这个习惯在评审时抓出过好几次某条轨没接电源的低级错误。3. 时钟与配置让FPGA活过来的两条命脉3.1 时钟树规划时钟是数字系统的心跳K7 的时钟资源分为 MRCC区域时钟和 SRCC本地时钟只有特定引脚才能接入时钟管理单元MMCM/PLL。所以在原理图阶段你就必须确定哪些引脚是时钟输入接的是单端还是差分。差分时钟比如 LVDS抗干扰好、抖动低高速设计里优先用普通低速场景用单端晶振也就够了。我一般在板子上放至少两路时钟一路给系统主时钟比如 100MHz 或 200MHz 差分晶振接到 MRCC 引脚另一路给外设或者低速逻辑用一颗 25MHz 或 50MHz 的单端有源晶振。为什么不都用无源晶振加 FPGA 内部反相器因为内部反相器驱动的晶振起振可靠性不如有源晶振尤其是那些对启动时间有要求的场景。有源晶振贵一点但省心。时钟信号的走线在原理图上虽然只是几根线但有几个电气细节要注意。如果用的是差分晶振它的输出端通常需要终端匹配通常是在接收端加 100 欧姆差分端接或者按晶振手册要求来。单端晶振输出一般需要串一个 33 欧姆左右的电阻做源端匹配抑制过冲。这些细节手册里不一定写得清楚但实际调试时差别很明显。3.2 配置电路与FlashK7 是 SRAM 型 FPGA掉电即失所以必须有外部配置存储。最常用的方案是 SPI Flash上电时 FPGA 通过 SPI 接口把配置数据读进来。配置模式由 FPGA 的 MODE 引脚决定主 SPI 模式是最常见的。下面这张表把几种模式的特点列一下方便你对号入座配置模式数据来源速度适用场景主串外部 Flash中小容量简单板主 SPISPI Flash高主流方案主 BPI并行 Flash很高大容量配置JTAGPC 下载低调试从模式外部主控视情况多 FPGA 系统主 SPI 模式下Flash 的选型要考虑容量和速度。K7 的配置文件大小跟逻辑容量有关逻辑越多的器件配置数据越大Flash 容量要留够裕量。另外 Flash 的 SPI 时钟频率会影响配置时间如果你对启动时间敏感选支持高速读的 Flash并在 FPGA 约束里把配置时钟调高。配置引脚的处理是有严格要求的。PROGRAM_B 需要上拉DONE 需要上拉INIT_B 需要上拉MODE 引脚按你所选的模式上拉或下拉。这些电阻不是可选项是必须项。我前面说的 DONE 忘了上拉导致不工作的坑就是这里。另外 CCLK 是配置时钟在从模式下由外部提供主模式下由 FPGA 输出两个方向的接法不一样画图时务必确认你的模式。3.3 复位设计与亚稳态复位信号看起来简单其实藏着大坑。K7 的复位通常分外部复位和内部上电复位POR。外部复位可以接一个按键或者一个复位芯片内部 POR 由 FPGA 自己管理。我做设计时一般会用一颗专用的复位芯片比如带延时的监控芯片它能在电源稳定后延迟一段时间再释放复位避免电源还没稳就放开复位导致逻辑乱跑。这里就涉及复位信号的亚稳态问题。如果复位信号是异步的释放时又恰好落在时钟的建立/保持窗口附近就可能产生亚稳态让后级寄存器进入不确定状态。标准的解决方法是做异步复位、同步释放复位信号先异步拉低立即复位释放时用两级触发器同步到时钟域让它干净地、与时钟对齐地释放。这个电路在原理图上需要外部晶体管或者 FPGA 内部的触发器实现。如果你用外部复位芯片加 FPGA 内部同步是最稳的组合。注意不要把复位信号和时钟信号在 PCB 上走成并排长距离平行线容易耦合。复位走线尽量短必要时加个下拉电容滤毛刺但要小心别把边沿弄得太缓。4. 存储与高速接口DDR3、LVDS、I2C/SPI怎么画才不出事4.1 DDR3接口DDR3 是 K7 板子上最容易翻车的高速接口。它的信号分几类地址/命令、数据 DQ、数据选通 DQS、时钟 CK、以及各种控制信号。每一类都有对应的终端和布线规则虽然布线主要归 PCB 管但原理图阶段的端口定义和终端电阻配置决定了后面能不能布通。DDR3 的电源也不省心它需要 1.5V 的主电压和 0.75V 的 VTT 终端电压还有 0.75V 的 VREF 参考电压。VTT 通常用专门的终端稳压器产生能拉能灌因为 DDR3 的 DQ、DQS、地址线的终端电阻都要靠它。VREF 则要求非常干净一般用分压加滤波产生精度要控制在 1% 以内。画 DDR3 的时候我会把 FPGA 侧和 DDR3 颗粒侧的所有引脚在原理图上按组列出确保每一组 DQ 对应的 DQS 是配对的。K7 对 DQS 和 DQ 的分组有要求同一组的信号必须落在同一个 Bank 的同一字节组里画错了后面软件就没法自动校准。这个细节建议在画原理图时就对照数据手册的引脚定义逐个核对不要等到 PCB 阶段才发现。4.2 LVDS与GTX高速LVDS 在 K7 上主要用于差分信号传输比如连接 ADC、摄像头或者做板间互联。它的原理图要注意两点一是 LVDS 接收端通常需要 100 欧姆差分端接很多 FPGA 的差分输入对内部可以开启端接也可以外部加看你选哪种二是差分对的两根线在 FPGA 侧必须落在支持差分标准的引脚对上P/N 配对。如果用到 GTX 收发器那就是更高速的领域。GTX 有专用的供电前面说的 MGTAVCC、MGTAVTT和专用的参考时钟输入。GTX 的参考时钟通常要求是低抖动的差分时钟最好是专门给收发器配的晶振别拿普通时钟凑合。另外 GTX 的差分对在原理图上要连接到对应 Quad 的 TX/RX 引脚上不同 Quad 之间的参考时钟不能随意借用。我在一个项目里想省一颗晶振把 GTX 参考时钟从旁边的逻辑时钟引过来结果眼图很差最后老老实实加了专用时钟。高速接口还有一个容易忘的点是 AC 耦合电容。很多高速串行协议要求发送端或接收端加交流耦合电容容值一般在 0.1uF 左右具体看协议。这个电容如果不加某些链路可能起不来或者只能低速勉强工作。4.3 低速外设I2C/SPI/EEPROM低速外设看似简单但恰恰是调试时最常出问题的地方。I2C 需要上拉电阻阻值一般在 2.2k 到 10k 之间取决于总线电容和速率。阻值选大了上升沿变缓选小了功耗上升我一般用 4.7k 做默认值。SPI 相对简单但要注意片选、时钟极性相位这些软件层面的配置和硬件匹配。我习惯在板子上放一颗 EEPROM用来存板卡信息、MAC 地址或者校准参数。I2C EEPROM 是最常见的选择接线简单占用 IO 少。但要注意 EEPROM 的写保护引脚WP怎么处理如果不需要写保护拉低即可如果需要保护可以接到一个 GPIO 上由软件控制。这个引脚悬空有时候会导致行为不确定别偷懒。5. 从原理图到PCB协同与约束传递5.1 封装库与网表管理原理图再漂亮封装错了也是白搭。K7 这种 BGA 封装的器件引脚间距很小球数动辄几百上千封装库必须从官方或者可靠渠道获取自己画容易出错。我的习惯是器件选型定下来后第一件事就是去下载官方封装核对引脚数量和排列然后做一次脚位自检。网表管理是连接原理图和 PCB 的桥梁。导出网表前一定要跑一次完整的电气规则检查ERC把悬空引脚、单点网络、电源冲突都查一遍。K7 有很多看起来没用的引脚比如某些保留引脚、配置相关的引脚它们的处理方式决定了板子能不能正常工作。我在 ERC 规则里会把这些特殊网络单独标记人工复查。5.2 FPGA与PCB的互动FPGA 设计和 PCB 设计不是上下游的串行关系而是频繁互动的并行关系。K7 的引脚分配直接决定了 PCB 能不能布通尤其是 DDR3 和高速差分对如果 Bank 分配不合理后面走线会非常痛苦。所以我在画原理图的时候就已经和 PCB 工程师一起把关键信号的引脚位置定了下来而不是等原理图画完才甩给 PCB。具体做法是先出一个初步的引脚分配表标出哪些是高速组、哪些是低速组、哪些有布线长度匹配要求。PCB 工程师根据这个表规划层叠和走线策略如果有冲突回头调整引脚分配。这个来回可能要几轮但比画完再改要省得多。尤其是 DDR3地址线和数据线的等长要求、差分对的间距要求都得在原理图阶段就心里有数。5.3 上电调试思路板子回来以后别急着插电先做目测检查和短路测量。用万用表量一下各条电源轨对地是否短路尤其是 VCCINT 这种大电流轨如果短路直接上电会烧芯片。确认没问题后先只上一路电源量电压是否正常再逐路上电观察电流是否合理。K7 空载和配置完成后的电流差别明显可以通过电流变化判断它有没有正常启动。上电之后连 JTAG用下载工具检测器件 ID。如果连 ID 都读不到问题多半在配置电路、电源或者 JTAG 链路。如果 ID 能读到但配置失败重点查 Flash 和配置模式引脚。这部分排查我后面单独列一个表。6. 踩过的坑与实操心得速查硬件调试最耗时的不是设计是排查。我把 K7 板级项目里反复出现的问题整理成下面这张速查表遇到现象先对号入座能省下大把时间现象可能原因排查方向JTAG 读不到 ID电源未上/时钟缺失量各轨电压查 JTAG 链路配置失败DONE 未上拉/MODE 错查配置引脚电阻与模式时钟抖动大VCCAUX 噪声检查去耦与 LDODDR3 校准失败Bank 分配错/DQS 配对错对照手册核对引脚上电偶发不启动时序链延时不足加大 EN 脚 RC 延时复位后逻辑乱跑复位亚稳态改为异步复位同步释放GTX 眼图差参考时钟抖动大换专用低抖动时钟I2C 通信失败上拉阻值不当调整上拉到 4.7k 附近这张表里的每一条我几乎都亲自踩过。印象最深的是上电偶发不启动那条一块小批量试产的板子十次里有两次起不来刚开始以为是 Flash 问题换了几批 Flash 都没用最后拿示波器盯着上电过程看才发现是使能链延时太短后级在电源还没稳的时候就启动了。加了个 RC 延时后二十次连续上电全部成功。提示调试阶段一定要准备一份上电检查清单每次上电前照着走一遍比凭记忆靠谱得多。清单不用复杂就是把电源电压、关键网络、跳线状态这几项列出来打钩。我个人在实际操作中的体会是K7 板级设计真正难的地方从来不是某一个器件有多复杂而是系统性三个字。电源、时钟、配置、复位、接口它们彼此关联一个环节没想清楚问题就会以各种奇怪的现象冒出来。把每一根线背后的为什么想明白比记住一堆标准电路有用得多。你也许会在某个深夜对着示波器上一条抖动的时钟发愁但只要顺着 VCCAUX、去耦、走线这条线索捋下去答案往往就在其中。
返回列表