Stage | Unpipelined | Pipielined |
IF | IR ← Mem[PC] NPC ← PC + 4 |
IF/ID.IR ← Mem[PC] PC ← PC + 4 IF/ID.NPC ← PC + 4 |
ID |
A ← Regs[IR.rs] B ← Regs[IR.rt] Imm ← sign-extended(IR.Immediate) |
ID/EX.A ← Regs[ID/IF.IR.rs] ID/EX.B ← Regs[ID/IF.IR.rt] ID/EX.NPC ← IF/ID.NPC ID/EX.IR ← ID/ID.IR ID/EX.Imm ← sign-extended(IF/ID.IR.Immediate) |
EX | ALUOutput ← A funct B |
EX/MEM.IR ← ID/EX.IR EX/MEM.ALUOutput ← ID/EX.A funct ID/EX.B |
MEM | PC ← PC + 4 |
MEM/WB.IR ← EX/MEM.IR MEM/WB.ALUOutput ← EX/MEM.ALUOutput |
WB | Regs[IR.rd] ← ALUOutput | Regs[MEM/WB.IR.rd] ← MEM/WB.ALUOutput |
instruction | cycle i | cycle i+1 | cycle i+2 | cycle i+3 | cycle i+4 | cycle i+5 | cycle i+6 | cycle i+7 | cycle i+8 | |
instruction A (taken branch) | IF | ID | EX | MEM | WB | |||||
instruction B | IF | ID | EX | MEM | WB | |||||
instruction C | IF | ID | EX | MEM | WB | |||||
instruction D | IF | ID | EX | MEM | WB | |||||
instruction X (branch destination) | IF | ID | EX | MEM | WB |
instruction | cycle i | cycle i+1 | cycle i+2 | cycle i+3 | cycle i+4 | cycle i+5 | cycle i+6 | |
instruction A (taken branch) | IF | ID | EX | MEM | WB | |||
instruction B | IF | ID | EX | MEM | WB | |||
instruction X (branch destination) | IF | ID | EX | MEM | WB |
LD R1, 45(R2) DADD R5, R1, R7
LD R1, 45(R2) DADD R5, R6, R7 DSUB R8, R1 R7