Data Hazards
Data Hazards
Data Hazards
Spring, 2011
Data Hazards
Spring, 2011
Overview
Today well
we ll discuss the following topics:
Data hazards and what causes them
Techniques for avoiding hazards
Software
Edge-Triggered Clocking
Forwarding unit
Hazard detection unit
Page 1
CS 2160
Spring, 2011
Data Hazard
A Definition
Data Hazards
Identifying Data Hazards in the Pipeline
Time
Value of $t2:
Program
Execution
Order
or $13, $6, $2
sw $15, 100($2)
Data Hazard
Dependency on result of
first instruction and need
that result before its ready.
CC2
CC3
CC4
CC5
CC6
-20
20
CC7
10
10
10
10
10/ 20
10/-20
-20
20
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
WB
Page 2
CS 2160
Spring, 2011
Data Hazards
Avoiding Data Hazards: Edge-Triggered Clocking
IF
or $13, $6, $2
ID
EX
MEM
WB
IF
ID
EX
MEM
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
WB
Data Hazards
Avoiding Data Hazards: Software Solutions
Page 3
CS 2160
Spring, 2011
Data Hazards
Avoiding Data Hazards: Forwarding
Answer: O.K.!!!
Instr 1: sub $2, $1, $3
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
EX/MEM.RegisterRd = ID/EX.RegisterRs
Instr 2: and $12, $2, $5
MEM/WB.RegisterRd = ID/EX.RegisterRt
Instr 3: or $13, $6, $2
WB
We can use these conditions to detect data hazards and develop our
forwarding unit. When dont these conditions hold?
Page 4
CS 2160
Spring, 2011
PCSrc
0
M
RegDst, ALUOp, ALUSrc
+
4
Shft
Lft
2
Read Data #1
Read Reg #1
Read Reg #2
Instruction
Address
ALUSrc
E
X
M
u
x
Address
ALU
A
ALUOp
Instr[15-0]
Sign
Extend 32
16
IF/ID.RegisterRs
0
M
u
x
1
M
u
x
6
RegDst
Rs
Rt
IF/ID.RegisterRt
IF/ID.RegisterRt
Rt
IF/ID.RegisterRd
Rd
ALU
Cntrl
ForwardA
ForwardB
0
M
u
x
1
W
B
Data
Memory
zero
Registers
Write Reg
Read Data #2
Write Data
Read
Data
branch
RegWrite
IF/ID
P
C
between
EX/Mem
W
B
Branch MemRead
Branch,
MemRead, MemWrite
MemtoReg
Control
Instr
Memory
ID/EX
RegWrite, MemToReg
MemWrite
M
1u
x
2
Read
Data
Write
Data
0
M
u
x
1
Forwarding
Unit
MEM/WB.RegisterRd
ID/EX
Instruction
Instr
Memory
Input:
the Rd register number of
P
Address
C two previous instructions.
the
IInput: Rs
R and
dR
Rt off the
h
instruction about to
enter the EX stage
RegWrite
Shft
Lft
2
Read Data #1
Read Reg #1
Read Reg #2
M
u
x
zero
Registers
ALU
Write Reg
Read Data #2
Write Data
Instr[15-0]
Sign
Extend 32
16
IF/ID.RegisterRs
IF/ID.RegisterRt
M
u
x
0
M
u
x
1
6
RegDst
Rs
Rt
IF/ID.RegisterRt
Rt
IF/ID.RegisterRd
Rd
ALU
Cntrl
ForwardA
ForwardB
0
M
u
x
1
W
B
Data
Memory
Address
Read
Data
Write
Data
0
M
u
x
1
MemRead
EX/MEM.RegisterRd
Forwarding
Unit
Mem/WB
A
ALUOp
Read
Data
W
B
ALUSrc
E
X
branch
IF/ID
Input: the RegWrite
value for
+
the two
previous instructions.
4
EX/Mem
MemtoReg
W
B
MemWrite
x
2
MEM/WB.RegisterRd
Page 5
CS 2160
Spring, 2011
Mux Control
ForwardA=00
Source
ID/EX
Explanation
The first ALU operand comes from the register file.
ForwardA=10
EX/MEM
ForwardA=01
MEM/WB
ForwardB=00
ID/EX
ForwardB=10
EX/MEM
ForwardB=01
MEM/WB
Page 6
CS 2160
Spring, 2011
Tracing Execution
Tracing Execution
Clock Cycle 3
IF:
or $4, $4, $2
ID:
and $4, $2, $5
EX:
sub $2, $1, $3
MEM:
before <1>
WB:
before <2>
PCSrc
0
Branch MemRead
Branch,
MemRead, MemWrite
M
ALUSrc
Address
Read Data #1
Read Reg #1
Read Reg #2
$2
M
u
x
zero
Registers
ALU
Write Reg
$5
Read Data #2
Write Data
$3
Instr[15-0]
Sign
Extend 32
16
2
IF/ID.RegisterRs
IF/ID.RegisterRt
0
M
u
x
1
ALU
Cntrl
RegDst
5
IF/ID.RegisterRt
IF/ID.RegisterRd
M
u
x
Rt
4
ForwardA
ForwardB
1
3
0
M
u
x
1
Data
Memory
Address
0
M
u
x
1
MemRead
EX/MEM.RegisterRd
Forwarding
Unit
W
B
Shft
Lft
2
$1
A
ALUOp
Read
Data
Instruction
P
C
branch
+
4
Mem/WB
E
X
RegWrite
IF/ID
10
W
B
MemtoReg
Control
Instr
Memory
ID/EX
RegWrite, MemToReg = 10
MemWrite
M
1u
x
2
MEM/WB.RegisterRd
Page 7
CS 2160
Spring, 2011
Tracing Execution
Clock Cycle 4
IF:
and $9, $4, $2
ID:
or $4, $4, $2
EX:
and $4, $2, $5
before <1>
PCSrc
0
M
1u
x
ID/EX
Instruction
P
C
Address
EX/Mem
10
ALUSrc
E
X
RegWrite
Read Data #1
Read Reg #1
Read Reg #2
$4
Shft
Lft
2
$2
M
u
x
Address
ALU
$5
A
ALUOp
Instr[15-0]
Sign
Extend 32
16
4
IF/ID.RegisterRs
0
M
u
x
1
M
u
x
Read
Data
Write
Data
ALU
Cntrl
RegDst
IF/ID.RegisterRt
Rt
4
0
M
u
x
1
0
M
u
x
1
MemRead
ForwardA
ForwardB
W
B
Data
Memory
zero
Registers
IF/ID.RegisterRt
selects the value of $2
currently in the EX/MEM
IF/ID.RegisterRd
pipeline register.
Mem/WB
Write Reg
$2
Read Data #2
Write Data
Read
Data
W
B
Instr
Memory
10
W
B
Branch MemRead
Branch,
MemRead, MemWrite
branch
Control
MemtoReg
RegWrite, MemToReg = 10
MemWrite
EX/MEM.RegisterRd
Forwarding
Unit
MEM/WB.RegisterRd
Tracing Execution
Clock Cycle 5
ID:
and $9, $4, $2
0
M
1u
x
EX:
or $4, $4, $2
RegWrite, MemToReg = 10
Control
Instruction
EX/Mem
10
W
B
ALUSrc
RegWrite
E
X
Read Data #1
Read Reg #1
Read Reg #2
Shft
Lft
2
$4
M
u
x
It forwards
IF/ID.RegisterRt
pipeline register
copy of $2
IF/ID.RegisterRt
to the B operand.
IF/ID.RegisterRd
M
u
x
A
ALUOp
Instr[15-0]
Sign
Extend 32
16
4
IF/ID.RegisterRs
the MEM/WB
0
M
u
x
1
Read
Data
Write
Data
ALU
Cntrl
RegDst
2
4
2
Rt
0
M
u
x
1
0
M
u
x
1
MemRead
ForwardA
ForwardB
EX/MEM.RegisterRd
2
Forwarding
Unit
Address
ALU
Write Reg
$2
Read Data #2
Write Data
W
B
Data
Memory
zero
Registers
Mem/WB
1
branch
+
The forwarding
unit again
4
detects
that both operands
depend on values4not yet
Instr
2
written.
Memory
Read
Data
WB:
sub $2, $1, $3
10
IF/ID
Address
W
B
Branch MemRead
Branch,
MemRead, MemWrite
RegDst, ALUOp, ALUSrc
P
C
MEM:
and $4, $2, $5
MemtoReg
PCSrc
MemWrite
IF:
after<1>
MEM/WB.RegisterRd
Page 8
CS 2160
Spring, 2011
Tracing Execution
Clock Cycle 6
IF:
after<2>
ID:
after<1>
EX:
and $9, $4, $2
MEM:
or $4, $4, $2
WB:
and $4, $2, $5
PCSrc
0
Instruction
W
B
ALUSrc
E
X
Read Data #1
Read Reg #1
Read Reg #2
Shft
Lft
2
$4
M
u
x
Address
ALU
Write Reg
Read Data #2
Write Data
$2
A
ALUOp
M
u
x
Instr[15-0]
Sign
Extend 32
16
IF/ID.RegisterRs
IF/ID.RegisterRt
IF/ID.RegisterRt
Rt
IF/ID.RegisterRd
0
M
u
x
1
Read
Data
Write
Data
ALU
Cntrl
RegDst
0
M
u
x
1
MemRead
ForwardA
ForwardB
0
M
u
x
1
W
B
Data
Memory
zero
Registers
Mem/WB
1
branch
Read
Data
EX/Mem
10
The forwarding
unit picks
Instr
Memory
the most
recent version
(the
P one in the EX/MEM
Address
C
pipeline
register)
10
MemtoReg
W
B
Branch MemRead
Branch,
MemRead, MemWrite
MemWrite
Control
ID/EX
RegWrite, MemToReg = 10
RegWrite
EX/MEM.RegisterRd
Forwarding
Unit
MEM/WB.RegisterRd
lw $2, 20($1)
and $4, $2, $5
or $8, $2, $6
add $9, $4, $2
slt $1, $6, $7
Page 9
CS 2160
Spring, 2011
CC2
CC3
CC4
CC5
CC6
CC7
Time
Instr 1: lw $2, 20($1)
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
Page 10
CS 2160
Spring, 2011
CC2
CC3
CC4
CC5
CC6
Time
IF
lw $2, 20($1)
CC7
ID
EX
WB
MEM
IF
or $8, $2, $6
ID
ID
EX
MEM
WB
IF
IF
ID
EX
MEM
WB
ID
EX
MEM
WB
IF
ID
EX
MEM
IF
add $9,
$2
and$4,
ID stages
re-execute in
WB
ID/EX
W
B
IF/ID
P
C
Address
RegWrite
Shft
Lft
2
Read Data #1
Read Reg #1
Read Reg #2
M
u
x
Registers
Instr[15-0]
Sign
Extend 32
16
IF/ID.RegisterRs
M
u
x
IF/ID.RegisterRt
RegDst
Rs
Rt
IF/ID.RegisterRt
Rt
IF/ID.RegisterRd
Rd
0
M
u
x
1
0
M
u
x
1
Address
Read
Input: The current instruction.
Data
Write
Data
ALU
Output:
Will prevent an overwrite of
6
Cntrl
the IF/ID pipeline registerMemRead
when a
ForwardA
memory read data hazard occurs.
0
M
u
x
1
ForwardB
ALU
Write Reg
Read Data #2
Write Data
A
ALUOp
Read
Data
Instruction
4
Instr
Memory
ALUSrc
E
X
branch
EX/Mem
IInput:
t WDoes
D
th
the previous
i Mem/WB
B
instruction
read from memory.
W
MemtoReg
Control
M
u
x
MemWrite
IF/ID
D Write
M
1u
x
2
ID/EX.MemRead
Hazard
Detection
Unit
MEM/WB.RegisterRd
Page 11
CS 2160
Spring, 2011
ID:
lw $2, 20($1)
EX:
before <1>
MEM:
before <2>
WB:
before <3>
PCSrc
ID/EX
11 W
M
u
x
ALUSrc
E
X
IF/ID
RegWrite
Instruction
Instr
Memory
Address
Read Data #1
Read Reg #1
Read Reg #2
Shft
Lft
2
$1
M
u
x
0
M
u
x
1
M
u
x
A
ALUOp
Instr[15-0]
Sign
Extend 32
16
IF/ID.RegisterRs
6
RegDst
Rs
Rt
1
X
2
IF/ID.RegisterRt
IF/ID.RegisterRt
Address
ALU
$X
Rt
IF/ID.RegisterRd
Read
Data
Write
Data
ALU
Cntrl
ID/EX.RegisterRt
0
M
u
x
1
MemRead
ForwardA
ForwardB
0
M
u
x
1
Rd
W
B
Data
Memory
zero
Registers
Write Reg
Read Data #2
Write Data
Read
Data
Mem/WB
branch
W
B
MemtoReg
P
C
EX/Mem
Control
MemWrite
1
X
IF/ID
D Write
M
1u
x
2
ID/EX.MemRead
Hazard
Detection
Unit
EX/MEM.RegisterRd
Forwarding
Unit
MEM/WB.RegisterRd
EX:
lw $2, 20($1)
MEM:
before <1>
PCSrc
ID/EX
00
C t l
Control
IF/ID
Address
Read Data #1
Read Reg #1
Read Reg #2
ALUSrc
E
X
$2
$1
M
u
x
$5
$X
Sign
Extend 32
16
IF/ID.RegisterRs
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRd
ID/EX.RegisterRt
M
u
x
0
M
u
x
1
6
2
5
4
ALU
Cntrl
RegDst
ForwardA
ForwardB
1
X
2
Rd
W
B
Shft
Lft
2
Registers
Write Reg
Read Data #2
Write Data
Mem/WB
Instr[15-0]
W
B
A
ALUOp
Read
Data
Instruction
P
C
11
W
B
0
M
u
x
1
branch
+
4
Instr
Memory
M
u
x
RegWrite
ID/EX.MemRead
Hazard
Detection
Unit
2
IF/ID
D Write
M
1u
x
2
MemtoReg
WB:
before <2>
MemWrite
IF:
or $4, $4, $2
PCWrite
Read
Data
Write
Data
0
M
u
x
1
MemRead
EX/MEM.RegisterRd
Forwarding
Unit
MEM/WB.RegisterRd
Page 12
CS 2160
Spring, 2011
ID:
and $4, $2, $5
EX:
nop (bubble)
MEM:
lw $2, 20($1)
WB:
before <1>
PCSrc
ID/EX.MemRead
Hazard
Detection
Unit
ID/EX
10
C t l
Control
IF/ID
4
P
C
Instruction
Instr
Memory
Address
$2
Shft
Lft
2
$2
$5
$5
A
ALUOp
Sign
Extend 32
16
IF/ID.RegisterRs
IF/ID.RegisterRt
6
RegDst
2
5
IF/ID.RegisterRt
Rt
4
Read
Data
Write
Data
ALU
Cntrl
ID/EX.RegisterRt
0
M
u
x
1
MemRead
ForwardA
ForwardB
0
M
u
x
1
Address
0
M
u
x
1
M
u
x
W
B
Data
Memory
u instructions stall
The and and or
x
zero
for one clock cycle in the ID and
ALU
IF stages, respectively.
Instr[15-0]
IF/ID.RegisterRd
Mem/WB
Registers
Write Reg
Read Data #2
Write Data
Read
Data
The
lw reads $2 from Data B
ALUSrc
Memory. $2 is now available
M in
the EX/MEM pipeline register
E
X
Read Data #1
Read Reg #1
Read Reg #2
EX/Mem
00
branch
00
W
B
M
RegWrite
M
u
x
MemtoReg
2
5
IF/ID
D Write
M
1u
x
2
MemWrite
EX/MEM.RegisterRd
Forwarding
Unit
MEM/WB.RegisterRd
ID:
or $4, $4, $2
EX:
and $4, $2, $5
MEM:
nop (bubble)
WB:
lw $2, 20($1)
PCSrc
ID/EX.MemRead
Hazard
Detection
Unit
ID/EX
10
C t l
Control
Address
$4
Shft
Lft
2
$2
M
u
x
zero
Registers
Write Reg
Read Data #2
Write Data
ALU
$2
$5
Sign
Extend 32
16
IF/ID.RegisterRs
IF/ID.RegisterRt
ID/EX.RegisterRt
M
u
x
0
M
u
x
1
IF/ID.RegisterRt
IF/ID.RegisterRd
ALU
Cntrl
RegDst
Rt
4
Mem/WB
Instr[15-0]
W
B
ALUSrc
E
X
A
ALUOp
Read
Data
Instruction
P
C
EX/Mem
0
branch
IF/ID
The Forwarding
Unit can now
+
handle the data hazard caused by
4
the lw. It does so by forwarding
4
Read Data #1
the
Instr$2 in the Mem/WB pipeline
Read Reg #1
Memory
2 instruction.
register to the and
Read Reg #2
10
W
B
M
RegWrite
M
u
x
ForwardA
ForwardB
0
M
u
x
1
W
B
11
MemtoReg
4
2
IF/ID
D Write
M
1u
x
2
MemWrite
Data
Memory
Address
Read
Data
Write
Data
0
M
u
x
1
MemRead
EX/MEM.RegisterRd
2
Forwarding
Unit
MEM/WB.RegisterRd
Page 13
CS 2160
Spring, 2011
ID:
add $9, $4, $2
EX:
or $4, $4, $2
MEM:
and $4, $2, $5
WB:
nop (bubble)
PCSrc
ID/EX.MemRead
Hazard
Detection
Unit
ID/EX
10
C t l
Control
IF/ID
4
P
C
Instruction
Instr
Memory
Address
$4
Shft
Lft
2
$4
M
u
x
$2
Instr[15-0]
Sign
Extend 32
16
IF/ID.RegisterRs
IF/ID.RegisterRt
Read
Data
Write
Data
ALU
Cntrl
RegDst
IF/ID.RegisterRt
0
M
u
x
1
ID/EX.RegisterRt
0
M
u
x
1
MemRead
ForwardA
ForwardB
Rt
9
IF/ID.RegisterRd
Address
0
M
u
x
1
M
u
x
W
B
Data
Memory
zero
ALU
$2
A
ALUOp
Write Reg
Read Data #2
Write Data
Mem/WB
Registers
Read
Data
W
B
ALUSrc
E
X
Read Data #1
Read Reg #1
Read Reg #2
EX/Mem
10
branch
10
W
B
M
RegWrite
M
u
x
MemtoReg
4
2
IF/ID
D Write
M
1u
x
2
MemWrite
EX/MEM.RegisterRd
Forwarding
Unit
MEM/WB.RegisterRd
ID:
after <1>
EX:
add $9, $4, $2
MEM:
or $4, $4, $2
WB:
and $4, $2, $5
PCSrc
ID/EX
C t l
Control
IF/ID
Instr
Memory
P
C
Address
W
B
ALUSrc
E
X
Read Data #1
Read Reg #1
Read Reg #2
Shft
Lft
2
$4
M
u
x
$2
Sign
Extend 32
16
IF/ID.RegisterRs
IF/ID.RegisterRt
IF/ID.RegisterRt
Rt
IF/ID.RegisterRd
ID/EX.RegisterRt
M
u
x
0
M
u
x
1
Read
Data
Write
Data
ALU
Cntrl
RegDst
0
M
u
x
1
MemRead
ForwardA
ForwardB
0
M
u
x
1
Address
ALU
Write Reg
Read Data #2
Write Data
W
B
Data
Memory
zero
Registers
Mem/WB
Instr[15-0]
EX/Mem
10
A
ALUOp
Read
Data
Instruction
10
W
B
branch
RegWrite
M
u
x
MemtoReg
10
MemWrite
IF/ID
D Write
M
1u
x
2
ID/EX.MemRead
Hazard
Detection
Unit
EX/MEM.RegisterRd
Forwarding
Unit
MEM/WB.RegisterRd
Page 14
CS 2160
Spring, 2011
Spring, 2011
Branch
IF.Flush
Hazard
Detection Unit
+
Shift
Left 2
Address
Registers
Sign
16 Extend
0
M
u
x
1
Except
PC
ALUSrc
0
W
B
Mem/WB
Data
Memory
M
1u
x
2
ALU
0
M
1u
x
2
0
M
u
x
1
ALU
ALUOp Cntrl
32
Instr[25-21]
Instr[[20-16]
Instr[20-16]
Instr[15-11]
EX/Mem
Write Reg
Read Data #2
Write Data
Read
Data
Cause
E
X
Read Data #1
Read Reg #1
Read Reg #2
Instruction
RegWrite
0
IF/ID
W
B
0
M
u
x
1
Control
Instr
Memory
0
M
u
x
1
ID/EX
W
B
MemtoReg
M
1u
x
2
MemWrite
P
C
EX.Flushc
ID.Flush
40000040
29
Address
Read
Data
Write
Data
0
M
u
x
1
MemRead
RegDst
0
M
u
x
1
Forwarding
Unit
Page 15