跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言

FPGA 初学者指南:Vivado 下载与烧录流程详解

FPGA 开发中 Vivado 软件的两种配置方式:JTAG 临时下载用于调试,以及 Flash 永久烧录用于固化部署。文章讲解了硬件准备、比特流生成、硬件管理器操作、Tcl 脚本自动化烧录及常见问题排查策略,帮助开发者理解从临时运行到独立运行的完整流程。

安卓系统发布于 2026/4/5更新于 2026/7/2560 浏览

FPGA 入门指南:Vivado 下载与烧录流程详解

你有没有遇到过这样的情况? 写好了 Verilog 代码,综合实现一路绿灯,结果点下'Download'按钮时——Vivado 卡住不动;或者好不容易下载成功,断电再上电,FPGA 却像失忆了一样,什么都没运行。

别急,这几乎是每个 FPGA 初学者都会踩的坑。问题不在你的代码,而在于你还没搞清楚一个关键区别:'临时下载'和'永久烧录'是两回事。

今天我们就来彻底讲明白:从你在电脑上点开 Vivado 开始,到 FPGA 真正稳定运行你的设计为止,这一整套流程到底是怎么走的。不绕术语,不说空话,只讲你实际会用到的东西。


一、先搞清一件事:为什么 FPGA 要'下载'两次?

很多新人困惑的第一个问题是:

'我都把.bit 文件下进去了,为啥断电就没了?'

答案很简单:FPGA 本质是一块超大规模的 SRAM 电路板。它内部没有存储能力,所有逻辑配置都是靠上电时加载的一串'开关指令'(也就是比特流)来决定的。一旦断电,这些开关状态全归零。

所以,我们通常说的'下载',其实分两个层次:

类型目标位置是否掉电保存用途
JTAG 下载FPGA 内部 SRAM❌ 否调试验证阶段
Flash 烧录外部 SPI Flash 芯片✅ 是产品固化部署

你可以把前者想象成用 U 盘直接运行程序(即插即用),后者则是把系统装进硬盘里开机自动启动。

接下来我们就一步步拆解这两个过程。


二、第一步:通过 JTAG 把程序'临时'跑起来

1. 准备工作:软硬件都得在线

在动手前,请确认以下几点已经就绪:

  • ✅ Vivado 已安装(推荐 2023.1 及以上版本)
  • ✅ Xilinx USB Cable 驱动已正确安装(Windows 设备管理器中能看到'Xilinx JTAG Cable')
  • ✅ 开发板供电正常(最好用外接电源,别靠 USB 口硬撑)
  • ✅ JTAG 线连接无误(注意引脚方向,别反插)

如果 Vivado 打不开 Hardware Manager 或提示'no hardware found',90% 的问题出在这一步。

🔧 小贴士:如果你用的是 Digilent 下载器(比如 Nexys 系列常用),记得额外安装 Digilent Adept Runtime,否则可能无法识别。


2. 工程走到哪一步才能下载?

当你完成以下流程后,就可以准备下载了:

编写 HDL → 添加 XDC 约束(管脚 + 时钟) → 综合 (Synthesis) → 实现 (Implementation) → 生成比特流 (Generate Bitstream)

其中最关键的一步是 Generate Bitstream,它会输出一个 .bit 文件,这是 FPGA 能读懂的'二进制配置文件'。

⚠️ 注意:.bit 文件默认路径通常是 ./<project>.runs/impl_1/top.bit,名字取决于顶层模块名。


3. 打开 Hardware Manager,连上 FPGA

点击菜单栏 Open Hardware Manager → Open Target → Auto Connect

这时你会看到 JTAG 链上的设备被扫描出来,通常是你的 FPGA 芯片(比如 xc7a35t_0)。

右键选择 Program Device,选中刚才生成的 .bit 文件,点击'Program'。

✅ 成功标志:LED 开始闪烁、串口打印数据、ILA 抓到信号波形……

但这只是暂时的!只要断电,一切归零。


4. 为什么这个方式适合调试?

因为快!

改一行代码 → 重新生成 bit → 再下载,整个过程不到一分钟。你可以反复迭代功能,配合 ILA(集成逻辑分析仪)实时观测内部信号,就像给 FPGA 做'心电图'。

而且支持 Partial Reconfiguration —— 高级玩法来了:只更新部分逻辑而不影响其他模块运行,这对通信系统或图像处理流水线特别有用。


三、第二步:让程序'永久'住在 FPGA 里 —— Flash 烧录详解

现在你要问了:'我总不能每次演示都连电脑吧?能不能让它自己启动?'

当然可以,这就需要把 .bit 文件写进外部 Flash 芯片里。

1. 硬件基础:FPGA 是怎么'自举'的?

大多数开发板都会配一颗 SPI Flash 芯片(常见型号如 N25Q128A、S25FL128S),容量一般为 16MB 左右。

FPGA 内部有个隐藏的'小助手'——Bootloader 控制器。上电时,它会根据模式引脚(MODE[2:0])判断是否进入主模式(Master SPI Mode)。如果是,就会主动通过 SPI 接口去读取 Flash 里的比特流,并加载到自身配置内存中。

🔄 这个过程叫 Configuration,不是'执行程序',而是'构建电路'。


2. 如何生成可用于烧录的镜像文件?

.bit 文件不能直接写进 Flash,必须封装成特定格式。最常用的是 .mcs 文件(Motorola HEX 格式),兼容性好,Vivado 原生支持。

方法一:图形界面操作

在 Hardware Manager 中: - 点击 Add Configuration Memory Device - 选择 Flash 型号(例如 Spansion S25FL128S) - 加载你的 .bit 文件 - 设置编程参数(电压、速率等) - 点击 Program 即可生成并烧录

方法二:Tcl 脚本自动化(推荐用于量产)
# 指定原始 bit 文件路径
set bitfile "./project.runs/impl_1/top.bit"
# 声明外部 Flash 设备(接口类型 + 容量)
add_cfg_mem -iface spi -size 16M -dci_file "cfgmem_dci.xml" -data_file {up} ${bitfile}
# 生成 MCS 文件
write_cfg_mem -force -format mcs -interface spi \
-size 16 -load_bitstream true \
-file "./output/project_image.mcs"

这段脚本可以在批处理或 CI/CD 流程中调用,避免手动重复操作。


3. 烧录完成后,怎么验证是否生效?

关键四步:

  1. 断开 JTAG 连接;
  2. 修改开发板上的启动模式拨码开关,设为 Master SPI 模式;
  3. 断电重启;
  4. 观察用户逻辑是否自动运行(如 LED 按预期闪烁)。

✅ 如果一切正常,恭喜你完成了从'开发调试'到'独立运行'的跨越!


四、那些年我们都踩过的坑:常见问题与应对策略

❌ 问题 1:JTAG 识别不了 FPGA

现象:Hardware Manager 显示'No hardware targets available'

排查清单: - [ ] 驱动是否安装?→ 设备管理器看是否有黄色感叹号 - [ ] USB 线是不是劣质线?→ 换一根带屏蔽的短线试试 - [ ] 板子有没有供电?→ 测一下 VCCINT 和 VCCAUX 电压 - [ ] JTAG 插座焊反了?→ 查原理图核对 TDI/TDO/TCK/TMS 顺序

💡 经验之谈:某些 Zynq 器件还需要 PS 端先上电才能激活 PL 端 JTAG,别忘了给 PMOD 供电。


❌ 问题 2:下载进度条卡在 50%

典型原因:电源不稳定或信号干扰

解决方案: - 使用独立稳压电源(至少 2A 输出能力) - 缩短 JTAG 线长度(建议≤30cm) - 在 TCK 线上加 10Ω串联电阻抑制振铃 - 关闭其他高功耗外设(如 DDR、HDMI)


❌ 问题 3:Flash 烧录失败,报错'Erase failed'

最大陷阱:选错了 Flash 型号!

虽然都是 QSPI Flash,但不同厂商的命令集和扇区结构不一样。Vivado 内置了几十种 Flash 算法,必须严格匹配。

正确做法:

  1. 查开发板手册,找到 Flash 芯片完整型号;
  2. 在 Add Configuration Memory Device 对话框中精确选择;
  3. 不确定时优先选'Generic SPI'尝试;
  4. 若仍失败,查看 Xilinx 官方文档 UG973 中的兼容列表。

❌ 问题 4:上电不启动,但 JTAG 能下载

九成概率是这里错了:启动模式没设置对!

FPGA 有多种配置模式,由 MODE 引脚决定:

MODE[2:0]模式应用场景
001Master BPI大容量并行 Flash
010Master SPI最常用,推荐
100JTAG调试专用
111Slave Serial由外部主控驱动

请务必检查拨码开关或跳线帽是否将 MODE 设为 010(SPI Master)。


五、进阶建议:如何写出更可靠的烧录流程?

✅ 推荐实践 1:预留双镜像备份(Fallback 机制)

高端应用中常采用'双系统'设计:Flash 中存两份比特流镜像。主镜像升级失败时,自动回退到安全版本。

实现方法: - 分配两个独立地址段(如 0x0 和 0x400000) - 使用 Tcl 脚本分别打包两个.mcs - 在 FSBL(First Stage Boot Loader)中加入校验逻辑


✅ 推荐实践 2:启用比特流加密(防逆向)

Xilinx 7 系列及以上支持 AES-256 加密。开启后,即使别人拆下 Flash 也读不出有效内容。

操作路径: - Project Settings → Bitstream → Set Property ENCRYPT=TRUE - 生成加密密钥(可通过 Bbram 或 Efuse 存储)

⚠️ 注意:一旦烧入 Efuse,不可逆转,请谨慎测试!


✅ 推荐实践 3:为未来留余地——多留点 Flash 空间

哪怕你现在只需要 2MB,也建议选 16MB 以上的 Flash 芯片。

为什么?因为你永远不知道以后会不会加上: - Bootloader(如 MicroBlaze + lwIP) - 校准数据表 - 固件日志记录 - OTA 远程升级包缓存

提前规划,后期不慌。


六、最后总结:一张图看懂全流程

[PC] │ ├─→ Vivado 开发环境 │ │ │ ├── 编写代码 & 添加约束 (XDC) │ ├── 综合 → 实现 → 生成 .bit │ │ │ ├──【调试阶段】──────────────┐ │ │ ↓ │ │ │ JTAG 下载 .bit → FPGA SRAM ← 可配合 ILA 调试 │ │ (临时运行) │ │ │ └──【部署阶段】──────────────┐ │ ↓ │ │ 生成 .mcs → 写入 SPI Flash ← Program Configuration Memory │ (永久存储) │ ↓ │ 断电重启 │ ↓ └────────────────────→ FPGA 自动加载 → 运行设计 (无需 PC) 

写在最后

掌握 Vivado 下载与烧录流程,不只是学会点几个按钮,而是理解 '软件如何变成硬件行为' 的全过程。

当你第一次看到 FPGA 脱离电脑、独立运行你写的逻辑时,那种成就感,只有真正做过的人才懂。

而这一切的基础,就是弄明白: 👉 .bit 是给谁用的? 👉 .mcs 又是怎么来的? 👉 JTAG 和 SPI 到底各司何职?

把这些理顺了,你就不再是'只会写代码的新手',而是真正掌握了 FPGA 开发闭环的工程师。

目录

  1. FPGA 入门指南:Vivado 下载与烧录流程详解
  2. 一、先搞清一件事:为什么 FPGA 要“下载”两次?
  3. 二、第一步:通过 JTAG 把程序“临时”跑起来
  4. 1. 准备工作:软硬件都得在线
  5. 2. 工程走到哪一步才能下载?
  6. 3. 打开 Hardware Manager,连上 FPGA
  7. 4. 为什么这个方式适合调试?
  8. 三、第二步:让程序“永久”住在 FPGA 里 —— Flash 烧录详解
  9. 1. 硬件基础:FPGA 是怎么“自举”的?
  10. 2. 如何生成可用于烧录的镜像文件?
  11. 方法一:图形界面操作
  12. 方法二:Tcl 脚本自动化(推荐用于量产)
  13. 指定原始 bit 文件路径
  14. 声明外部 Flash 设备(接口类型 + 容量)
  15. 生成 MCS 文件
  16. 3. 烧录完成后,怎么验证是否生效?
  17. 四、那些年我们都踩过的坑:常见问题与应对策略
  18. ❌ 问题 1:JTAG 识别不了 FPGA
  19. ❌ 问题 2:下载进度条卡在 50%
  20. ❌ 问题 3:Flash 烧录失败,报错“Erase failed”
  21. ❌ 问题 4:上电不启动,但 JTAG 能下载
  22. 五、进阶建议:如何写出更可靠的烧录流程?
  23. ✅ 推荐实践 1:预留双镜像备份(Fallback 机制)
  24. ✅ 推荐实践 2:启用比特流加密(防逆向)
  25. ✅ 推荐实践 3:为未来留余地——多留点 Flash 空间
  26. 六、最后总结:一张图看懂全流程
  27. 写在最后
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 基于大疆 MSDK 的无人机视觉引导自适应降落实现
  • 数据结构与算法核心知识点梳理及学习建议
  • 数据结构:顺序表的概念、实现与操作
  • 解决新机型 Copilot 键替代右 Ctrl 键问题
  • 单片机四舍五入算法原理与嵌入式边界处理实践
  • ERNIE-4.5-0.3B 轻量级模型部署指南与能力测评
  • Python 列表基础:创建、操作与切片详解
  • Rust 异步 Web 框架 Axum:核心原理与实战进阶
  • JDBC 连接 Oracle 数据库的常见连接串格式
  • OpenHarmony 与华为云 IoT 智能家居实战指南
  • 昇腾平台 DeepSeek-R1 与 Qwen2.5 强化学习训练优化实践
  • Ollama v0.17.0 更新:OpenClaw 自动安装、Web 搜索支持与 Tokenizer 性能优化
  • AI 技术民主化:非技术背景如何构建高价值应用
  • C++ string 类全面解析
  • OpenHarmony 开发:使用 objectid 实现离线分布式 ID 生成
  • 开源 AI 短剧工具使用指南:多 Agent 协作生成流程
  • Kafka 核心架构与分布式存储深度解析
  • GitHub 热门项目日榜 (2026-02-17)
  • 限流算法详解:令牌桶、漏桶与计数器算法及 Java 实现
  • Mastering GitHub Copilot 课程点评:免费版与 Pro 版差异解析

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online