FPGA固件升级方案
FPGA的硬件可编程特性为设计提供了高度灵活性,基于FPGA的产品通常需要固件更新或升级。由于现场环境限制(如机房服务器中的FPGA加速卡或偏远地区基站),通过JTAG下载器进行固件刷新往往不现实,因此远程固件升级成为必要解决方案,需满足以下要求:
- 支持基于常见通信协议(串口、USB、CAN、网口、WiFi、蓝牙、PCIe)的固件传输
- 具备防变砖机制,升级过程中发生异常(断电、线缆断开)时可恢复
- 优化升级流程,采用握手、校验、应答等可靠通信协议
与单片机成熟的IAP方案不同,FPGA基于RAM结构,固件存储在外置SPI Flash中。上电后FPGA从Flash读取数据加载至内部RAM,完成后用户可通过SPI Flash存储控制器进行读写操作实现固件升级。
传统方案存在变砖风险:升级过程中异常中断会导致固件不完整,下次启动失败。Xilinx 6/7系列FPGA提供的双镜像方案(Golden镜像和Multiboot镜像)可有效解决此问题,类似于单片机的Bootloader和Application设计。
Golden镜像和Multiboot镜像工作原理
Multiboot镜像(M镜像)为用户应用程序,Golden镜像(G镜像)作为备用固件防止变砖。在SPI Flash(以M25P16为例)中的存储布局为:
- Header:0x0-0x43(包含镜像地址信息)
- G镜像:0x44-0xFFFFF
- M镜像:0x100000-0x1FFFFF
启动流程:
- 读取Header中的M镜像地址(0x100000)
- 成功加载M镜像则直接运行
- 加载失败(同步字丢失、CRC错误)时回退至G镜像地址(0x44)
典型应用方案:
- G镜像负责M镜像存储区域的写操作
- M镜像包含用户逻辑和自更新功能
- G镜像存储区域始终保持只读,确保回退可靠性
ISE环境实现(XC6SLX9)
创建两个ISE工程分别生成G镜像(单LED闪烁)和M镜像(四LED闪烁):
关键配置步骤:
- 使能重试配置:
General Options->Retry Configuration if CRC Error Occurs
- G镜像设置:
- 指定M镜像起始地址0x100000
- 设置G镜像偏移地址0x44
- M镜像设置:
- 添加参数
-g next_config_register_write:Disable
使用iMPACT合成mcs文件:
验证方法:
- 正常启动:四LED闪烁(M镜像运行)
- 人为制造CRC错误:单LED闪烁(回退至G镜像)
Vivado环境实现(XC7K325T)
在xdc约束文件中配置镜像参数:
公共约束:
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property CFGBVS VCCO [current_design]
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]
G镜像专属约束:
set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 32'h00800000 [current_design]
set_property BITSTREAM.CONFIG.NEXT_CONFIG_REBOOT ENABLE [current_design]
M镜像专属约束:
set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design]
通过状态寄存器可验证启动模式:
- M镜像成功:0x0000F0F0
- 回退至G镜像:0x0000F0F1
ISE生成的G镜像前44字节为Header,包含关键配置命令:
/* Header命令解析 */
AA 995566 // 同步字
31 E1 // 配置看门狗定时器
3261 // 写入M镜像地址低16位
3281 // 写入SPI读命令+M镜像地址高8位
32 A1 // 写入G镜像地址低16位
32 C1 // 写入SPI读命令+G镜像地址高8位
32 E1 // 故障安全方案用户寄存器
30 A1 // 写入IPROG跳转命令
Header中的地址配置与ISE设置完全对应,详细命令说明参考Xilinx官方文档。
参考资料
- UG380_Spartan-6 FPGA Configuration
- UG470_7 Series FPGAs Configuration
- xapp1247-multiboot-spi应用笔记
示例工程
- xc6slx9_multiboot_golden_demo.rar
- xc7k325t_multiboot_golden_demo.rar
|