FPGA IO bank 与 VCCO:为什么同一个 bank 必须用同一种电平
做数字逻辑时,FPGA 的引脚看起来是"想配什么电平就配什么电平"的:XDC 里一行
set_property IOSTANDARD LVCMOS33,引脚就成了 3.3V;改成LVCMOS18,似乎又成了 1.8V。但工具很快会用一条 DRC 报错提醒你:引脚不是孤立的,它们按 bank 分组,每个 bank 共享一颗叫 VCCO 的电源,同一个 bank 里所有引脚的电平必须一致。 这就是 XDC 管脚约束 背后那条物理约束。
本篇在 FPGA 入门体系里处于"芯片物理结构 → 管脚与板级设计"的衔接位置:前置阅读是 FPGA 芯片结构详解(IOB 在芯片里的位置)与 开发板外设地图(从原理图找引脚和电平);供电全景见 FPGA 供电与散热,上电瞬间的电源爬升与 POR 序列见 FPGA 上电配置时序,约束冲突的实际报错排查见 管脚分配冲突 NSTD-1/UCIO-1。
本文要回答的问题
- 一个 I/O bank 在芯片物理上到底是什么?为什么它要有独立的 VCCO 引脚?
- VCCO 怎么"绑定"一个引脚能用的电平标准?输入缓冲和输出驱动分别受什么影响?
- 同一个 bank 里一半引脚接 3.3V、一半接 1.8V,具体会发生什么?为什么可能闩锁甚至烧脚?
- VCCINT、VCCAUX、VCCO 各管什么?7 系列的 HR/HP bank 与较新器件的 HP/HD bank 差在哪?
- 画原理图和写约束时,划 bank 有哪些硬性规则?工具报 bank 电压冲突时怎么排查?
先用一张封面卡把全篇最核心的判断立住:"同电压进同 bank,不同电压跨 bank"不是工具的人为限制,而是供电结构决定的物理事实。
这张卡左栏是"约束",右栏是"自由":初学者常以为灵活性来自给单个引脚随便指定电平,实际上 FPGA 能在一块芯片上兼容 3.3V、1.8V、1.2V 多种外设,靠的是把引脚切成多个供电独立的 bank,而不是让一个 bank 同时吃两种电压。下面逐节拆开这个供电结构。
一、什么是 I/O bank:按供电边界切分的引脚组
FPGA 的引脚不是散点,而是成组排布在芯片四边的。以 Xilinx 7 系列为代表的主流架构里,每个 I/O bank 是一组相邻的引脚(7 系列多数 bank 含 50 个 I/O)加上它们共享的 I/O 逻辑资源(输入输出缓冲、串行收发器、延迟单元、DCI 端接控制),以及一组从封装引出、专门给这组引脚供电的 VCCO 电源引脚。bank 是芯片物理供电的最小分区单位。
下面这张图把供电关系画成三层:外部电源、芯片内部的全局电源网络、按 bank 独立的 I/O 供电。
读这张图抓住一个对比:VCCINT 和 VCCAUX 是"全网统一"的,全芯片只有一个电压;VCCO 是"每 bank 一路"的,几个 bank 就有几路独立供电。 图里 bank 34 和 bank 35 分别由两路 DC-DC 供电,所以它们能一边工作在 3.3V、一边工作在 1.8V;但 bank 34 内部的几十个引脚没有任何机制再分电源——它们的 VCCO 在封装内部就是同一组金属轨。这就是"同 bank 必须同电平"的物理根源,不是软件约定。
三类电源的分工用一张表固定下来,后续章节都围绕这张表展开。
| 电源轨 | 供电对象 | 电压特点 | 与 I/O 电平的关系 |
|---|---|---|---|
| VCCINT | CLB、BRAM、DSP、布线等全部内核逻辑 | 全芯片统一,具体值随工艺代际降低(查具体型号 datasheet) | 无关,内核永远工作在自己的低压上 |
| VCCAUX | 配置电路、JTAG、辅助与 XADC 等(7 系列为 1.8V) | 全芯片统一 | JTAG 等辅助接口电平由它决定 |
| VCCO | 每个 I/O bank 的输出驱动与大部分输入结构 | 每个 bank 独立一路 | 直接决定该 bank 支持哪些电平标准 |
| VCCBATT(可选) | 加密密钥存储的电池备份 | 电池或接 VCCAUX | 无 |
注意一个常见误解:很多人以为 IOSTANDARD 是纯软件配置,改一行约束就能让引脚"输出 1.8V"。实际上输出高电平的能量来自 VCCO 电源轨——约束只是告诉工具这个 bank 的 VCCO 被板上供成了多少伏,真正提供电压的是原理图上的那路电源。 约束和板上供电不一致时,轻则工具报错,重则引脚工作在错误的直流工作点上。
二、VCCO 如何决定引脚的电平标准
电平标准(如 LVCMOS33、LVCMOS18)规定的是三件事:输出高电平多高、输出低电平多低、输入判决阈值在哪。对 LVCMOS 这类单端标准,三者都直接锚定 VCCO:输出驱动级就是一对从 VCCO 到 GND 的推挽管子,输出高电平约等于 VCCO;输入缓冲的判决阈值也随 VCCO 移动(大致在 VCCO 的一半附近)。因此 LVCMOS33 要求 VCCO 供 3.3V,LVCMOS18 要求 1.8V,这是"标准与电源绑定"而不是"建议"。
把单个 I/O 的内部结构简化画出来,VCCO 在其中同时扮演输出能源和输入参考两个角色。
图里红色路径就是事故路径:当一个 VCCO 供成 1.8V 的 bank,其引脚却被片外 3.3V 器件驱动为高电平时,PAD 电压比 VCCO 高出近一倍,保护二极管(阳极在 PAD、阴极在 VCCO)被正向偏置,电流从外部器件经二极管直接灌进芯片的 1.8V 电源轨。蓝色路径才是正常工作路径:输出高电平由驱动级从 VCCO 取出,输入缓冲按与 VCCO 匹配的阈值采样。正因为输入阈值也锚 VCCO,即便不烧毁,用 1.8V 的阈值去判 3.3V 摆幅、或用 3.3V 阈值去判 1.8V 摆幅,噪声容限也会恶化,时好时坏的通信问题往往由此而来。
常见单端标准与 VCCO 的对应关系如下,具体允许组合以所用器件的 datasheet "I/O Standard" 表为准。
| 电平标准 | 典型用途 | 要求的 bank VCCO |
|---|---|---|
| LVTTL33 / LVCMOS33 | 3.3V 传统外设、GPIO | 3.3V |
| LVCMOS25 | 2.5V 逻辑 | 2.5V |
| LVCMOS18 / HSTL18 类 | 1.8V 外设、部分存储器接口 | 1.8V |
| LVCMOS15 / SSTL15 / HSTL15 类 | DDR3 等 | 1.5V |
| LVCMOS12 / SSTL12 / POD12 类 | DDR3L/DDR4 相关、1.2V 逻辑 | 1.2V |
| LVDS、差分 SSTL/HSTL 等 | 差分传输 | 同样要求特定 VCCO(HR/HP 不同,查手册) |
有一个细节值得提:datasheet 对个别仅作输入使用的低压 LVCMOS 标准会注明在更高 VCCO 的 bank 里也合法(输出驱动关闭时不存在输出摆幅问题),但这是逐标准、逐系列明确列出的例外,不能自己外推成"输入随便混"。差分标准(如 LVDS)对 VCCO 也有固定要求,且 HR 与 HP bank 的数值不同,高速接口 一篇讲到 LVDS 时会展开。
三、混压为什么会闩锁甚至烧脚
上一节的倒灌电流已经能解释"为什么不该混",这一节回答"最坏会怎样"。CMOS 器件的每根引脚内部都存在一个寄生的四层 NPNP 结构,等效为一只两只三极管交叉耦合形成的可控硅(SCR),平时它是断开的。但当引脚上的电压超过 VCCO 一个正向二极管压降(或低于 GND)时,ESD 保护二极管导通,注入衬底的电流恰好构成这只寄生可控硅的触发信号。
一旦触发,VCCO 到 GND 之间出现一条不受逻辑控制的低阻通路,电流急剧增大——这就是 CMOS 的闩锁效应(latch-up)。它不会因为你把外部信号撤掉就自动解除,通常必须断电才能复位;在供电能力足够的板子上,持续的大电流会烧毁引脚的金属连线甚至整片芯片。混接电压的三种典型死法可以对照自查:
| 错误接法 | 直接机理 | 后果 |
|---|---|---|
| 3.3V 输出直驱 1.8V bank 的输入引脚 | 上钳位二极管导通,电流灌 1.8V 轨 | 闩锁、烧脚;1.8V 轨被抬高还可能误伤同 bank 其他单元 |
| 两边都配输出:1.8V 拉高时对侧 3.3V 也在拉高 | 输出管直接对打,低阻穿通 | 两侧驱动级过流损伤 |
| 1.8V bank 引脚去驱动 3.3V 器件 | 一般不烧,但 VIH 不满足对方阈值 | 通信随机失败、噪声容限为负 |
工程上还有一个更隐蔽的变种:带电顺序错误等效于混压。如果某个 bank 的 VCCO 还没上电,而接在它引脚上的外部器件已经在输出高电平,引脚同样处于"电压高于 VCCO"的状态。这也是为什么 FPGA 上电配置时序 要求各电源轨按推荐顺序爬升、外部器件尽量与 FPGA 同时或更晚上电。下面这张时序图把上电阶段各轨与配置逻辑的关系串起来。

读这张时序图要注意最后那条 note 的分量:普通用户 bank 的电平问题可能要等程序跑起来才暴露,配置专用 bank 的 VCCO 一旦与配置 Flash 不匹配,芯片在配置阶段就起不来——现象是 DONE 灯不亮、下载链失败,排查者却容易在逻辑代码里白费功夫。JTAG 接口由 VCCAUX 供电(7 系列即 1.8V 电平),所以下载器一侧的电平要另按 VCCAUX 对接,不能想当然地和某个 VCCO bank 共用。
四、HR/HP 与 HP/HD:不同系列的 bank 性格
"bank 独立供电"是所有现代 FPGA 的共性,但每一代器件对 bank 能承受的电压范围、内置资源做了分级。Xilinx 7 系列把 bank 分两类:HR(High Range,宽电压范围) 支持从 1.2V 到 3.3V 的标准,用来对接种类繁杂的传统外设;HP(High Performance,高性能) 只覆盖较低电压区间(最高到 1.8V 一档),换取更陡的边沿、更精细的 DCI 内部端接和更高的高速串行能力。到了 UltraScale 及更新器件,分级演化为 HP(高性能)与 HD(高密度):HP 延续低电压高速路线,HD 则接过"兼容 3.3V 老接口、引脚多、成本敏感"的角色。
| 对比维度 | HR bank(7 系列) | HP bank(7 系列) | HD bank(UltraScale 起) |
|---|---|---|---|
| 定位 | 宽电压兼容 | 高性能低电压 | 高密度、传统接口兼容 |
| 电压范围 | 1.2V–3.3V | 低压档(最高约 1.8V,查手册) | 覆盖含 3.3V 的宽范围 |
| 典型对接 | GPIO、老款 ADC、各类混杂外设 | DDR、高速并行总线、LVDS | 大量传统外设、低成本 IO 汇聚 |
| 内部端接 DCI | 支持(受电压组合限制) | 完整支持 | 以 HP 为强 |
| 选型直觉 | "什么电平都可能有"的 bank | "上速度"的 bank | "引脚多、要 3.3V"的 bank |
这张表给画原理图阶段一个直接判据:先按外设电压和速度把引脚分成两堆——3.3V/2.5V 的低速外设往 HR/HD bank 放,DDR、LVDS、高速并行口往 HP bank 放,再在同类 bank 内部做电压归组。如果一颗型号的 HP bank 比例很高而板上又有一堆 3.3V 老器件,选型阶段就要么换型号、要么在板上加电平转换芯片,不能等到写约束时才发现"3.3V 引脚无处安放"。国产器件与 Intel(Altera)器件的命名和分组方式不同(如 Intel 用 I/O bank 加电压组的概念),但"按供电分组、同组同压、分组有高速/通用之分"的原则一致,以各家 pinout 和 bank 规则文档为准。
五、工程上怎么划 bank:规则清单与差分对禁忌
把前面的机理落成原理图设计阶段可执行的规则,按重要性排:
| 规则 | 做法 | 违反的代价 |
|---|---|---|
| 同电压同 bank | 先列外设电压清单,按电压把引脚归组再选 bank | DRC 报错;硬件上闩锁烧脚 |
| 差分对不跨 bank | LVDS/SSTL 等差分信号的 P/N 必须落在同 bank 内成对的专用引脚上 | 工具无法放置;强拆则信号失效 |
| 高速同组资源不拆 | 随路时钟、串并转换(SERDES)、DQS/DQ 要落在同一 bank/同一 byte group | 时钟布线不可达或时序无法收敛 |
| 配置 bank 单独核对 | 配置 Flash 的接口电压与该 bank VCCO 一致 | 芯片配置失败、起不来 |
| 端接随标准走 | 使用 DCI 内部端接要占 VRN/VRP 参考电阻引脚,同 bank 标准需兼容 | DRC 报 DCI 冲突,高速信号反射 |
| 预留余量 | 每个电压组留几个同 bank 空脚供改版 | 改版时新加引脚只能飞线或加转换 |
其中差分对跨 bank 是初学者最容易踩的硬约束:差分信号的抗干扰能力依赖 P/N 等长等距、在同一接收电路内相减,芯片只在同 bank 内相邻的引脚对上布置了成对的差分缓冲,工具不会允许把 P 放在 bank 34、N 放在 bank 35。从开发板原理图找管脚 时就应当先确认引脚对的 P/N 标记。DDR 类接口更严格:数据字节组(DQ/DQS/DM)必须整体落在同一 byte group,这类高速接口的 bank 规划在 高速接口 有实例。
真遇到两种电压必须在相邻位置对接的场合,正解只有三个:挪到不同 bank、用支持双电压的器件引脚特性(查手册确认,不能假设)、或在板级加电平转换芯片。串电阻"降压"只能限流不能消除倒灌,不属于可靠方案。
六、约束阶段的典型报错与排查流程
Vivado 不允许在 XDC 里直接命令一个 bank 的 VCCO——VCCO 是板上供出来的,工具的逻辑是:从每个引脚的 IOSTANDARD 反推出整个 bank 应有的 VCCO,发现同一 bank 推出两种电压就报冲突;引脚完全没给标准则报未指定。 这也是 XDC 约束入门 强调"每个端口都要给 PACKAGE_PIN 和 IOSTANDARD"的原因。典型的约束写法如下。
set_property PACKAGE_PIN T19 [get_ports led[0]]
set_property IOSTANDARD LVCMOS33 [get_ports led[0]]
set_property PACKAGE_PIN F17 [get_ports sensor_scl]
set_property IOSTANDARD LVCMOS18 [get_ports sensor_scl]若 led[0] 与 sensor_scl 恰好落在同一 bank,实现阶段就会得到 bank 电压冲突类 DRC;端口完全没约束则是熟悉的 NSTD-1(I/O 标准未指定)和 UCIO-1(端口未约束),二者的完整修复实录见 NSTD-1/UCIO-1 排查篇,Quartus 用户对应的"Can't place pin"银行冲突见 Quartus 管脚放不下排查。排查动作本身有固定路径,按下图分诊即可。
图中红色是入口现象、蓝色是两个排查动作、橙色是修复动作、紫色是防复发沉淀、绿色是收尾通过。实际操作中一个高频误区是只在工具里改 IOSTANDARD 试图"消错":如果板上 VCCO 实际供的是 3.3V,把约束改成 LVCMOS18 只会让报错消失、引脚却工作在错误直流点,问题从编译期转移到上板期——仿真对不等于上板对 里这类"约束与硬件不一致"占了相当比例。记住约束是对板上事实的声明,不是愿望。
FAQ
Q: 一个 bank 真的完全不能混两种电压吗? 对单端输出场景基本如此。唯一例外是 datasheet 逐标准列出的"仅作输入"豁免(个别低压 LVCMOS 输入用于更高 VCCO 的 bank),差分标准另有固定 VCCO 要求。拿不准就按"不能混"设计,永远安全。
Q: 怎么知道某个引脚属于哪个 bank? 查所用封装的 pinout 文件(Xilinx 在器件封装手册或 Vivado Package Pins 视图中给出),引脚名旁会标注 bank 号;开发板则直接看原理图的 bank 标注与 外设地图。
Q: VCCO 是在 XDC 里设置的吗? 不是。VCCO 由原理图电源决定,Vivado 从各引脚的 IOSTANDARD 反推每个 bank 的电压并检查一致性。XDC 能写的是引脚和电平标准,不是供电。
Q: 同一个外设的信号必须放在同一个 bank 吗? 普通 GPIO 不必,按电压归组即可;但差分对、DDR 的数据字节组、带随路时钟的高速并行总线必须成组落在同 bank(甚至同 byte group),因为相关缓冲与时钟资源是按 bank 布置的。
Q: 3.3V 的 bank 能直接收 1.8V 的信号吗? 能通信但阈值裕量差:1.8V 高电平可能落在 3.3V LVCMOS 的判决模糊区附近,温度变化时容易误判。可靠做法仍是让双方同电平,或加电平转换。
Q: HR/HP 和 HP/HD 是一回事吗? 不是同一代命名。7 系列是 HR(宽范围)与 HP(高性能);UltraScale 起是 HP(高性能)与 HD(高密度、承接 3.3V 兼容)。选型时看具体器件手册,不要凭名字猜电压范围。
这一篇在知识体系里的位置
- 供电全景与上游:FPGA 供电与散热 讲全部电源轨、电流估算与散热,本文只聚焦 VCCO 与 I/O 的绑定;FPGA 上电配置时序 展开 VCCINT/VCCAUX/VCCO 的爬升顺序、POR 与 GTS/GWE 序列。
- 约束落地:XDC 约束入门 与 XDC 管脚与时序 教 PACKAGE_PIN/IOSTANDARD 的写法;报错排查走 NSTD-1/UCIO-1 实录 和 Quartus Can't place pin。
- 芯片与板级结构:FPGA 芯片结构详解 给出 IOB 在芯片中的位置;开发板外设地图 教从原理图确定 bank、引脚和电平。
- 高速延伸:高速接口 LVDS/SERDES/DDR 讲差分标准、byte group 与内部端接的实战;仿真对不等于上板对 解释为什么约束与硬件不一致的问题仿真发现不了。
总结
FPGA IO bank 与 VCCO 的全部规则可以浓缩成供电结构一句话:bank 是 FPGA 按电源边界切分的引脚组,同组共享一路 VCCO,输出高电平的能量和输入判决阈值都锚在这路电源上,所以同一 bank 只能服务一种电压,不同电压必须放进 VCCO 各自独立的不同 bank。 违反这条约束时,高电压会经引脚的钳位二极管向低电压轨倒灌,触发 CMOS 寄生可控硅造成闩锁甚至烧脚,电源顺序错误也会造成同样的过压状态。工程上记住四件事:原理图阶段先按电压和速度归类外设、再分配 HR/HP(或 HD/HP)bank;差分对和高速字节组必须成组留在同 bank;XDC 的 IOSTANDARD 是对板上 VCCO 事实的声明而不是软件开关;DRC 报 bank 电压冲突时按"列清单 → 判混压 → 改约束或查供电"分诊,别靠改标准掩盖硬件不一致。