一种改进的对抗软错误电路结构设计
摘要:给出了一种改进的基于时钟沿的自我检测和纠正的电路结构,以纠正由单粒子翻转(SEU)引起的数据错误。简单概述了已有的检测和纠正SEU的电路结构,并在该电路的基础上提出了改进的电路结构.以实现对触发器以及SRAM等存储器的实时监控,并可以及时纠正其由于SEU引起的数据错误。采用内建命令进行错误注入模拟单粒子翻转对电路的影响。改进的电路与原来的电路相比,以微小的面积和较少的资源换取更高的纠错率。
关键词:SEU;检测和纠正;时钟沿;FPGA;触发器
0 引言
在一些电磁环境比较恶劣的情况下,一些大规模集成电路常常会受到干扰,导致不能正常工作,特别是储存单元,使原来存储的“0”变为“1”,或者“1”变为“0”,即单粒子翻转效应(SEU)。随着集成电路的发展,超大规模集成电路(VLSI)是必然的发展趋势。但是,单粒子翻转效应已经严重影响了VLSI的发展。
由于单粒子翻转对电路稳定性的影响,新的电路设计结构必须减少其对电路稳定性的影响。在这些新提出的电路结构中,比较常用的检查和纠正单粒子翻转的方法是三模冗余(TMR)和软件错误检测和纠正电路。三模冗余是解决SEU影响的最有效方式,其设计原理是将要保护的电路复制成完全相同的三份,同时运行这三部分电路,并且对该三部分电路的运行结果进行大数表决,表决出一个置信度高的结果输出,同时检测出那个冗余逻辑块翻转并进行修复。但它的最大缺点是需要消耗大量的资源,才能实现该电路结构。软件错误检测和纠正电路的原理是根据不同的编解码方式,实现对所存储数据进行检测和纠正。最常用的海明码方式,其设计原理是在存储的数据源码中加入一些冗余码,使这些数据源码和数据源码之间建立一定的关系,一旦数据源码或是冗余码出现某种错误时,数据码和冗余码之间的关系被破坏,就形成非法编码。接收端可以通过检测数据码和冗余码来检测数据码的正确性,并对检测出来的错误数据源码进行修改。
近来,一种基于时钟沿来检测和纠正单粒子翻转的电路结构,实现了检测单元占用更小的面积,使用更少的逻辑单元,实现相近的检测和纠正率。本文在基于该文提出的检测和纠错原理的基础上,提出了一种新的可以多次检测和纠正单粒子翻转的电路结构。
1 时钟沿检测和纠错电路原理
1.1 时钟沿产生原理
基于时钟沿的检测和纠正电路原理可知,对于触发器来说,只有在时钟上升沿的时候,输出数据发生转变才是有效的正确数据,而其他任何时刻的变化都是由于外界原因引起的信号错误(本文主要是针对SEU引起的错误)。该电路结构就是基于上述原理,通过对比数据与时钟的转变沿来对数据进行检测和纠正的,其过程可描述为时钟沿经过3个非门的延时,产生信号not_clk,该信号和时钟信号相与产生1个上升沿脉冲。
1.2 错误检测和纠正电路
另外一个需要解决的重要问题就是错误的检测和纠正。首先,该文信号的错误检测原理图如图1所示。时钟产生的脉冲与数据翻转产生的脉冲进行比较。比较单元的核心部分可由如下表达式表述:
SEU_O=Data_pulse×Clk_pulse’ (1)
式中:Data_pulse是数据信号经过沿检测电路后的信号;Clk_pulse是时钟信号经过沿检测电路后的信号。在时钟上升沿时,Clk_pulse会产生一个正向脉冲,如果此时数据发生翻转,Data_pulse也会产生一个正相脉冲,SEU_O将保持0不变,当SEU影响,使数据发生翻转时,Data_pulse会产生一个脉冲,而此时由于不是在时钟上升沿,信号Clk_pulse将保持为1,此时的输出信号SEU_O就被置为1。由上述分析可知,当没有SEU错误发生时SEU_O为0;当发生SEU错误时SEU_O为1;
该文的错误纠正电路原理如图1所示,该部分电路的核心是运用一个多路输出选择器来纠正触发器的错误输出信号。多路输出选择器的输入信号为SEU_O,输出选择信号为触发器的输出信号,两个输出信号分别连接到触发器的复位端和清零端。
由上面的分析可知,检测到有错误发生时,SEU_O的值为1。此时,如果Q值为1(正确值应该为0),那么就把SEU_O的值1赋给S1,触发器被清零,Q被置为0;如果Q值为0(正确值应该为1),那么把SEU_O的值1赋给S0,触发器被置1,Q被置为1,从而实现对Q值的纠正;如果没有错误发生时,SEU_O的值为0,此时不论触发器的输出信号Q为1或0,都不会对Q值产生影响。
为了避免检测电路把纠正之后的Q值作为SEU引起的错误值来进行处理和纠正,该电路添加了一个触发器,用以锁存以前的电路状态,如图1所示。信号SEU_O与信号S3,S4,S5有关,可以由下述表达式表示:
SEU_O=S4×S3’×S5’ (2)
由原理图可知,每一个时钟上升沿到来时就会对触发器清零,电路可以对数据进行检测和纠正。若在一个时钟周期内,第1次发生单粒子翻转并被检测到SEU_O由0变为1,同时触发器被置1,进而SEU_O的值又变为0,纠正后的数据产生数据沿脉冲不会对SEU_O的值产生影响,从而完成这一次的数据检测和纠正。
DIY机械键盘相关社区:机械键盘DIY
评论