拓冰建站拓冰建站
首页 / 资讯中心 / 正文

FPGA配置方式全解析:从JTAG到SPI Flash,主动被动一文理清

FPGA 的更多配置方式从 JTAG 到 SPI Flash、从主动到被动一篇理清启动与加载这次我们来看 FPGA 的配置方式。很多朋友入门 FPGA 时基本都是开发板上电、点下载、烧录 bit 文件然后就完事了。但真正做项目、做产品、做批量部署时FPGA 怎么配置、从上电到运行经历了什么、不同配置方式有什么区别这些才是决定系统稳不稳、好不好维护的关键。文章会按“配置方式分类 → 硬件连接 → 操作步骤 → 故障排查”的顺序展开适合刚跑通开发板、准备深入了解 FPGA 启动机制的读者也适合正在做产品化、需要选型配置方案的工程师。1. FPGA 配置方式核心能力速览FPGA 是 SRAM 型架构掉电即失每次上电都需要从外部获取配置数据这个过程就是 FPGA 的配置Configuration也叫加载Loading。不同配置方式处理的不是“能不能跑”而是“谁给你代码、怎么给、给多快、能不能回读、能不能远程升级”。能力项说明配置对象主流 FPGA 厂商芯片如 Xilinx / AMD、Intel (Altera)、Lattice、紫光、高云、安路等核心本质SRAM 型 FPGA 上电后必须从外部重新加载比特流配置方式是加载通道和时序的差异主要配置方式JTAG、主动串行 AS / SPI、被动串行 PS、主动并行 BPI、被动并行 SelectMAP、嵌入式配置常用存储介质配置专用 Flash、SPI NOR Flash、BPI NOR Flash、SD 卡、外部控制器MCU/SoC接口能力支持下载、擦除、回读、在线升级、多镜像切换部分方案支持远程更新批量任务支持量产烧录、离线烧录、边界扫描链批量配置启动速度JTAG 最慢但最灵活主动/被动并行方式最快SPI 方式均衡适合场景研发调试、小批量、量产、通信设备、工业控制、汽车电子、嵌入式联合开发、远程维护从这张表可以看出FPGA 配置方式没有绝对好坏只有适不适合。研发阶段首选用 JTAG因为方便产品化阶段通常选 SPI Flash 或 BPI Flash因为上电即加载复杂系统里常见的是由 ARM、MCU 或 Zynq 这类嵌入平台主动给 FPGA 喂数据。2. 适用场景与使用边界FPGA 配置方式直接影响硬件设计、PCB 布局、物料成本和后期维护方式。不同场景下选择完全不同。场景推荐配置方式原因实验室调试、逻辑开发JTAG调试方便可在线下载、抓取信号、回读寄存器简单产品、无主控系统主动 SPI 配置AS上电自动加载外围器件少成本低高速通信、需要快速启动主动并行配置BPI或 SelectMAP加载速率高启动时间短带 ARM / MCU 的嵌入式系统被动配置PS主控可以控制加载时序实现版本管理远程升级、现场维护SPI Flash 多镜像 / 黄金镜像通过主控或网络接口更新 Flash 内容大批量生产离线烧录器 JTAG/SPI 批量烧录一致性高速度快不依赖电脑边界方面要特别注意几点。第一FPGA 配置只负责加载逻辑不负责加载 DDR、PHY 这类外围器件的初始化这部分需要设计者通过逻辑或主控配合完成。第二部分配置方式不支持直接回读比特流比如某些加密器件配置后回读是受限的这会直接影响调试策略。第三如果系统需要满足高可靠性要求必须做配置校验、超时重试、看门狗等机制单纯依赖 FPGA 默认配置流程不够。还有一个容易被忽视的问题版权和授权。如果你使用的 FPGA 配置涉及第三方 IP、加密比特流、商业 License必须确认合法使用范围。FPGA 逻辑本身也属于设计者的知识产权产品化时应考虑比特流加密、防克隆措施避免被未授权读取或复制。3. FPGA 配置方式的环境准备与前置条件配置 FPGA 之前先确认手上工具是否齐全。下面是通用检查清单具体型号和版本以你的开发环境为准。3.1 硬件工具FPGA 开发板或目标板确认板上的配置模式拨码开关Mode Select支持哪些方式。下载器常见的有 Xilinx Platform Cable USB II、Digilent JTAG-HS3、Intel USB-Blaster II或各厂商兼容下载器。配置 Flash 芯片SPI NOR Flash如 W25Q系列、华邦、兆易创新、BPI NOR Flash如 PC28F 系列或配置专用 PROM。如果是被动配置需要 MCU 或处理器和对应的电平转换电路。3.2 软件工具FPGA 厂商 IDE如 Vivado、ISE、Quartus、Lattice Diamond、高云云源软件、安路 Tang Dynasty。Flash 编程工具如 Vivado Hardware Manager、Quartus Programmer、FlashPro、第三方离线烧录软件。串口调试工具、逻辑分析仪用来观察配置完成信号和错误状态。3.3 关键信号与引脚不同配置方式涉及的 FPGA 引脚基本一致包括信号作用MODE / MSEL配置模式选择PROGRAM_B复位配置逻辑低有效INIT_B配置初始化状态指示低有效表示正在清空配置存储器DONE配置完成指示高有效表示配置成功CCLK / DCLK配置时钟主动方式由 FPGA 输出被动方式由外部输入DIN / D0 / D[7:0]数据输入DOUT / D[7:0]数据输出、菊花链级联3.4 配置模式拨码开关几乎所有 FPGA 开发板都会有一组拨码开关用来选择配置模式。Xilinx 7 系列常见模式如下模式MSEL 设置配置通道JTAG任意非 SelectMAP 模式都能用边界扫描链Master Serial / SPI x1/x2/x40010 / 0011FPGA 主动读取外部 SPI FlashMaster BPI根据地址线和数据线配置FPGA 主动读取并行 NOR FlashSlave SelectMAP根据字节序设置外部主控写入并行数据Slave Serial依据模式引脚配置外部主控写入串行数据Intel (Altera) 的 Cyclone 系列则用 MSEL 引脚和 CONF_DONE、nCONFIG、nSTATUS、DCLK、DATA0 等引脚配合完成配置模式选择。设计前先查对应芯片手册不同系列引脚定义差异很大不要硬记。4. FPGA 配置方式详解与启动操作现在是文章核心部分。我们把配置方式按大类拆开每类说明原理、硬件连接、操作流程和验证方法。4.1 JTAG 配置方式JTAG 是 FPGA 配置的“底线方式”任何系列都支持。它基于 IEEE 1149.1 边界扫描标准既用于芯片测试也用于配置。JTAG 配置的特点不需要外部存储介质直接用下载器将比特流写入 FPGA。配置数据直接加载到 SRAM掉电丢失所以适合调试。可以访问 FPGA 内部的 BSCAN、ICAP 等资源实现在线调试。通过菊花链Daisy Chain一条 JTAG 链可以同时管理多片 FPGA 或多器件。操作步骤# Vivado Hardware Manager 中加载设备 open_hw_manager connect_hw_server -url localhost:3121 open_hw_target set_property PROGRAM.FILE {./output/top.bit} [current_hw_device] program_hw_devices [current_hw_device]预期结果下载完成后 DONE 引脚变高FPGA 开始执行用户逻辑。JTAG 方式不检查 DONE 外部状态适合调试但不适合做产品启动方案因为板上必须一直挂着下载器。常见失败原因下载器驱动没装、JTAG 链路接触不良、多片 JTAG 菊花链中前级器件 TDI/TDO 连接错误。排查时先用边界扫描测试识别器件 ID能识别再谈配置。4.2 主动 SPI 配置方式主动 SPI 配置也叫 ASActive Serial模式在 Xilinx 和 Intel 器件中都是产品化的首选方案。FPGA 上电后自己产生时钟主动从外部 SPI NOR Flash 读取比特流完成加载后释放 DONE 信号。硬件连接要点FPGA 的 CCLK/DCLK 输出到 SPI Flash 的 CLK 引脚。FPGA 的 DIN/DOUT 对应 SPI Flash 的 MOSI/MISO。片选信号连接到 Flash 的 CS#。根据容量和速度需求选择 x1、x2、x4 模式x4 模式需要占用更多 IO。在 Vivado 中生成 SPI Flash 烧录文件# 生成 .bin 文件用于 SPI Flash write_cfgmem -format bin -size 32 -interface SPIx1 \ -loadbit up 0x0 ./output/top.bit \ -file ./output/top.bin # 或者生成 .mcs 文件Intel Hex 格式适合烧录器 write_cfgmem -format mcs -size 32 -interface SPIx4 \ -loadbit up 0x0 ./output/top.bit \ -file ./output/top.mcs注意-size参数要和 Flash 芯片容量匹配-interface要和硬件连接模式一致否则烧进去也不启动。烧录方式有两种通过 Vivado Hardware Manager 直接烧 Flash需要 FPGA 处于 JTAG 模式由 FPGA 作为桥接器。通过独立 SPI Flash 编程器离线烧录适合量产。主动 SPI 配置的启动时序是上电 → 配置复位释放 → FPGA 输出时钟 → 读 Flash → 校验 → DONE 拉高 → 用户逻辑启动。验证方法断电重新上电用逻辑分析仪抓 DONE 信号或者直接观察用户逻辑是否运行比如 LED 是否按预期闪烁。如果 DONE 一直为低说明 Flash 内容错误、模式引脚错误或 Flash 焊接异常。4.3 主动 BPI 配置方式BPIByte Peripheral Interface是并行配置方式FPGA 主动从并行 NOR Flash 读取配置数据。它比 SPI 方式启动速度快适合对启动时间有严格要求的场景比如通信设备、工业控制器。硬件连接上FPGA 需要连接并行 Flash 的地址总线和数据总线。Xilinx 7 系列常见的是 BPI-x8、BPI-x16 模式地址线占用较多会牺牲用户 IO。生成 BPI 烧录文件write_cfgmem -format mcs -size 64 -interface BPIx16 \ -loadbit up 0x0 ./output/top.bit \ -file ./output/top_bpi.mcsBPI 配置要特别注意地址映射。Flash 起始地址、跳转地址、镜像存放位置都要和 FPGA 的配置模式选项一致。如果 FPGA 找不到有效配置头会拉低 INIT_B系统无法启动。4.4 被动串行与被动并行配置方式被动配置方式的核心特点是配置时钟和数据由外部主控提供FPGA 不主动发起读写。这种方式的灵活性最高主控可以决定什么时候加载、加载哪个版本的比特流、加载失败后怎么处理。被动串行配置常见于 MCU 驱动 FPGA 的场景。MCU 通过 GPIO 模拟时序把比特流数据一位一位送入 FPGA 的 DIN 引脚同时输出 DCLK 时钟和 PROGRAM_B、INIT_B、DONE 等控制信号。以 Xilinx 7 系列 Slave Serial 为例核心时序是拉低 PROGRAM_B复位 FPGA 配置逻辑。等待 INIT_B 拉高表示 FPGA 已初始化。在 DCLK 上升沿或下降沿按位送入 DIN 数据。发送完整个比特流后FPGA 拉高 DONE配置完成。MCU 端伪代码// 伪代码MCU 通过 GPIO 模拟 Slave Serial 配置 void fpga_config(uint8_t *bitstream, uint32_t length) { PROGRAM_B_LOW(); delay_us(10); PROGRAM_B_HIGH(); while (!INIT_B_READ()); // 等待初始化完成 for (uint32_t i 0; i length; i) { for (int bit 7; bit 0; bit--) { DIN_WRITE((bitstream[i] bit) 0x01); DCLK_TOGGLE(); } } // 等待 DONE 拉高或用超时机制判断失败 }被动并行配置Slave SelectMAP类似但数据是 8 位或 16 位并行写入速度远高于串行。Zynq 系列中的 DevC 配置、以及很多 ARMFPGA 架构的板卡都使用这种被动并行方式主控把 FPGA 当作一个外设来写入。被动配置方式在调试时有个优势主控可以读到 INIT_B、DONE 的状态方便做日志和错误上报。主控端还能实现多镜像管理、远程升级失败回退等复杂策略。4.5 嵌入式配置Zynq / SoC FPGA 动态加载如果你用的是 Zynq 这类 ARM FPGA 的 SoC 器件配置方式更灵活。Zynq 的 FPGA 部分PL可以由 PSARM 端在运行时动态加载完全不需要外部 Flash也可以从 SD 卡、网络、QSPI 等介质读取比特流。关键概念启动时 PS 先启动然后通过 DevC 接口加载 PL。使用fpgautil或 Linux 内核的 FPGA Manager 框架加载.bit.bin文件。支持部分重配置Partial Reconfiguration可以在系统运行时只更新部分逻辑区域。可以在 U-Boot 阶段加载 PL也可以在 Linux 运行时加载。U-Boot 中动态加载# 从 SD 卡加载 FPGA 比特流 fatload mmc 0:1 0x1000000 top.bit fpga loadb 0 0x1000000 0x100000Linux 中加载# 将 .bit 文件转换为 .bit.bin需要 Bootgen bootgen -image bootimage.bif -o i top.bit.bin # 使用 FPGA Manager 加载 fpgautil -b top.bit.bin动态加载特别适合需要在线升级、多版本启动、软硬件协同开发的场景。比如一个系统里同一片 FPGA 在不同工况下运行不同的逻辑就可以由 ARM 端根据运行状态切换比特流而不是断电换 Flash。5. FPGA 配置方式功能测试与效果验证无论哪种配置方式验证思路是一致的先确认配置链路通再确认逻辑运行正确最后验证异常处理。5.1 配置链路验证测试目的确认 FPGA 能从目标介质成功加载比特流。操作步骤设置好配置模式拨码开关。写入已知的、简单的测试比特流比如 LED 闪烁或计数器输出到 GPIO。上电或触发重配置。观察 DONE 信号和用户逻辑输出。判断标准DONE 拉高用户逻辑运行。如果 DONE 为低说明配置链路异常。5.2 多镜像回退验证测试目的验证远程升级时的失败回退能力。操作步骤在 Flash 中写入两个镜像比如地址 0x0 存放 Golden 镜像地址 0x400000 存放 Update 镜像。先验证 Update 镜像能正常启动。人为破坏 Update 镜像内容重新触发配置。观察 FPGA 是否自动回退到 Golden 镜像。判断标准FPGA 在 Update 镜像校验失败后能自动加载 Golden 镜像系统保持可用。这是工业产品的硬性要求。5.3 被动配置超时失败验证测试目的确认主控端能感知配置失败并进行重试。操作步骤在主控代码中模拟错误发送错误长度的比特流或故意在 INIT_B 拉低时继续送时钟。观察主控打印的错误日志。验证超时重试逻辑是否复位了 PROGRAM_B、重新初始化配置。判断标准主控能正确捕获失败状态并能在规定时间内重新发起配置而不是死循环卡死。5.4 回读与校验验证部分 FPGA 支持配置回读Readback可以验证逻辑内部的寄存器状态。通过 Vivado 的 Hardware Manager 或逻辑内部 ICAP 接口可以实时读取配置内容和寄存器值。操作步骤# Vivado 中执行回读 set_property BITSTREAM.READBACK.ENABLE true [current_project] write_cfgmem ... open_hw_target readback_hw_device -file ./output/readback.bit [current_hw_device]判断标准回读文件能成功生成或者在逻辑仿真中能通过 ICAP 接口访问配置内容。注意加密比特流或安全器件可能禁止回读这属于正常限制。6. FPGA 配置方式的接口与批量任务处理6.1 通过主控 API / 文件接口加载在嵌入式系统中FPGA 配置往往封装成软件接口。以 Linux FPGA Manager 为例常用接口包括/sys/class/fpga_manager/fpga0/state查看 FPGA 状态。/sys/class/fpga_manager/fpga0/flags查看配置标志。通过fpgautil或自行编写内核模块调用 FPGA Manager 框架完成配置。示例脚本#!/bin/bash # 通过 FPGA Manager 加载新比特流 BIT_FILE/lib/firmware/top.bit.bin echo 0 /sys/class/fpga_manager/fpga0/flags cat $BIT_FILE /sys/class/fpga_manager/fpga0/firmware6.2 批量烧录方案量产场景下FPGA 配置的批量任务主要有三种方式JTAG 菊花链批量烧录多片 FPGA 串联一次下载。离线 SPI Flash 编程器提前烧录 Flash再贴片适合大批量。产测软件 下载器阵列一台电脑控制多个下载器并行烧录多块板卡。批量烧录的关键是做好序列号、MAC 地址等差异化数据的注入。有些 FPGA 系统会把序列号存储在 SPI Flash 的其他扇区通过主控在产测阶段写入。如果你的批量任务包含这类需求建议把 Flash 分区规划提前做进设计不要等产线再想办法。7. FPGA 配置方式的资源占用与性能观察配置方式本身不占 FPGA 逻辑资源但会影响 PCB 布局和 IO 占用。从工程角度看真正的性能差异体现在启动时间和加载带宽上。7.1 启动时间对比配置方式大致加载带宽适合容量启动时间特点JTAG较低调试用不关心速度与下载器性能和链长相关SPI x1约 25-50 Mbps小于 128 Mb中小规模比特流可用SPI x4 / x8约 100-400 Mbps中等容量启动较快BPI x8 / x16数百 Mbps 级大容量镜像启动最快之一SelectMAP x8/x16数百 Mbps 级灵活由主控决定可并行处理实际启动时间需要结合芯片型号、Flash 型号、比特流大小、时钟频率计算不同厂商差异较大不能只看理论值。7.2 如何观察启动过程在硬件上抓 DCLK、DONE、INIT_B 三个信号能直观看到配置是否成功。更快速的方式是在 Vivado 或 Quartus 的硬件管理器里读取设备状态查看错误寄存器。逻辑分析仪设置建议触发条件设为 DONE 上升沿采样率至少是配置时钟的 4 倍。如果没有逻辑分析仪也可以用 GPIO 直连示波器观察 DONE 电平变化。7.3 降低启动时间和占用如果系统对上电启动时间有硬性要求可以考虑使用 x4 或 x8 的 SPI 模式而不是 x1。使用压缩比特流Vivado 支持比特流压缩可以减小 Flash 用量。精简逻辑缩小比特流体积。对配置时钟进行动态调整前期低速稳定后期高速加载。7.4 端口冲突与进程残留在 Windows 下使用 Vivado/Quartus 时常遇到下载器端口被占用或驱动异常。建议统一使用厂商提供的驱动管理工具切换下载器型号时先卸载旧驱动。在 Linux 下注意 udev 规则是否配置正确否则普通用户无法访问 USB 下载器。8. FPGA 配置方式常见问题与排查方法问题现象可能原因排查方式解决方案DONE 一直为低Flash 无内容、模式引脚错误、Flash 焊接异常检查模式开关、用示波器抓 DONE、查看配置错误寄存器烧录正确镜像、修正模式引脚、补焊 FlashJTAG 识别不到设备下载器驱动异常、JTAG 链路断、供电不足设备管理器查看下载器状态、测量 TDI/TDO 电平重装驱动、检查链路连接、加强供电上电偶尔启动失败电源上电时序不规范、配置时钟不稳定示波器观察上电波形、检查电源上升时间调整电源时序、降低配置时钟Flash 烧录成功但启动失败镜像格式错误、Flash 型号参数不匹配查看烧录文件格式、核对 Flash 容量重新生成正确格式的烧录文件被动配置超时主控代码时序错误、GPIO 配置不符合 FPGA 要求逻辑分析仪抓 DCLK 和 DIN、核对时序要求修正主控代码、调整配置时钟依赖安装失败或驱动拦截Vivado/Quartus 安装时驱动签名问题检查系统日志、以管理员身份运行关闭驱动强制签名或手动安装驱动批量烧录部分板卡失败下载器接触不良、Flash 翻新片单独复测失败板卡、更换下载线维护下载器、更换可靠 Flash 渠道加密比特流无法回读安全器件正常限制查看器件安全属性确认安全策略不要试图绕过9. FPGA 配置方式最佳实践与使用建议工程化建议如下每条都是实践中容易踩坑的地方。先在原型板上验证所有配置方式再定方案。不要等 PCB 回来才发现 SPI Flash 引脚连错、BPI 地址线缺失、被动配置的时序裕量不足。模式引脚用上拉或下拉电阻固定不要悬空。悬空会导致模式不确定上电后 FPGA 可能进入错误的配置流程。保留 JTAG 访问口。即使产品使用 SPI 配置也要预留 JTAG 测试点方便产测和返修。Flash 分区规划提前定。至少分三个区Golden 镜像、Update 镜像、用户数据区。这样远程升级失败时可以回退。配置完成信号要做看门狗。主控超过设定时间没等到 DONE就要触发重配置并上报错误不能无限等待。比特流文件统一管理。版本号写入文件名或 Flash 头信息方便追溯固件与逻辑的匹配关系。涉及加密、回读、安全启动的功能遵循器件厂商的官方文档操作不要使用来历不明的脚本或工具。如果使用外部 Flash注意选型和兼容性。不同厂商 Flash 在连续读命令、状态寄存器时序上有差异FPGA 厂商有官方支持列表优先选列表内的型号。发布或批量生产前做完整的上电掉电循环测试至少几百次确保配置链路稳定。10. 总结与下一步FPGA 配置方式看似基础实际牵一发动全身。JTAG 帮你调试SPI Flash 帮你产品化被动配置帮你把 FPGA 纳入更大系统动态加载帮你实现远程维护和软硬件协同。建议最先验证的是 JTAG 识别设备、生成 SPI 烧录文件、上电自动加载这三步跑通这三个流程就掌握了 FPGA 部署的最小闭环。最容易踩的坑是模式引脚设置错误和 Flash 镜像格式与容量不匹配这两类问题在排查时往往浪费最多时间。下一步可以根据手头开发板把主流配置方式都试一遍重点对比 SPI x1 和 x4 的启动时间差异再尝试模拟一次远程升级失败回退。如果你正在做 Zynq 或 SoC FPGA 相关项目优先研究 FPGA Manager 和 U-Boot 加载流程。对 FPGA 配置方式有疑问的欢迎在评论区交流我会不定期整理大家的实测反馈。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门