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寄存器中: