TinyFPGA-Bootloader:FPGA 上的开源 USB 引导加载器解决方案
在 FPGA 设计中,一个常见但略显繁琐的环节是:如何方便地将新的比特流加载到 FPGA。尤其是在没有专用 USB-JTAG/编程芯片或者在低成本板卡中,传统的编程方式可能需要额外硬件或较复杂流程。
而 TinyFPGA‑Bootloader 项目正是为了解决这个痛点------它是一个 开源的 USB 引导加载器(bootloader)IP,可直接在 FPGA 的可编程逻辑中实现,从而以 USB 虚拟串口的形式向 SPI Flash 编程上传比特流。
项目简介
名称:TinyFPGA-Bootloader
开源地址:GitHub(由 TinyFPGA 组织维护)
许可证: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流的下载时间~
