" c! M. h+ f) n3 B3 {" X' P" v& B尽管TMR可以有效提高设计的可靠性,但是它也存在很多不足之处。主要有以下几点:& T* l0 m4 ~' f X% P" N+ `/ W
; _; _- V$ E+ G3 X(1)它不能对出错的模块进行修复。当一个模块出错后,我们只是将错误通过多数表决器屏蔽,但是错误模块仍然存在。而且一般的TMR也不能对错误进行检测和定位,以便系统进行修复。如果出现的错误得不到及时修复,那么当再次出现错误时TMR将失效。$ n8 e8 ]' `2 |; V
(2)很多研究只是考虑到单个错误的影响,而忽略了多个SEU同时出现的可能,尽管出现这种情况的概率较低,但却是存在的。实验也表明TMR对减弱单个SEU产生的影响是非常有效的,但SEU在配置存储器中积累会使效果降低。$ C- P- d" x) _( P0 N4 X
(3)普通TMR资源开销大,资源利用率低。普通TMR是对整个设计或者较大的模块进行三模冗余,粒度比较大,它的资源开销相比原始电路增大200%。如果受到FPGA硬件资源和功耗等设计约束的限制不能对整个电路或者模块实现TMR,那么会造成资源浪费。 ' C( p) s9 x! ]5 y6 S$ B(4)由于电路的倍增使得功耗增大,而且由于表决器的存在以及其他一些额外的布线使得速度降低。* Z- q0 f: D) }; ` Y. a7 V
(5)表决器本身也可能出错,而一般的TMR的表决器没有自检错能力,也不具备抗辐射能力。/ z! v. S! o) x1 j
(6)当采用三模冗余的电路驱动没有采用冗余的电路时,需要一个表决器将三个信号合为一个信号。当没有采用冗余的电路驱动采用三模冗余的电路时需要通过额外的布线将一路信号扩展称为三路信号。因为逻辑电路和布线资源都对SEU敏感,所以这样的结果会降低系统可靠性。 / k# _1 E- G8 y$ E' a2 改进的TMR方法4 I* s& n3 y/ B. h5 a) j
' r* P5 a& A) V1 J5 H. `7 m; q
2.1 TMR与Scrubbing结合, U! D8 }+ q0 I" X* m
2 N; H' p( r7 u由于TMR本身不具备错误模块修复能力,若仅一个模块出现错误时,系统功能不受影响,但如果在另一个模块出现错误前不能对已出现的错误模块进行修复,那么冗余方法会失效。所以当出现一个错误的时候,必须及时地对出错的模块进行修复。 - |7 q# x# t8 e4 g1 [# K+ `/ s+ e9 y) O" i& P& v
随着动态可重构技术的发展,出现了Scrubbing这种对FPGA进行配置的方法。由于对于空间电子系统来说影响最严重的是SEU等软故障,而软故障可以通过重构来解决,所以周期性地对配置存储器进行刷新可以实现对这类错误的修复。 + P9 q& f i' D) @5 p- T- Q: l( D' F
Scrubbing和TMR配合使用对防止SEU的产生可以起到很好的效果。但很多研究同样只考虑到单个错误的影响,而忽略了多个SEU同时出现的可能性。理论上一个快速的刷新率可以保证某一时间内只有一个错误的存在。然而实际中错误的出现是随机的,这意味着任何刷新率都不能保证在一个刷新周期内最多只出现一个错误。在实际中使用这种方法时,必须通过复杂的实验过程对SEU出现的概率进行估计。选取Scru-bbing的刷新率的经验原则是使刷新率比估算的出错率高一个数量级。而现在随着FPGA的规模越来越大,用来装载整个配置位流的时间会达到几百毫秒,刷新率更得不到保障,且系统功耗增大。, J2 f) I9 P) m6 j
" q# {. ?) f0 S/ x, ]( t$ D; [, k- w
随着部分TMR的实现,可以设计出具有检错和定位功能的表决器,当某个模块出错时,表决器的信号直接触发重构功能,动态地只对出错部分的电路进行重构。这样可以解决Scrubbing时间和功耗的问题,并为防止错误积累提供了解决途径。 ; T" l: g2 Y' n( n& j' L- X9 }% x$ x6 r' n; B6 h
为了防止表决器出错,表决器可以采用对辐射不敏感的器件来实现而替代基于SRAM的材料,这样提高了表决器的稳健性。文献也提出了一种改进的表决器。它不再使用多数表决器对三个冗余模块的输出进行表决,而是将三个冗余模块相应的输出通过三态缓冲器和少数表决器后分别由FPGA的三个输出管脚输出,最后在印刷电路板(PCB)上“线或”为一个信号。少数表决器电路负责判断本冗余模块的信号是否是少数值,如果是少数值,则相对应的缓冲器输出高阻,如果不是,则使相应的信号正常输出。 4 b5 E4 ?, A! A# Z% p- H . E ^* ?1 B, Z rReadback是在Scrubbing的基础上发展起来的。它是指将配置数据回读与最初的配置数据进行比较,发现错误后进行重构。文献中使用了这样的方法,另外它还采用了纠错码来保护配置数据。每一个配置帧的数据被12位的see-dec汉明码保护,而且FPGA中每个基本单元的识别码都不一样,通过ICAP(InternalConfiguration Access Port)回读配置文件后,纠错码可以给出错位的位置。 ; i, G) |, C8 t3 ]7 i+ T' d* ~+ [* {. S
Scrubbing可以在不中断电路工作的情况下修复SEU在LUT、布线矩阵和CLB中所造成的功能错误。但是它不能改变LUT中触发器中的内容,所以它也就不能重置寄存器的状态。当存储单元的值发生了翻转,此时只能通过系统复位来得到修复。然而系统复位将使系统功能中断,严重影响系统的性能。/ P* o0 j, K6 ~8 u1 u7 n
1 z# M5 X3 s" T6 s9 \. i, l- o+ k2 k/ v2.2 小粒度TMR技术& i& ?1 j/ y% k7 U. i. c
& N! u2 k3 W- S k( {随着部分动态重构技术的出现,产生了小粒度的TMR方法。可以以较小的粒度为步长,采用合理的布局与布线实现TMR以达到要求的资源开销并得到最大的可靠性。文献中对在出现多个错误的情况下不同粒度TMR的容错性能进行了实验分析,结果表明小粒度TMR比以整个系统为粒度进行TMR的效果好。. ?& N a) i+ \* M5 V( P
( r' i4 W, z f6 l' S在全局TMR不可行的情况下(例如资源有限),小粒度TMR是一个较好的选择,可以在使用较少资源的情况下提高系统的可靠性。由于不是对所有的模块都采用冗余措施,所以在实现的时候必须着重于对那些可以相对更高地提高系统可靠性的模块应用TMR技术。此时表决器的数量和位置也是一个需要考虑的问题。由于采用三模冗余的模块前后需要额外的布线,而逻辑电路和布线资源都对SEU敏感,所以这样的结果会降低系统可靠性。如图2所示,图中阴影部分是对SEU敏感的,由图可以看出(c)中敏感的部分比(b)中多,这是由于表决器和额外的布线造成的。所以需要限制三模冗余电路和未采用三模冗余的电路的转变,这样可以通过集中使用三模冗余技术而提高系统可靠性。% Y9 E8 }/ {) _5 U& ?# r) z
" ]9 G% g2 }( h. z: O为了选择需要进行三模冗余的模块并进行合理的布局布线,将系统出现的错误分为持续性错误和非持续性错误。持续性的错误是指由SEU产生的改变了电路内部状态的错误;非持续性错误是指可以通过FPGA重构而消除的错误,而持续性错误在重构后依然存在。' |1 q, s) n2 Q% o
6 G {0 h3 t9 k' [ b+ p结合以上的分析,实施部分TMR的优先级别如下:% B: e5 d: B+ T; |( U0 }9 E
第一级是会产生持续性错误的部分。 * f' o$ `' E, k第二级是会导致能产生连续性错误电路部分出错的电路,以降低TMR和非TMR之间的转换为准则。 - z, A! f/ M$ x. d4 X2 \第三级是会产生持续性错误电路的前向部分,同样以降低TMR和非TMR之间的转换为准则。2 s. ~+ g$ L; j, W% y
第四级是与会产生持续性错误电路部分独立的部分。 0 W; U6 ]8 t! |0 E. y5 X9 X& s/ G; J/ Z
可以通过静态的分析来对电路进行划分。这里存在的问题是在标准的全局TMR中,所有的输入、输出以及时钟都进行了三模冗余,而使用部分TMR时,对I/O以及时钟的冗余有可能不能被实现。和没有采用TMR的逻辑电路一样,没有进行TMR的时钟和I/O同样可以产生不能被检测的错误。 6 S# C7 H4 q1 A7 Y, V, _# N9 r3 h( O. N4 X6 n
由实验结果来看,由于此方法主要着重于能产生持续性错误的电路部分,所以当所使用的冗余资源增多时,持续性的错误出现的几率很快的降低,最终几乎全部被克服掉。所以采用部分TMR可以在资源和可靠性间达到平衡,在最小限度影响可靠性的条件下,最大限度地提高资源利用率。3 I) q+ \) P" K. H7 {/ Q$ A8 a
( D5 b* ~3 r. a6 B4 g4 c* N/ ^9 C另外,一个翻转有可能改变配置存储器中控制布线的配置位,而使得两个不同冗余模块间的连线短路,这样一个翻转影响了TMR中不止一个模块,导致输出错误。而配置资源中的90%都用来控制布线,所以这个问题是需要考虑的。产生这种错误的可能性还依赖于TMR的布局,而TMR的布局直接依赖于多数表决器的数量。当表决器增多时,模块之间需要额外的连接,所以各模块必须靠得很近,这样使得一次翻转导致模块之间短路的可能性增加。为了降低会影响TMR稳健性的产生改变布线的错误的可能性,必须最大可能地减少各个模块之间的连接。如果多数表决器的数量可以被降下来,那么模块之间的连接可以减少。 ( b; ?. j/ @; f( t9 J& X' w0 E" } E1 c
解决这个问题的方法是采用较大粒度的TMR以降低它们之间的连接,且表决器只应用在电路输出部分。但同时又出现了一个新的问题,例如为对存储单元的状态进行修复,Xilinx提出了将表决器应用在有寄存器的地方并加入反馈以纠正翻转对寄存器中值的影响的XTMR方法,如果内部的表决器被去掉,那么出错部分存储单元的错误将得不到纠正,所以重构后它与其他模块工作的状态不同步。/ w1 H2 l @# r' J) `- i
9 ?. S* J: f: S4 t) O1 l: } @* C
文献中解决这个问题的方法是通过从外部存储器中读取存储的工作状态。但是这个方法需要三个模块离线后才能进行状态的存储和重置进而达到同步。显然可行性不高,尤其是对实时性要求高的电路。 3 Y2 m5 }6 Y ~; _ C7 c) W* @* ~ ) K3 o8 u2 e: f/ U针对此问题,文献提出了一种同步技术,该技术TMR系统中采用状态寄存器复制机制,并在三个冗余模块之间引入数据通路来传输状态寄存器的数据。当某一个冗余模块发生故障被局部重构后,能够通过接受主控制器的令牌,从正常模块复制状态寄存器的数据来完成同步而及时地恢复工作。该方法缩短了故障模块从修复到重新加入系统工作的时间,从而减小发生故障积累的概率,提高冗余系统的可靠性。 c, p* X+ }, y6 c7 \