第8章:转移指令的实现

  • 转移指令包括跳转、分支两种,区别在于前者是绝对转移,后者是相对转移,但实现方法是相似的。转移指令设计延迟槽

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 修改译码阶段

  1. 修改ID模块
    在这里插入图片描述
  2. 修改ID/EX模块
    在这里插入图片描述

8.4.3 修改执行阶段的EX模块在这里插入图片描述

8.4.4 修改OpenMIPS模块

8.5 测试转移指令的实现效果

8.5.1 测试跳转指令

8.5.2 测试分支指令

猜你喜欢

转载自blog.csdn.net/tanfuz/article/details/113809840
今日推荐