Beruflich Dokumente
Kultur Dokumente
Jump
opcode
address
31-26
25-0
Composing jump
target address
Instruction [25 0]
26
Shift
left 2
M
u
x
M
u
x
Shift
left 2
RegDst
Jump
Branch
Instruction [31 26]
MemRead
Control
MemtoReg
ALUOp
MemW rite
ALUSrc
RegWrite
Read
address
Instruction
memory
Read
register 1
0
M
u
x
1
Read
data 1
Read
register 2
Registers Read
Write
data 2
register
Zero
0
M
u
x
1
Write
data
ALU
ALU
result
Address
Write
data
Instruction [15 0]
16
Sign
extend
Read
data
Data
memory
1
M
u
x
0
32
ALU
control
Instruction [5 0]
MIPS datapath extended to jumps: control unit generates new Jump control bit
Multicycle Approach
Between steps/cycles
At the end of one cycle store data to be used in later cycles of the
same instruction
Data to be used in later instructions are stored in programmervisible state elements: the register file, PC, memory
Multicycle Approach
PCSrc
M
u
x
Add
Add ALU
result
4
Shift
left 2
Note particularities of
multicyle vs. singlediagrams
PC
Registers
Read
register 1
Read
Read
data 1
register 2
Read
address
Instruction
Write
register
Write
data
RegWrite
16
Instruction
memory
Read
data 2
Sign
extend
ALU operation
ALUSrc
Zero
ALU ALU
result
M
u
x
MemWrite
MemtoReg
Address
Read
data
Data
Write memory
data
32
MemRead
Single-cycle datapath
Instruction
register
Address
Memory
Data
Temp
Reg.
Data
A
Instruction
or data
Memory
data
register
Register #
Registers
Register #
ALU
B
Register #
ALUOut
M
u
x
Multicycle Datapath
PC
0
M
u
x
1
Instruction
[25 21]
Address
Memory
Instruction
[20 16]
MemData
Instruction
[15 0]
Write
data
Instruction
Fetch (PC)
or ALU
computed
an address
(ALUOUT)
in case of
for eg.
LW/SW
Instruction
register
Instruction
[15 0]
Memory
data
register
rs
0
M
u
x
1
Read
register 1
rt
Read
Read
register 2 data 1
Registers
Write
Read
register
data 2
0
M
rd
Instruction u
x
[15 11]
1
0
M
u
x
1
16
Sign
extend
32
ALU
result
ALUOut
0
4
Write
data
Zero
ALU
1 M
u
2 x
3
Shift
left 2
To choose between ALU and Memory. ALU for R-Type and Memory for LW
RTL:
A = Reg[IR[25-21]];
B = Reg[IR[20-16]];
ALUOut = PC + (sign-extend(IR[15-0]) << 2);
load
MDR = Memory[ALUOut];
store (instruction completes)
Memory[ALUOut] = B;
Step name
Instruction fetch
2: ID
Instruction
decode/register fetch
3: EX
Execution, address
computation, branch/
jump completion
ALUOut = A op B
ALUOut = A + sign-extend
(IR[15-0])
Reg [IR[15-11]] =
ALUOut
4: MEM completion
5: WB
if (A ==B) then
PC = ALUOut
Action for
jumps
PC = PC [31-28] II
(IR[25-0]<<2)
PC + 4
Reg[rs]
PC + 4
Reg[rt]
Branch
Target
Address
Reg[rs]
PC + 4
Reg[rt]
Mem.
Address
Reg[rs]
PC + 4
Reg[rt]
R-Type
Result
Reg[rs]
Branch
Target
Address
Reg[rt]
Branch
Target
Address
Reg[rs]
Jump
Address
Reg[rt]
Branch
Target
Address
Reg[rs]
PC + 4
Mem.
Data
Reg[rt]
Mem.
Address
Reg[rs]
PC + 4
Reg[rt]
Reg[rs]
PC + 4
Reg[rt]
R-Type
Result
Reg[rs]
PC + 4
Mem.
Data
Reg[rt]
Mem.
Address