问题描述
对于sw指令,第3个周期的RegRead不需要设置为1;
解决方法
sw
指令有两个寄存器源,add
指令也是如此。
add
需要在 ID 阶段获取两个源(如果是多周期则是循环,如果是流水线则是阶段),以便可以在下一阶段 EX 中添加它们的值。
但是sw
只需要在ID阶段获取rs
(和imm
),以便在下一阶段(EX)添加它们。获取 rt
寄存器(Write Data 的值)可以延迟到 EX 阶段,因为实际存储不会发生,直到 EX 之后的下一个阶段,即 MEM 阶段。
因此,虽然延迟读取 rt
可以将 sw
指令的寄存器文件上的读取端口减少到 1,但它对 add
指令没有任何作用——为了减少对于所有指令的一个读取端口,我们将不得不插入一个额外的阶段。
此外,这种方法仅适用于多周期机器,但流水线机器需要一些其他方法,因为所有阶段(流水线阶段)重叠——将一条指令的读取分散到多个周期并不会减轻负载在注册文件上。