不用 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

相关推荐
贝塔实验室4 小时前
Altium Designer 6.0 初学教程-在Altium Designer 中对PCB 进行板层设置及内电层进行分割
嵌入式硬件·fpga开发·编辑器·硬件工程·信息与通信·信号处理·pcb工艺
ThreeYear_s5 小时前
【FPGA+DSP系列】——MATLAB simulink单相PWM全控整流电路基础版
开发语言·matlab·fpga开发
forgeda5 小时前
赛灵思FPGA的市场份额,要从2025年的55%,进一步提升到2030年的70%,凭什么?
ai·fpga开发
怀民民民5 小时前
关于ADC
单片机·嵌入式硬件·fpga开发·adc·学习总结·模数转化
太爱学习了5 小时前
步进电机sin曲线加速及FPGA实现
fpga开发·步进电机
尤老师FPGA5 小时前
LVDS系列33:Xilinx 7系 ADC LVDS接口参考设计(四)
fpga开发
FPGA_无线通信5 小时前
FPGA PCIE 包解析
fpga开发
Aaron15885 小时前
通用的通感控算存一体化平台设计方案
linux·人工智能·算法·fpga开发·硬件工程·射频工程·基带工程
知南x5 小时前
【Socket消息传递】(1) 嵌入式设备间Socket通信传输图片
linux·fpga开发