MIPS五级流水线中lw r3,0(r2)启动周期疑问求解
问题解答
要搞清楚lw r3,0(r2)的执行为何从周期6开始,得结合流水线时序、分支处理和数据冲突这几个核心点分析:
1. 分支指令的处理时序限制
题目中明确分支指令在EX阶段完成分支判断,label1处的beq首次预测不跳转且预测正确:
- 该
beq的流水线时序为:周期2(IF)、周期3(ID)、周期4(EX)。 - 直到周期4的EX阶段,处理器才能通过全转发机制从
lw r2,0(r1)的MEM阶段(周期4)拿到r2的值,确认分支确实不跳转,此时才会正式放行后续指令的执行流程。
2. 数据冲突导致的流水线暂停
lw r3,0(r2)的源操作数是r2,而r2的值由前置的lw r2,0(r1)生成:
lw r2,0(r1)的WB阶段在周期5,也就是r2要到周期5才会写回寄存器堆。- 全转发机制通常仅支持将结果转发到EX阶段,无法把MEM阶段的结果转发到ID阶段。
lw r3,0(r2)在周期4进入ID阶段时,无法读取到r2的有效数值,因此必须暂停(stall)一个周期,直到周期5r2写回后,才能进入EX阶段——也就是周期6。
关于“IF阶段需在周期5的EX阶段之后”的解释
这里的周期5节点,实际是r2值就绪的关键时间点:
- 虽然
lw r3的IF阶段在周期3就已经完成(因为分支预测不跳转),但后续的ID阶段因数据冲突被暂停,导致整个指令的执行(EX阶段)被推迟到周期6。 - 从宏观执行流程看,分支指令确认不跳转后,处理器必须等待
r2的值写回寄存器堆(周期5),才能让lw r3真正进入有效执行阶段,因此会呈现出lw r3的执行要等周期5之后才开始的现象。
内容的提问来源于stack exchange,提问作者Stone xms
相关产品推荐
相关产品推荐

