FPGA 配置方式有哪几种:JTAG、主串 SPI、SelectMAP 与 BPI 的主从模式全解
入门阶段你大概率只用过两种动作:插着下载器点 Program Device,或者往板载 QSPI Flash 里烧一个镜像。等到自己画板子、做多 FPGA 板卡、或者排查「JTAG 能跑、上电起不来」的问题时,就必须回答一个更底层的问题——FPGA 配置方式有哪几种,谁在驱动配置时钟,比特流沿着哪几根引脚流进芯片。本篇是 FPGA 配置机制的枢纽概念文:操作层面的下载与固化步骤见 FPGA 入门 32:比特流下载与固化,本文只讲机制本身;JTAG 链的多器件级联细节同簇另有专文展开,这里点到为止。
这张对比卡是全篇的地图:无论厂商把模式写得多花哨,配置入口都收在这三列里。记住「谁发时钟谁是主」这一条判据,JTAG 走独立 TCK 不参与主从之分,后面所有模式的接线差异都能自己推出来。
本文要回答的问题
- 为什么 FPGA 每次上电都必须重新配置?配置数据在芯片内部到底存在哪里?
- 模式脚(Xilinx 的 M[2:0]、Intel 的 MSEL)怎样决定配置方式,上电瞬间芯片在哪里「分叉」?
- JTAG、Master Serial/SPI、Slave Serial、SelectMAP 主并/从并、BPI 各自占用哪些引脚、配置时钟谁来发、速度差多少?
- 上电后配置过程按什么顺序推进,DONE、INIT_B、PROGRAM_B 三个状态脚分别能告诉你什么?
- 量产、调试、多 FPGA 板级联三种场景分别该选哪种配置方式,常见的启动失败坑在哪?
一、配置是什么:SRAM 工艺决定的「每次上电重新组装」
主流 FPGA(Xilinx 7 系/UltraScale、Intel Cyclone/Arria 等)是 SRAM 工艺器件:LUT 的真值表、布线开关的通断、IOB 的极性,全部由片内海量的配置存储单元(configuration memory cell)决定,每个单元本质上是一个小型 SRAM 锁存器。一颗中端器件的配置点数以千万计,比特流(bitstream)就是按厂商帧格式排列的这张 0/1 配置表。
SRAM 工艺带来一个根本后果:掉电即失,上电时空。与 MCU 从片内 Flash 取指执行不同,FPGA 上电后内部没有任何既定逻辑,必须先经历一次「配置」——把比特流逐帧写进配置 SRAM,写完全局释放,芯片才在物理上「成为」你设计的那块电路。这也解释了为什么配置接口是一颗独立于用户逻辑的硬核:配置电路要在 FPGA 「什么都不是」的时候就能工作,它有自己的状态机、引脚和时钟通路,不受设计内容影响。
由此可以推出配置接口必须回答的三个工程问题:
- 比特流放哪——下载器直写,还是板上非易失存储器(串行/并行 Flash);
- 谁发时钟——FPGA 内部振荡器/分频产生 CCLK 主动去读,还是外部 CPU、另一颗 FPGA 按时钟喂入;
- 数据走多宽——1 位串行,还是 8/16 位并行。
三个问题的不同取值组合出全部配置模式,模式脚的作用就是在上电时告诉配置状态机「按哪套组合工作」。
二、模式脚怎么决定配置方式:M[2:0] 真值表
FPGA 上有一组专用的模式输入脚,在配置期间被采样,决定本次上电的配置通道。Xilinx 器件称为 M[2:0] 三根脚(部分新器件为 M[1:0]),Intel 器件称为 MSEL 一组脚,名称不同、机制相同:它们只在配置流程早期被采样一次,采样后配置接口即锁定到对应模式。
下面给出 Xilinx 7 系为代表的典型编码分布(具体编码与保留组合随器件族变化,Intel 用 AS/PS/FPP/JTAG 另一套命名,设计时必须以对应器件的配置用户指南为准):
| M[2:0] 典型区间 | 配置模式 | 主/从 | 数据宽度 | 典型对接对象 |
|---|---|---|---|---|
| 000 附近 | Master Serial(串行主模式,老器件为主) | 主 | 1 位 | 串行配置存储器 |
| 001 附近 | Master SPI | 主 | 1/2/4 位 | QSPI Flash(量产最常见) |
| 010 附近 | Master BPI(并行 Flash 主模式) | 主 | 8/16 位 | 并行 NOR Flash |
| 011 附近 | Master SelectMAP | 主 | 8/16 位 | 并行存储器/从设备 |
| 100/101 附近 | Slave SelectMAP / Slave Serial | 从 | 8/16 位或 1 位 | CPU、CPLD、另一颗 FPGA |
| 110/111 | JTAG | — | 1 位(JTAG 串行) | 下载器/边界扫描链 |
读这张表抓住两点:一是高位为 0 的组合基本是「主」、高位为 1 落到「从」,JTAG 占据末段编码;二是 JTAG 实际拥有最高优先级——即使模式脚设在别的模式,只要 JTAG 接口发起配置请求,配置控制器会响应 JTAG,这正是量产板只焊了 Flash、开发时却照样能插下载器调试的原因。
工程上三个模式脚必须有确定电平:直接上拉/下拉、用跳线或拨码切换,不能悬空。配置期间它们是专用脚,配置完成后部分器件允许复用为普通 I/O,但上电采样瞬间的电平必须可靠,这是「跳线碰一下就起不来」类故障的根源。Intel 侧对应概念是 Active Serial(AS,主动串行)、Passive Serial(PS,被动串行)、Fast Passive Parallel(FPP,快速被动并行)与 JTAG,主从语义与上表一一对应。
三、JTAG:与模式脚正交的调试入口
JTAG 本是为边界扫描(boundary scan)制定的板级测试标准(IEEE 1149.1),四根线:TCK(测试时钟)、TMS(测试模式选择)、TDI/TDO(测试数据入/出),多颗器件可以首尾串成一条 TDI→TDO 链。FPGA 厂商把配置下载复用进了 JTAG 的 TAP 状态机:下载器通过厂商自定义指令把比特流当扫描数据移位写入配置 SRAM,时钟 TCK 完全由下载器提供。
JTAG 通道有三个鲜明特征。其一,即下即跑、掉电即失——数据只进配置 SRAM,不碰外部 Flash,适合一天下载几十次的开发循环。其二,与启动模式正交——板子按主 SPI 正常启动后,仍可随时插下载器打断、重配,调试完断电重启又回到 Flash 镜像。其三,天然支持多器件链——板上 FPGA、CPLD、处理器挂在同一条扫描链上,靠链上位置(IR 长度)寻址。
也因为它是调试入口而非量产通道,JTAG 配置速度并不占优:TCK 频率受下载器和链路完整性限制,实际搬数速率通常为每秒兆位到十几兆位量级,搬一颗大器件往往要数秒到数十秒;它的价值在方便,不在快。JTAG 链的级联接线、链长配置、多器件寻址与常见下载器故障,同簇有一篇 JTAG 链概念专文(尚未发布)展开,遇到「cable not detected」类问题可先看 下载器连不上的排查。
四、主串、从串与 SPI Flash:一根 DIN 线的两种时钟方向
串行模式只用一根数据线传比特流(控制脚另算),差别只在 CCLK 谁发。
Master Serial(主串)/ Master SPI 是成品设备的绝对主流:FPGA 内部配置时钟发生器产生 CCLK,主动为外部存储器提供时钟与读控制。老的主串模式对接厂商专用串行配置 PROM;当代设计几乎统一为 Master SPI——直接对接标准 SPI/QSPI NOR Flash,FPGA 充当 SPI 主机,发出时钟与命令、按地址读出比特流,数据位宽支持 x1/x2/x4,接 4 线 QSPI Flash 时有效带宽成倍提升。Flash 里存什么、怎么烧,见 比特流下载与固化。
Slave Serial(从串) 则反过来:CCLK 由外部主控(CPU、CPLD 或另一只已配好的 FPGA)驱动,主控在每个时钟沿把 1 位数据送上 DIN。FPGA 完全被动,像一个移位寄存器。这种模式在现代单板上少见,但在「一只主 FPGA 配置多只从 FPGA」的菊花链里仍有用武之地。
这张拓扑对比图里,橙色一侧是主模式:FPGA 是发起方,Flash 只是被动仓库,板上不需要任何智能器件就能完成自启动;绿色一侧是从模式:外部主控是发起方,它决定配什么、何时配、甚至可以在运行中重配。选型本质是在选「智能放在板级还是放在 FPGA 侧」。
五、SelectMAP 主并/从并与 BPI:用引脚换速度
串行 1 位通道对大容量器件偏慢,于是有了并行接口族。
SelectMAP 是 Xilinx 的并行配置接口(Intel 对应的被动并行口称 FPP),数据宽度 8 位或 16 位,配合 CCLK 每个时钟搬一个字节甚至一个字,理论数据率是同频串行的 8 至 16 倍,大器件整盘配置时间可以从秒级压到几百毫秒量级(实际随器件容量、CCLK 档位和 PCB 质量变化,这里只给定性量级)。它分两种:Master SelectMAP 由 FPGA 发 CCLK 去读并行存储设备,当代设计很少使用;Slave SelectMAP(从并) 由外部主控驱动 CCLK 和数据总线,是并行模式里真正有生命力的一种——板载 CPU 或主 FPGA 可以把多颗从 FPGA 的数据总线并接、用片选分别配置,实现多板/多器件的同步配置与在线重配。代价是引脚开销大:8 位数据总线加一组控制脚(CS_B、WRITE、RDWR、BUSY/READY 等),布线和时序裕量都比串行讲究。
BPI(Byte Peripheral Interface) 是 Xilinx 对接标准 并行 NOR Flash 的主模式接口:FPGA 输出完整地址总线(A0–A25 之类)、8/16 位数据总线和读控制,像普通异步存储器总线一样直接寻址 NOR Flash。NOR Flash 容量大、随机读快、可原地执行,曾经是大比特流和多镜像启动(multiboot)的首选;随着 QSPI Flash 速率和容量追上来、且 BPI 占用二三十根引脚,新设计已明显向 Master SPI 倾斜,BPI 主要留在存量板卡和需要并行 NOR 特性的场合。
| 对比项 | Master SPI | BPI | Slave SelectMAP | JTAG |
|---|---|---|---|---|
| 谁发时钟 | FPGA | FPGA | 外部主控 | 下载器(TCK) |
| 数据宽度 | x1/x2/x4 | x8/x16 | x8/x16 | 1 位 |
| 外部器件 | QSPI NOR Flash | 并行 NOR Flash | CPU/主 FPGA | 下载器 |
| 专用引脚量级 | 约 4–6 根 | 20–40 根 | 10–20 根 | 4 根(可复用扫描链) |
| 速度量级 | 中(x4 已很快) | 高 | 高 | 低到中,胜在方便 |
| 典型角色 | 量产自启动 | 存量/大多镜像 | 多器件/在线重配 | 开发调试 |
表中引脚数为量级概念,具体数字随器件族与是否复用状态脚而变;速度排序在多数家族上稳定成立,但具体 CCLK 上限必须查对应数据手册,不要跨系列套用。
六、配置过程时序:从上电到用户逻辑苏醒
不管走哪种模式,配置控制器内部都跑着同一条状态机。下图画出主干阶段与三个状态脚介入的位置:
读这张图时按颜色跟随角色:灰色是起点,蓝色是芯片内部准备动作,红色两处是「分叉」与「体检」——模式采样决定走哪条通道,CRC 决定配置数据是否被接受;橙色是耗时最长的搬数阶段;绿色 DONE 是硬件工程师在示波器上最常盯的跳变点;紫色 STARTUP 才轮到用户逻辑登场。各阶段配合三个专用状态脚:
- INIT_B(开漏,低有效):上电后芯片在内部清除配置存储器期间主动拉低,清除完毕后释放(通常经外部电阻上拉);若配置过程中检测到 CRC 错误或同步失败,芯片会再次把 INIT_B 拉低报错。所以「INIT_B 一直低」首先怀疑电源或清除阶段,「INIT_B 先高后变低」基本指向比特流/模式错误。
- DONE(开漏):配置帧全部接收且校验通过后,在 STARTUP 序列中被释放拉高,指示「配置成功」。DONE 不亮是启动失败的第一观察点,板子上那颗 DONE 灯就是接它。
- PROGRAM_B(低有效输入):外部把它拉低会强制芯片重新清存储器、重新走一遍配置流程,相当于给配置电路单独装了一个复位键;复位按键常接到这里。
配置失败时的分诊顺序自然就是沿这张图从后往前截断:DONE 没高看 INIT_B 是否报错,INIT_B 报错先怀疑模式脚与镜像,INIT_B 不高先查电源与 PROGRAM_B 电平。真实的上电不启动案例可对照 Flash 启动失败排查。
七、选型决策与工程坑
五种模式听起来多,工程选型其实是一棵很简单的决策树:

按这张思维导图收敛:绝大多数产品板只需要「JTAG 留一个调试口 + Master SPI 接一颗 QSPI Flash」这一对组合;只有多器件同步配置、处理器在线管控 FPGA 的场景才引入从并;BPI 出现在继承性设计里;从串是菊花链的串行变体。
工程实践中反复出现的坑有五个:
- 模式脚悬空或被外设拉偏。M[2:0] 上电采样时电平不确定,配置就进入随机模式;同一引脚若被其他器件强驱动(典型是和 Flash 片选复用冲突),也会采样失败。
- 镜像接口属性与板级不符。Master SPI 烧录镜像时选的位宽(x1/x4)、Flash 容量、起始地址必须和实际器件一致,否则 FPGA 能发时钟却读不到有效同步字,INIT_B 报错。
- DONE 上拉与 STARTUP 时钟设置。DONE 是开漏脚,板上必须有上拉电阻;比特流生成选项里 DONE 时序与启动时钟来源配错,会出现「配置看似成功但不释放 I/O」。
- CCLK 信号完整性。SPI x4、SelectMap 提速后,CCLK 是板上最早的高速信号,飞线过长、无参考平面会导致误码,表现为偶发配置失败、温度相关失败。
- 把 JTAG 当量产通道排产。JTAG 依赖上位机和下载器、掉电即失,产线烧录应烧 Flash,相关夹具与烧录组织方式见 FPGA 量产与烧录。
最后收束一张高密度对照表,把全篇机制差异放在一页里:
| 维度 | JTAG | Master Serial/SPI | Slave Serial | SelectMAP(主/从) | BPI |
|---|---|---|---|---|---|
| 配置时钟来源 | TCK,下载器 | CCLK,FPGA 自发 | CCLK,外部给 | 主:FPGA/从:外部 | CCLK,FPGA 自发 |
| 数据方向 | 扫描移位 | FPGA 读 Flash | 外部喂 FPGA | 字节/字并行 | FPGA 寻址读 NOR |
| 数据宽度 | 1 位 | 1 位(SPI 可 x2/x4) | 1 位 | x8/x16 | x8/x16 |
| 非易失存储 | 无 | QSPI/串行 Flash | 主控决定 | 主模式接并口存储 | 并行 NOR Flash |
| 速度量级 | 低~中 | 中(x4 较高) | 低 | 高 | 高 |
| 引脚开销 | 4 根,全板共享 | 最小 | 小 | 大 | 最大 |
| 掉电保持 | 否 | 是(镜像在 Flash) | 取决于主控 | 取决于存储 | 是 |
| 典型用法 | 调试/边界扫描 | 量产自启动 | 菊花链级联 | 多器件/在线重配 | 存量大平台 |
| 关键状态脚 | TAP 状态机 | DONE/INIT_B/PROGRAM_B 全程共用 | 同左 | 同左 + BUSY/RDWR | 同左 |
这一篇在知识体系里的位置
本篇是 FPGA 配置机制簇的枢纽:操作步骤(生成 .bit/.mcs、Hardware Manager 烧录)在 FPGA 入门 32:比特流下载与固化,下载器物理链路故障在 下载器连不上排查,Flash 自启动失败在 Flash 启动失败复盘,量产夹具与产线组织在 FPGA 量产与烧录。配置与 FPGA 内部结构的关系可回看 FPGA 架构总览。同簇后续还会展开上电配置时序的逐拍分析、比特流加密与防抄板、在线升级与 multiboot 回退、JTAG 多器件链、配置 Flash 容量估算等专题;运行时改变局部逻辑的部分重配置可先读 部分重配置入门与 部分重配置深讲,比特流安全侧的话题见 FPGA 安全设计。
总结
FPGA 配置方式有哪几种,答案可以压缩成一句话:入口只有 JTAG、主模式、从模式三组,主从之分只看配置时钟 CCLK 由 FPGA 自己产生还是由外部灌入——Master SPI 接 QSPI Flash 是量产默认,JTAG 是与模式正交的调试入口,SelectMAP 从并用字节/字并行服务多器件与在线重配,BPI 对接并行 NOR、主串与从串是 1 位串行的两种时钟方向;上电后配置状态机沿「清除存储器→采样模式脚→逐帧加载→CRC→DONE→STARTUP」推进,INIT_B、DONE、PROGRAM_B 三个状态脚就是这条链路上的观测点,启动失败时沿它们从后往前分诊即可。