博客首页 | 排行榜 |

sosoul的博客

个人档案
博文分类
基于Scrubbing的空间SRAM型FPGA抗SEU系统设计  2011-11-11 17:03

 

基于Scrubbing的空间SRAMFPGA
SEU系统设计
 
 要 基于SRAM工艺FPGA的应用在空间环境下容易受到单粒子翻转(Single Event Upsets, SEU)的影响而导致信息丢失或者功能中断。本文在详细讨论三模冗余(Triple Modular Redundancy, TMR)和刷新(Scrubbing)的重要原理及实现细节的基础上,实现了一种高可靠性的TMR + Scrubbing + Reload的容错系统设计,用反熔丝型FPGA对SRAM型FPGA的配置数据做毫秒级周期刷新,同时两个FPGA都做了TMR处理。该容错设计已经实际应用于某航天器电子系统,可为高可靠性电子系统设计提供参考。
关键词 单粒子翻转(SEU),三模冗余(TMR),刷新(Scrubbing),FPGA容错
  中图分类号 P353
 
 The SEU-tolerant system design of SRAM FPGA
based on Scrubbing in Aerospace
 
 
Abstract   Aerospace and extra-terrestrial applications on SRAM FPGA are sensitive to SEU which resulting in information loss or functional interruption. In this paper, we firstly gave a detailed introduction to TMR and Scrubbing, then implemented a highly reliable fault-tolerant system based on TMR+Scrubbing+Reload rule. An anti-fuse FPGA periodically scrubbed the configuration bitstream of SRAM FPGA in milliseconds level, and both FPGAs implemented triple module design redundancy. This fault-tolerant design has been adopted in a actual spacecraft electronic system, which can make reference to the design of highly reliable electronic systems.
Key words   Single Event Upsets(SEU); Triple Modular Redundancy(TMR); Scrubbing; FPGA fault-tolerant
 
 
 
     
在我国航天过去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]。然而,如果没有及时纠正翻转的措施,翻转数量会不断累积,当翻转量达到一定程度,终究会导致功能错误。Scrubbing的直接功能就是阻止翻转位的积累。
Scrubbing就是指在FPGA已经上电配置成功工作以后,不事先擦除已有的逻辑,就直接重新写入配置数据且不中断用户的功能。理论上来说Scrubbing也属于部分重配置,并非所有的SRAM工艺FPGA都支持这种功能,必须具备特定的工艺。目前Xilinx公司的Virtex各系列FPGA均支持Scrubbing。
为了实现有效的Scrubbing,并且不中断实时工作,需要在FPGA功能设计时满足两个基本条件:
1)在设计中不能使用SRL16和分布式RAM。因为刷新会将其重新初始化,导致其实时状态的丢失。
2)只有JTAG和SelectMAP配置方式可以被用于Scrubbing。如果是选用后者,那么在最初产生配置文件时,需设置SelectMAP配置端口在配置后保持配置功能,不被复用为普通IO口;另外,Start-up clock必须被设置为 CCLK。
实现Scrubbing时有许多细节问题需要注意,以下列出几个重要的方面。
1)SelectMAP配置时需要注意Bit-Swapping问题,即位翻转[18]
2)Scrubbing时,引导配置数据的命令头需要自己编写,每一位数据都需根据设计要求设置。
3)如果使用SelectMAP方式,Scrubbing过程中,PROG、INIT、DONE端口都应保持高电平,BUSY信号的低电平指示数据有效,CS和RDWR的高低变化取决于具体操作。切忌在CS置低前置低RDWR端口,否则会进入ABORT状态,FPGA将中断所有工作。
4)大型设计中不可避免的会使用到片内BRAM。片内BRAM属于动态存储,数据一直更新,如果对其进行Scrubbing,就会打乱或者中断实际工作。因此Scrubbing过程需要分两个步骤完成一次完整的刷新。第一步刷新所有的GCLK,IOB,IOI,CLB帧列;接着跳过BRAM帧列部分,第二步刷新BRAM内连帧列[17]
5)FPGA的BUSY信号置高可能是由多种原因导致的:片选信号的置高;配置寄存器设置错误进入ABORT状态;配置数据写入错误进入ABORT状态,甚至硬件上拉等。任何一种原因都会使得数据总线上的数据无效,需要分析具体原因来解决问题。
2.3 Virtex系列FPGA TMR原理
在Virtex系统FPGA中,TMR电路的正确应用依赖于需要做容错处理的数据结构的类型。这些逻辑可以组成4种不同的结构类型:直通(throughput)逻辑、状态机逻辑、输入输出逻辑和特殊结构(block RAM,DLL等)[19]
直通逻辑是一种任意尺寸和功能、同步或异步的逻辑模块,其中所有的逻辑路径在不形成逻辑环路的前提下从模块的输入流向输出。在这种情况下,仅仅构建3个冗余逻辑部分即可实现逻辑三重化。
状态机逻辑是指在模块内任意寄存器级的寄存器输出反馈回其之前的寄存器级,从而形成一个寄存器逻辑环。TMR时,不仅要将其逻辑三模,还必须在每个分支的输出加三输入表决器。为了在反馈后使得状态机能够自恢复,还需要在每个冗余逻辑的反馈路径上也加一个表决器。鉴于多数表决器本身(LUT实现)也可能会翻转,所以表决器也要做三模冗余处理。
输入级的三模冗余要求各冗余分支拥有自己的输入集,否则即使对逻辑做了冗余处理,如果单一输入本身出错了,冗余也将毫无意义。而输出端还需要在输出逻辑块中增加3个3输入表决器来将内部TMR的三个逻辑路径归一化。因此在实现IO端口的TMR时就需要占用三个硬件管脚,在制板时就事先完成冗余连接。
Virtex体系结构有许多特殊的逻辑块,如BRAM,DLL等,这些都需要特殊的方法来实现有效冗余。
实现方案
3.1 系统架构
本文实现的TMR+Scrubbing+Reload容错系统使用ACTEL反熔丝工艺的FPGA——A54SX32A作为配置和刷新管理芯片,使用宇航级“单次编程(OTP)”架构的配置PROM——XC17V16作为外部配置存储器,应用设计FPGA使用300万门大容量的Virtex II系列XC2V3000。系统框图如图1所示:
图 1 TMR+Scrubbing+Reload 容错系统框图
Fig. 1 TMR+Scrubbing+Reload fault-tolerant system diagram
XC2V3000采用SelectMAP配置模式,该模式所有需控制的信号以及8位并行数据线都与A54SX32A相连接,DONE信号指示配置是否成功,BUSY信号指示数据总线上的配置数据是否有效;XC17V16的数据总线也连接进配置和刷新芯片A54SX32A中,由它决定数据的取舍;外部有源晶振提供XC2V3000的工作时钟,该时钟还经A54SX32A分频后作为SelectMAP的配置时钟以及PROM的工作时钟;外部控制的Scrub信号由上位机发出,作为刷新的使能信号,Reload信号则在发生单粒子功能中断(SEFI)或其它需要时作为配置文件重加载的控制信号。
3.2 功能设计
A54SX32A需要完成上电配置、刷新控制、出错重加载的管理,具体工作为:1)在系统上电阶段从外部存储器加载XC2V3000的配置数据;2)在上位机刷新信号scrub有效后,周期性的刷新XC2V3000;3)在上位机重加载信号Reload有效后,重新加载XC2V3000的配置数据。整体工作流程图如图3所示:
图 2 配置和刷新管理流程图
Fig. 2 The flowchart of configuration and scrubbing
其中,上电配置具体步骤如下:
1)上电复位结束后,将XC2V3000的PROG_B信号置低至少300ns后置高,清空FPGA配置存储器。
2)检测XC2V3000的输出信号INIT,若其值为高,将CS_B、RDWR_B置低,同时将XC17V16的CE_B置低,OE置高,使得数据从外部存储器到FPGA的数据通道开通。若INIT为低,则持续检查 INIT 的值,直到其值为1。
3)检测XC2V3000的输出信号DONE,若其值为高,说明配置成功,执行去同步步骤,将CS_B置高使得数据总线呈高阻态等待后续操作;若DONE为低,则持续检查DONE的值,直到其值为1。
周期刷新具体步骤如下:
1)Scrub使能信号为高时启动周期刷新。执行去同步步骤,接着将XC2V3000的CS_B信号置低,重新开通数据通道。
2)设置FAR寄存器和FDRI寄存器的值,指示刷新的第一步是从地址0开始写入数量等同CLB帧块的配置数据;在设置完后的下一个时钟,紧紧衔接上从PROM来的CLB帧块的第一帧配置数据。
3)向数据总线写入1帧的dummy frame以配合流水逻辑,将最后一帧有效配置数据顶出FPGA内部配置寄存器。之后执行去同步步骤,完成Scrubbing的第一步。
4)PROM的数据持续读出,置高CS_B使得BRAM帧块的数据不被写入XC2V3000,等待至合适的时刻执行去同步步骤,再置低CS_B以开始执行刷新的第二步骤。
5)设置FAR寄存器和FDRI寄存器的值,指示刷新的第二步是从地址0x04000000开始写入数量等同BRAM内连帧块的配置数据;在设置完后的下一个时钟,紧紧衔接上从PROM来的BRAM内连帧块的第一帧配置数据。
6)向数据总线写入1帧的dummy frame以配合流水逻辑,之后执行去同步步骤,完成Scrubbing的第二步。至此,一个完整的刷新结束。
7)状态机回转,再次检测Scrub使能信号,周期性的刷新。
3.3 配置和刷新管理芯片的TMR实现
配置和刷新管理FPGA本身的可靠性直接影响到整个容错系统的可靠性,所以对A54SX32A本身也需要做容错处理。ACTEL公司的FPGA有3种缓解SEU的时序逻辑单元处理技术[20]
1)CC:使用带有反馈的组合逻辑单元替代触发器或锁存器来实现存储单元。
2)TMR:每个寄存器通过3个触发器或锁存器的表决来确定状态。
3)TMR_CC:上面两种方法的结合。在三模冗余的同时,每个参与表决的寄存器都由带有反馈的组合逻辑单元实现。
本设计在A54SX32A内部实现了ACTEL的抗辐照TMR设计(ATMR),进一步加强了容错系统的可靠性。它有如下四个特点:
1)每个触发器的TMR由三个触发器外加一个表决器实现
2)三模的单元在物理实现上分散布局
3)三模的单元都使用同一个时钟域
4)不需要外部器件或软件的支持
具体实现时,首先在代码内增加对synplify库的调用,其次在综合时,添加tmr.vhd到工程中就可以实现三模[20]。ATMR也可以根据设计的具体情况选择全局TMR或者局部TMR。
下表为使用不同TMR方案下,器件内部资源的使用情况。
1 几种TMR方案资源使用对比表
Table 1 The comparison of different TMR theories
资源Resource
ATMR方案
不用TMR
全局TMR
所有寄存器TMR
Combinational Cells
 459 of 1800 (26%)
607 of 1800 (34%)
 569 of 1800 (32%)
Sequential Cells
97 of 1080 (9%)
225 of 1080 (21%)
 161 of 1080 (15%)
Total
Cells
556 of 2880 (20%)
832 of 2880 (29%)
 730 of 2880 (26%)
Clock Buffers
2
2
2
IO Cells
40
40
40
对比看出,在设计资源不太紧张的应用中,为了获得更高的抗辐照性能,使用ACTEL的TMR设计是非常值得的。
3.4 端口时序
图3是上电配置阶段,对INIT上跳沿附近的数据抓取图。如图所示,INIT保持一段时间的低电平,清空FPGA内部配置寄存器。当INIT跳变为高电平之后,顺序的将RDWR和CS端口置低,同时使能外部配置寄存器,配置数据就会写入到FPGA的配置数据总线上。注意RDWR和CS变化的顺序,如果顺序颠倒,就会进入ABORT状态,导致配置失败。
图 3 上电配置时序抓取图
Fig. 3 The capture picture of powering up configuration
图4是周期刷新阶段,抓取到的四次刷新时序图。图中CS信号为高电平时,数据端data为FF,这表示正处于两个刷新步骤的间隔,这段时间保持CS置高,使数据总线处于高阻态,以跳过BRAM配置数据段。只要scrub使能信号一直为高,刷新就保持循环进行。由图可以看出,整个周期刷新阶段,BUSY信号一直维持低,指示配置状态正确,Scrubbing成功。
图 4 刷新时序抓取图
Fig. 4 The capture picture of scrubbing
3.5 刷新率
刷新率描述了刷新操作执行的频繁率,它是由特定应用中器件的预期翻转率决定的。翻转率由器件的静态位截面以及应用或任务预计经受的带电粒子通量计算得到。刷新率应该被设置为能在下次翻转发生前修复配置存储器上的SEU。现实中最小化后的刷新率与刷新周期相等,也就是使配置逻辑始终保持更新。经验之法是将刷新率设置在高于预计翻转率的一个数量级或更高一些,换句话说,系统应平均在每个翻转间隙执行至少10次刷新操作。
文献[21]给出了NASA和Xilinx公司一起对Virtex-II器件XC2V1000进行辐射实验得到的统计结果:在实验用粒子束条件下,配置存储器的翻转率为4.4E-7/bit-day,块RAM的翻转率为1.1E-6/bit-day。国内空间技术研究院也做了相似研究,得出的结论为[22]:100万门SRAM FPGA在空间辐射环境取Adams 90%最坏情况下,在低地球轨道(645 km,97.90),配置区每天会出现2.55次翻转;在地球同步轨道,配置区每天会出现7.96次翻转。
本设计Scrubbing使用的是4M时钟,约236毫秒完整刷新一次。这个速率远大于十倍翻转率,可有效防止SEU对电子系统的不良影响。
同时,在如此高速的周期刷新下,系统功耗的增加仅仅在0.25W左右,对整体空间电子设备的影响并不大。
3.6 XC2V3000的TMR实现
在验证设计阶段,用一个验证程序来实验TMR效果。在XC2V3000内部使用BRAM实现8*256的FIFO,将计数器结果写入FIFO,FIFO半满后输出数据驱动外部LED,实现循环亮灯功能。TMR实现策略如下:
1)对OBUF:应用3个3输入表决器。同时在板级将三个输出管脚互接;
2)对全局BUF和LUT逻辑及其它逻辑:仅构建3个冗余逻辑部分实现逻辑三重化;
3)对FIFO:构建三重冗余BRAM,并在输出端做多数表决;
Xilinx提供了一个XVRWARE库,用于实现TMR设计[19]。该库内有对一般直通逻辑、计数器、BRAM、输出端口等各种逻辑的TMR描述。实现时,在综合工具中导入XVRWARE库,添加对库的调用到代码中,之后只要在需要的关键部分例化库中已经TMR的模块即可。相应的,端口和信号的声明也要三重化。
以下是用VHDL描述三重冗余计数器的部分代码,其中例化的计数器xvr_ccwre_tmr就是由XVRWARE库提供的宏单元:
CLK <= Clk0&Clk1&Clk2; 
RST <= Rst0&Rst1&Rst2; 
CE <= Ce0&Ce1&Ce2;
counter: xvr_ccwre_tmr
generic map(width=>32)
port map(CLK=>CLK, R=>RST, CE=>CE, USERGND=>RST, USERVCC=>CE, Q_TR0=>Count32_tr0, Q_TR1=>Count32_tr1, Q_TR2=>Count32_tr2);
布局布线后发现片内资源使用量是没有做TMR处理时资源使用量的三倍多,这是由于为实现三模冗余,需要占用额外的布线资源,另外为实现表决器和反馈逻辑的冗余也需要额外的资源。
4 结论和展望
在空间应用中使用FPGA,尤其是SRAM工艺的FPGA必须考虑高能粒子的影响,容错设计至关重要。无论是Actel还是Xilinx都提供了一系列的软件、硬件方法来减缓SEU。
本文列举了TMR+Scrubbing+Reload容错设计的重要原理,提出了验证和实现的一体化方案,同时实现了反熔丝和SRAM工艺FPGA的TMR设计,着重讨论了Scrubbing过程中的各问题。实践证明,TMR+Scrubbing+Reload容错设计逻辑简练,不中断当前运行功能,可移植性强,可以在所有应用设计中以独立模块的形式添加,能较好的减缓恶劣空间环境下高能粒子对SRAM工艺FPGA的影响。
本设计的抗辐照性能统计数据仍有待进一步的地面测试。尝试回读比对配置数据将给整体方案增加检错定位功能,进一步增加对BRAM、DLL等特殊逻辑块的容错设计可以使得容错性能更加完善。
 
参考文献:暂略
类别:科研 |
下一篇:Tornado2.2 for pcPentium的安装和使用流程
以下网友评论只代表其个人观点,不代表本网站的观点或立场