Rocket - core - pipeline int pc

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

 

简单介绍在发生中断的情况下,id pc流水线上的传递。

 

本文目录:

1. 简介

2. ID阶段

3. EX阶段

4. MEM阶段

5. WB阶段

 

以下正文:

1. 简介

在流水线的各个阶段中,ID阶段检测中断的发生。当ID阶段检测到中断发生时,其正在执行的指令没有被执行,跟随流水线的流动前进到WB阶段。然后流水线发生跳转,跳转到中断处理程序(mtvec)开始执行。中断发生时,ID阶段被打断的指令的地址(pc),会被记录下来,等中断处理程序完成返回时,重新读取执行。

 

2. ID阶段

ID阶段的指令地址为ibuf.io.pc,其传递如下图所示:

其中:

a. 如果没有kill id阶段,则ibuf.io.pc可以正常的传递给ex_reg_pc;

b. 作为特殊情况,中断发生时(csr.io.interrupt),也需要记录被打断指令的地址;

 

3. EX阶段

在EX阶段,ex_reg_pc受到ex_pc_valid的控制,向mem_reg_pc传递:

其中:

a. 在正常情况下,ex_reg_valid = ex_pc_valid = 1,ex_reg_pc可以正常传递给mem_reg_pc;

b. 在中断情况下,ex_pc_valid = 1,ex_reg_pc也可以传递给mem_reg_pc;

 

4. MEM阶段

在MEM阶段,mem_reg_pc受mem_pc_valid的控制,向wb_reg_pc传递:

其中:

a. 在正常情况下,mem_reg_valid = mem_pc_valid = 1,mem_reg_pc可以正常传递给wb_reg_pc;

b. 在中断情况下,mem_pc_valid = 1,mem_reg_pc也可以传递给wb_reg_pc;

 

5. WB阶段

在WB阶段,wb_reg_pc向csr.io.pc进行传递:

csr.io.pc用于生成epc:

epc存放于mepc寄存器中:

 

 

 

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