面向独热编码的有限状态机抗单粒子翻转设计*
2022-08-26范毓洋
王 鹏,邓 智,b,范毓洋
(中国民航大学 a.民航航空器适航审定技术重点实验室;b.中欧航空工程师学院,天津 300300)
0 引 言
在高空环境下,电子元器件更容易受到高能粒子的影响,从而发生单粒子翻转(Single Event Upset,SEU)[1],导致电路存储数据错误、控制状态改变等后果,严重者甚至能造成系统故障[2]。而在时序电路设计中处于核心地位的有限状态机用于航空航天电路设计时,也容易受到单粒子翻转影响[3]。为了减少单粒子翻转带来的影响,目前较为常见的处理方式为三模冗余(Triple Modular Redundancy,TMR)[4]和编码方式设计[5-7]。三模冗余能够实现1位翻转错误的抵御,但无法处理多位数据翻转的情况[8]。而编码方式设计这一领域也有其局限性,例如常用的汉明码只能实现纠一检二的功能[9]。而能纠正多位错误的编码,例如RS码、(14,8)循环码[10]、(16,8)准循环码[8]则存在编译码过程复杂、逻辑资源占用多的缺点。
针对上述方案的不足,本文利用有限状态机中常用的独热码的特性,提出了一种抗单粒子翻转加固设计方案。该方案首先根据实际需求对独热码进行冗余,然后添加了高位记录模块和高位数比较模块完成冗余独热码处理,从而实现抗单粒子翻转设计。
本方案相比于传统的三模冗余和编码具有显著的两个优点:一是能够处理多位单粒子翻转情况,并且能够根据实际情况进行实时调整冗余倍数,达到调整抗单粒子翻转能力的目的;二是相比于编码方式,本方案的逻辑简单,不需要编码译码,具有逻辑简单、逻辑资源占用少、便于开发等优点。
1 有限状态机加固设计
如图1所示,有限状态机分为米利机和摩尔机两种基本类型。
图1 有限状态机结构图
在有限状态机中,单粒子翻转主要发生在状态寄存器区域,且当状态寄存器发生单粒子翻转故障时,两种有限状态机都会受到影响,进入未知状态。因此本文基于图1所示米利机和摩尔机的基本结构对状态寄存器采取了加固设计,具体结构如图2所示。
(a)加固后的米利机结构图
1.1 独热码冗余
独热码冗余是实现加固设计的基础,具体的冗余倍数则根据实际情况进行选择。假设某设备中要求发生最高N位翻转仍能正常工作,则此时冗余倍数应为N。此外,冗余的方式与普通的三模冗余方式也有所区别:三模冗余是将整个状态当作整体进行冗余,然后判断;而本文则是将状态的各个比特位的数据当作个体进行冗余。图3(a)展示了一个简单状态机的状态转移图,假设要求此状态机发生最高3位翻转仍能正常工作,则此时的冗余倍数N应等于3,独热码经过3倍冗余之后的形式如图3(b)所示。
图3 示例状态机描述
1.2 高位记录模块和高位数比较模块
高位记录模块和高位数比较模块共同完成对冗余独热码的处理,以达到纠正单粒子翻转故障的目的。其中,高位记录模块根据当前状态和输入得出下一状态的独热码高位所在位置。以图3(a)为例,假设当前状态为状态1且输入为1,则下一状态应为状态2。状态2的独热编码为010,高位位于第二位(从右至左),所以此时高位记录模块中应记下的高位位置为2。由于高位位置只可能在第一位、第二位和第三位三种位置,所以只需要两位寄存器即可,此时两位寄存器中存储的数据应为01(第一位记为00,第二位记为01,第三位记为10)。
独热编码进行冗余之后,单个比特位会冗余为N个数据(N代表冗余倍数),这样的N个数据被定义为同一组,由数值为“1”冗余而来的组称为高位组,由数值为“0”冗余而来的组称为低位组。如图3(b)所示,状态1的第一位经过3倍冗余之后成为了冗余后的状态1的第一、二、三位,则冗余后的状态1的第一、二、三位处于同一组,由于状态1的第一位数值为“1”,因此冗余后的状态1的第一、二、三位共同构成高位组。高位数比较模块则是对冗余后的独热码各组中的高位数量进行比较,若是存在一组高位数量最大,则将其对应的独热码数据位记作1,其他数据位记作0;若是存在两组及以上的最大高位数量相同,则读取高位记录模块中的数据,确定高位在独热码中的位置,并输出正确状态。
经过高位数比较模块和高位记录模块对冗余独热码处理之后,独热码数据能够有效抵御单粒子翻转。图4给出了加固设计完成三位单粒子翻转纠正的过程。图4(a)中三位单粒子翻转都发生在同一组内,导致存在两组高位数量相同,此时则根据高位记录模块中的数据确定高位所在位置,完成正确的输出。图4(b)中的三位翻转分别发生在第一组和第二组以及高位位置记录模块中,由于不存在最大高位数量相同的两组,故无需高位记录模块参与,直接完成正确数据的输出。
(a)高位记录模块参与控制
2 仿真验证
2.1 验证模型
本文将航空全双工交换以太网(Avionics Full Duplex Switched Ethernet,AFDX)中的入队数据总线控制模块作为验证模型,并注入单粒子翻转故障,根据其仿真结果来验证设计方法的可行性。
入队数据总线控制模块的作用是根据业务类型(BE业务和TTRC业务)控制数据缓存。要实现这一功能一共需要5个状态,分别是初始状态、预接收状态、TTRC接收状态、BE接收状态和结束状态。具体状态转移图和独热编码如图5所示。
图5 入队数据总线控制模块的状态机描述
现假设该模块要求能纠正三位单粒子翻转错误,则冗余倍数N=3,独热编码应该冗余3倍。本文进行的仿真验证便是基于冗余3倍后的独热编码展开的。
2.2 故障注入
故障注入的作用是模拟故障发生,用于检验设计方法。入队数据总线控制模块是通过添加一个接口injection以实现控制是否注入故障。如果选择注入故障,则通过改变寄存器中的数据以模拟单粒子翻转发生。为了更好地检验其抗单粒子翻转能力,本部分根据需求考虑了最坏情况的发生(发生了三位单粒子翻转),并且设计了两种注入场景:场景1是单粒子翻转全发生在状态寄存器中;场景2是两位单粒子翻转发生在状态寄存器中,一位发生在高位记录模块中的寄存器。这两种场景考虑了最坏情况和单粒子翻转是否发生在高位记录模块之中,具有代表性。
2.3 仿真结果
图6为注入故障后的波形图,其中injection表示是否注入单粒子翻转,bus_data表示输入数据,cstate代表当前状态,nstate代表下一状态,cnt1~5分别表示第一、二、三、四、五组高位数,high_position表示高位所在位置,write_en表示输出使能信号,write_data表示输出数据。
图6红色框中展示了注入场景1之后信号的情况:三位单粒子翻转全发生在了第一组中,使得本应为15’b000_000_111_000_000的nstate数据转变为15’b000_000_111_000_111。因此此时存在两组最大高位数相等的情况,即cnt1=cnt3,则根据high_position数据确定高位处于第三位(high_position为3’b010,表示高位位于第三位),所以在下一时钟周期,cstate为5’b00100,这与预期的下一状态一致。
图6绿色框中展示了注入场景2之后信号的情况:单粒子翻转发生在状态寄存器中的第三组,和高位记录模块中表示第一位的寄存器,使得本应为15’b111_000_000_000_000的nstate数据转变为15’b111_000_110_000_000,本应为3’b100的high_position数据转变为3’b101。由于此时不存在最大高位数相等的情况,高位记录模块无需参与判定,所以在下一时钟周期,cstate为5’b10000,这与预期的下一状态一致。
图6 故障注入后仿真结果
如果采用常用的三模冗余方式对入队数据总线控制模块进行加固,当同时发生三位单粒子翻转的时候,有限状态机的状态转移可能出现故障,导致无法进入接收状态从而使得应传输的数据未传输,也可能导致无法进入结束状态从而使得不应传输的数据继续传输。而本文的设计方法能够帮助入队数据总线控制模块解决三位单粒子同时翻转带来的故障,保证了正常的状态转移,实现了控制数据缓存的作用。
3 可靠性评估
本文中将比特位翻转事件视为离散随机事件,故在单位时间内单个寄存器中发生单粒子翻转次数的概率服从泊松分布。泊松分布的概率函数如下:
(1)
式中:λ代表单位时间内发生单粒子翻转的平均次数。
单个寄存器在发生奇数次翻转才会导致存储数据发生改变,此类事件发生的概率记为P0,计算公式如下:
(2)
寄存器存储数据不发生改变的概率记为P1,计算公式如下:
(3)
为了更方便地评估本文加固方法的可靠性,本部分将可靠事件分为独立的两种事件:事件1表示高位组中的数据“1”数量大于所有低位组中的数据“1”数量;事件2表示至少存在一组低位组中的数据“1”数量等于高位组中的数据“1”数量,但不存在一组低位组中的数据“1”数量大于高位组中的数据“1”数量,且高位记录模块中的寄存器记录数据不发生改变。记有限状态机不发生故障概率为Psuccess,事件1发生概率为P2,事件2发生概率为P3。由于事件1和事件2相互独立,故
Psuccess=P2+P3。
(4)
(5)
由于一共有M个状态,所以高位记录模块一共需要「lbM⎤个寄存器(「⎤为向上取整符号),则高位记录模块寄存器不发生数据改变的概率为P1「lb M⎤,所以事件2发生的概率P3为
(6)
根据Psuccess可以求得失效概率Pfailure为
Pfailure=1-Psuccess。
(7)
当λ=1/50时,Pfailure与M和N的关系如图7所示。Pfailure随着M的增大而增大,这是由于状态数量的增加,使得受单粒子翻转影响的寄存器数量增加,从而导致Pfailure增加。图7中,当M=17时,Pfailure明显增加。这是由于相比于M=16时,高位记录模块中需要一个额外的寄存器用于记录位置信息,增加了寄存器数量,导致Pfailure明显增加。Pfailure随着N的增加而减少,这是由于冗余倍数N的增加,使得状态机的抗单粒子能力更强,Pfailure更小。上述结果符合预期。
(a)冗余倍数:3~5
(8)
根据Psuccess-TMR可以求得失效概率Pfailure-TMR为
Pfailure-TMR=1-Psuccess-TMR。
(9)
本文定义了失效对比度A以便对比本文加固方法的可靠性和传统三模冗余加固方法的可靠性:
(10)
取定冗余倍数N=3,则A与λ和M的关系如图8所示。
图8 A与M的关系图
图8中,大于0.99的A的值一共有421个,剩下的29个值也位于0.99附近,这说明了相比于Pfailure-TMR,至少93.6%的Pfailure的数量级降低了两位,即此加固方法的可靠性相较于常规三模冗余的可靠性有显著提高。除此之外,A的值会随着M的增加有下降的趋势,但即使当M=140时,A的值仍然大于0.98,这表明即使M较大,此加固方法的可靠性依然显著高于传统三模冗余方法的可靠性。通常情况下M的值小于140,这意味着在通常情况下此加固方法的可靠性能保持较高水平。
4 结 论
本文研究了基于独热码的有限状态机抗单粒子翻转设计。相比于传统的三模冗余加固设计,本文的设计方法能够满足多位单粒子翻转纠正的需求,并且能够通过调整冗余倍数以满足实际情况需求。以AFDX中的入队数据总线控制模块作为验证模型,设计了两种注入场景并进行了仿真,结果证明了设计方法的正确性。与传统的三模冗余可靠性进行对比,此设计方法的可靠性有显著的提高。本文为有限状态机抗单粒子翻转加固设计的新方法,具有纠正位数可调整、逻辑简单、便于开发、可靠性高等优点,实用性较强。