- 转移指令包括跳转、分支两种,区别在于前者是绝对转移,后者是相对转移,但实现方法是相似的。转移指令设计延迟槽
8.1 延迟槽
- 第五章介绍了流水线中存在的三种相关:数据相关、结构相关、控制相关。
- 其中控制相关是指流水线中的转移指令或者其他需要改写PC的指令造成的相关。这些指令改写了PC的值,所以导致后面已经进入流水线的其他几条指令无效,比如:如果转移指令在流水线的执行阶段进行转移条件判断,在发生转移时,会导致当前处于取指、译码阶段的指令无效,需要重新取指。
即流水线执行阶段进行转移判断,并且转移发生,会有2条无效指令,浪费了两个时钟周期,为了减少损失,规定转移指令后面的指令位置为“延迟槽”,延迟槽中的指令称为延迟指令,延迟指令总是被执行,与转移发生与否没有关系。所有分支指令在转移到目标地址前都要先执行延迟槽中的指令。
8.3 转移指令实现思路
8.3.1 实现思路
为了尽量减少转移指令带来的损失,OpenMIPS在译码阶段进行转移条件的判断,如果满足转移条件,那么修改PC为转移目标地址。
8.3.2 数据流图的修改
8.3.3 系统结构的修改
8.4 修改OpenMIPS以实现转移指令
8.4.1 修改取指阶段的PC模块
8.4.2 修改译码阶段
- 修改ID模块
- 修改ID/EX模块