Rocket - core - pipeline int

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

 

简单介绍异常信号在流水线上的传递。

 

本文目录:

1. 中断和异常

2. id阶段

3. ex阶段

4. mem阶段

5. wb阶段

6. 对ctrl kill信号的影响

 

以下正文:

1. 中断和异常

从实现上看,流水线上对中断和异常做了区分:

 

中断信号为csr.io.interrupt。

异常按阶段分为:

a. id阶段的异常:

b. ex阶段没有异常;

c. mem阶段的异常:

d. wb阶段的异常;

 

中断和异常按阶段向下游累积,最后在wb阶段进行处理。

 

2. id阶段

id阶段对中断信号(csr.io.interrupt)进行检测,中断的发生会对id阶段产生即时的影响。

图示如下:

其中:

a. 中断信号csr.io.interrupt和其他可能发生的异常,触发id_xcpt;

b. 如果没有kill id阶段,则id_xcpt可以用于更新ex_reg_xcpt的值,向ex阶段传递;因为csr.io.interrupt会触发ctrl_killd,所以经过过滤之后,向ex_reg_xcpt传递的只是异常情况,而无中断情况;

c. 中断信号csr.io.interrupt向ex_reg_xcpt_interrupt传递;

 

3. ex阶段

中断和异常信号在ex阶段的传递情况如下:

其中:

a. 中断信息存放在ex_reg_xcpt_interrupt中,用于更新mem_reg_xcpt_interrupt的值;

b. ex_reg_xcpt中存放异常信息,它和ex_reg_xcpt_interrupt都可以触发ex_xcpt;而后经ctrl_killx过滤,向mem_reg_xcpt传递。同理,因为中断信号会导致ctrl_killx,所以传递给mem_reg_xcpt的实际上只有异常,而无中断的情况。

 

4. mem阶段

中断和异常在mem阶段的传递情况如下:

其中:

a. mem_reg_xcpt和mem_reg_xcpt_interrupt都可以触发mem_xcpt,mem_xcpt经过take_pc_wb的过滤,向wb_reg_xcpt传递。

 

5. wb阶段

wb阶段为流水线的最后一个阶段,本阶段只使用中断和异常信息,而不再继续传递:

其中:

a. wb_reg_xcpt会触发wb_xcpt,wb_xcpt用于触发take_pc,重新取指:

再取出的指令,即是中断或异常处理程序的指令。

b. wb_reg_xcpt会触发wb_pc_valid;

 

6. 对ctrl kill信号的影响

在xcpt/xcpt_interrupt信号向流水线下游传递的同时,也会引起ctrl kill信号的同时变化。

 

1) id

中断信号(csr.io.interrupt)会立即触发ctrl_killd,进而导致下一个时钟周期ex_reg_valid为假:

 

2) ex

在ex阶段,ex_reg_valid的值会触发ctrl_killx,然后ctrl_killx用于更新mem_reg_valid的值,导致下一个时钟周期mem_reg_valid为假:

3) mem

在mem阶段,mem_reg_valid会触发ctrl_killm,然后ctrl_killm被用于更新wb_reg_valid,导致下一个时钟周期wb_reg_valid的值为假:

 

4) wb

wb阶段使用wb_reg_valid的值进行判断和处理:

 

posted @ 2022-02-19 17:58  wjcdx  阅读(80)  评论(0编辑  收藏  举报