42
Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Data Hazards

Philipp Koehn

28 March 2018

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 2: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

1Data Hazard

• Definition: instruction waits on result from prior instruction

• Exampleadd $s0, $t0, $t1

sub $t0, $s0, $t3

– add instruction writes result to register $s0 in stage 5– sub instruction reads $s0 in stage 2

⇒ Stage 2 of sub has to be delayed

• We overcome this in hardware

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 3: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

2Graphical Representation

IF

add $s0,$t0,$t1

200 400 600 800 1000

ID MEM WBEX

• IF: instruction fetch• ID: instruction decode• EX: execution• MEM: memory access• WB: write-back

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 4: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

3Add and Subtract

IF

add $s0,$t0,$t1

200 400 600 800 1000

ID MEM WBEX

IF

sub $t0,$s0,$t3

ID MEM WBEX

• Add wiring to circuit to directly connectoutput of ALU for next instruction

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 5: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

4Load and Subtract

IF

lw $s0,20($t0)

200 400 600 800 1000

ID MEM WBEX

IF

sub $t0,$s0,$t3

ID MEM WBEX

bubble bubble bubble bubble bubble

1200

• Add wiring from memory lookup to ALU

• Still 1 cycle unused: "pipeline stall" or "bubble"

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 6: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

5

forwarding

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 7: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

6Add and Subtract

• Exampleadd $s0, $t0, $t1

sub $t0, $s0, $t3

• Plan

IF

add $s0,$t0,$t1

200 400 600 800 1000

ID MEM WBEX

IF

sub $t0,$s0,$t3

ID MEM WBEX

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 8: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

7Add (Stage 1)

InstructionMemory

ALU

Add

Address

InstructionRegisters

Read register 1

Read register 2

Write register

Writedata

Read data 1

Read data 2 Data

Memory

Address

Writedata

Zero

ADD

Result

Sel

ecto

r

Sel

ecto

r

Signextended

ShiftLeft

PC

Sel

ecto

r

4

Readdata

IF:Instruction Fetch

ID: Instruction decoderregister file read

MEM: Memory access

EX: Execute /address calculate

WB:Write Back

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 9: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

8Subtract (Stage 1), Add (Stage 2)

Registers

ALU

Add

Address

Instruction

Read register 1

Read register 2

Write register

Writedata

Read data 1

Read data 2 Data

Memory

Address

Writedata

Zero

ADD

Result

Sel

ecto

r

Sel

ecto

r

Signextended

ShiftLeft

PC

Sel

ecto

r

4

Readdata

IF:Instruction Fetch

ID: Instruction decoderregister file read

MEM: Memory access

EX: Execute /address calculate

WB:Write Back

InstructionMemory

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 10: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

9Subtract (Stage 2), Add (Stage 3)

ALU

Add

InstructionMemory

Address

InstructionRegisters

Read register 1

Read register 2

Write register

Writedata

Read data 1

Read data 2 Data

Memory

Address

Writedata

Zero

ADD

Result

Sel

ecto

r

Sel

ecto

r

Signextended

ShiftLeft

PC

Sel

ecto

r

4

Readdata

IF:Instruction Fetch

ID: Instruction decoderregister file read

MEM: Memory access

EX: Execute /address calculate

WB:Write Back

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 11: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

10Subtract (Stage 3), Add (Stage 4)

DataMemory

ALU

Add

InstructionMemory

Address

InstructionRegisters

Read register 1

Read register 2

Write register

Writedata

Read data 1

Read data 2

Address

Writedata

Zero

ADD

Result

Sel

ecto

r

Sel

ecto

r

Signextended

ShiftLeft

PC

Sel

ecto

r

4

Readdata

IF:Instruction Fetch

ID: Instruction decoderregister file read

MEM: Memory access

EX: Execute /address calculate

WB:Write Back

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 12: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

11Data Hazard

DataMemory

ALU

Add

InstructionMemory

Address

InstructionRegisters

Read register 1

Read register 2

Write register

Writedata

Read data 1

Read data 2

Address

Writedata

Zero

ADD

Result

Sel

ecto

r

Sel

ecto

r

Signextended

ShiftLeft

PC

Sel

ecto

r

4

Readdata

IF:Instruction Fetch

ID: Instruction decoderregister file read

MEM: Memory access

EX: Execute /address calculate

WB:Write Back

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 13: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

12Forwarding Data

DataMemory

ALU

Add

InstructionMemory

Address

InstructionRegisters

Read register 1

Read register 2

Write register

Writedata

Read data 1

Read data 2

Address

Writedata

Zero

ADD

Result

Sel

ecto

r

Sel

ecto

r

Signextended

ShiftLeft

PC

Sel

ecto

r

4

Readdata

IF:Instruction Fetch

ID: Instruction decoderregister file read

MEM: Memory access

EX: Execute /address calculate

WB:Write Back

Sel

ecto

r

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 14: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

13Forwarding Unit

• Forwarding Unit must– detect if there is a data hazard

– forward the right register values

Page 15: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

13Forwarding Unit

• Forwarding Unit must– detect if there is a data hazard

– forward the right register values

• Relevant information for decision– identify of input registers used in instruction currently in EX

(either first or second operand)

– identity of output register used in instruction currently in MEM

– value of output register used in instruction currently in MEM

Page 16: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

13Forwarding Unit

• Forwarding Unit must– detect if there is a data hazard

– forward the right register values

• Relevant information for decision– identify of input registers used in instruction currently in EX

(either first or second operand)

– identity of output register used in instruction currently in MEM

– value of output register used in instruction currently in MEM

• Format of decision– Register value

– Control lines for selectors for input to ALU

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 17: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

14Formal Names

• Relevant information for decision– EX.Rs and EX.Rt

identify of input registers used in instruction currently in EX

(either first or second operand)

– MEM.Rd

identity of output register used in instruction currently in MEM

– MEM.RdValue

value of output register used in instruction currently in MEM

Page 18: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

14Formal Names

• Relevant information for decision– EX.Rs and EX.Rt

identify of input registers used in instruction currently in EX

(either first or second operand)

– MEM.Rd

identity of output register used in instruction currently in MEM

– MEM.RdValue

value of output register used in instruction currently in MEM

• Format of decision– Forward.Rs and Forward.Rt

Register value

– Hazard.Rs and Hazard.Rt

Control lines for selectors for input to ALU

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 19: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

15Forwarding Logic

• Logic in forwarding unit

if (MEM.Rd == EX.Rs)

Forward.Rs = MEM.RdValue

Hazard.Rs = 1

else

Hazard.Rs = 0

if (MEM.Rd == EX.Rt)

Forward.Rt = MEM.RdValue

Hazard.Rt = 1

else

Hazard.Rt = 0

• Must also check if "RegisterWrite" for instruction in MEM stage

• Relevant information must be passed through stages

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 20: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

16Forwarding Unit

ALUInstructionMemory

Address

InstructionRegisters

Read register 1

Read register 2

Write register

Writedata

Read data 1

Read data 2

Zero

Result

Sel

ecto

r

IF:Instruction Fetch

ID: Instruction decoderregister file read

MEM: Memory access

EX: Execute /address calculate

Sel

ecto

r

ForwardingUnit

EX.RsEX.Rt

Forw

ard

AMEM.RdValue

MEM.Rd

Forw

ard

B

Haz

ard

B

Haz

ard

A

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 21: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

17

stalling

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 22: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

18Load and Subtract

• Exampleload $s0, 20($t0)

sub $t0, $s0, $t3

• Plan

IF

lw $s0,20($t0)

200 400 600 800 1000

ID MEM WBEX

IF

sub $t0,$s0,$t3

ID MEM WBEX

bubble bubble bubble bubble bubble

1200

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 23: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

19Load (Stage 1)

InstructionMemory

ALU

Add

Address

InstructionRegisters

Read register 1

Read register 2

Write register

Writedata

Read data 1

Read data 2 Data

Memory

Address

Writedata

Zero

ADD

Result

Sel

ecto

r

Sel

ecto

r

Signextended

ShiftLeft

PC

Sel

ecto

r

4

Readdata

IF:Instruction Fetch

ID: Instruction decoderregister file read

MEM: Memory access

EX: Execute /address calculate

WB:Write Back

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 24: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

20Subtract (Stage 1), Load (Stage 2)

Registers

ALU

Add

InstructionMemory

Address

Instruction

Read register 1

Read register 2

Write register

Writedata

Read data 1

Read data 2 Data

Memory

Address

Writedata

Zero

ADD

Result

Sel

ecto

r

Sel

ecto

r

Signextended

ShiftLeft

PC

Sel

ecto

r

4

Readdata

IF:Instruction Fetch

ID: Instruction decoderregister file read

MEM: Memory access

EX: Execute /address calculate

WB:Write Back

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 25: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

21Subtract (Stage 2), Load (Stage 3)

Registers

ALU

Add

InstructionMemory

Address

Instruction

Read register 1

Read register 2

Write register

Writedata

Read data 1

Read data 2 Data

Memory

Address

Writedata

Zero

ADD

Result

Sel

ecto

r

Sel

ecto

r

Signextended

ShiftLeft

PC

Sel

ecto

r

4

Readdata

IF:Instruction Fetch

ID: Instruction decoderregister file read

MEM: Memory access

EX: Execute /address calculate

WB:Write Back

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 26: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

22Subtract (Stage 3), Load (Stage 4)

DataMemory

ALU

Add

InstructionMemory

Address

InstructionRegisters

Read register 1

Read register 2

Write register

Writedata

Read data 1

Read data 2

Address

Writedata

Zero

ADD

Result

Sel

ecto

r

Sel

ecto

r

Signextended

ShiftLeft

PC

Sel

ecto

r

4

Readdata

IF:Instruction Fetch

ID: Instruction decoderregister file read

MEM: Memory access

EX: Execute /address calculate

WB:Write Back

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 27: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

23Data Hazard

DataMemory

ALU

Add

InstructionMemory

Address

InstructionRegisters

Read register 1

Read register 2

Write register

Writedata

Read data 1

Read data 2

Address

Writedata

Zero

ADD

Result

Sel

ecto

r

Sel

ecto

r

Signextended

ShiftLeft

PC

Sel

ecto

r

4

Readdata

IF:Instruction Fetch

ID: Instruction decoderregister file read

MEM: Memory access

EX: Execute /address calculate

WB:Write Back

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 28: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

24Data Hazard

• Our exampleload $s0, 20($t0)

sub $t0, $s0, $t3

• Worse than add/sub hazard– we need operand value in $s0

– we have not even retrieved it at this stage

• Stalling– load instruction processing has to move to stage 5

– sub instruction processing has to stall

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 29: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

25Stalling

• Hazard condition between 2 instructions

• Second instruction has to be delayed

• Technical solution: insert a "nop" operation ("no operation")

• Resets program counter

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 30: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

26Load and Sub Processing

IF

lw $s0,20($t0)

200 400 600 800 1000 1200

• Fetch of load instruction

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 31: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

27Load and Sub Processing

IF

lw $s0,20($t0)

200 400 600 800 1000 1200

ID

IF

sub $t0,$s0,$t3

• Fetch of sub instruction

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 32: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

28Load and Sub Processing

IF

IF

lw $s0,20($t0)

200 400 600 800 1000 1200

ID

sub $t0,$s0,$t3

EX

ID

• Next stage– load: address calculation

– sub: instruction decode

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 33: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

29Load and Sub Processing

ID

IDIF

IF

lw $s0,20($t0)

200 400 600 800 1000 1200

sub $t0,$s0,$t3

EX

Hazard

• Next stage– load: address calculation

– sub: instruction decode

• Registers are known now → hazard detected

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 34: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

30Load and Sub Processing

ID

IF

IF

lw $s0,20($t0)

200 400 600 800 1000 1200

sub $t0,$s0,$t3

EX

bubbleIFX

• Insertion of nop instruction

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 35: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

31Load and Sub Processing

ID

IF

IF

lw $s0,20($t0)

200 400 600 800 1000 1200

sub $t0,$s0,$t3

EX

bubble

MEM

bubble

ID

IFX

• Next stage– load: memory retrieve

– sub: instruction decode

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 36: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

32Load and Sub Processing

ID

IF

IF

lw $s0,20($t0)

200 400 600 800 1000 1200

sub $t0,$s0,$t3

EX

bubble

MEM

bubble

ID

WB

EX

bubbleIFX

• Next stage– load: write to register

– sub: ALU operation execution

• Operand for sub forwarded from load instruction execution

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 37: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

33Hazard Detection (Stalling) Unit

• Stalling unit must– detect if there is a data hazard

– insert a "nop" instruction into pipeline

• Relevant information for decision– identify of input registers used in instruction currently in ID

(either first or second operand)

– identity of load register used in instruction currently in EX

– control flag that there is indeed a memory read in EX

• Format of decision– overwrite instruction currently in ID with "nop"

– reset program counter

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 38: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

34Formal Names

• Relevant information for decision– ID.Rs and ID.Rt

identify of input registers used in instruction currently in ID

(either first or second operand)

– EX.Rd

identity of load register used in instruction currently in EX

– EX.MemRead

control flag that there is indeed a memory read in EX

• Format of decision– ID/EX

overwrite instruction currently in ID with "nop"

– PC

reset program counter

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 39: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

35Stalling Logic

• Logic in stalling unit

if (EX.MemRead and

(EX.Rd = ID.Rs or

EX.Rd = ID.Rt))

PC = PC - 4

ID/EX = nop

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 40: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

36Stalling Unit

Registers

InstructionMemory

Address

Instruction

Read register 1

Read register 2

Write register

Writedata

Read data 1

Read data 2

Sel

ecto

r

PC

IF:Instruction Fetch

ID: Instruction decoderregister file read

HazardDetection

Unit

ID.R

s

ID.R

t

EX.RdID/EX

EX.MemRead

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 41: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

37Additional Forwarding Logic

• Additional logic in forwarding unit

if (WB.Rd == EX.Rs)

Forward.Rs = WB.RdValue

Hazard.Rs = 1

else

Hazard.Rs = 0

if (WB.Rd == EX.Rt)

Forward.Rt = WB.RdValue

Hazard.Rt = 1

else

Hazard.Rt = 0

• Also relevant in "add, anything, add" sequencewhere result from first add is used in last add

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

Page 42: Data Hazards - GitHub Pages · Data Hazards Philipp Koehn 28 March 2018 Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018

38Forwarding Unit

DataMemory

ALU

Add

InstructionMemory

Address

InstructionRegisters

Read register 1

Read register 2

Write register

Writedata

Read data 1

Read data 2

Address

Writedata

Zero

ADD

Result

Sel

ecto

r

Sel

ecto

r

Signextended

ShiftLeft

PC

Sel

ecto

r

4

Readdata

IF:Instruction Fetch

ID: Instruction decoderregister file read

MEM: Memory access

EX: Execute /address calculate

WB:Write Back

Sel

ecto

rForwarding

Unit

Philipp Koehn Computer Systems Fundamentals: Data Hazards 28 March 2018