面向sparcv8处理器的自修复双冗余流水线及容错方法_2

文档序号:9564507阅读:来源:国知局
退标识信号做或运算,如果两条流水线的写回段指令需 要进行回退,则启用流水线整体恢复方式,将流水线清空,从指令缓存中取出发生故障的指 令重新执行,消耗五个时钟周期,对单粒子引发SET故障进行容错。
[0014] 本发明实现的面向SPARC V8处理器的自修复双冗余流水线及容错方法,采用硬件 冗余的思想,对传统的流水线级双模冗余结构进行改进,在关键节点设置比较器,防止错误 数据流出结构之外(高速缓存、寄存器文件),同时对流水线级间寄存器增加自校验模块, 根据校验结果能够快速定位故障流水线,启动故障屏蔽模式,为解决由单粒子引发的SET、 SEU以及日益严重的MBU提供了技术保障。
【附图说明】
[0015] 图1是寄存器级三模冗余结构图;
[0016] 图2是流水线级三模冗余结构图;
[0017] 图3是LE0N2处理器流水线单元结构图;
[0018] 图4是根据本发明的自修复双冗余流水线的结构图。
【具体实施方式】
[0019] 自修复双冗余里流水线(Self-Recovery Dual Pipeline,SRDP),是一种以 LE0N2 处理器为平台,面向RISC架构的流水线单元进行加固的装置和方法。LE0N2是基于SPARC V8体系结构的嵌入式处理器,采用32位的RISC架构,其流水线单元为经典的五级流水线。
[0020] LE0N2处理器中的流水线单元包括取指(IF)、译码(ID)、执行(EX)、访存(ME)、写 回(WR)五个组合逻辑单元,以及各流水段之间设置的级间寄存器IF、IF/ID、ID/EX、EX/ME、 ME/WR,如图3所示。单粒子轰击流水线的组合逻辑部分,产生毛刺可能会被级间寄存器锁 存出现SET故障,轰击级间寄存器时会直接导致寄存器出现SEU或MBU故障,级间寄存器将 组合逻辑产生的关键信息寄存并在级间传递,寄存着错误信息的级间寄存器会导致错误的 执行结果,而错误结果会在ME或WR段被写入数据存储器或寄存器堆。
[0021] 为了有效的应对辐射造成的单粒子软错误,尤其是MBU问题。综合考虑各个方案 时间和空间开销,基于硬件冗余的思想,采用资源开销较少的流水线级双模冗余结构,并行 执行相同的指令流,在关键节点设置比较器比较两条流水线的信息,一旦流水线受到单粒 子轰击而出现故障,比较器将会检测错误(两条流水线在执行指令过程中出现完全相同的 故障概率非常小,在这里忽略不计),阻止错误结果流出;同时,为了实现故障定位功能,对 流水线级间寄存器增加自校验模块,检测级间寄存数据的正确性,当粒子轰击流水线导致 寄存器翻转,则置位此条流水线错误信号位;最后对比结果不同,判断出问题流水线,则利 用正确流水线的当前状态替换错误流水线,消耗一个时钟周期,实现快速恢复,在出现SET 错误被锁存的情况下,级间寄存器自校验模块无法判断出错误,则采用两条流水线回退恢 复的方式,保证流水线的正常运行。此种机制能够有效的降低流水线恢复导致的性能开销, 自修复双冗余流水线的具体恢复方案如表1所示。SRDP结构验证了流水线中所有功能元 件的正确性,保证流水线正常运行,比较器信号对比相同,则将流水线数据传出到外部设备 (寄存器堆,存储器等)。
[0022] 表1流水线恢复方案
[0024] 基于上述基本原理与设置,本发明的面向SPARC V8体系结构的嵌入式微处理器流 水线单元加固的一种【具体实施方式】如下:
[0025] 在SPARC V8的嵌入式处理器中,将流水线单元设置成如图4所示,主要包括流水 线A、流水线B、指令缓存器(301)、自校验模块、比较逻辑(501)、流水线恢复模块(601)、数 据缓存(701)、寄存器堆(801)。
[0026] 流水线A和流水线B包括取指(IF)、译码(ID)、执行(EX)、访存(ME)、写回(WR) 组合逻辑单元,以及各流水级之间设置的级间寄存器(IF、IF/ID、ID/EX、EX/ME、ME/WR),两 条流水线各自拥有一套数据通路,同时共享数据存储、指令存储和寄存器堆,在并行执行相 同指令流时默认用流水线A的执行结果与外部的存储单元和寄存器堆进行数据交互,流水 线B为备份单元。
[0027] 指令缓存(301)用于存储流水线执行的代码,与流水线A中IF段进行数据交互, 流水线A取出指令后分发给两条流水线执行。
[0028] 自校验模块分为编码和解码两部分,包括自校验(401)、自校验(402)、自校验 (403)、自校验(404)和自校验(405),对流水线A和流水线B中的级间寄存器进行自校验, 给出错误信息,送入比较逻辑用于定位发生单粒子故障的流水线。
[0029] 比较逻辑(501)设置在流水线A与流水线B之间,对于流水线单元需要与处理器 其他部件交互的信息进行比较,由于取指段需要根据指令地址从指令存储器取出指令,译 码段需要从寄存器堆中得到操作数,执行段和访存段均会产生与指令存储器交互的信息, 写回段会将数据写入寄存器堆,需要将五个流水级的交互信息进行比较,避免流水线发生 共模错误或将错误数据写入数据存储和寄存器堆中。
[0030] 流水线恢复模块(601)必须保证寄存器和存储器状态不会被错误值更改,根据自 校验模块和比较逻辑给出信息分为快速恢复方式和整体恢复方式,如果比较结果相同,表 明没有错误或级间错误并不影响指令结果,指令将继续执行;否则,查询级间寄存器的错误 信息定位出发生故障的流水线,则采用快速恢复方式以低开销恢复流水线状态,起到故障 屏蔽作用,继续执行指令,如果无法定位出故障流水线,则采用整体恢复方式,以相对时间 开销较高的整体恢复方式修改流水线错误,保证可靠性。
[0031] 数据缓存(701)和寄存器堆(801)用于存储流水线单元需要的数据,流水线单元 根据指令字会对寄存器堆和数据缓存器进行读写操作,与流水线A给出的信息进行交互, 流水线A将执行结果写入寄存器堆和数据缓存器,或者从中读出数据分发给两条流水线操 作。
[0032] 所述面向SPARC V8处理器的自修复双冗余流水线采用如下步骤与方法对流水线 中的错误数据进行检测和处理:
[0033] (1)取指段,自校验模块会对两条流水线的取指段级间寄存器进行自校验,生成错 误信息,并将错误信息送入比较逻辑,同时寄存在译码段级间寄存器;在两条流水线的译码 段段给出与指令缓存的交互信息后,比较逻辑会对其进行比较,如果比较结果相同,则用流 水线A给出的地址将指令取回流水线,如果比较结果不相同,根据自校验模块给出的错误 信息定位出故障流水线,启用快速恢复方案,用正确流水线替换错误流水线,消耗一个时钟 周期,在下一时钟周期重新进行当前操作;如果无法定位出错误流水线,则两条流水线进入 陷阱;
[0034] (2)译码段,自校验模块会对两条流水线的译码段级间寄存器进行自校验,生成 错误信息位,该错误信息位会与译码段级间寄存器中寄存的错误信息位进行或运算并送入 比较逻辑,同时执行段寄存在级间寄存器;在两条流水线的译码段给出与寄存器堆的交互 信息后,比较逻辑会对其进行比较,如果比较结果相同,则用流水线A的输出信息从寄存器 堆中取出源操作数,并分发给两条流水线操作,如果比较结果不相同,根据自校验模块定位 出故障流水线,启用快速恢复方案,用正确流水线替换错误流水线,消耗一个时钟周期,在 下一时钟周期重新进行当前操作;如果无法定位出故障流水线,则给出需要进行流水线回 退的标识信号,将此信号反馈给两条流水线,并寄存在执行段级间寄存器中流向下一流水 级;
[0035] (3)执行段,自校验模块会对两条流水线的执行段级间寄存器进行自校验,生成 错误信息位,该错误信息位会与执行段级间寄存器的错误信息位进行或运算并送入比较逻 辑,同时寄存在访存段级间寄存器;在两条流水线的执行段给出与数据缓存一部分的交互 信息后,比较逻辑会对其进行比较,如果比较结果相同,则将流水线A的输出信息送入数据 缓存,如果比较结果不相同,根据自校验模块定位出故障流水线,启用快速恢复方案,用正 确流水线替换错误流水线,消耗一个时钟周期,在下一时钟周期重新进行当前操作,如果无 法定位出故障流水线,则给出需要进行流水线回退的标识信号,将此信号反馈给两条流水 线,并寄存在访存段级间寄存器中流向下一流水级;
[0036] (4)访存段,自校验模块会对两条流水线的访存段级间寄存器进行自校验生成错 误信息位,该错误信息位会与访存段级间寄存器的错误信息位进行或运算并送入比较逻 辑,同时寄存在写回段级间寄存器
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1