转移指令(14)
一共14条指令,分为两类:
- 跳转指令(绝对转移):jr、jalr、j、jal
- 分支指令(相对转移):b、bal、beq、bgez、bgezal、bgtz、blez、bltzal、bne
1. 延迟槽
不MEM进行判断,直接在译码阶段进行判断
在流水线译码阶段进行转移判断,并且转移发生,那么会有1条无效指令,导致浪费了一个时钟周期。为了减少损失,规定转移指令后面的指令位置为“延迟槽”,延迟槽中的指令被称为“延迟指令”。延迟指令总是被执行,与转移发生与否没有关系。
2. 转移分支指令
2.1 分析
主要修改两个地方:
(1) 译码阶段增加转移判断
(2) PC的取值变为三种情况:
情况一:PC=PC+4
情况二:PC不变(流水线暂停时)
情况三:PC为转移判断的结果(转移指令,满足转移条件)
相对应在系统结构图里,若满足转移条件,ID模块branch_target_address_o给出转移地址送PC;同时,设置next_inst_in_delayslot_o,表示下一条是延迟槽指令,经过一个周期,通过ID/EX模块送回ID模块