005 - 1cs f342 Mips Datapath
005 - 1cs f342 Mips Datapath
Get
instruction
from
memory
Framework
Get Read
instruction from
from register
memory file
Framework
Where do we store
instructions?
Get Instruction
Where do we store
instructions?
Memory
Address Data
Instruction
Memory
Get Instruction
How do we know at
what address to
fetch instruction?
Address Data
Instruction
Memory
Get Instruction
How do we know at
what address to
fetch instruction?
Program Counter
Instruction
Memory
Get Instruction
What do we end up
with?
Instruction
Memory
Get Instruction
What do we end up
with?
Instruction
Instruction
Memory
What happens to the
PC each instruction? Get Instruction
Instruction
Memory
What happens to the
PC each instruction? Get Instruction
Increment by 4B
Instruction
Memory
“Add” Instruction
4
Read Use ALU
from
register
PC op/fun
Read Addr
file
rs
Out Data
Instruction rt
Memory Instrd
imm
PC op/fun
Read Addr
rs
Out Data
Instruction rt
Memory Instrd Register File
imm
PC op/fun
Read Addr
rs
Out Data
Instruction rt
Memory Instrd Register File
imm
PC op/fun
Read Addr
src1 src1data
rs
Out Data
PC op/fun
Read Addr
src1 src1data
rs
Out Data
PC op/fun
Read Addr
src1 src1data
rs
Out Data
How do we
4 know which
register to
write?
op/fun src1 src1data
PC Read Addr rd
rs
Out Data
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
“Add” Instruction
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
What happens if instruction reads
and writes same register?
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
What happens if instruction reads
and writes same register?
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
Reading/Write Registers
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
“Addi” Instruction
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
“Addi” Instruction
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
“Addi” Instruction
Operation rs rt imm # meaning
addi $5,$3,6 3 5 6 Where do we # $5 <- $3 + 6
get the
second
input?
4 imm (16 bits)
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
32 bits
16 bits
Sign Extension
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
16 Sign 32
Ext
“Addi” Instruction
Operation rs rt imm # meaning
addi $5,$3,6 3 5 6 # $5 <- $3 + 6
How do we
know which
4
register to
write?
op/fun src1 src1data
PC Read Addr
rs
Out Data
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
16 Sign 32
Ext
“Addi” Instruction
Operation rs rt imm # meaning
addi $5,$3,6 3 5 6 # $5 <- $3 + 6
How do we
4 know which
register to
write?
op/fun src1 src1data
PC Read Addr rt
rs
Out Data
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
16 Sign 32
Ext
Putting them Together
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
16 Sign 32
Ext
Putting them Together
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
16 Sign 32
Ext
Putting them Together
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
16 Sign 32
Ext
Putting them Together
What
determines
which to take?
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
16 Sign 32
Ext
Putting them Together
What
Control determines
Unit ALUOp which to take?
ALUSrc Op/Func code
4 RegDest
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
16 Sign 32
Ext
Load Operation
Operation rs rt imm # meaning
lw $5,8($3) 3 5 8 # $5 <- M[$3 + 8]
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
Load Operation
Operation rs rt imm # meaning
lw $5,8($3) 3 5 8 # $5 <- M[$3 + 8]
How many source regs?
4 What part of instruction?
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
Load Operation
Operation rs rt imm # meaning
lw $5,8($3) 3 5 8 # $5 <- M[$3 + 8]
How many source regs? 1
4 What part of instruction? rs
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
Load Operation
Operation rs rt imm # meaning
lw $5,8($3) 3 5 8 # $5 <- M[$3 + 8]
Where do we get the second
input?
4
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
Load Operation
Operation rs rt imm # meaning
lw $5,8($3) 3 5 8 # $5 <- M[$3 + 8]
Where do we get the second
input? Sign extended imm
4
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Load Operation
Operation rs rt imm # meaning
lw $5,8($3) 3 5 8 # $5 <- M[$3 + 8]
What do we do with the ALU
4
output?
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Load Operation
Operation rs rt imm # meaning
lw $5,8($3) 3 5 8 # $5 <- M[$3 + 8]
What do we do with the ALU
4
output? Memory Address
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Load Operation
Operation rs rt imm # meaning
lw $5,8($3) 3 5 8 # $5 <- M[$3 + 8]
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Load Operation
Operation rs rt imm # meaning
lw $5,8($3) 3 5 8 # $5 <- M[$3 + 8]
Where do we
4 write the result?
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Load Operation
Operation rs rt imm # meaning
lw $5,8($3) 3 5 8 # $5 <- M[$3 + 8]
Where do we
4 write the result?
rt
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Store Operation
Operation rs rt imm # meaning
sw $5,8($3) 3 5 8 # M[$3 + 8] <- $5
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Store Operation
Operation rs rt imm # meaning
sw $5,8($3) 3 5 8 # M[$3 + 8] <- $5
Address calculation
4
identical to load word
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Store Operation
Operation rs rt imm # meaning
sw $5,8($3) 3 5 8 # M[$3 + 8] <- $5
Is $5 read or
4 written?
Which register?
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Store Operation
Operation rs rt imm # meaning
sw $5,8($3) 3 5 8 # M[$3 + 8] <- $5
Is $5 read or
4 written? read
Which register?
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Store Operation
Operation rs rt imm # meaning
sw $5,8($3) 3 5 8 # M[$3 + 8] <- $5
Is $5 read or
4 written? read
Which register? rt
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Store Operation
Operation rs rt imm # meaning
sw $5,8($3) 3 5 8 # M[$3 + 8] <- $5
What do we do with
4 the value?
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Store Operation
Operation rs rt imm # meaning
sw $5,8($3) 3 5 8 # M[$3 + 8] <- $5
What do we do with
4 the value?
In Data for memory
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Store Operation
Operation rs rt imm # meaning
sw $5,8($3) 3 5 8 # M[$3 + 8] <- $5
What do we do
4 with OutData?
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Store Operation
Operation rs rt imm # meaning
sw $5,8($3) 3 5 8 # M[$3 + 8] <- $5
What do we do
4 with OutData?
Nothing.
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Putting them together
Control
Unit
ALUOp
4
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Putting them together
What do we NOT
want it to do for a
Control store?
Unit
ALUOp
4
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Putting them together
What do we NOT
want it to do for a
store? Write to
Control destreg
Unit
ALUOp
4 RegWrite
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Putting them together
Do we want it to
read or write?
Control
Unit
ALUOp
4 RegWrite
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Do we want it to
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
“beq” Instruction
Operation rs rt imm # meaning
beq $3,$5,lp 3 5 6 # if ($3 == $5) goto lp
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
“beq” Instruction
Operation rs rt imm # meaning
beq $3,$5,lp 3 5 6 # if ($3 == $5) goto lp
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
“beq” Instruction
Operation rs rt imm # meaning
beq $3,$5,lp 3 5 6 # if ($3 == $5) goto lp
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
What operation?
“beq” Instruction
Operation rs rt imm # meaning
beq $3,$5,lp 3 5 6 # if ($3 == $5) goto lp
Zero?
op/fun src1 src1data
PC Read Addr
rs
Out Data
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
What operation?
Subtraction,
compared with 0
“beq” Instruction
Operation rs rt imm # meaning
beq $3,$5,lp 3 5 6 # if ($3 == $5) goto lp
Zero?
op/fun src1 src1data
PC Read Addr
rs
Out Data
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
How do we go
anywhere?
“beq” Instruction
Operation rs rt imm # meaning
beq $3,$5,lp 3 5 6 # if ($3 == $5) goto lp
Zero?
op/fun src1 src1data
PC Read Addr
rs
Out Data
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
How do we go
anywhere?
Change the PC
“beq” Instruction
Operation rs rt imm # meaning
beq $3,$5,lp 3 5 6 # if ($3 == $5) goto lp
Zero?
op/fun src1 src1data
PC Read Addr
rs
Out Data
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
Where do we want
to go?
“beq” Instruction
Operation rs rt imm # meaning
beq $3,$5,lp 3 5 6 # if ($3 == $5) goto lp
Zero?
op/fun src1 src1data
PC Read Addr
rs
Out Data
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
Where do we want
16 Sign 32 to go? Advance
Ext imm instructions
“beq” Instruction
Operation rs rt imm # meaning
beq $3,$5,lp 3 5 6 # if ($3 == $5) goto lp
Zero?
op/fun src1 src1data
PC Read Addr
rs
Out Data
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
Where do we want
16 Sign 32 to go? Advance
But the PC is in Ext imm instructions
bytes.
“beq” Instruction
Operation rs rt imm # meaning
beq $3,$5,lp 3 5 6 # if ($3 == $5) goto lp
Where do we want to
go? Advance imm
4 instructions
<<
2 Zero?
op/fun src1 src1data
PC Read Addr
rs
Out Data
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
16 Sign 32
Ext
4
<<
2 Zero?
op/fun src1 src1data
PC Read Addr
rs
Out Data
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
How do we use our
16 32 Zero bit?
Sign
Ext
“beq” Instruction
Operation rs rt imm # meaning
beq $3,$5,lp 3 5 6 # if ($3 == $5) goto lp
4
<<
2 Zero?
op/fun src1 src1data
PC Read Addr
rs
Out Data
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata
How do we use our
16 32 Zero bit?
Sign
Ext Choose between
PC+4 and PC+4+
(Imm<<2)
“j” Instruction
Operation Target address # meaning
j loop 0x0174837 # goto loop
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata Where do we go?
“j” Instruction
Operation Target address # meaning
j loop 0x0174837 # goto loop
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata Where do we go?
To this absolute
address
“j” Instruction
Operation Target address # meaning
j loop 0x0174837 # goto loop
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata Where do we go?
But this is only To this absolute
______ bits, when
the PC is _____ address
bits.
“j” Instruction
Operation Target address # meaning
j loop 0x0174837 # goto loop
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata Where do we go?
To this absolute
But this is only 26 bits,
when the PC is 32 bits. address
“j” Instruction
Operation Target address # meaning
j loop 0x0174837 # goto loop
src2 src2data
Instruction rt
Register File
Memory Instrd
destreg
imm
destdata Where do we go?
But this is only 26 bits, To this absolute
when the PC is 32 bits. address
Shift left, Concatenate
PC’s upper bits
“j” Instruction
Operation Target address # meaning
j loop 0x0174837 # goto loop
4 bits
4
28 bits
4 << <<
2 2
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Control Unit
4 << <<
2 2
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Time Diagram
Cycle Time
4 << <<
2 2
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
Five Cycle Implementation
4 << <<
2 2
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
FETCH 16 Sign 32
Ext
Five Cycle Implementation
4 << <<
2 2
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
DECODE
Five Cycle Implementation
4 << <<
2 2
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
EXECUTE
Five Cycle Implementation
4 << <<
2 2
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext MEMORY
Five Cycle Implementation
4 << <<
2 2
Addr
op/fun src1 src1data
PC Read Addr Out Data
rs
Out Data
src2 src2data
Instruction rt Data Memory
Register File
Memory Instrd
destreg
imm
destdata In Data
16 Sign 32
Ext
WRITEBACK
How Many Cycles For:
• add
• sw
• lw
• blt
• j