基本的TMR技术存在很多问题:(1)占用资源多,由于将设计复制了3份,资源占用比原电路至少增加200%;(2)表决器未进行三模冗余设计,可能受到SEU的影响而出错;(3)仅容错不修复,当某一模块出错后,电路仅通过表决器将错误屏蔽,但模块中的错误仍然存在。
本文总结当前TMR工具中广泛使用、效果明显的优化技术,主要包括:细粒度TMR技术、系统分级技术、配置刷新技术、状态同步技术。
1. 细粒度TMR技术
基础的TMR采用将整个系统冗余3份的粗粒度方法,这种方法在SEU、SET发生频率较高的情况下很难发挥作用,故出现了一种在设计中将TMR本地化的方案,将设计的每一部分在局部进行3倍化与表决。
这种设计一细粒度的方式应用TMR,称为细粒度TMR技术。根据三模化的程度不同,将TMR分为局部TMR(Local TMR,LTMR)、分布式TMR(Distributed TMR, DTMR)、全局TMR(Global TMR)和块TMR(Block TMR, BTMR)。
1.1 局部TMR(Local TMR,LTMR)
LTMR将设计中的触发器均冗余为3份,在输出端添加表决器进行表决,输入数据、控制信号和时钟均由冗余触发器共享,如下图所示。这种方法没有对组合逻辑单元、全局和复位进行冗余,这种方法不能为时钟信号、复位信号以及数路径中的SET提供保护。
LTMR中,最主要的影响因素是潜在的SET,这些SET通过影响触发器或通过触发器传播改变其状态来导致SEU。由于3个冗余的触发器共享1个数据路径,故发生在数据路径的任何一个SET都可以影响到3个冗余的触发器,从而导致表决失败。
1.2 分布式TMR(Distributed TMR, DTMR)
DTMR是除全局时钟和复位信号外,将设计中所有的组合逻辑单元、触发器和表决器都冗余为3份,从而屏蔽SET对数据路径的影响,如图所示。但是由于时钟仍是单一的信号,故时钟布线中的SEU仍会对设计产生影响。
此外,使用复杂的FPGA时,通常存在共享布线资源的组件,粒子对共享布线资源的干扰可能会导致两个TMR域同时出错,从而导致缓解策略的失败。
1.3 全局TMR(Global TMR)
GTMR是将设计中的所有组合逻辑单元、触发器、表决器和全局信号都冗余3份,如图所示。使用3个时钟域与3个TMR域来保护电路不受SEU和SET的影响,但是GTMR的功耗和面积占用非常严重。而且,由于3个时钟域的存在,域的布局位置和时钟偏差都是需要解决的问题。
1.4 块TMR(Block TMR, BTMR)
BTMR是将包含组合逻辑单元和触发器的复杂函数视为黑盒,将整个块冗余为3份,多数表决器放置在3个冗余块的输出端,如图所示,通常用来对从第3方购买且不能由用户编辑的IP模块添加三模冗余,但是其本质更接近于粗粒度TMR方法,无法为IP模块提供细粒度TMR。
不同粒度的TMR策略都有自身的优缺点与适用对象,LTMR占用资源较少,但是仅对触发器进行TMR,容错效果较差;DTMR资源占用与容错效果相对比较平衡;GTMR牺牲巨额资源换取容错效果;BTMR是一种对IP的妥协策略。
他们共同的缺点是缺乏对共享布线资源的容错。在使用复杂的FPGA时,通常会存在共享布线资源的冗余模块,而共享的布线资源遭受干扰会导致多个模块故障,常用的方法是将冗余模块布局在相距较远的位置,但是这也需要权衡,因为过远的距离意味着更多的线网资源以及潜在的关键路径延长。