FPGA 入门 32:比特流下载与固化——JTAG 调试、Flash 掉电不丢
更新时间:2026-09-12。本文是
fpga/入门层第 34 篇。开发流程见 开发全流程,上板调试用 ILA 第一次用,量产烧录见专家 FPGA 量产与烧录。
本文要回答的问题
- FPGA 内部的配置数据存在什么物理结构里?为什么 SRAM 工艺决定了「掉电必失」,和 MCU 把程序存在片内 Flash 有什么本质不同?
- 比特流文件家族(bit/bin/mcs/svv/hex/jic)各自是什么格式、用在哪条链路上?为什么烧 QSPI 不能直接拿 .bit?
- 上电配置分哪几个阶段(清除、初始化、定模式、逐帧加载、CRC、STARTUP)?DONE、INIT_B、PROGRAM_B 三个状态脚分别告诉你什么?
- Master SPI、Master BPI、Slave SelectMAP、JTAG 四种配置模式的接线和适用场景?多板卡上模式跳线出错为什么是启动失败第一大原因?
- bitstream 里除了逻辑还能装什么(压缩、多比特流、fallback golden、升级标志、用户数据、软核程序)?SPI x1/x2/x4 位宽、速率档位怎么影响上电启动时间?
- 远程/在线升级怎么做:FPGA 运行中自己写 Flash、A/B 双分区、golden fallback、升级掉电的安全性如何保证?
- 加密与防回读、版本号固化、产线烧录夹具、多 FPGA JTAG 链分别是什么,和入门学习的关系是什么?
读完本文,你应当能独立把工程从 JTAG 临时下载走到 QSPI 掉电自启动,能在启动失败时按状态脚和配置阶段逐段定位,并能听懂后续远程升级、安全启动等工程话题的词汇。
一、两种“弄进芯片”的方式
| JTAG 下载 | Flash 固化 | |
|---|---|---|
| 文件 | .bit(调试带 .ltx) | .mcs/.bin(由 bit 转) |
| 存到 | FPGA 内部配置 SRAM | 板上非易失 QSPI Flash |
| 掉电 | 丢失(SRAM 易失) | 保持 |
| 上电 | 需电脑重新下载 | 自动从 Flash 加载 |
| 用途 | 开发调试反复烧 | 成品/交付 |
二、操作流程
JTAG:Generate Bitstream → Hardware Manager → Open Target/Auto Connect → Program Device(选 .bit/.ltx)。
Flash 固化:
- write_cfgmem / Generate Memory Config File 把
.bit→.mcs(选对 Flash 类型/容量/SPI 位宽); - Add Configuration Memory Device(选板上 QSPI 型号)→ Program 选 .mcs;
- 断电重上电,FPGA 主 SPI 模式自动加载。
三、上电自启动
上电 → 初始化 → 按 MODE 引脚选模式 ──主SPI──► FPGA 发 CCLK 从 QSPI Flash 读比特流
└JTAG──► 等电脑下载
→ 逐帧加载进 SRAM → CRC 校验 → DONE 拉高、释放 GSR → 运行四、为什么 FPGA 掉电就失忆:配置存储的物理本质
要把下载和固化的区别讲透,必须从芯片内部说起。FPGA 的可编程性来自遍布芯片的两类配置点:决定 LUT 真值表内容、布线开关通断、I/O 极性等的海量配置存储单元。Xilinx 7 系、Intel Cyclone 等主流器件里,这些单元是 SRAM 型的——本质上是几个晶体管组成的微小锁存器,通电时保持 0 或 1,断电后状态随机消失。一颗中端 FPGA 有几千万到上亿个这样的配置点,比特流就是把这张「0/1 配置表」按厂商规定的帧格式打包成的文件。
这和 MCU/CPU 形成鲜明对比:MCU 的程序存在片内 Flash(或 EEPROM),那是非易失浮栅器件,断电内容还在,内核上电后从固定地址取指执行;而 FPGA 上电时内部是一张白纸,必须先有外部过程把配置表灌进配置 SRAM,灌完以后芯片才「成为」你设计的那块电路。所以严格说 FPGA 不是在「运行程序」,而是在每次上电时被重新「组装」成一块硬件。
由此自然推出三种存储位置的分工:
- JTAG 直写:下载器把配置表直接写进配置 SRAM,省掉外部存储器环节,秒级生效,调试最方便,但只活在本次通电期间。
- 板载配置 Flash:非易失,存放配置表副本;FPGA 每次上电自己把它读回来重新装载。Flash 只是「仓库」,真正干活时逻辑仍在 SRAM 配置点里——这也意味着 Flash 速度不直接决定你的电路能跑多快,只决定开机装载的快慢。
- 片内 Flash 新工艺:部分低功耗/车机器件(如某些 Spartan-7 衍生型号以外的新品、Microsemi 闪存工艺 FPGA)把非易失配置做进封装内,省掉外部 Flash,但「加载到易失工作区」的模型不变或有直接以闪存开关工作的工艺,了解即可。
一个常见误解是「那我为什么不像单片机那样直接在 FPGA 里跑程序」——因为 FPGA 里没有「取指令执行」这回事(除非你在里面软核一个 CPU,见专家 FPGA 软核),比特流描述的是电路拓扑,不是指令序列。
五、比特流文件家族:bit、bin、mcs、hex、jic 到底什么区别
新手常被一堆后缀搞晕,其实只要分清两条轴:带不带头信息、给谁读。
| 文件 | 格式本质 | 典型用途 |
|---|---|---|
| .bit(Xilinx)/.sof(Intel) | 工具原生比特流,含头部(器件、日期、工具版本)+ 配置数据 | JTAG 直下载、工程中间产物 |
| .bin | 去掉头部的纯二进制配置数据 | 裸写进 SPI Flash、远程升级镜像 |
| .mcs | Intel HEX 文本格式(地址+校验行),描述要写进非易失存储器的字节布局 | Xilinx 平台烧 QSPI 的经典格式,人可读、可追加多镜像 |
| .hex | 各家工具通用的十六进制镜像表达 | 仿真模型加载、第三方烧录器 |
| .jic(Intel) | 含 Flash 烧录信息的复合文件 | Quartus 里通过 FPGA 间接烧 EPCS/EPCQ |
关键直觉:.bit 是「给 FPGA 配置口的数据流」,.mcs/.bin 是「给外部 Flash 芯片的存储镜像」。Flash 只负责在正确地址存字节,FPGA 以后按 Master SPI 时序自己读出。所以不能把 .bit 直接灌进 QSPI 就指望启动——头部格式和地址布局不对,FPGA 解析到的第一帧就非法。要先用 write_cfgmem(Vivado Tcl)或 Generate Memory Configuration File 对话框做转换,转换时必须选对:Flash 型号族、接口位宽(x1/x2/x4)、容量、是否反转字节序(部分老平台需要 bit-swap)、起始地址。
转换命令典型形态(了解参数含义即可):用 write_cfgmem 指定格式 mcs、接口 SPIx4、容量按 Flash 选、加载 .bit、输出 .mcs,还可把多个 .bit 拼成带地址偏移的多镜像文件。Quartus 对应 Convert Programming File 生成 .jic/.pof,概念完全平行。
调试产物还有 .ltx:它不含芯片数据,只是 ILA 探针的「调试符号表」,下载 .bit 时一并提供,Hardware Manager 才能把 probe0 和你 RTL 里的信号名对应起来;Flash 固化时不需要它。
六、上电配置全过程与三个状态脚
从通电到用户逻辑运行,FPGA 内部走一条严格流水线,理解它才能看懂「启动到一半死掉」:
- 上电与清除(Power-on & Clear):电源达到门槛后,内部配置控制器先把整片配置 SRAM 清零,INIT_B 在这段时间保持低。INIT_B 也是错误指示脚——CRC 校验失败时它会被拉低,所以它是「配置数据有没有被正确接受」的第一观察点。
- 采样模式(Mode Sample):清零结束、INIT_B 释放前,芯片锁存 M0/M1/M2(或等效模式脚/跳线)电平,决定后续从哪里取配置。采样只发生一次,运行中拨模式跳线无效,这也是为什么改完跳线必须断电重来。
- 加载(Configuration):按选定模式取数据流。Master SPI 下 FPGA 主动产生 CCLK 和读命令,从地址 0 顺序读;数据按帧写入配置点。
- 帧校验 CRC:数据流尾部带 CRC,加载期间或结束时校验,错误就拉低 INIT_B 并中止,绝不让一个不完整的电路开始跑。
- STARTUP:校验通过后进入启动序列,释放全局三态、释放全局复位(GSR)、DONE 引脚拉高,用户 I/O 从高阻切换到设计功能。DONE 不亮是「加载根本没完成」;DONE 亮了但不工作是另一类问题(时钟/复位/约束)。
- 运行:配置口部分器件可继续用于在线升级或回读。
三个必记信号:PROGRAM_B(低脉冲请求重新配置,等于软上电)、INIT_B(清零忙/CRC 错误)、DONE(配置成功、用户逻辑获权)。排查启动问题先看这三个脚的 LED 或万用表/示波器电平,配合 板卡外设地图 在原理图上找它们连到哪。
七、四种配置模式与选择
- Master SPI(主 SPI,最主流):FPGA 做主机,CCLK 输出、片选外部 QSPI Flash、按标准 SPI 读命令取流。接线少(CLK+CS+1/2/4 根数据线),价格便宜,容量从几 Mb 到 Gb 选择丰富,几乎是所有开发板和量产板的默认模式。
- Master BPI(主并口):接并行 NOR Flash,字节宽度 x8/x16,加载快,但线多、芯片贵、占地大,新设计基本被 x4 QSPI 取代,只在老平台和特殊低延迟启动场景见。
- Slave SelectMAP/Slave Serial(从模式):外部主机(另一个 MCU、CPLD)按 FPGA 要求的时序把数据字节/位喂进来。适合「一个系统控制器统一管理多颗芯片固件」的板卡,MCU 先自检电源和外设,再放 FPGA 出复位。
- JTAG(边界扫描口):四跟线 TCK/TMS/TDI/TDO 的标准链,优先级最高、可打断任何配置过程。永久保留在板上用于调试和产线;JTAG 下载不经过 Flash、不改模式脚也能工作,所以「JTAG 永远能救砖」,前提是电源和 JTAG 链路本身没坏。
模式跳线错误是启动失败第一大原因:丝印 M0/M1/M2 与表格组合要逐一核对,上拉/下拉电阻有没有贴、拨码开关接触不良都要量。多 FPGA 板还要注意 JTAG 链的 TDI→TDO 顺序、每颗器件的 IDCODE(Hardware Manager 应能按链读出全部器件;只看到一颗说明中间某颗没供电或 TDO 被旁路,JTAG 链深潜见专家 JTAG 链进阶)。
八、QSPI Flash 选型、位宽与启动时间
配置 Flash 不是随便选一颗 SPI 存储器就行,关键参数有四个:
- 电压与系列:FPGA 配置 Bank 支持的 Vcco(常见 1.8V/2.5V/3.3V)决定 Flash 供电;器件支持的命令集(普通 SPI、双/四数据线、QSPI 连续读、0x6B/0xEB 命令)要和工具生成镜像时的选项一致。
- 容量:至少放得下压缩后的比特流并留升级余量。入门器件几 Mb 到几十 Mb;中高端单镜像上百 Mb;要做 A/B 双分区再翻倍,另加 golden 区。
- 位宽:x1 最保守、任何 Flash 都支持;x4 在启动时四根数据线并行输出,配置吞吐可到 3~4 倍,启动时间从几百毫秒压到几十毫秒。镜像格式、Flash 接线、模式配置三者必须同时按 x4 设,任一不匹配都是加载失败。
- 速率档位:CCLK 频率受配置 Bank 速度等级和 Flash 读取时延限制,工具里可选分频;盲目拉高会导致读数据建立时间不足、CRC 失败。
粗算启动时间:启动时间约等于「镜像比特数 ÷(CCLK 频率 × 每拍有效位 × 利用率)」。50Mb 镜像、x4、50MHz CCLK 理想吞吐是 25MB/s,约 0.25 秒,实际加上命令开销、擦写等待,量产中常见 0.5~2 秒。对开机时间敏感的产品(汽车上电自检、产线节拍)会压缩比特流、上 x4 甚至并行模式;对学习板,默认 x1 慢一点但最不容易出错。
Flash 寿命和保持也要知道:QSPI Flash 按扇区擦除,典型擦写寿命 10 万次量级,调试一天烧几百次不现实也不应该——开发迭代一律 JTAG 直下,只有版本节点才烧 Flash,既省时间又省 Flash。数据保持一般 20 年量级,足够产品寿命。
九、在线升级:FPGA 运行时自己改写 Flash
真正的产品不可能要求维护人员开盖接 JTAG,标准做法是让 FPGA(或旁边的 MCU)在运行中通过普通逻辑引脚连接 QSPI Flash,把新镜像写进去:
- 新固件经网口/串口/U 盘等传到 FPGA,先缓存到 DDR 或直接流式接收。
- 逻辑里实现一个 Flash 控制器(或用通用 IP),按「写使能 → 扇区擦除 → 页编程 → 回读校验」的标准 SPI Flash 操作序列更新分区。
- 写完写一个「升级有效」标志(标志本身要放在独立扇区,做好冗余和魔数校验)。
- 下次上电启动逻辑加载新镜像,自检通过后清除升级标志;失败则保留标志供回滚。
A/B 双分区 + golden 是抗掉电的经典布局:Flash 划成 golden(出厂版本,永不覆盖)、A、B 三块;当前跑 A 就往 B 写,写完切换启动槽;升级过程中断电,顶多新槽是坏的,旧槽完好;如果新镜像启动后连续 N 次自检失败,启动逻辑回到 golden 保底。启动槽选择由 FPGA 内部的「多重启动(Multiboot)」硬件机制或外部小 CPLD/MCU 完成,Xilinx 有 warm boot / fallback bitstream 相关原语和配置选项,Intel 叫 Remote Update,进阶内容见专家 量产与烧录。
入门阶段不要求实现,但要理解两个约束:①配置用的 QSPI 引脚在 FPGA 启动后是否允许用户逻辑复用,取决于器件和 STARTUP 原语,7 系可用 STARTUPE2 把内部时钟和用户逻辑接到专用配置脚上;②Flash 里跑的是启动命脉,擦写代码本身的 bug 可能让设备变砖,所以 golden 区要硬件写保护(Flash 的 WP#/保护寄存器)。
十、比特流加密、防回读与版本固化
别人拿到你的板子,只要 JTAG 口可用,就能回读比特流、克隆硬件设计。商业交付常用三类防护:
- 比特流加密(AES 密钥烧入电池备份 RAM 或 eFUSE):镜像以密文存 Flash,FPGA 上电后用片内密钥解密再配置。密钥烧进 eFUSE 不可读出;电池备份密钥方案换电池要小心。工具侧在比特流设置里打开 encryption、选密钥文件。
- 防回读/禁用 JTAG 配置:BitGen 设置里禁止 readback,必要时把 JTAG 端口在配置后彻底禁用(极端安全场景),代价是失去现场调试能力,一般保留 JTAG 但禁回读。
- DNA/芯片指纹绑定:每颗 FPGA 有唯一 DNA 号,逻辑读出后与授权表比对,防止镜像搬到别的板子。
这些机制的工程权衡(密钥管理、维护口、现场失效恢复)在专家 FPGA 安全 展开。入门阶段至少建立意识:JTAG 是万能后门,公开发布硬件原理图时要想清楚这个口给不给、怎么保护。
版本管理上,建议把版本信息固化进设计和比特流:寄存器读 0x 日期+git 短哈希、板子上用 UART/VIO 可读;比特流属性里填用户名/版本,.bit 头部就带上。排查「现场跑的到底是哪一版」时能省掉大量扯皮。工程产物(bit/mcs/ltx)与 RTL 版本一起归档,发布流程参考 RTL 版本管理。
十一、烧录失败与启动失败:分层排查手册
把「JTAG 能下载但不运行」「JTAG 也连不上」「Flash 不启动」三类问题严格分开:
JTAG 连不上:查供电(所有 Bank 电源、配置 Bank)、平台电缆驱动、JTAG 跳线和链上器件、TCK 频率降到最低;Auto Connect 看不到器件时用链扫描看 IDCODE,IDCODE 全 0/全 1 是物理层问题(虚焊、排线反接)。
JTAG 下载成功但逻辑不跑:DONE 是否拉高(不拉高查模式冲突、Startup 时钟设置);时钟输入是否存在(量晶振、查管脚)、PLL locked(ILA 或镜像到管脚);复位是否一直有效(极性、按键);管脚约束与板子是否一致。流程见 仿真过上板挂。
JTAG 跑得对、Flash 不启动,按配置流水线反查:
- 模式脚组合是否为 Master SPI(断电后量电平);
- MCS/BIN 生成参数:Flash 型号族、x1/x4、容量、字节序;
- 烧录时 Add Configuration Memory 选的型号是否与实物丝印完全一致;
- 烧录后做 verify,排除接触不良;
- 示波器看 CCLK 是否起振、CS 是否拉低、数据线上有无翻转——有 CCLK 无数据是 Flash 接线/片选问题,有数据但 DONE 不亮是镜像/CRC 问题;
- INIT_B 是否在加载中被拉低(CRC 错);
- 换一颗确认良好的 Flash 或降低 CCLK 档位排除时序裕量问题。
一个特别隐蔽的坑:改了 qspi 接线(x1 改 x4)却忘了重新生成对应镜像,现象是 CCLK 正常、Flash 也在出数据,但 FPGA 在等 x4 数据、解析全错。凡涉及配置方式改动,bit → mcs → 烧录整条链都要重来。
十二、从学习板到产线:还要知道的几件事
- 产线烧录夹具:量产不用 Vivado GUI,用批处理脚本(Vivado in batch mode 或专用烧录器 + SVF/STAPL 文件),一次测多点(电源电流、JTAG IDCODE、CRC、功能自测),节拍和可追溯性是关键(见专家 量产与烧录 与 bring-up checklist)。
- 多 FPGA 与 JTAG 链:链上串多颗器件时,下载文件要按链序组织;不同工艺器件混链注意 TCK 电平转换。
- 配置时间与功耗:加载瞬间整芯片同时使能,浪涌电流明显,电源设计要能扛住(供电细节见 供电与散热)。
- 重新配置不重启电源:拉 PROGRAM_B 即可重配,支持现场重载;SelectMAP 支持部分重配置的思路(见进阶 部分重配置入门)。
- 版本验收闭环:每次交付固化后,要测「断电 → 等待 → 上电自动启动 → 版本号正确 → 功能自检通过」,不能只验「烧完当下在跑」。
最后建立一个清晰的心智模型:JTAG 是「开发者通道」,Flash 是「产品通道」,配置逻辑是「开机引导程序」,状态脚是「引导日志」。入门期把这条通道完整走通三次(直下、固化、故意制造一次启动失败再修好),后面所有高级话题(远程升级、安全启动、多启动、产线)都是在这四块上加机制。
补充一个新手常问的问题:既然每次上电都要重配,那 FPGA 启动会不会慢到不能用?答案是看应用。消费类小器件几 Mb 比特流、x1 SPI、低频 CCLK 下大约几十到几百毫秒,人眼基本无感;中大型器件裸镜像可能几十 MB,不压缩、x1 加载要数秒,产品化时会用比特流压缩(工具生成时打开 compress,FPGA 加载时边解压)、x4 宽度、更高 CCLK 把时间压回亚秒级。和 MCU 的毫秒级启动比,FPGA 确实慢,因此对启动时间极敏感的系统(比如汽车上电瞬间就要驱动继电器)会用一颗小 CPLD/MCU 先接管关键时序,FPGA 配好后再交接,这是板级系统设计里很常见的分工。另一个常被忽略的点是配置期间所有用户 IO 默认高阻,板上外设看到的是「总线悬空」的几百毫秒,底板设计要保证这个阶段外设处于安全态(使能脚默认关闭、电机不转、光耦不通),否则每次上电瞬间可能产生误动作。这已经超出 FPGA 本身,属于硬件协同设计范畴,但软件工程师必须在文档评审时明确指出「配置期间引脚高阻」这个事实(板级协同的系统观见 板卡外设地图 与专家 板级协同设计)。
再补充一类容易被新手忽略的配置相关现象:配置失败和温度、电源质量有关。配置瞬间整片器件同时开关,电源轨会出现明显的浪涌电流(in-rush current),如果板上电源芯片的软启动时间太短、去耦电容不足,电压可能在加载中途跌出容许范围,表现为「偶尔上电失败、重开一次又好了」「温度低时启动困难」。这类问题用 JTAG 反复下载永远复现不了,因为 JTAG 下载时电源已经稳定。排查时用电流探头或示波器交流档量电源轨在上电瞬间的跌落与纹波,对照数据手册的配置电压容限,通常加电容、调软启动、检查电源裕量即可解决。同理,板子上电源指示灯亮不代表 FPGA 的所有供电 Bank 都正常,配置 Bank、辅助电源(VccAux)、BRAM 专用电源任何一路缺失都可能导致 JTAG 能识别但配置失败,这也是为什么硬件 bring-up 阶段第一件事永远是逐轨量电压,而不是急着连下载器(系统化的上电检查流程见进阶 Bring-up Checklist 与 供电与散热)。
十三、Intel 平台与开发板上的实操对照
虽然工具名称不同,概念完全平移,把两边词汇对照清楚,换平台不会慌:
| 概念 | Xilinx/Vivado | Intel/Quartus |
|---|---|---|
| 临时下载文件 | .bit | .sof(SRAM Object File) |
| Flash 镜像/烧录文件 | .mcs/.bin | .jic/.pof(经 Convert Programming File 生成) |
| 配置 Flash | QSPI(Micron/Spansion 等通用芯片) | EPCS/EPCQ(Intel 指定串行配置芯片,新型号也支持通用 QSPI) |
| 在线下载工具 | Hardware Manager | Programmer(USB-Blaster) |
| 配置成功指示 | DONE 引脚 | CONF_DONE 引脚 |
| 状态/错误指示 | INIT_B | nSTATUS(配置错误拉低) |
| 请求重配 | PROGRAM_B | nCONFIG |
| 主串模式 | Master SPI | Active Serial(AS) |
| 从并模式 | Slave SelectMAP | Passive Parallel(PS/PPS,MCU 配置) |
实操层面的共性要点:①开发板通常板载下载器(FTDI 或 Cypress 芯片转 JTAG),只需一根 USB;外接下载器时注意排针方向和电平,Vref 脚一定要接目标 Bank 电压,否则下载器输出电平不确定。②第一次连不上时,重装/确认电缆驱动、换高质量 USB 线(很多「找不到器件」其实是 USB 供电或线序问题)、把 JTAG 时钟降到最低。③笔记本跑虚拟机时 USB 透传不稳定是常见麻烦,优先原生系统或可靠的 USB 转发。④烧 Flash 时电流略增、时间数十秒,期间别断电、别拔线,养成「先 verify 再断电」的习惯。
学习板上建议做的三个练习:第一,观察 DONE/INIT 灯在 JTAG 下载前后的变化;第二,故意把模式跳线拨错,验证「JTAG 仍可下载、Flash 不能自启动」,建立两通道独立的直觉;第三,烧一版错误镜像(比如选 x4 但板子只接了 x1),用示波器或灯观察 CCLK 和 DONE 的状态,再修复,亲手经历一次完整的启动失败定位,比读十遍文档都有效。
十四、自查清单与交付验收
每次涉及下载/固化,按清单走一遍,可以避免 90% 的低级问题:
- 本次该走哪条通道?只是验证逻辑用 JTAG;版本交付才烧 Flash,别把 Flash 当日常迭代手段。
- 比特流是不是最新 RTL 生成?综合、实现、Generate Bitstream 三步有没有重跑(改约束也要重跑实现)?
- Flash 固化时,型号、容量、电压、x1/x4、字节序五件套与原理图实物逐一核对了吗?
- 模式跳线在断电状态下确认到主 SPI 了吗?DONE/INIT_B 状态灯位置找到了吗?
- 版本号、日期、git 标识能不能从运行的设计里读出来?交付包(bit/mcs/ltx/源码标签)归档了吗?
- 验收做了「断电、等待、重新上电、自启动、版本正确、功能自测」全流程,而不是只看烧录当下?
- 现场调试口(JTAG)的安全策略明确吗?公开交付是否需要禁回读/加密(见 FPGA 安全)?
最后把本文的核心因果链再串一次:因为主流 FPGA 的配置点是 SRAM,所以掉电必失;因为掉电必失,所以开发用 JTAG 直写、产品用外部非易失 Flash;因为要自己从 Flash 加载,所以有模式脚、配置控制器、CCLK、DONE/INIT 这一整套启动机制;因为现场不能开盖接 JTAG,所以才有在线升级、A/B 分区、golden 回滚和安全启动这些工程话题。把这四条因果记住,遇到任何新平台(甚至 RISC-V FPGA、国产 FPGA),你要找的永远是这几样东西:配置存储工艺、下载文件格式、配置模式、状态脚、Flash 型号与镜像参数。工具按钮位置会变,这套模型不会变。
常见坑对照
| 坑 | 现象 | 正确做法 |
|---|---|---|
| 改了代码没重新生成比特流 | 跑旧逻辑 | 重新 Generate Bitstream |
| MODE 脚没设主 SPI | 上电不自启动 | 查跳线/原理图 |
| Flash 型号/位宽选错 | 烧写失败/不启动 | 按板子选 MCS 参数 |
| 时钟/复位/管脚约束错 | 下载成功但不工作 | 核对 XDC,用 ILA 抓 |
| DONE/INIT 不拉高 | 配置失败 | 查模式/Flash/时钟 |
相关与延伸
入门:开发全流程、XDC 管脚与时序、ILA 第一次用。 深入:专家 FPGA 量产与烧录(产线烧录/A-B 回滚)、FPGA 安全(比特流加密/安全启动)。
一句话总结
FPGA 是 SRAM 易失器件:JTAG 下载 .bit 只是把配置临时载入内部 SRAM、立刻能跑但掉电即失,适合开发反复烧;要掉电不丢、上电自启动,得把比特流转成 .mcs/.bin 烧进板上非易失 QSPI Flash,FPGA 上电按 MODE 引脚选主 SPI 模式、自己发 CCLK 从 Flash 读回配置、CRC 校验后 DONE 拉高开始运行。JTAG 用 Hardware Manager 直接 Program;Flash 固化先生成 MCS(选对型号/容量/SPI 位宽)→ Add Configuration Memory → Program。下载成功但不工作先查比特流是否最新、时钟/PLL locked、复位极性、管脚电平约束并用 ILA 抓;Flash 不自启动重点查 MODE 跳线、Flash 型号/MCS 参数、DONE/INIT 状态。记住:调试用 JTAG、交付烧 Flash。
上一篇:34 ILA 第一次用(在线逻辑分析仪/触发) | 下一篇:36 资源利用率报告(LUT/FF/BRAM/DSP) | FPGA 系列目录