MIPS流水线时序图

时间:2013-12-24 19:36:06

标签: mips pipeline computer-architecture

我想确认以下时序图是否适用于MIPS 5阶段管道(* =停顿):

               |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
LW R1, 0(R4)   | IF | ID | EX |  M |  W |    |    |    |    |    |    |    |    |    |    |    |
LW R2, 400(R4) |    | IF | ID | EX |  M |  W |    |    |    |    |    |    |    |    |    |    |
ADD1 R3,R1,R2  |    |    | IF | ID |  * |  * | EX |  M |  W |    |    |    |    |    |    |    |
SW R3, 0(R4)   |    |    |    | IF |  * |  * | ID |  * |  * | EX |  M |  W |    |    |    |    |
SUB R4,R4,#4   |    |    |    |    |    |    | IF |  * |  * | ID | EX |  M |  W |    |    |    |
BNEZ R4, L1    |    |    |    |    |    |    |    |    |    | IF | ID |  * |  * | EX |  M |  W |

评论:

1)ADDI:ID停止2个周期,因此之前的WB可以完成

2)SW:2个档位因为ID无法开始,2个档位因前一个WB完成ID

3)SUB:IF在第7周期之前无法启动,由于之前的指令,ID必须等到第10周期

4)BNEZ:IF无法启动直到#10周期,2个ID停止,因此之前的WB可以完成

1 个答案:

答案 0 :(得分:6)

如果指令结果仅通过寄存器文件传递(无转发/旁路),并且只在EX之前读取寄存器,那么您的图表看起来是正确的。 (您可能会考虑IF之前的空阶段,因为SUB和BNEZ是停顿周期,因为通常下一条指令的IF将紧跟在前一条指令的IF阶段之后。另一方面,这可能会被视为图表的混乱。)< / p>

然而,通常通过将结果生成指令的EX阶段(或M阶段结束)的结尾直接转发结果来优化5阶段流水线以避免大部分上述停顿。从属指令的EX阶段的开始。 (对于存储指令,M或W阶段可能只需要存储在存储器中的值,因此设计人员可能会考虑为这种情况添加转发。使用这个简单的管道,这只对一对指令有用提供存储器移动,因为负载是延迟大于1的唯一指令。对于两个宽的超标量,这样可以允许类似“ADD R3,R2,R1; SW R3,0(R4);”的开始执行相同的周期。)

通过这种优化的流水线,ADD只有一个失速周期(ID后),通过将结果从“LW R2,400(R4)”的M级结束转发到ADD的EX的开始。 / p>

               |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 | 10 | 11 |
LW R1, 0(R4)   | IF | ID | EX |  M |  W |    |    |    |    |    |    |
LW R2, 400(R4) |    | IF | ID | EX |  M |  W |    |    |    |    |    |
ADD1 R3,R1,R2  |    |    | IF | ID |  * | EX |  M |  W |    |    |    |
SW R3, 0(R4)   |    |    |    | IF |  * | ID | EX |  M |  W |    |    |
SUB R4,R4,#4   |    |    |    |    |  * | IF | ID | EX |  M |  W |    |
BNEZ R4, L1    |    |    |    |    |    |    | IF | ID | EX |  M |  W |

此类优化增加了设计的复杂性,但避免不必要的停顿可以显着提高性能。