RISC-V双核锁步DCLS Lockstep技术总结

基于《A Dual Lockstep Processor System-on-a-Chip for Fast Error Recovery in Safety-Critical Applications》文章总结。

一、设计总结

  • 设计基于RISC-V 32IM ISA实现,修改内部5级流水;
  • 主核和从核程序流水错开1个cycle,防止同一周期主从核因外部电离脉冲导致同时错误;
  • 设计在流水线的访存、写回阶添加delay buffer和checker模块,用于纠正错误并防止错误操作从输出阶段写入IO和Memory中;
  • 如果主核和从核数据对比不一致,会产生异常错误,并将主核和从核同时回卷到错误之前正确的指令位置,如果错误数量超过一定阈值,则会触发系统复位;
  • 使用Dhrystones and Coremark benchmark测试,stuck-at faults纠错率达到100%;

二、具体实现

五级流水修改如下图所示,需要添加或修改PCM、VCVB、EHC、M和WB阶段Checker等模块内容;

  •  PCM:管理PC地址分配和VCID分配,VCID为6bit同步控制码。

上电后PC从复位地址开始启动,Master A的复位地址为0x0,Slave B的复位地址为另一段镜像程序所在首地址。如果没有分支和条件跳转,PCA通过PCB获得下一个PC地址,PCB则通过上一个PCA+4获得地址。如果程序出现分支、跳转等,需要将指令译码ID阶段的跳转目的地址传回MUX3,并最终影响PCA。如果程序出现异常,系统同样需要将异常PC通过MUX3传递给PCA。VCID是6bit编码,后面介绍。

  • VCVB:检查VCID结果,确保节拍同步;

上图为VCVB的实现内容,将六个不同阶段的VCID前后异或,在将所有结果输入与非门,输出为VCID的异常标志,如果输出为高则表示当前出现错误或发生了异常。VCID的编码如下:

正常情况下,各个阶段VCID0和1交替出现。如果出现错误,比如访存阶段异常,那么会将该位VCID保持不变,经过异或后VCVB输出异常标志。如果需要插入气泡,则按照上述第3行到第8行的方式插入气泡。

上图是产生VCID异常的仿真结果。

  • M/WB checker:数据对比检测,检测主从核程序是否一致;

M阶段将数据写回Memory/IO中,WB阶段将数据写回系统寄存器。两个阶段均需要如下左图所示的结构,包括一个delay buffer和A/B异常buffer,用于存储主从核数据,一个写checker,用于对比主从核数据并产生写使能、错误异常和系统异常。写回阶段还需要添加如下右图所示结构,保证主从核写数据到系统寄存器和主核保持同步。

 放入delay buffer中的数据包括:控制信号、写地址、写数据、PC、PC+4和VCID。如果PC或控制信号不一致,checker会报系统异常,关闭写使能,并唤起异常处理。系统会将主从核的异常信息存储在A_EXC和B_EXC buffer中,A_EXC包括delay buffer中的内容,B_EXC包括EX/M阶段流水线寄存器。系统异常处理判断:1)如果是控制信号不匹配,则产生系统复位;2)如果PC不匹配,异常处理检查PC+4的值是否匹配,如果相同则继续,不相同则产生系统复位。

如果是PC和控制信号之外的对比不一致,那么checker会生成错误异常,并从PC异常buffer中存储的地址开始执行程序。该方法可以快速从错误中恢复,并添加错误计数,超过阈值数后直接系统复位。

下图是M阶段checker存储在buffer中的具体信息和对比结果,只有VWD_EN有效才允许写。

主核寄存器堆提供写回数据通路和数据传递通路。由于写回数据的延时,数据传递通路非常必要。下图是WB checker对比结果和异常信息。

  • EHC:控制异常程序并跳转执行;

如果是M checker产生错误异常,此时主核正在通过PCA预取下一条PC,EHC模块会将异常PC地址反馈给PCA,并在主从核插入气泡。一个周期后,通过PCA将异常PC传给PCB。

如果是WB checker产生的错误异常,此时主核正在通过PCB读取下一个PC值到PCA,EHC会通过MUX3使能,通过PCB存储异常PC值,并传递给PCA。

三、测试结果

测试过程在EX/M和M/WB阶段流水线寄存器注入错误,一般为单比特翻转,各个比特位均进行了测试,同时对寄存器数据进行了单比特污染。所有注入错误全部100%发现,下图是检测结果,包括控制信号、PC值、寄存器的错误注入,并给出所有成功检测到错误的case数量,以及最终报出的异常类型。

注意所有控制信号和PC均作为系统异常报出,寄存器作为错误异常报出。

猜你喜欢

转载自blog.csdn.net/heyuming20062007/article/details/123329537