找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

344

积分

1

好友

36

主题
发表于 前天 03:03 | 查看: 17| 回复: 0

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

启动流程:

  1. 读取Header中的M镜像地址(0x100000)
  2. 成功加载M镜像则直接运行
  3. 加载失败(同步字丢失、CRC错误)时回退至G镜像地址(0x44)

典型应用方案:

  • G镜像负责M镜像存储区域的写操作
  • M镜像包含用户逻辑和自更新功能
  • G镜像存储区域始终保持只读,确保回退可靠性

ISE环境实现(XC6SLX9)

创建两个ISE工程分别生成G镜像(单LED闪烁)和M镜像(四LED闪烁):

关键配置步骤

  1. 使能重试配置:General Options->Retry Configuration if CRC Error Occurs
  2. G镜像设置:
    • 指定M镜像起始地址0x100000
    • 设置G镜像偏移地址0x44
  3. M镜像设置:
    • 添加参数-g next_config_register_write:Disable

使用iMPACT合成mcs文件:

  • G镜像从0地址开始
  • M镜像从0x100000开始

验证方法:

  • 正常启动:四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

Golden镜像Header解析

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
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-1 17:47 , Processed in 0.054135 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表