Rocket - core - 中断和异常的优先级

https://mp.weixin.qq.com/s/PYporobINz5czzgY8p1odw

 

简单介绍中断和异常的优先级。

 

本文目录:

1. 中断在ID阶段被检测

2. ID阶段同时存在中断和异常信号

3. 各阶段的异常

4. 领先于中断的异常

 

以下正文:

1. 中断在ID阶段被检测

中断信号csr.io.interrupt只在id阶段进行检测,之后存入ex阶段的流水线寄存器中。id阶段受到即时的影响,而ex阶段的指令得以执行,在一个时钟之后才受到影响。

 

2. ID阶段同时存在中断和异常信号

如果ID阶段在检测到中断信号的同时,也发生了异常,则中断信号优先得到处理。

从实现上看,csr.io.interrupt信号导致异常信号无法向ex_reg_xcpt传递,到ex阶段只能看到ex_reg_xcpt_interrupt代表的中断信号:

 

 

3. 各阶段的异常

异常可以发生在ID/MEM/WB阶段,他们存在如下情况。

1) 一般情况,单个阶段发生异常,可以正常的得到处理。这种情况下,不存在优先级的情况。

2) 两个或多个阶段同时发生异常,靠后的流水线阶段的异常,先得到处理。其他阶段的异常,需要在处理返回之后,重新触发才能得到处理。(如果不触发,则不存在异常也就无需处理了。)

3) ID阶段先发生异常,当向下流动到EX阶段时,MEM阶段的指令发生了异常,以及与此类似的其他情况。无论发生的时间前后,在流水线上先到达WB阶段的异常优先得到处理。

 

4. 领先于中断的异常

ID阶段检测到的中断信号,在流动到EX阶段时,MEM阶段发生了异常,以及与此类似的情况。

无论发生时间的先后,在流水线上先到达WB阶段的优先处理。实际上,在流水线上先到达WB阶段的只能是异常。

 

posted @ 2022-03-12 00:00  wjcdx  阅读(192)  评论(0编辑  收藏  举报