公司动态
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-configurationxapp1257-multiboot-fallback-spi-flashxapp1296-multiboot-fallback-icap1.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中包含一个特殊的IPROGInternal Program命令和WBSTARWarm 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镜像的位置需要注意每字节内高低位互换参考UG5701.3. 初次配置初次固化G镜像和M镜像时可通过Vivado生成固化文件上述设置G镜像位于地址0x00000000M镜像位于0x02000000(即G镜像指定的M镜像位置)本板用于配置启动的norflash接了4线为了快速启动采用了SPIX4。生成G和M镜像的合成文件后通过JTAG将合成文件TEST_ALL.bin固化到Flash中板卡即具备了远程加载和在线重启的功能。2. 功能测试开发Golden Image和Update Image功能开发上位机界面进行测试2.1. 约定命令上位机下发擦除指令指令头4B指令码4BM镜像起始地址4B擦除块数4B结束码4BAA55A5A5B2C1B3FDEEEEFFFFFPGA擦除完成反馈指令指令头4B指令码4B备份4B备份4B结束码4BAA55A5A5B2C1B3FDEEEEFFFF上位机下发更新指令指令头4B偏移地址4B更新数据256B结束码4B55AAAA55EEEEFFFFFPGA每包数据更新完成反馈指令指令头4B更新地址4B备份4B备份4B结束码4B55AAAA55EEEEFFFF上位机下发在线重加载指令指令头4B指令码4B备份4B备份4B结束码4BAA55A5A5FFEEDDCCEEEEFFFF2.2. 远程更新测试固化文件大小约4.77MB需要进行sector擦除4KB的个数为1223个擦除完成时间约28s平均每4KBsector擦除时间约23ms与Flash Datasheet相符。从指令下发历经擦除、逐256B更新到更新完成整个过程约41s下载过程相比Vivado还是快很多的。在线重加载后可以通过测试指示灯也可查看M镜像是否启动经寄存器观测没有回退即更新程序启动成功往期精彩回顾FPGA开发PCIe系列2实现Block DMA的H2C、C2HFPGA开发中常用的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、时钟芯片的应用