基于检查点技术的双冗余流水线的制作方法

文档序号:13360772阅读:155来源:国知局
基于检查点技术的双冗余流水线的制作方法

本实用新型涉及一种微处理器流水线错误的检测与恢复装置,尤其涉及一种SPARC V8处理器中流水线错误的检测与恢复装置。



背景技术:

单粒子翻转(Single Event Upset,SEU)是在空间应用环境下,由于单粒子入射导致集成电路中存储单元发生数据翻转错误的事件,是空间环境下电子系统发生故障和工作异常的重要诱因之一。随着半导体工艺技术的快速发展,芯片的尺寸在不断减小,处理器工作频率不断提高,节点工作电压的降低使得单粒子翻转现象越来越严重。单粒子轰击流水线的组合逻辑部分,导致信号发生扰动,有可能会被级间寄存器锁存发生SET故障,导致流水线出现错误。单粒子轰击级间寄存器,使其寄存的内容发生反转,导致SEU和MBU故障。研究指出,在纳米级芯片中,单粒子翻转导致的多位数据翻转(MBU)概率也在迅速提高,会导致最多8位随机数据翻转错误,对空间应用的电子系统产生更大的危害。在微处理器及电子系统中采取加固措施对单粒子故障进行容错设计已成为重要的技术手段。

作为现代微处理器的重要组成部分,流水线主要完成程序代码的指令流执行,并将执行结果写入数据存储和寄存器堆。如果单粒子轰击流水线导致级间寄存器发生翻转引发的错误数据被锁存,就会导致流水线执行结果不正确,在没有对流水线单元进行容错加固的情况下,错误的执行结果将会扩散到数据存储和寄存器堆或者执行错误的指令流,进而导致更多不可控的错误产生。因此,对于空间应用的高可靠微处理器而言,进行流水线单元的容错设计具有重要的意义。

现有对空间微处理器的加固技术有以下三种方案:采用基于时间的容错方法,能有效解决MBU问题,但是处理器性能大大降低;采用基于编码的容错方法,只能有效的验证计算部分的正确性,并且不同的编码方式针对不同的单粒子故障不能全部处理,容错能力有限;采用基于硬件冗余的方案,寄存器级三模冗余时,无法应对MBU故障;流水线级三模冗余,虽然可以定位出故障流水线,但是硬件资源功耗等开销较大;流水线级双模冗余可以应对MBU故障,但是无法定位,起不到屏蔽故障的作用,每次都进行流水线回退会显著增加流水线性能开销,尤其是在单粒子故障日益常见的情况下会导致整体处理速度明显降低。自修复双冗余流水线(Self-Recovery Dual Pipeline,SRDP)在双冗余流水线的基础上,通过比较逻辑检测故障,自校验逻辑定位故障,实现对SET、SEU、MBU故障导致的错误进行执行,虽然SRDP对单粒子故障有很好的容错效果,但比较逻辑与功能逻辑的串行、自校验的编码逻辑以及复杂的流水线恢复操作导致处理器的主频下降幅度很大。总之,现有技术无法实现一个以低面积、低性能开销并有效应对SEU、SET和MBU故障的CPU加固方案。



技术实现要素:

本实用新型的目的在于设计一种基于检查点技术的双冗余流水线,能够从系统结构上有效的屏蔽单粒子瞬变(SET)、单粒子翻转(SEU)、多位数据翻转(MBU)导致的故障,并减少逻辑延迟,提高工作速度。

为实现上述目的,本实用新型所采用的技术方案为:

一种基于检查点技术的双冗余流水线,其特征在于:所述基于检查点技术的双冗余流水线包括流水线A、流水线B、指令缓存(301)、备份寄存器组(401)、比较逻辑(501)、写缓存(601)、数据缓存(701)和寄存器堆(801);所述流水线A包括取指段(101)、译码段(102)、执行段(103)、访存段(104)、写回段(105)五个流水段;所述流水线B包括取指段(201)、译码段(202)、执行段(203)、访存段(204)、写回段(205)五个流水段;数据缓存(701)和寄存器堆(801)由流水线A和流水线B共享,正常情况下,执行指令流时默认写入流水线A的执行结果;所述指令缓存(301)用于存储流水线执行的代码,与流水线A中取指段(101)进行数据交互,流水线A取出指令后分发给两条流水线执行;所述备份寄存器组(401)以周期粒度对流水线A的级间寄存器进行备份,一旦比较逻辑(501)检测出单粒子故障,将备份的内容恢复到流水线A和流水线B的级间寄存器中,2个周期后流水线正常执行;所述比较逻辑(501)设置在流水线A与流水线B之间,对比两条流水线的级间寄存器内容,检测单粒子故障;所述写缓冲(601)设置在数据缓存(701)和寄存器堆(801)的入口,用于暂存流水线给出的更新数据;所述数据缓存(701)用于存储流水线输出的数据,并向流水线提供运算操作数;所述寄存器堆(801)用于存储流水线输出的数据,并向流水线提供运算操作数。

本实用新型实现的一种基于检查点技术的双冗余流水线,在嵌入式微处理器中,将级间寄存器的信息备份到备份寄存器组中,一旦比较器检测出单粒子故障,将备份寄存器组中的信息恢复到两条流水线相应的级间寄存器中,不仅能够屏蔽单粒子轰击流水线单元导致的SET、SEU和MBU故障,从而可以提高微处理器在空间等恶劣环境下应用的可靠性,还减少了故障检测及流水线恢复功能的复杂度,减小了逻辑延迟,提升处理器的工作主频。

附图说明

图1是五级流水线结构图;

图2是SRDP结构图;

图3是根据本实用新型的基于检查点技术的双冗余流水线结构图;

图4是故障检测与恢复机制结构图;

图5是级间寄存器的SEU/MBU故障检测与恢复时序图;

图6是功能逻辑的SET故障检测与恢复时序图;

图7是写缓冲容错结构图;

图8是SEU/MBU的写缓冲容错时序图;

图9是SET的写缓冲容错时序图。

具体实施方式

本实施例结合一种SPARC V8体系结构的嵌入式微处理器LEON2对本实用新型的具体实施方式进行说明。该SPARC V8体系结构的嵌入式微处理器LEON2采用32位的RISC架构,其流水线单元为经典的五级流水线,流水线的各个流水级与指令缓存、数据缓存和寄存器堆进行数据交互。

LEON2处理器的流水线单元包括取指(IF)、译码(ID)、执行(EX)、访存(ME)、写回(WR)五个组合逻辑单元,以及各流水级之间设置的五组级间寄存器IF、IF/ID、ID/EX、EX/ME、ME/WR,其结构如图1所示。单粒子轰击流水线的组合逻辑部分导致SET故障,有可能会被级间寄存器锁存导致流水线错误。单粒子轰击级间寄存器,使其寄存的内容发生翻转,导致SEU和MBU故障。组合逻辑产生的关键信息将通过级间寄存器在流水级之间传递,级间寄存器中的错误信息使得流水线单元执行出错误结果,并在ME或WR段更新到数据存储器或寄存器堆。同时,指令地址紊乱的错误可能造成指令流的执行顺序发生错误。

自修复双冗余流水线(Self-Recovery Dual Pipeline),简称SRDP,其结构示意图如图2所示。SRDP基于硬件冗余的思想,对传统的流水线级双模冗余结构进行改进,在两条流水线之间设置比较器对流水线单元进行故障检测,利用自校验模块对级间寄存器进行校验定位出故障流水线,根据比较结果和自校验错误信息对流水线进行恢复,实现对SET、SEU、MBU故障导致的错误进行执行,虽然SRDP对单粒子故障有很好的容错效果,但比较逻辑与功能逻辑的串行、自校验的编码逻辑以及复杂的流水线恢复操作导致处理器的主频下降幅度很大。

本实用新型针对于SRDP容错性能的缺陷,在保证容错效果的基础上,以容错时间开销为代价,避免复杂的容错逻辑导致处理器性能大幅度降低,提出一种基于检查点技术的双冗余流水线。

基于检查点技术的双冗余流水线是以流水线级双模冗余为基础,并行执行相同的指令流,通过比较器对比两条流水线的级间寄存器以检测单粒子故障。以周期粒度对级间寄存器的内容进行备份,当检测到单粒子故障时,使用2个周期对流水线进行恢复。为避免脏数据流出流水线,在数据缓存和寄存器堆的入口设置写缓冲,通过延迟写入保证信息可靠性。相对于SRDP方案,此方案取消了自校验逻辑、并行执行功能逻辑与比较逻辑以及简化的流水线恢复机制,向处理器的关键路径引入较小的延迟,相对于LEON2原型,此方案实现的处理器的时钟频率只下降了9.8%,面积开销增加66%左右。与DMR和SRDP相比,性能上提升了36.9%和70.3%。随着集成电路的飞速发展,面积开销不再是容错处理器设计的瓶颈,容错方案的性能开销对于处理器的意义更大,更小关键路径延迟意味着处理器的处理能力更强。因此,基于周期粒度的级间寄存器备份机制在面积和性能开销方面更具优势。

基于上述基本原理与设置,本实用新型的基于检查点技术的双冗余流水线的一种具体实施方式如下:

在SPARC V8体系结构的嵌入式微处理器中,将流水线单元设置成如图3所示,主要包括流水线A、流水线B、指令缓存(301)、备份寄存器组(401)、比较逻辑(501)、写缓冲(601)、数据缓存(701)和寄存器堆(801)。

流水线A和流水线B包括取指(IF)、译码(ID)、执行(EX)、访存(ME)、写回(WR)组合逻辑单元,以及各流水级之间设置的级间寄存器(IF、IF/ID、ID/EX、EX/ME、ME/WR)。两条流水线拥有各自的数据通路,同时共享指令缓存、数据缓存和寄存器堆。并行执行相同指令流,并默认用流水线A的执行结果与指令缓存、数据缓存和寄存器堆进行数据交互,流水线B为备份单元。

指令缓存(301)用于存储流水线执行的代码,与流水线A中IF段进行数据交互,流水线A取出指令后分发给两条流水线执行。

备份寄存器组(401)以周期粒度对流水线A的级间寄存器进行备份,一旦比较逻辑(501)检测出单粒子故障,将备份的内容恢复到流水线A和流水线B的级间寄存器中,2个周期后流水线正常执行,从而避免了故障累积和传播效应。

比较逻辑(501)设置在流水线A与流水线B之间,对比两条流水线的级间寄存器内容,从而检测出单粒子故障。由于取指段需要根据指令地址从指令缓存中取出指令,译码段需要从寄存器堆中取操作数,执行段和访存段均会产生与指令缓存交互的信息,写回段会将执行结果更新到寄存器堆。因此,需要将五级的级间寄存器进行对比,避免流水线发生共模错误或将错误数据更新到数据存储和寄存器堆。

写缓冲(601)必须保证数据缓存(701)和寄存器堆(801)不会被流水线单元给出的错误更新。分别在数据缓存入口设置1个写缓冲和寄存器堆入口设置2个写缓冲,用于缓存流水线需要写入数据缓存和寄存器堆的值,并对比寄存器堆入口的写缓冲的内容(用于检测WR段功能逻辑的SET故障),一旦比较逻辑(501)检测到单粒子故障,作废掉写缓冲中的数据,避免脏数据流出流水线。

数据缓存(701)和寄存器堆(801)用于存储流水线单元需要的数据,流水线单元根据指令字会对寄存器堆和数据缓存器进行读写操作,与流水线A给出的信息进行交互,流水线A将执行结果写入寄存器堆和数据缓存器,或者从中读出数据分发给两条流水线操作。

所述基于检查点技术的双冗余流水线采用如下步骤与方法对流水线中的错误数据进行检测和处理:

(1)取指段,将流水线A取指段(101)的级间寄存器内容存储到备份寄存器组(401);流水线A的取指段(101)给出指令地址,从指令缓存(301)中取出指令分发给两条流水线执行;比较逻辑(501)对比两条流水线的级间寄存器信息,如果比较结果相同,说明流水线单元的取指段没有被单粒子轰击,流水线继续向下执行,如果比较结果不同,说明一条流水线的取指段的级间寄存器发生SEU/MBU故障,给出流水线取指段的错误信号;

(2)译码段,将流水线A译码段(102)的级间寄存器内容存储到备份寄存器组(401);流水线A的译码段(102)读地址信息,判断操作数是否存在写缓冲(601)中,如果存在,则从写缓冲(601)中取出操作数并分发给两条流水线操作,否则,从寄存器堆(801)中取出操作数分发给两条流水线操作;比较逻辑(501)对比两条流水线的译码段级间寄存器信息,如果比较结果相同,说明流水线单元的译码段没有被单粒子轰击,流水线继续向下执行,如果比较结果不同,说明一条流水线的取指段的功能逻辑发生SET故障,或者译码段的级间寄存器发生SEU/MBU故障,给出流水线译码段的错误信号;

(3)执行段,将流水线A执行段(103)的级间寄存器内容存储到备份寄存器组(401);流水线A的执行段(103)读地址信息,判断操作数是否存在写缓冲(601)中,如果存在,则从写缓冲(601)中取出操作数并分发给两条流水线操作,否则,从数据缓存(701)中取出操作数分发给两条流水线操作;比较逻辑(501)对比两条流水线的级间寄存器信息,如果比较结果相同,说明流水线单元的执行段没有被单粒子轰击,流水线继续向下执行,如果比较结果不同,说明某条流水线的译码段的功能逻辑发生SET故障,或者执行段的级间寄存器发生SEU/MBU故障,给出流水线执行段的错误信号;

(4)访存段,将流水线A访存段(104)的级间寄存器内容存储到备份寄存器组(401);流水线A的访存段(104)给出与数据缓存(701)的写交互信息,并将其更新到写缓冲(601);比较逻辑(501)对比两条流水线的级间寄存器信息,如果比较结果相同,说明流水线单元的访存段没有被单粒子轰击,流水线继续向下执行,如果比较结果不同,说明某条流水线的执行段的功能逻辑发生SET故障,或者访存段的级间寄存器发生SEU/MBU故障,给出流水线访存段的错误信号;

(5)写回段,将流水线A写回段(105)的级间寄存器内容存储到备份寄存器组(401);流水线A的写回段(105)和流水线B的写回段(205)给出与寄存器堆(701)的写交互信息,并将其更新到写缓冲(601);比较逻辑(501)对比两条流水线的级间寄存器信息,如果比较结果相同,说明流水线单元的写回段没有被单粒子轰击,流水线继续向下执行,如果比较结果不同,说明某条流水线的访存段的功能逻辑发生SET故障,或者写回段的级间寄存器发生SEU/MBU故障,给出流水线写回段的错误信号;

(6)比较逻辑(501)对比步骤(5)中两条流水线存入写缓冲(601)中的信息,如果比较结果相同,说明流水线单元没有被单粒子轰击,如果比较结果不同,则说明写回段的功能逻辑发生SET故障,给出错误信号;

(7)将步骤(1)、(2)、(3)、(4)、(5)、(6)中错误信号进行或操作,生成恢复信号,如果恢复信号有效,作废当前周期流水线单元所有操作,并将备份寄存器组(401)中的内容恢复到两条流水线对应的级间寄存器中,同时清空写缓冲(601)的信息,禁止更新数据缓存(701)和寄存器堆(801),流水线重新执行发生故障的操作。

为了详细说明基于检查点技术的双冗余流水线的容错方法,从以下三个方面进行分析:

1、多位容错的双冗余流水线结构:两条流水线并行执行相同指令流的按序的流水线,命名为流水线A、流水线B,以流水线A执行结果与流水线单元外部进行交互,比较器对两条流水线中级间寄存器的内容进行比较,从而实现对流水线单元的单粒子故障的检测。

2、周期粒度的级间寄存器备份机制:单粒子故障发生后,为了对流水线单元进行恢复,同时避免故障累积和传播效应,将会对流水线级间寄存器以周期粒度进行备份,一旦比较器检测出单粒子故障,将备份的内容恢复到流水线的级间寄存器中,2个周期后流水线正常执行。

3、输出数据的写缓冲机制:以周期粒度对级间寄存器进行备份的机制只能保证流水线单元数据的正确性,因此,需要在数据缓存和寄存器堆的入口设置写缓冲,用于缓存流水线需要写入数据缓存和寄存器堆的值,一旦比较逻辑检测到单粒子故障,作废掉写缓冲中的数据,避免脏数据流出流水线。

基于检查点技术的双冗余流水线的故障检测和恢复机制如图4所示,级间寄存器ij为流水线i(i=A,B)的第j(j=1,2,3,4,5)级级间寄存器,功能逻辑ij为流水线i的第j级的功能逻辑,备份寄存器j为流水线第j级的备份寄存器,比较器j为流水线第j级的比较器。以流水线第2级的检错与恢复操作为例,当前周期,功能逻辑A1/B1的计算结果DA2/DB2。第二个周期,DA2/DB2被锁存到级间寄存器A2/B2中,QA2/QB2为DA2/DB2的锁存结果。第三个周期,备份寄存器2对级间寄存器A2的内容进行备份,BP2为QA2的锁存结果。Error为比较器2给出的错误信号,用于控制将备份寄存器的内容恢复到级间寄存器中。由上述分析可知:时钟clk会按周期刷新级间寄存器ij,同时,备份寄存器j对流水线A中的级间寄存器进行备份,比较器通过比较两条流水线级间寄存器的内容检测单粒子故障,比较结果相同,则流水线正常流动,一旦比较结果不同,将错误信息Error置为有效,将备份寄存器j中的值在下个周期恢复到两条流水线的级间寄存器中重新执行。

由图4中可知,流水线单元有三大主要部件:级间寄存器、备份寄存器和功能逻辑。级间寄存器和备份寄存器为时序逻辑电路,容易受单粒子影响而引发SEU和MBU故障。功能逻辑则是组合逻辑电路,容易被单粒子轰击导致信号发生瞬变,被级间寄存器锁存后引发SET故障。由于备份寄存器受到单粒子轰击不会影响处理器的运行,因此,只讨论级间寄存器和功能逻辑发生故障后的检错和恢复方法:

(1)级间寄存器发生SEU/MBU故障后,将采用以下三步进行检错与恢复,其时序如图5所示:

第一步:流水线中指令正常执行;

第二步:备份寄存器锁存第一步中的指令,流水线的级间寄存器被单粒子轰击导致SEU/MBU,通过比较级间寄存器的内容,检测出单粒子故障,流水线被暂停;

第三步:将第二步中备份寄存器锁存的内容更新到流水线级间寄存器,重新执行第一步流水线中的指令。

(2)功能逻辑发生SET故障后,将采用以下三步进行检错与恢复,其时序如图6所示:

第一步:流水线的功能逻辑被单粒子轰击导致SET,流水线中指令非正常执行;

第二步:备份寄存器锁存第一步中的指令,SET被级间寄存器锁存,通过比较级间寄存器的内容,检测出单粒子故障,流水线被暂停;

第三步:将第二步中备份寄存器锁存的内容更新到流水线级间寄存器,重新执行第一步流水线中的指令。

当发生单粒子故障后,本文提出的故障检测与恢复机制能够控制两条流水线重新执行发生故障指令,从而保证流水线单元的数据恢复到正常状态,但寄存器堆和数据缓存可能会被流水线中的脏数据更新。

如图7所示,在数据缓存和寄存器堆入口设置写缓冲用于暂存数据。在数据缓存的入口设置一个写缓冲,缓存流水线A在访存段给出用于修改数据缓存的地址、数据以及控制信号。在寄存器堆的入口设置两个写缓冲,分别缓存流水线A和流水线B在写回段给出用于修改寄存器堆的地址、数据以及控制信号。在本文提出检测与恢复机制中,如果流水线5个流水级的级间寄存器发生SEU/MBU故障,以及流水线前4级的功能逻辑发生的SET故障,均可以通过比较器检测,但写回段的功能逻辑发生SET故障则无法检测。因此,在寄存器堆的入口设置两个写缓冲,将两条流水线的结果都缓存,并在下一个周期比较两个写缓冲中的内容,既达到检测出写回段功能逻辑中SET故障的目的,又不会对关键路径增加额外的延迟。

由于在数据缓存和寄存器堆的入口设置了写缓冲,导致在流水线正常执行时,延迟一个周期将数据更新到数据缓存/寄存器堆。流水线单元向数据缓存和寄存器堆发出读数据请求时,会优先判断目的信息是否存在于写缓冲。如果存在,则从写缓冲读取需要的数据分发给两条流水线执行,如果不存在,则从寄存器堆/数据缓存中读出数据分发给两条流水线执行。当检测出单粒子故障时,则作废写缓冲的中的数据,阻止其更新数据缓存/寄存器堆,同时禁止当前周期对写缓冲的更新。

图8是流水线级间寄存器发生SEU/MBU故障的容错时序图。第6个周期,时钟上升沿将写缓冲中的内容更新到数据缓存和寄存器堆,同时将第5个周期中ME和WR给出的更新数据缓存和寄存器堆的信息存储到写缓冲;单粒子轰击流水线的ME的级间寄存器导致SEU/MBU故障,比较器检测出故障,清空写缓冲,则流水线在第5个时钟周期给出用于修改数据缓存和寄存器堆的值被作废。第7个周期,时钟上升沿禁止第6个周期中ME和WR给出的数据更新到写缓冲,将备份寄存器组中的内容更新到两条流水线的级间寄存器,重新执行第5个时钟周期的所有操作。第8个周期,时钟上升沿将第7个周期中ME和WR给出的更新数据缓存和寄存器堆的信息存储到写缓冲。第8个周期,时钟上升沿将写缓冲中的内容更新到数据缓存和寄存器堆。

图9是流水线功能逻辑发生SET故障的容错时序图。第5个周期,时钟上升沿将写缓冲中的内容更新到数据缓存和寄存器堆,同时将第4个周期中ME和WR给出的更新数据缓存和寄存器堆的信息存储到写缓冲;单粒子轰击流水线的ME的级间寄存器导致SET故障。第6个周期,时钟上升沿将SET故障锁存,并将写缓冲中的内容更新到数据缓存和寄存器堆,同时将第5个周期中ME和WR给出的更新数据缓存和寄存器堆的信息存储到写缓冲;比较器检测出故障,清空写缓冲,则流水线在第5个时钟周期给出用于修改数据缓存和寄存器堆的值被作废。第7个周期,时钟上升沿禁止第6个周期中ME和WR给出的数据更新到写缓冲,将备份寄存器组中的内容更新到两条流水线的级间寄存器,重新执行第5个时钟周期的所有操作。第8个周期,时钟上升沿将第7个周期中ME和WR给出的更新数据缓存和寄存器堆的信息存储到写缓冲。第9个周期,时钟上升沿将写缓冲中的内容更新到数据缓存和寄存器堆。

综上所述,基于写缓冲的容错机制通过增加第6、7两个周期的时间开销保证了SEU/MBU故障不会对数据缓存/寄存器堆进行重复的写操作以及SET故障导致的脏数据不会对数据缓存和寄存器堆进行更新。

本实用新型实现的一种基于检查点技术的双冗余流水线,将流水线的级间寄存器的内容备份到备份寄存器组中,通过比较逻辑检测流水线单元中的单粒子故障,利用备份寄存器组中的值对流水线进行恢复,从而解决了嵌入式微处理器对于单粒子导致的SET、SEU和MBU故障的容错问题,可以提高嵌入式微处理器在空间环境下工作的可靠性。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1