1.1 简介
在嵌入式设备远程维护的背景下,实现 FPGA 固件的安全、可靠升级成为关键需求。近期项目中成功实施了高云 FPGA 的远程升级方案。本文梳理其核心升级原理,包括比特流加载测试及逻辑 SPI 读写 Flash。
1.2 高云 FPGA 升级原理

上图展示了高云 FPGA 的远程升级流程。该方案支持多比特流启动,系统可从两个用户比特流(MultiBoot Bitstream 1 和 2)中选择一个运行。其核心优势在于安全冗余机制:当任一用户比特流加载或运行失败时,FPGA 将自动回退至绝对可靠的'黄金比特流',确保设备始终能恢复至可工作的基础状态。
1.3 比特流加载测试
根据高云 FPGA 升级流程,可进行最简单的测试:通过软件将 MultiBoot_Bitstream1 下载到 Flash 的 0 地址,将 Golden Bitstream 下载到 Flash 的 Golden_Address,这样 FPGA 上电会运行 MultiBoot_Bitstream1。当人为破坏或擦除 MultiBoot_Bitstream1 后再次上电,FPGA 会运行 Golden Bitstream,以此验证 bit 流加载功能。例如 MultiBoot_Bitstream1 为 update_led,Golden Bitstream 为 golden_led,Golden_Address 为 0x800000。


注意: Golden Bitstream 的地址位置在高云 FPGA 中有默认值,在下载程序中可读取该地址。该地址的每一位只能把 0 写成 1,不能由 1 变成 0,因此地址只能改得比默认值更大。FPGA 出厂时将此值设置为 0x800000(刚好是 8M Flash 的大小),因此使用 8M Flash 时需将 Golden Bitstream 下载到 Golden_Address 位置。若更换为 16M Flash 则测试成功。

1.4 多 Bit 流启动功能实现远程升级
由于使用的 SPI Flash 是 8M,无法使用独立的 Golden Bitstream 空间,此时可使用高云 FPGA 的多 Bit 流启动功能实现升级。根据升级原理,可将 MultiBoot_Bitstream1 作为稳定的 Bit 流,在其中启动 MultiBoot_Bitstream2。这种情况需要在 MultiBoot_Bitstream1 中配置 MultiBoot_Bitstream2 的加载地址,并将 MultiBoot_Bitstream2 下载到该地址。
例如将 MultiBoot_Bitstream2 的启动地址设置为 0x400000。需在 MultiBoot_Bitstream1 的配置页面进行如下配置后重新编译。更改地址配置后,重新编译,将 MultiBoot_Bitstream1 下载至 Flash 的 0x000000 地址(FPGA 上电默认从 0x000000 地址启动),将 MultiBoot_Bitstream2 下载至 0x400000。在 MultiBoot_Bitstream1 中发送 Reboot 指令即可跳转到 MultiBoot_Bitstream2。





