FPGA远程更新升级和测试(MultiBoot)

📅 2026/8/2 9:33:44 👁️ 阅读次数 📝 编程学习
FPGA远程更新升级和测试(MultiBoot)

最近项目上要使用FPGA程序的远程更新功能,空闲时间在自己的开发板上先搞了一套(千兆网接口),并实现在线重加载;参考了之前的内容,将3字节指令的flash驱动兼容到4字节指令上:

FPGA实现千兆网UDP协议(含ARP、ICMP)

FPGA外挂存储器应用2——QSPI Flash读写等功能

基于ZYNQ的远程更新功能

测试硬件FPGA(Ku5p)、NorFlash(MX25U512)

适用场景:板卡有对外接口(比如:网口、串口、USB、PCIe等),板卡与板卡互联且有上述对外接口等。

远程更新Flash特别适用于人员不方便接触板卡,比如产品部署在偏远的通信基站、机房服务器或者密封的设备机箱中,突然发现一个bug需要修复,或者要增加一个新功能等。

远程更新完Flash后,重加载程序,可以通过外部MCU或者FPGA内部IPROG命令(等同赋值PROGRAM_B负脉冲)在线重加载,或者掉电重启。

1. MultiBoot方案

为例规避在线更新程序的过程中出现断电、断线、通信中断、传输的文件有问题等意外情况,使得固化程序未全部写入Flash,造成FPGA变砖无法启动,只能通过JTAG再次更新程序;FPGA厂商都考虑了这个问题,提供了双镜像方案,比如Xilinx的Golden镜像和Multiboot镜像,允许在同一个配置Flash中存储多个bitstream,并在不同镜像之间进行动态切换。

可参考:

ug570-ultrascale-configuration

xapp1257-multiboot-fallback-spi-flash

xapp1296-multiboot-fallback-icap

1.1. 启动流程

通过双镜像架构和Fallback回退机制,即使在升级过程中发生意外(断电、通信中断、文件错误等),系统也能自动恢复到稳定状态,从根本上解决了FPGA远程升级“变砖”的问题。

在MultiBoot方案中,通常包含两个镜像:

Golden Image(黄金镜像):存储在Flash的起始地址(0x00000000),包含FPGA的基本功能和远程升级逻辑。这个镜像具备远程更新Flash功能,固化后不要更新,是系统最后的容错保障。

Update Image(更新镜像):存储在自定义的Flash某高位地址,包含实际的业务功能。这个镜像是实际远程升级的。

配合Fallback(回退)机制,当Update Image加载失败时,FPGA会自动回退到Golden Image,确保系统始终能够正常运行保障仍可再次远程更新。

主要有以下几个步骤:

上电启动:FPGA上电后,从Flash的0地址开始加载Golden Image。

检测IPROG命令:Golden Image的Header中包含一个特殊的IPROG(Internal Program)命令和WBSTAR(Warm Boot Start Address)寄存器,后者指向Update Image的存储地址。

跳转加载:FPGA检测到IPROG命令后,跳转到WBSTAR指定的地址,开始加载Update Image。

正常运行:如果Update Image加载成功,FPGA运行更新后的业务功能。

触发回退:如果加载过程中出现错误(CRC校验失败、IDCODE不匹配、Watchdog超时等),FPGA自动触发Fallback,重新从0地址加载Golden Image。

1.2. 相关配置

G镜像的约束文件需要指定M镜像的位置,如果Flash容量大于128Mb,需要开启4字节地址。根据自己板卡的原理图设置SPI是单线、双线还是四线模式。

M镜像需要使能Fallback回退。

比如本板卡的设置:

关于Flash的片选和信号线的约束,UltraScale+和其他系列不同;U+系列使用STARTUPE3源语,无需对Flash管脚IO进行约束;其他U和7系列使用STARTUPE2源语,指定程序启动后的Flash时钟,其他的Flash管脚片选和MSIO进行XDC约束。

程序远程更新完后,如果想使用不掉电在线切换程序,U+系列使用ICAPE3源语,指定M镜像的位置,需要注意每字节内高低位互换,参考UG570

1.3. 初次配置

初次固化G镜像和M镜像时,可通过Vivado生成固化文件:

上述设置G镜像位于地址0x00000000,M镜像位于0x02000000(即G镜像指定的M镜像位置),本板用于配置启动的norflash接了4线,为了快速启动采用了SPIX4。

生成G和M镜像的合成文件后,通过JTAG将合成文件TEST_ALL.bin固化到Flash中,板卡即具备了远程加载和在线重启的功能。

2. 功能测试

开发Golden Image和Update Image功能,开发上位机界面,进行测试:

2.1. 约定命令

上位机下发擦除指令:

指令头4B

指令码4B

M镜像起始地址4B

擦除块数4B

结束码4B

AA55A5A5

B2C1B3FD

EEEEFFFF

FPGA擦除完成反馈指令:

指令头4B

指令码4B

备份4B

备份4B

结束码4B

AA55A5A5

B2C1B3FD

EEEEFFFF

上位机下发更新指令:

指令头4B

偏移地址4B

更新数据256B

结束码4B

55AAAA55

EEEEFFFF

FPGA每包数据更新完成反馈指令:

指令头4B

更新地址4B

备份4B

备份4B

结束码4B

55AAAA55

EEEEFFFF

上位机下发在线重加载指令:

指令头4B

指令码4B

备份4B

备份4B

结束码4B

AA55A5A5

FFEEDDCC

EEEEFFFF

2.2. 远程更新测试

固化文件大小约4.77MB,需要进行sector擦除4KB的个数为1223个

擦除完成时间约28s,平均每4KBsector擦除时间约23ms与Flash Datasheet相符。

从指令下发,历经擦除、逐256B更新,到更新完成整个过程约41s,下载过程相比Vivado还是快很多的。

在线重加载后,可以通过测试指示灯,也可查看M镜像是否启动,经寄存器观测,没有回退,即更新程序启动成功:

往期精彩回顾

FPGA开发PCIe系列2:实现Block DMA的H2C、C2H

FPGA开发中常用的TLP包

FPGA的时钟动态调相和鉴相功能

基于7系列FPGA实现万兆网通信

FPGA实现千兆网UDP协议(含ARP、ICMP)

FPGA 40G/50G Ethernet Subsystem核的使用

基于FPGA的千/万兆以太网通信巨型帧 Jumbo的处理测试

基于FPGA实现NVMe硬盘的读写功能

基于FPGA开发应用SATA硬盘

FPGA实现SD卡内文件的读写功能(FAT32文件系统)

FPGA光通信系列4 — 基于64b/66b编码的自定义协议

FPGA光通信系列3 — 基于8b/10b编码的自定义协议应用

FPGA光通信系列2——Aurora 64B/66B的使用

FPGA实现Aurora光通信应用

JESD204B的使用系列——3、DAC的应用(AD9164 9.6GSPS)

JESD204B的使用系列——2、协议及ADC的应用(AD9689)

JESD 204B的使用系列—1、时钟芯片的应用