1 引 言
在我国航天过去20年的发展中,FPGA因其功能配置时的多样性与重复性,海量数据处理时的灵活性与高效性,被广泛的应用到航天器电子系统中,承担空间环境下的飞行控制、图像处理等任务。
基于SRAM工艺的FPGA可以根据不同功能需要反复编程,而且性能与容量上也远远高于反熔丝和Flash工艺的FPGA。其中在国内外航天器电子系统中应用最为广泛的就是Xilinx公司的Virtex各系列FPGA。SRAM工艺的FPGA受空间高能粒子影响较大,内部配置存储器的逻辑状态常常由于粒子撞击而翻转(单粒子翻转SEU),可能导致航天器信息的丢失或者功能中断。
从第一代Virtex FPGA起,国内外关于SRAM工艺FPGA的容错研究就层出不穷[1-2],除去从工艺上增加抗辐照设计以外,无论是广泛应用的三模冗余(TMR),还是Xilinx公司从Virtex-5开始实现的SEU controller macro[3],或是错误检测和纠正编码(EDAC)、双备份比较与并发错误检测技术(DWC-CED)[4]等,归纳起来基本是从故障点屏蔽,检错纠错两个方向来解决问题。国内关于SRAM工艺FPGA的容错研究多数着眼于冗余屏蔽或者纠错编码,对配置数据刷新(Scrubbing)的讨论较少[5-12]。文献[5]讨论了Xilinx FPGA抗辐射可靠性设计的常用办法;文献[6]在XCV200上实现了一种改进的TMR方法,用多个局部重构模块容忍多个故障;文献[7]使用CPLD对FPGA进行了基于错误诊断的容错体系结构设计;文献[12]在航天器有效载荷中实现了一种容错星载信号处理平台。
容错策略不同,效果也不同。三模冗余只可以缓解SEU,刷新FPGA配置数据适用于阻止翻转位的累积,而一旦发生单粒子功能中断(SEFI)就只能通过拉低PROG引脚来重加载配置整个FPGA。任何一种容错方法都不能完全解决问题,只有各方法共同配合,才能达到较好的容错效果[13-15]。本文在深入分析容错机理的基础上,通过反复实验,片内在Virtex-II系列XC2V3000上对设计实现了三模冗余,片外使用反熔丝工艺的A54SX32A对XC2V3000的配置数据实现了毫秒级的高速刷新,并对配置和刷新管理芯片A54SX32A也做了三模冗余处理,成功实现了高可靠性的TMR + Scrubbing+ Reload的容错设计,并将进一步应用于实际航天器电子系统中。
2 关键原理
2.1 FPGA配置原理
数据帧是配置数据在Virtex-II配置存储器中可以读写的最小单位。多组配置帧组成一个配置帧列(column),配置帧列根据功能的不同,细分为CLB帧列,IOB帧列,IOI帧列,GCLK帧列,BRAM帧列,BRAM内连帧列。这些帧列可以被划分成三类:CLB帧块(包括GCLK,CLB,IOB,IOI帧列),BRAM帧块,BRAM内连帧块。不同器件的尺寸和容量不同,帧的长度也不同,但是对同一个器件来说,不论此帧属于哪一类帧列,其长度都是相同的。一个完整的配置文件就是由所有配置位置的帧信息和一些必要的首尾命令字所组成的。
帧是可寻址的。帧的地址分为块地址(BA),主地址(MJA)和从地址(MNA)三部分。块地址BA=00覆盖了所有的GCLK,IOI,IOB,CLB帧列;块地址BA=01覆盖了BRAM帧列;块地址BA=10覆盖了BRAM内连帧列。主地址指明了块地址下某帧列的位置,从地址指明了帧列中某特定帧的位置。由块地址(BA),主地址(MJA)和从地址(MNA)就可以准确的定位到一个配置数据帧[16]。
为了引导和完成配置,FPGA内部设计了一些专用于配置的32bit的配置寄存器。比如帧地址寄存器FAR,帧数据输入寄存器FDRI,控制寄存器(COL),控制选项寄存器(COR)等都对配置、刷新、回读等操作起至关重要的作用,需要了解每一个寄存器的属性、地址和功能。
2.2 Scrubbing原理
SRAM工艺FPGA用户编程功能的实现依赖于数百万配置锁存器(configuration latches)中存储的数值。一个bit位的翻转不一定会导致FPGA发生功能故障,可能由于翻转发生的位置恰好不在FPGA的编程区域而完全没有不利影响[17]。