Pipelining 3: Hazards/Forwarding/Prediction
1
Pipelining 3: Hazards/Forwarding/Prediction 1 pipeline stages fetch - - PowerPoint PPT Presentation
Pipelining 3: Hazards/Forwarding/Prediction 1 pipeline stages fetch instruction memory, most PC computation decode reading register fjle execute computation, condition code read/write memory memory read/write writeback
1
2
2
2
2
2
3
4
5
6
7
8
PC
Instr. Mem.
register fjle
srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM] split
0xF
ADD
ADD
add 2
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 1 0x2 8 9 2 9 8 800 900 9 3 900 800 8 1700 9 4 1700 8 fetch/decode decode/execute execute/writeback
9
PC
Instr. Mem.
register fjle
srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM] split
0xF
ADD
ADD
add 2
fetch rA rB R[srcA] R[srcB] dstE next R[dstE] dstE cycle PC rA rB R[srcA] R[srcB] dstE next R[dstE] dstE 0x0 1 0x2 8 9 2 9 8 800 900 9 3 900 800 8 1700 9 4 1700 8 fetch/decode decode/execute execute/writeback
9
Instr. Mem.
srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM] split
0xF
ADD
reg #s 9, 8 from (2) reg # 9, R8=800; R9=900 (1) (2)
R8=800 (2) R9=1700 (forwarded) R8=800 (2b) R10=1000, R9=1700 (forwarded) new R9=1700 (1)
MUX MUX
10
Instr. Mem.
srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM] split
0xF
ADD
reg #s 9, 8 from (2) reg # 9, R8=800; R9=900 (1) (2)
R8=800 (2) R9=1700 (forwarded) R8=800 (2b) R10=1000, R9=1700 (forwarded) new R9=1700 (1)
MUX MUX
10
Instr. Mem.
srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM] split
0xF
ADD
reg #s 9, 8 from (2) reg # 9, R8=800; R9=900 (1) (2)
R8=800 (2) R9=1700 (forwarded) R8=800 (2b) R10=1000, R9=1700 (forwarded) new R9=1700 (1)
MUX MUX
10
Instr. Mem.
srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM] split
0xF
ADD
reg #s 9, 8 from (2) reg # 9, R8=800; R9=900 (1) (2)
R8=800 (2) R9=1700 (forwarded) R8=800 (2b) R10=1000, R9=1700 (forwarded) new R9=1700 (1)
MUX MUX
10
Instr. Mem.
srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM] split
0xF
ADD
reg #s 9, 8 from (2) reg # 9, R8=800; R9=900 (1) (2)
R8=800 (2) R9=1700 (forwarded) R8=800 (2b) R10=1000, R9=1700 (forwarded) new R9=1700 (1)
MUX MUX
10
Instr. Mem.
srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM] split
0xF
ADD
reg #s 9, 8 from (2) reg # 9, R8=800; R9=900 (1) (2)
R8=800 (2) R9=1700 (forwarded) R8=800 (2b) R10=1000, R9=1700 (forwarded) new R9=1700 (1)
MUX MUX
10
Instr. Mem.
srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM] split
0xF
ADD
MUX MUX
11
Instr. Mem.
srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM] split
0xF
ADD
MUX MUX
11
Instr. Mem.
srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM] split
0xF
ADD
MUX MUX
11
Instr. Mem.
srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM] split
0xF
ADD
MUX MUX
11
Instr. Mem.
srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM] split
0xF
ADD
MUX MUX
11
12
12
12
12
12
12
12
12
12
13
13
14
15
15
15
16
17
18
18
18
18
19
20
20
21
22
22
22
22
22
23
24
24
25
26
26
27
27
27
* — ignoring data hazards
28
* — ignoring data hazards
28
MUX
+2 +10
MUX
29
MUX
+2 +10
MUX
29
(replaces PC)
MUX
+2 +10
MUX
30
(replaces PC)
MUX
+2 +10
MUX
30
(replaces PC)
MUX
+2 +10
MUX
30
(replaces PC)
MUX
+2 +10
MUX
30
31
32