Single-cycle Multi-cycle
Datapath
Alyce Brady, Kalamazoo College
(based on original drawings/slides by Chris Nevison, Colgate University)
25-0
Shft
Left
2
1
M
U
1 X
0
31-28
31-26
PC
D
E
F
G
H
I
Write
Zero
Registers
0 M
0
U
1 X
M
1 U
X
15-11
ALU
Instruction
Memory
25-21
20-16
A
B
C
C
O
N
T
R
O
L
ADD
ADD
4
Shft
Left
2
0
M
U
X
5-0
Data
Memory
1
Sign
Ext
15-0
Mem Read
Mem Write
ALU
CTRL
M
0 U
X
25-0
Shft
Left
2
1
M
U
1 X
0
31-28
31-26
PC
D
E
F
G
H
I
Write
Zero
Registers
0 M
0
U
1 X
M
1 U
X
15-11
R-Type Instruction Path
5-0
Mem Read
Data
Memory
1
Sign
Ext
15-0
e.g., add $t0, $t1, $t2
ALU
Instruction
Memory
25-21
20-16
A
B
C
C
O
N
T
R
O
L
ADD
ADD
4
Shft
Left
2
0
M
U
X
Mem Write
ALU
CTRL
M
0 U
X
25-0
Shft
Left
2
1
M
U
1 X
0
31-28
31-26
PC
D
E
F
G
H
I
Write
Zero
Registers
0 M
0
U
1 X
M
1 U
X
15-11
R-Type Instruction Path
, $t2
5-0
Mem Read
Data
Memory
1
Sign
Ext
15-0
e.g., add $t0,
ALU
Instruction
Memory
25-21
20-16
A
B
C
C
O
N
T
R
O
L
ADD
ADD
4
Shft
Left
2
0
M
U
X
Mem Write
ALU
CTRL
M
0 U
X
25-0
Shft
Left
2
1
M
U
1 X
0
31-28
31-26
PC
D
E
F
G
H
I
Write
Zero
Registers
0 M
0
U
1 X
M
1 U
X
15-11
R-Type Instruction Path
, $t2
5-0
Mem Read
Data
Memory
1
Sign
Ext
15-0
e.g., add $t0,
ALU
Instruction
Memory
25-21
20-16
A
B
C
C
O
N
T
R
O
L
ADD
ADD
4
Shft
Left
2
0
M
U
X
Mem Write
ALU
CTRL
M
0 U
X
25-0
Shft
Left
2
1
M
U
1 X
0
31-28
31-26
PC
D
E
F
G
H
I
Write
Zero
Registers
0 M
0
U
1 X
M
1 U
X
15-11
R-Type Instruction Path
, $t2
5-0
Mem Read
Data
Memory
1
Sign
Ext
15-0
e.g., add $t0,
ALU
Instruction
Memory
25-21
20-16
A
B
C
C
O
N
T
R
O
L
ADD
ADD
4
Shft
Left
2
0
M
U
X
Mem Write
ALU
CTRL
M
0 U
X
4
PC
A
D
D
M
U
X
C
O
N
T
R
O
L
A
D
D
Sh
L
2
Instruction
Memory
Registers
Sign
Ext
M
U
X
A
L
U
Data
Memory
M
U
X
ALU
CTL
INSTRUCTION
FETCH
(e.g., 200ps)
INSTR DECODE
REG FETCH
(e.g., 100ps)
EXECUTE/
ADDRESS CALC
(e.g., 200ps)
MEMORY
ACCESS
(e.g., 225ps)
WRITE
BACK
(e.g., 100ps)
4
PC
A
D
D
M
U
X
C
O
N
T
R
O
L
A
D
D
Sh
L
2
Instruction
Memory
Registers
Sign
Ext
M
U
X
A
L
U
Data
Memory
R-Type Instruction Path
ALU
CTL
e.g., add $t0, $t1, $t2
INSTRUCTION
FETCH
(e.g., 200ps)
M
U
X
INSTR DECODE
REG FETCH
(e.g., 100ps)
EXECUTE/
ADDRESS CALC
(e.g., 200ps)
MEMORY
ACCESS
(e.g., 225ps)
WRITE
BACK
(e.g., 100ps)
4
PC
A
D
D
M
U
X
C
O
N
T
R
O
L
A
D
D
Sh
L
2
Instruction
Memory
Registers
Sign
Ext
M
U
X
A
L
U
Data
Memory
SW Instruction Path
ALU
CTL
e.g., sw $t0, 100($s0)
INSTRUCTION
FETCH
(e.g., 200ps)
M
U
X
INSTR DECODE
REG FETCH
(e.g., 100ps)
EXECUTE/
ADDRESS CALC
(e.g., 200ps)
MEMORY
ACCESS
(e.g., 225ps)
WRITE
BACK
(e.g., 100ps)
4
PC
A
D
D
M
U
X
C
O
N
T
R
O
L
A
D
D
Sh
L
2
Instruction
Memory
Registers
Sign
Ext
M
U
X
A
L
U
Data
Memory
LW Instruction Path
ALU
CTL
e.g., lw $t0, 100($s0)
INSTRUCTION
FETCH
(e.g., 200ps)
M
U
X
INSTR DECODE
REG FETCH
(e.g., 100ps)
EXECUTE/
ADDRESS CALC
(e.g., 200ps)
MEMORY
ACCESS
(e.g., 225ps)
WRITE
BACK
(e.g., 100ps)
4
PC
A
D
D
M
U
X
C
O
N
T
R
O
L
A
D
D
Sh
L
2
Instruction
Memory
Registers
Sign
Ext
M
U
X
A
L
U
Data
Memory
BEQ Instruction Path
ALU
CTL
e.g., add $t0, $t1, $t2
INSTRUCTION
FETCH
(e.g., 200ps)
M
U
X
INSTR DECODE
REG FETCH
(e.g., 100ps)
EXECUTE/
ADDRESS CALC
(e.g., 200ps)
MEMORY
ACCESS
(e.g., 225ps)
WRITE
BACK
(e.g., 100ps)
R-Type Instruction Path
e.g., add $t0, $t1, $t2
INSTRUCTION
FETCH
(e.g., 200ps)
INSTR DECODE
REG FETCH
(e.g., 100ps)
EXECUTE/
ADDRESS CALC
(e.g., 200ps)
MEMORY
ACCESS
(e.g., 225ps)
WRITE
BACK
(e.g., 100ps)
INSTR DECODE
REG FETCH
(e.g., 100ps)
EXECUTE/
ADDRESS CALC
(e.g., 200ps)
MEMORY
ACCESS
(e.g., 225ps)
WRITE
BACK
(e.g., 100ps)
INSTR DECODE
REG FETCH
(e.g., 100ps)
EXECUTE/
ADDRESS CALC
(e.g., 200ps)
MEMORY
ACCESS
(e.g., 225ps)
WRITE
BACK
(e.g., 100ps)
LW Instruction Path
e.g., lw $t0, 100($s0)
INSTRUCTION
FETCH
(e.g., 200ps)
BEQ Instruction Path
e.g., beq $s0, $t0, addr
INSTRUCTION
FETCH
(e.g., 200ps)
Could we let the quick instructions
be quick?
Single-cycle Multi-cycle
Datapath
Change the clock tick to the stage.
All stages now take the same amount of time.
Let instructions just do the stages they need.
225ps
225ps
225ps
225ps
INSTR DECODE
REG FETCH
EXECUTE/
ADDRESS CALC
WRITE
BACK
INSTR DECODE
REG FETCH
EXECUTE/
ADDRESS CALC
MEMORY
ACCESS
INSTR DECODE
REG FETCH
EXECUTE/
ADDRESS CALC
225ps
R-Type Instruction Path
e.g., add $t0, $t1, $t2
INSTRUCTION
FETCH
LW Instruction Path
e.g., lw $t0, 100($s0)
INSTRUCTION
FETCH
BEQ Instruction Path
e.g., beq $s0, $t0, addr
INSTRUCTION
FETCH
WRTE
BACK
4
PC
A
D
D
M
U
X
C
O
N
T
R
O
L
A
D
D
Sh
L
2
Instruction
Memory
Registers
Sign
Ext
M
U
X
A
L
U
Data
Memory
LW Instruction Path
ALU
CTL
e.g., lw $t0, 100($s0)
INSTRUCTION
FETCH
(e.g., 225ps)
M
U
X
INSTR DECODE
REG FETCH
(e.g., 225ps)
EXECUTE/
ADDRESS CALC
(e.g., 225ps)
MEMORY
ACCESS
(e.g., 225ps)
WRITE
BACK
(e.g., 225ps)