一般来说复杂逻辑功能的逻辑电路的纠错是不容易实现的。
原则上最简单的是图1中所示的多数表决规则。先前已经描述了使用两个功能完全相同的单元来比较输出以进行错误检测的配置,但是在多数表决中使用三个功能相同的单元。每个输出信号由三个单元的对应输出位的多数表决决定。
图1
如果故障只影响一个单元的输出,则两个单元的输出总是正确的,并且是相等的,因此即使一个单元输出错误,它也会被执行多数表决的Voter(投票机制)纠正。
但是,在这种结构中,单元中的单一故障由多数表决来纠正,,但是如果发生Voter故障或输出线卡死故障,则会发生错误。所以这些部分也采用了三重选择电路,如下图2所示的Triple Voter的结构。
图2 (注:本文来自日文网站,有些图片日文没有翻译)
在图2的配置中,三个选择单元用于在下一阶段中生成单元1至3的输入。在这种配置中,即使发生选择的故障或输出线的故障,也只有到一个下一级单元的输入是错误的,其余两个下一级单元的输入才是正确的。这些单元给出正确的结果,并且错误将由下一个单元的输出处提供的Voter纠正。因此,使用三重选择结构,可以纠正所有单个故障。
由于图1和2中的结构是使用三个单元的冗余配置,因此它们被称为TMR(三重冗余设计)。
如果是单个故障,TMR不会出错,但是固定故障发生在一个单元中,并且当该单元被分离时,仅剩下两个单元,并且其中一个发生间歇性故障,并且输出错误存在无法纠正的问题。在要求极高可靠性的系统中,存在这样的配置,其中提供了备用的第四单元,并且通过用备用部件替换具有固定故障的单元来维护TMR。
这有点令人困惑,但是即使进行了这种多路复用,也无法纠正设计中的错误,因为所有单元的输出都会出现类似的错误。因此,空中客车A300线控飞行系统旨在通过使用由两个设计团队独立开发的不同处理器以及硬件和软件来检测设计错误。。这样的设计和实现是昂贵的,但是可以有效的避免由于电子电路故障而导致大型客机坠毁的风险和成本。A300的电传飞行系统不使用三重错误校正功能,但是当不同团队开发的具有相同功能的单元的输出有所不同时,将判断权交给了飞行员。从这个意义上讲,飞行员可以被视为三合一中的一个,对设备的决定拥有最终的权力。
波音777的主要飞行控制系统更加完善,使用计算机来实现TMR,该计算机使用三种不同的微处理器:AMD 29050,Motorola 68040和Intel 80486。它具有两层TMR架构,其中多数由这三个TMR单元决定。
还使用了多路复用系统,因为如果NASA的载人火箭发射等由于电子电路故障而失败,则会造成巨大损失。
这样的表决系统非常可靠,但是由于使用三个相同的单元并需要额外的表决电路,因此其成本是单个单元的三倍。
Checkpoint-Restart方法是考虑是否可以以较低的价格实现逻辑电路的纠错的方法。在该方法中,周期性地存储硬件的状态(触发器,存储器等的状态)。然而,当全部清除高速缓冲存储器等并且重新开始执行时,再次读取存储器以节省架构状态的存储量。
此存储的硬件状态称为检查点。如果通过双重比较或其他方法检测到错误,则读取检测到错误之前的检查点的值,恢复硬件状态,并且取消后续指令执行的所有影响,并从检查点之后的指令重新开始执行。
这样,就像Word等软件的撤消功能一样,您可以撤消错误执行的影响,并从错误发生之前的位置重新开始。Checkpoint-Restart是其硬件版本。但是,要实现此功能并不容易,并且处理器Checkpoint-Restart的实现仅限于POWER6之后的IBM Z系列大型机和高端服务器处理器,以及富士通大型机和SPARC64处理器。
在处理普通数据的处理器中,三重化由于硬件的增加较大,所以使用Checkpoint-Restart,但是Checkpoint-Restart从错误检测到恢复正常操作需要一定的时间。在进行常规数据处理的服务器中,这种延迟时间不是问题,但在诸如自动驾驶的实时系统中,如果响应延迟,飞机可能在此期间坠毁。因此,实时系统使用的不是Checkpoint-Restart,而是3重化等处理不中断的错误纠正方式。