不用 JTAG 也能刷 FPGA:TinyFPGA-Bootloader 让比特流加载更简单

TinyFPGA-Bootloader:FPGA 上的开源 USB 引导加载器解决方案

在 FPGA 设计中,一个常见但略显繁琐的环节是:如何方便地将新的比特流加载到 FPGA。尤其是在没有专用 USB-JTAG/编程芯片或者在低成本板卡中,传统的编程方式可能需要额外硬件或较复杂流程。

而 TinyFPGA‑Bootloader 项目正是为了解决这个痛点------它是一个 开源的 USB 引导加载器(bootloader)IP,可直接在 FPGA 的可编程逻辑中实现,从而以 USB 虚拟串口的形式向 SPI Flash 编程上传比特流。

项目简介

名称:TinyFPGA-Bootloader

开源地址:GitHub(由 TinyFPGA 组织维护)

https://github.com/tinyfpga/TinyFPGA-Bootloader

许可证:Apache-2.0

功能:通过 USB 虚拟串口(USB CDC)将主机侧的命令发送至 FPGA 内部的 bootloader,再由 bootloader 内部桥接至 SPI Flash,从而完成 FPGA 配置或用户镜像加载。

硬件需求示例:

  • FPGA 板卡需具备 USB_P、USB_N 3.3 V 信号。
  • 板卡需有产生稳定 48 MHz 时钟的振荡器 + PLL。

  • FPGA 配置需来源于外部 SPI Flash。

  • USB_P 信号连接上拉电阻(1.5 kΩ)并建议通过 usb_pu 信号控制。

  • 建议支持多镜像启动(bootloader + 用户镜像)结构。

核心特点

● 无需额外 USB 转 SPI 芯片

由于 bootloader 完全在 FPGA 内部逻辑实现,板卡可以省去专用 USB 编程芯片,从而降低成本、简化硬件设计。

● 使用熟悉的串口方式编程

主机将 FPGA 识别为"虚拟串口设备",用户通过简单的命令即可触发 bootloader 功能,降低入门门槛。

● 支持用户镜像 + bootloader 镜像分区

该设计支持多镜像结构:bootloader 位于 SPI Flash 的专用区域,用户配置位于另一镜像区,bootloader 在启动后可跳转至用户镜像,或执行更新机制。

● 板卡元数据存储机制

SPI Flash 的安全寄存器页可用于存储诸如板卡名称、FPGA 型号、硬件版本、序列号、地址映射等元数据,便于通用软件识别板卡并自动执行编程。元数据采用 JSON 格式,清晰易读。

● SPI Flash 编程协议公开

bootloader 支持通过 "Access SPI" 命令在 USB 虚拟串口上执行任意 SPI Flash 访问操作(写、读、擦除等)。设计者可以查看 README 文档中的完整协议描述。

例程

该项目中有几款开发板的例程,核心还是自家制作的Tiny系列开发板:

当然也有针对Xilinx A7系列入门开发板例程:

打开后即可查看相关DEMO:

注意:Vivado版本2017

适用场景

低成本 FPGA 板卡:希望减少外部编程芯片、简化 USB 接口设计。

FPGA 教学 / 原型开发:快速将新镜像下载至板卡,在实验室或教学环境中尤为便利。

可编程系统 / 多镜像方案:支持 bootloader + 用户镜像结构,适合需要远程更新或 EEPROM 风格的机制。

硬件开发者希望精简流程:将编程流程简化为"插 USB → 虚拟串口 → 下载镜像",提升工程效率。

使用建议 &注意事项

在使用前请确认板卡 USB_P/N 信号设计正确、上拉电阻接入、"usb_pu"控制是否支持。

必须保证 FPGA 时钟系统能产生准确稳定的 48 MHz 给 USB 栈,否则可能导致 USB 连接不可靠。

设计 SPI Flash 容量时建议考虑"多镜像 + 用户数据"结构,需要预留足够空间。

虽然 bootloader 功能强大,但安全机制(如加密镜像、镜像签名、保护区)需由用户自行实现。

若需将该 bootloader 集成至大型 FPGA/SoC 项目,请评估板卡资源占用、逻辑干扰和时序影响。

总结

TinyFPGA-Bootloader 是一个非常实用、工程友好、开源可信的解决方案,适合在 FPGA 板卡设计中快速实现 USB 引导加载功能。它不仅降低了硬件复杂性,也显著简化了镜像下载、更新与板卡上板流程。这对于教学、原型开发、板卡小批量生产都是一个极佳选择。

注意大bit流的下载时间~

仓库地址

https://github.com/tinyfpga/TinyFPGA-Bootloader

相关推荐
仲南音2 天前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner2 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20203 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy3 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia3 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20203 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子3 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安4 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun5 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun5 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议