网络升级FPGA方案调研与调试
需求概述
根据相关项目需求,需要提供通过网络更新FPGA固化程序的功能。相关关键字为多重启动,Multiboot,个人理解多重启动是指FPGA的配置文件包含两个以上,可以有策略的选择加载哪一个配置文件。
BIT、BIN、MCS文件格式
BIT文件是加了一些文本信息头的二进制配置文件,当然这些文本信息头不会被配置进FPGA。
如图是一个工程的bit文件。文本信息头包含bit流名称、FPGA型号、用户ID、时间等,图中例子中可以看出bit流名是ZD_Monitor_64S。
BIN文件是不包含二进制信息头的二进制配置文件,对比BIT文件图如下。
可以对比看出,BIN文件不带文本信息头。
MCS文件是一种INTER HEX文件;常用与XILINX专用工具结合烧录FPGA flash。关于INTER HEX文件的分析详情,参见文档INTER HEX文件分析.docx
关于这三种配置文件的格式详细说明,以SPARTAN-6为例参见文档ug380 Spartan-6 FPGA Configuration.pdf第5章Configuration Data File Formate以及同章节的Bitstream Composition
配置文件写入FLASH
配置文件从flash的第一个地址开始存储,当在实现Multiboot功能时,在线更新时配置文件存放的地址需要仔细考究。
远程更新FLASH时,结合Multiboot更加安全,如果镜像更新不成功,起码还有一个黄金镜像(golden image)可以用。
- 如果不考虑Multiboot,我们可以从0地址开始逐一存放。
- 如果考虑Multiboot,我们就需要考虑镜像文件的存放地址了,需要配置头中的信息对应起来。
关于Multiboot功能,请参考相关技术介绍章节。
FPGA从FLASH中读取配置文件
从配置文件的格式我们了解到,配置文件一般都由配置头+配置数据+校验组成,当然不同系列FPGA也是有很大的区别的,但是总的来说,都是这个结构。
FPGA加载配置文件肯定是从flash的0地址开始的;先读配置头,配置头数据中有一些指令,例如地址跳转指令等,根据配置头里的一些指令操作,来进行接下来的读取配置数据过程;最后是验证校验是否正确,如果正确,配置完成,如果不正确,自动跳转到golden image的地址位置重新读取配置数据,如果再次失败的话,配置失败。
远程更新FPGA固件的硬件要求
核心要求即为FPGA用户逻辑能主动访问外部flash芯片。
FPGA与外挂flash的引脚连接如果是复用引脚,如果是这种连接方式,FPGA在加载完毕配置文件后,这些复用引脚可以被内部逻辑使用,也就可以主动访问到外部flash。
FPGA(V4系列FPGA)与外挂flash的引脚连接如果是专用引脚,这样在加载完毕配置文件后,不能被内部逻辑使用,内部逻辑也就不能访问到外部flash,更新flash也就无从谈起。
但是有一种解决方案,如下图所示。