Top
首页 > IT产品和服务 > 第一资讯 > 正文

何绪金:FPGA双镜像备份升级方法

发布时间:2017-06-21 18:25        来源:chinahqjjw.com        作者:

摘要:基于FPGA的硬件系统的现场升级是通过FPGA更新其外挂的EEPROM中存储的配置文件来实现的。但是如果在更新EEPROM的配置文件过程中,突发系统掉电,会导致EEPROM中的配置文件不完整,再次上电后FPGA无法工作,从而导致系统失效。本文讲述了一种基于Xilinx的Multiboot的备份升级方法,该方法可以有效的解决产品在线升级FPGA过程中突发掉电导致系统失效的问题,并且工作可靠。

关键字:FPGA 升级 备份

1.引言

FPGA(现场可编程门阵列)因为其高性能和可重新编程的特点得到了越来越广泛的应用。正如其名称所示,FPGA可实现现场可编程,从而实现设备的现场硬件升级或远程硬件升级。在系统上电后,FPGA会根据不同的配置模式(主动加载,被动加载等)把存储在片外EEPROM中的配置文件读入FPGA内部的编程RAM中,配置完成后,FPGA进入工作状态。通过改变EEPROM中的配置文件,就可以实现FPGA内部工作电路的改变。EEPROM存储内容的改变是通过其SPI接口来实现的,而其SPI接口通常又是由FPGA来实现的。如果在配置EEPROM的过程中,系统突发异常掉电,而EEPROM的配置文件并没有被更新完整,则再次上电后,FPGA加载不完整的配置文件,会导致FPGA无法正常启动,由FPGA提供的SPI功能也将无法实现,此时FPGA将丧失重新配置的功能,只能用计算机通过烧录器通过对EEPROM进行配置。而很多情况下,这种拿着笔记本和烧录器跑到工程现场进行FPGA升级是无法实现的。备份升级功能可以有效的解决此类问题,即在EEPROM中存入2个配置文件,但只对其中一个文件进行反复配置,另一个保持不变即备份文件保持不变。当配置文件过程中出现掉电等异常情况使配置异常终止,则再次上电后,FPGA会加载备份文件,可以继续使用FPGA提供的SPI端口,以实现FPGA配置文件的再次升级,可以有效的避免工作现场升级失败导致的设备需要返厂的问题。

2.备份升级的工作原理

传统的FPGA加载方式如下图(a)所示,FLASH(即EEPROM)当中只有一个配置文件update_image。当FLASH中的Update_image文件有错误或不完整时,FPGA加载后并不能启动。这样就陷入一个死锁,当系统通过FPGA例化的SPI配置接口对FLASH进行擦除和写操作时,此时突发异常断电,则重新上电后,由于FLASH中的配置文件是不完整的,FPGA无法启动,导致FPGA例化的SPI配置FLASH接口无法例化而呈现高阻状态,于是系统就无法再对FLASH进行配置操作。

具有备份功能的升级方式如上图(b)所示,FLASH中存入两个配置文件Golden_Image和Update_Image,这两个配置文件存放在不同的地址空间内。Golden_Image从FLASH的0地址开始存储,Update_Image配置文件的存储地址不要与Golden_Image配置文件地址有重合,每个配置文件分配的地址大小取FLASH中sector大小整数倍。Golden_Image地址区域在第一次写入后就不再进行擦除和写入操作,只擦写Update_Image地址区域。

Golden_Image配置文件一般具有以下特点:

1)Golden_Image文件配置地址从0开始。

2)当第一次加载Golden_Image文件时,跳转地址到Update_Image配置文件的存储地址。

3)当加载Update_Image文件超时时(认为加载失败),则重新加载Golden_Image文件,此时不再进行地址跳转。

4)Golden_Image配置文件一般只包含逻辑与FLASH通信所必要的接口及一些必要基本功能。

Update_Image配置文件一般具有以下特点:

1)Update_Image配置文件地址为非0。

2)包含所有功能的完整配置文件。

工作原理如下:

1)上电,FPGA从Flash的0地址开始加载Golden_Image配置文件。

2)Golden_Image加载到跳转指令时,跳转到起始地址指令指定的Update_Image配置文件地址。

3)FPGA加载 Update_Image配置文件并校验。

4)校验成功,Update_Image文件配置完成。

5)校验失败,FPGA回退到地址0重新加载Golden_Image配置文件。此时加载过程中会自动屏蔽跳转地址命令,防止再次进入到加载Update_Image配置文件的循环中。

6)如果启动的配置文件为Golden_Image,由于包含FLASH配置接口功能,可以重新配置Update_Image文件。

3.备份配置的实现

Xilinx系列的FPGA需要将后缀名为MCS的内存镜像文件固化到外部配置存储器中,FPGA上电后才能自动加载配置文件。一般的MCS文件只包含一个bit流文件,备份配置的固化文件(*.mcs)包含两个bit流文件。在将多个bit流整合到mcs文件的过程中,需要制定每个bit流的起始地址,这样FPGA专用配置逻辑才能根据地址知道到对应的bit流。

首先做两个工程,一个是只含有配置FLASH接口相关功能的工程,一个是正常用户使用的工程。为了尽量减少每个配置文件所占用的空间,在每个工程的约束文件中加入如下命令:

set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]对bit流进行压缩,一般bit流文件大小为3300KB的bit文件压缩后大约在500~600KB之间,使一个FLASH存放多个流配置文件成为可能。

然后启动FALLBACK功能。目的是在加载Update_Image失败后返回重新加载Golden_Image。在每个功能约束文件中加入如下命令:

set_property BITSTREAM.CONFIG.CONFIGFALLBACK ENABLE [current_design] 打开看门狗功能。如果加载Update_Image配置文件失败后,没有返回加载Golden_Image,则会根据指定的时间启动看门狗,强制返回加载Golden_Image。同时在约束文件中加入相关命令:

set_property BITSTREAM.CONFIG.TIMER_CFG 0x50000 [current_design] 。看门狗的计时器基准时钟被设置为FPGA内部专用时钟CFGMCLK(50M)的256分之一约5.12us。

再设置跳转地址。在Golden_Image的工程约束文件中加入如下命令:

set_property BITSTREAM.CONFIG.NEXT_CONFIG_ADDR 0x0400000 [current_design] 。执行到该命令后,直接跳转到指定的地址中继续执行。

我们采用如下的流程对在线产品进行远程升级,具体流程如图 1所示。首先,开机后,恢复包启动升级程序,然后检测FPGA加载状态,如果加载失败,证明该设备是故障件,只能返厂。否则确认当前的FPGA版本是否需要进行升级。如果需要升级,则进行场景分析,分析当前设备是否是具有备份升级功能的,如果是,则只对update_image进行升级;如果不是则需要先升级golden_image,注意,如果升级golden_image过程中突发掉电的情况,那么就只能返厂了,这种场景是唯一需要返厂的场景,如果升级成功后,后续就可以完全避免返厂的情况。升级完成golden_image后,继续升级update_image文件,如果此时突发掉电的情况,只需等来电后,启动设备,FPGA会加载golden_image配置文件,然后继续升级update_image文件即可,直至升级成功。

4.实验结果

在迈瑞公司的彩超产品中实现了本文所述FPGA双镜像升级方案。经过多次升级过程中模拟掉电场景的测试,测试结果显示在FPGA实现双镜像备份之后,即使在升级过程中断电,再次上电开机FPGA仍然能配置成功,系统可以工作,并且还可以再次升级。由此可见双镜像备份功能成功有效,可以大大提高FPGA升级可靠性。

5.结论

与传统的单配置文件升级相比,备份升级方式可以提供给产品在客户端升级更安全的保证,不仅仅是提高了升级的成功率,提高了生产效率,降低产品不良率,更重要的是提高了客户的满意度,在与其他产品的竞争中赢得先机。

参考文献

[1]Bryan Li and Kiran K Gakhal, MultiBoot with 7 Series FPGAs and SPI, XAPP1247(v1.1), Feb. 28, 2017, www.xilinx.com.

[2]Kiran K Gakhal, MultiBoot with 7 Series FPGAs and BPI, XAPP1246(v1.1), Feb. 28, 2017, www.xilinx.com.

[3]Wendy Curran, MultiBoot and Fallback with SPI Flash in UltraScale FPGAs, XAPP1257(v1.0), Sep. 28, 2015, www.xilinx.com.

[4]7 Series FPGAs Configuration User Guide, UG470(1.3) Feb. 14, 2012, www.xilinx.com.

(何绪金 王建永)

专题访谈

合作站点
stat