Xilinx FPGA的多启动镜像方案为MultiBoot。
该方案的目的是:
当FPGA更新程序时无法加载成功或者工作不正常的时候,可以通过加载Golden Image备份镜像来重新加载进行恢复。
1. MultiBoot工作流程
Flash中划分为两个(或多个)区域,基地址(Addr0)存储Golden image备份程序,高位地址存储MultiBoot image升级程序。Golden image中除了备份程序还内嵌了multiboot启动地址(WBSTAR)和IPROG命令。
FPGA加载启动流程:
FPGA上电后先加载0地址的Golden image,当执行到IPROG命令时跳转地址到WBSTAR地址继续加载MultiBoot image进行程序升级。若在加载过程中错误或中断,则Fallback回到0地址执行Golden image,同时忽略热启动地址和IPROG命令,以确保可以正常加载启动FPGA。
2. IPROG命令
Xilinx的Multiboot方案中使用了一条加载命令:IPROG。而这条命令是放在Golden image中。
具体说,对于FPGA直接从0地址开始读取,先开始加载Golden image,但是这个镜像是经过特别处理的,在镜像数据刚开始的部分添加了IPROG命令和MultiBoot image的地址。当FPGA读取到这个命令之后,就会直接跳过后面的数据,从设置的地址开始继续加载。
当发生了Fallback之后,工程会反跳回0地址开始加载,从新加载G镜像。这里,FPGA内部的配置寄存器会做记录,当发生Fallback之后,会自动忽略IPROG命令,直接加载G镜像后续的部分,来保证G镜像有机会被完整的加载。
链接Xilinx 7系列FPGA Multiboot介绍: link.