基本的TMR技术存在很多问题:(1)占用资源多,由于将设计复制了3份,资源占用比原电路至少增加200%;(2)表决器未进行三模冗余设计,可能受到SEU的影响而出错;(3)仅容错不修复,当某一模块出错后,电路仅通过表决器将错误屏蔽,但模块中的错误仍然存在。
本文总结当前TMR工具中广泛使用、效果明显的优化技术,主要包括:细粒度TMR技术、系统分级技术、配置刷新技术、状态同步技术。
接上篇》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
2. 系统分级技术
系统分级技术是为了缓解TMR仅容错不修复的缺陷,尽可能地扩展TMR系统的容错能力的一种手段。
在分级技术中,整个系统首先被分解从成多个子系统,每个子系统执行系统的一部分任务,这些子系统被链接在一起形成整个系统。将TMR应用于分解的系统时,每个子系统都由3个冗余模块组成,每个子系统的输出在传播到下一个子系统之前都会进行表决,如图所示。
普通的TMR中,一旦多个模块出现故障,系统就会出现故障,而在使用分级的TMR中,只要故障不发生在同一分级,系统就不会出现故障。如下图所示,在这个系统中有3个分级,假定系统发生了3个故障,每一级中只发生了一个故障,那么系统仍能保持正确运行,因为故障发生在不同的分级中,表决器会在本级中将故障屏蔽。但是,如果同一分级中的多个子模块均发生故障,如图中橙色模块所示,系统就会出现故障。
系统分级技术能够明显提升系统的容错能力,但对资源的消耗也很严重,而且还增加了关键路径长度,对时序造成负面影响。使这种方法时,分级个数过少,可能会达不到理想的容错效果;分级个数过多,可能会导致性能下降、占用资源过大,所以需要探索最优的分级个数,来平衡电路的面积、性能与可靠性。
3. 配置刷新技术
TMR仅容错不修复,虽然可以在一定时间内大幅提高电路的容错能力,但是超过一定的错误积累后,电路的容错效果会下降,从而导致电路的平均无故障时间(Mean Time To Failure, MTTF)降低。所以,为了更好地发挥TMR的优势,提高TMR电路的MTTF,需要将TMR电路与配置刷新结合,以纠正设备配置存储器中的错误。
配置刷新是一种用于纠正FPGA配置存储器中错误的技术。刷新的目的是纠正电路中的静态组件,通常是LUT的内容以及布线情况等。执行刷新任务的电路称为刷新器,刷新器可以存在于FPGA内部或外部,这取决于刷新模块访问配置存储器的方式,有些配置接口是独占的内部接口,有些是独占的外部接口,两者均有优缺点,用户可以根据是否提供额外的硬件来实现刷新模块、刷新模块与被刷新的配置存储器是否需要分开、对刷新速度的需求等条件来选择最合适的方式。
3.1 内部刷新
内部刷新依赖存储器保护机制来检测是否发生翻转,配置存储器通常整体由循环冗余校验(Cyclic Redundancy Check, CRC)保护, 部分帧可由纠错码(Error Correction Code, ECC)保护。刷新模块周期性的检查这两种机制的有效性,并通过内部配置访问端口(Internal Configuration Access Port,ICAP)与硬件状态机来采用特定的刷新策略。内部刷新的速度一般比较快,不需要另一个FPGA或微处理器来管理刷新程序,整个刷新架构都封装在FPGA内部,但是内部刷新需为刷新硬件保留一部分FPGA逻辑,导致用户设计的可用资源减少,而且内部刷新模块也会受到SEU的影响。
3.2 外部刷新
外部刷新依靠额外的硬件来检查FPGA的状态,刷新模块自带配置副本,与待刷新的FPGA进行比较,外部刷新通常使用JATG接口,而使用SelectMap接口的刷新模块可以是内部的也可以是外部的。外部的实际刷新逻辑由单独的FPGA或微处理器来实现。外部刷新由于放置在被刷新的FPGA的外部,其可靠性更高。
两种最常用的配置刷新策略是盲刷与回读刷新。
3.3 盲刷
盲刷是在特定程序的控制下,不断地向配置存储器中写入受保护的黄金副本的内容,以对FPGA的配置文件进行重加载操作,盲刷不涉及任何检测方法,会自动识别和匹配目标FPGA 芯片,只需提供时钟和刷新使能信号,即可自动实现对目标FPGA的刷新操作,大幅降低系统设计的难度和复杂度,缩短开发周期。
3.4 回读刷新
回读刷新的常用方式是,是通过JTAG或 SelectMAP接口对SRAM型FPGA进行回读操作,确定FPGA型号并校验回读数据,若发生错误则从正确的数据源读取码流,从码流中截取有效部分,并通过JTAG或SelectMAP接口将有效码流重新写入FPGA的内部配置位,从而完成配置存储器的刷新。回读刷新一般采用反熔丝FPGA作为控制器对刷新过程进行控制,其软硬件设计较为复杂,但回读刷新只在发现翻转错误的时候进行刷新,故障恢复更加高效和有针对性。
配置刷新与TMR结合使用,可以大幅提高TMR电路的MTTF, 提高FPGA设计的可靠性。
4. 状态同步技术
SEU发时生,电路状态也很可能发生损坏。当配置刷新与含有带反馈时序逻辑的TMR设计一起使用时,一定要对触发器的状态进行同步。状态同步的目的是在通过配置刷新修复了FPGA的逻辑错误后,恢复其寄存器至正确的状态。
如图所示,TMR电路由3个独立的累加电路组成,对3个电路输出的多数值进行表决输出,在这一过程中,其中1个累加电路出现了故障,在若干周期内无法累加,而其他两个累加电路仍将正确的值传递到输出端。当通过刷新等方式修复了电路的故障后,第3个电路的累加功能恢复,但是由于其状态已经损坏,所以它将从上次出现故障的值开始累加,仍然无法与其他两个累加电路保持同步,即电路的故障被消除了,但是电路仍没有获得恢复。
要恢复此电路,需要额外的电路来同步3个冗余电路之间的状态。同步冗余模块的一种方法就是在检测到错误之后进行复位操作。复位可以将所有的电路进入初始状态,然后再从该状态恢复各种操作。这种方法虽然效果明显,但是缺陷也很多,它必须停止系统来实现复位操作,还会丢失所有未保存的计算数据,此外检测错误还需要额外的计算成本。
同步电路的最常用方法是在电路的所有反馈环路上放置表决器,在反馈路径中的表决器可以确保电路之间的状态实时同步。如下图所示,累加电路回传入表决得到的正确值,并将其传递回寄存器中,从而实现各电路之间的状态同步。
这4项关键技术从不同的角度改进了TMR技术,可以搭配起来使用。