Documente Academic
Documente Profesional
Documente Cultură
op
Main
Control
6
Instr<31:26>
Rt
ALUctr
busA
1
32
ExtOp
Clk
Imm16
MemtoReg
MemWr
32
Data In32
ALUSrc
Rd
WrEn Adr
32
Mux
Extender
imm16
Instr<15:0> 16
32
Mux
32
Clk
Rw Ra Rb
32 32-bit
Registers
busB
32
ALU
busW
Zero
Rs
<0:15>
Rt
<11:15>
Clk
1 Mux 0
RegWr 5
Instruction
Fetch Unit
Jump
Rt
Rs
Instruction<31:0>
Branch
<16:20>
RegDst
func
Instr<5:0>6
ALUSrc
ALU
ALUctr
Control
3
<21:25>
Rd
Data
Memory
op<5>
.
op<5>
.
<0>
R-type
op<5>
.
<0>
ori
op<5>
.
<0>
lw
op<5>
.
<0>
sw
op<5>
.
<0>
beq
jump
.
op<0>
RegWrite
ALUSrc
RegDst
MemtoReg
MemWrite
Branch
Jump
ExtOp
ALUop<2>
ALUop<1>
ALUop<0> 3
Overview of a
Implementation
Multiple
Cycle
Overview
of
Implementation
Multiple
Cycle
Clk
Old
Value
Rs, Rt, Rd,
Op, Func
PC
ALUctr
ExtOp
RegWr
busA
busB
Old
DelayValue
through Extender & Mux
Old
Value
Addre
ss
Old
Value
busW
Old
New
Value
New
Value
ALU
Delay
New
Value
New
ALUSrc
Clk-to-Q
New
Value
Instruction Memory Access Time
Old
New
Value
Value Delay through Control Logic
Old
New
Value
Value
Old
New
Value
Value
Old
New
Value
Value
Old
New
Value
Value File Access Time
Register
Din Dout
32
In real life:
Neither register file nor ideal memory has the clockClk
input
The write path is a combinational logic delay path:
Write enable goes to 1 and Din settles down
Memory write access delay
WrEn
Din is written into Mem[address]
Adr
32
Ideal
Important: Address and Data must be
Memory
stable BEFORE Write Enable goes to 1
32
Din Dout
32
Reg File
32
Rw busB
32
busW
5
32
Memory
32
Din Dout
32
10
How
to
Condition?
Avoid
this
Race
11
12
the
PC<31:0> + 4
Clk
One Logic Clock Cycle
we are here!
PCWr=?
PC
MemWr=?
32
IRWr=?
RAdr
Ideal
Memory
32
32
WrAdr
Din
Dout
32
Instruction Reg
Clk
32
ALU
32
32
4
32
32
ALU
Control
ALUop=?
Clk
13
PCWr=1
PC
MemWr=0 IRWr=1
32
32
32
Instruction Reg
Clk
32
RAdr
Ideal
Memory
WrAdr
Din Dout
ALU
32
0
0
32
32
32
ALU
Control
ALUOp = Add
32
Clk
14
PCWr=1
ALUOp=Add
1: PCWr, IRWr
x: PCWrCond
RegDst, Mem2R
Others: 0s
PCWrCond=x
32
PC
WrAdr
32
Din Dout
32
32
busA
32
busB 32
32
32
0
1
2
3
ALUSelB=00
Target
Zero
ALU
Ideal
Memory
Mux
RAdr
Instruction Reg
Mux
32
1
0
32
32
ALUSelA=0
BrWr=0
Mux
Zero
IorD=0 MemWr=0
IRWr=1
PCSrc=0
32
32
ALU
Control
15
ALUOp=Add
32
PC
WrAdr
32
Din Dout
32
32
Go to theOp
ControlFunc
32
Rt
Rt
Mux
Ideal
Memory
Rd
Imm
16
Ra
Rb busA
Reg File
32
Rw
busWbusB 32
32
0
1
2
3
Zero
ALU
RAdr
Rs
32
Mux
Mux
32
Instruction Reg
32
32
Mux
PCWrCond=0
PCSrc=x
Zero
IorD=x MemWr=0
IRWr=0RegDst=xRegWr=0ALUSelA=x 1
32
32
ALU
Control
ALUSelB=xx
16
ALUOp=xx
x: RegDst, PCSrc
IorD, MemtoReg
Others: 0s
PCWrCond=0
Zero
PCSrc=x
32
PC
WrAdr
32
Din Dout
32
32
Rt 0
Rd
Ra
Rb
busA
Reg File
32
Rw
busWbusB 32
<< 2
Beq
Rtype
Ori
Memory
32
Mux
Ideal
Memory
Rt
Control
Op
Func
6
6
Imm
16
Extend
ExtOp=1
32
0
1
2
3
Target
Zero
ALU
RAdr
Rs
32
Mux
Mux
32
Instruction Reg
32
32
Mux
IorD=x MemWr=0
IRWr=0RegDst=xRegWr=0ALUSelA=0
BrWr=1
32
32
ALU
Control
ALUSelB=10
32
ALUOp=Add
17
if (busA == busB)
PC <- Target
ALUOp=Sub
ALUSelB=01
x: IorD, Mem2Reg
RegDst, ExtOp
1: PCWrCond
ALUSelA
PCSrc
PCWr=0
32
PC
WrAdr
32
Din Dout
32
32
32
Rt
Rt 0
Rd
Ra
Rb
busA
Reg File
Rw
busW
busB
32
32
<< 2
Imm
16
Extend
ExtOp=x
32
0
1
2
3
Zero
ALU
Rs
Mux
Ideal
Memory
Mux
RAdr
Mux
32
Instruction Reg
32
32
Mux
PCWrCond=1
PCSrc=1 BrWr=0
Zero
Target
IorD=xMemWr=0IRWr=0RegDst=xRegWr=0 ALUSelA=1 1
32
32
32
ALU
Control
ALUSelB=01
32
ALUOp=Sub
18
19
PCWrCond=0
PCSrc=x BrWr=1
Zero
Target
IorD=x MemWr=0IRWr=0 RegDst=x RegWr=0 ALUSelA=0 1
PC
WrAdr
32
Din Dout
32
32
Beq
Rtype
Ori
Memory
32
Rt
Rt 0
Rd
Ra
Rb
busA
Reg File
Rw
busW busB
32
<< 2
Control
Op
Func
6
6
Imm
16
Extend
ExtOp=1
32
1
32
Zero
ALU
Rs
Mux
Ideal
Memory
Mux
32
RAdr
Mux
32
Instruction Reg
32
0
32
Mux
32
0
1
2
3
32
32
ALU
Control
ALUSelB=10
32
ALUOp=Add
20
1: RegDst
ALUSelA
ALUSelB=01
ALUOp=Rtype
x: PCSrc, IorD
MemtoReg
ExtOp
32
PC
WrAdr
32
Din Dout
32
32
32
Rt
Rt 0
Mux
Ideal
Memory
Rs
Rd
Imm 16
Rb busA
Reg File
32
Rw
busB
busW
32
Ra
Mux 0
<< 2
Extend
ExtOp=x
32
0
1
2
3
Zero
ALU
RAdr
Mux
Mux
32
Instruction Reg
32
32
Mux
PCWrCond=0
PCSrc=x BrWr=0
Zero
Target
IorD=xMemWr=0IRWr=0RegDst=1RegWr=0 ALUSelA=1 1
32
32
32
ALU
Control
32
ALUOp=Rtype
MemtoReg=x
ALUSelB=01
21
Rfinish
ALUOp=Rtype
1: RegDst, RegWr
ALUselA
ALUSelB=01
x: IorD, PCSrc
ExtOp
PCWr=0
32
PC
WrAdr
32
Din Dout
32
32
32
Rt
Rt 0
Mux
Ideal
Memory
Rs
Rd
Imm 16
Rb
busA
Reg File
32
Rw
busWbusB 32
Ra
Mux 0
<< 2
Extend
ExtOp=x
32
32
0
1
2
3
Zero
ALU
RAdr
Mux
Mux
32
Instruction Reg
32
32
Mux
PCWrCond=0
PCSrc=x BrWr=0
Zero
Target
IorD=xMemWr=0IRWr=0RegDst=1RegWr=1 ALUSelA=1 1
32
32
32
ALU
Control
ALUOp=Rtype
22
MemtoReg=0
ALUSelB=01
23
Mux
PCWrCond=0
PCSrc=x BrWr=1
Zero
Target
IorD=xMemWr=0IRWr=0RegDst=xRegWr=0 ALUSelA=0 1
32
32
PC
WrAdr
32
Din Dout
32
32
Beq
Rtype
Ori
Memory
32
Rt
Rt 0
Rd
Ra
Rb
busA
Reg File
32
Rw
busWbusB 32
<< 2
Control
Op
Func
6
6
Imm
16
Extend
ExtOp=1
32
0
1
2
3
Zero
ALU
Rs
Mux
Ideal
Memory
Mux
32
RAdr
Mux
32
Intruction Reg
32
32
32
ALU
Control
ALUSelB=10
32
ALUOp=Add
24
ALUOp=OrOriExec
1: ALUSelA
ALUSelB=11
x: MemtoReg
IorD, PCSrc
PCWr=0
32
PC
WrAdr
32
Din Dout
32
32
32
Rt
Rt 0
Mux
Ideal
Memory
Rs
Rd
Imm 16
Rb
busA
Reg File
32
Rw
busWbusB 32
Ra
Mux 0
<< 2
Extend
ExtOp=0
32
32
0
1
2
3
Zero
ALU
RAdr
Mux
Mux
32
Instruction Reg
32
32
Mux
PCWrCond=0
PCSrc=x BrWr=0
Zero
Target
IorD=xMemWr=0IRWr=0RegDst=0RegWr=0 ALUSelA=1 1
32
32
32
ALU
Control
ALUOp=Or
25
MemtoReg=x
ALUSelB=11
x: IorD, PCSrc
ALUSelB=11
1: ALUSelA
RegWr
32
PC
WrAdr
32
Din Dout
32
32
32
Rt
Rt 0
Mux
Ideal
Memory
Rs
Rd
Imm 16
Rb
busA
Reg File
32
Rw
busWbusB 32
Ra
Mux 0
<< 2
Extend
ExtOp=0
32
32
0
1
2
3
Zero
ALU
RAdr
Mux
Mux
32
Instruction Reg
32
32
Mux
PCWrCond=0
PCSrc=x BrWr=0
Zero
Target
IorD=xMemWr=0IRWr=0RegDst=0RegWr=1 ALUSelA=1 1
32
32
32
ALU
Control
ALUOp=Or
26
MemtoReg=0
ALUSelB=11
27
PCWr=0
Mux
PCWrCond=0
PCSrc=x BrWr=1
Zero
Target
IorD=xMemWr=0IRWr=0RegDst=xRegWr=0 ALUSelA=0 1
32
32
PC
WrAdr
32
Din Dout
32
32
Beq
Rtype
Ori
Memory
32
Rt
Rt 0
Rd
Ra
Rb
busA
Reg File
32
Rw
busWbusB 32
<< 2
Control
Op
Func
6
6
Imm
16
Extend
ExtOp=1
32
0
1
2
3
Zero
ALU
Rs
Mux
Ideal
Memory
Mux
32
RAdr
Mux
32
Instruction Reg
32
32
32
ALU
Control
ALUSelB=10
32
ALUOp=Add
28
Memory Address
Calculation
Cycle 3
AdrCal
1: ExtOp
ALUSelA
ALUSelB=11
ALUOp=Add
x: MemtoReg
PCSrc
32
PC
WrAdr
32
Din Dout
32
32
32
Rt
Rt 0
Mux
Ideal
Memory
Rs
Rd
Imm 16
Rb
busA
Reg File
32
Rw
busWbusB 32
Ra
Mux 0
<< 2
Extend
ExtOp=1
32
32
0
1
2
3
Zero
ALU
RAdr
Mux
Mux
32
Instruction Reg
32
32
Mux
PCWrCond=0
PCSrc=x BrWr=0
Zero
Target
IorD=xMemWr=0IRWr=0RegDst=xRegWr=1 ALUSelA=1 1
32
32
32
ALU
Control
ALUOp=Add
29
MemtoReg=x
ALUSelB=11
PCWr=0
1: ExtOp SWmem
MemWr
ALUSelA
ALUSelB=11
ALUOp=Add
x: PCSrc,RegDst
MemtoReg
PCSrc=x
32
PC
WrAdr
32
Din Dout
32
32
32
Rt
Rt 0
Mux
Ideal
Memory
Rs
Rd
Imm 16
Rb
busA
Reg File
32
R
w
busWbusB 32
Ra
Mux 0
<< 2
Extend
ExtOp=1
32
32
32
0
1
2
3
Target
Zero
ALU
RAdr
1
0
Mux
32
Mux
32
Instruction Reg
32
BrWr=0
Mux
PCWrCond=0
Zero
IorD=xMemWr=1IRWr=0RegDst=xRegWr=0 ALUSelA=1
32
32
ALU
Control
ALUOp=Add
30
MemtoReg=x
ALUSelB=11
1: ExtOp LWmem
ALUSelA, IorD
ALUSelB=11
ALUOp=Add
x: MemtoReg
PCSrc
PCWr=0
32
PC
WrAdr
32
Din Dout
32
32
32
Rt
Rt 0
Mux
Ideal
Memory
Rs
Rd
Imm 16
Rb
busA
Reg File
32
Rw
busWbusB 32
Ra
Mux 0
<< 2
Extend
ExtOp=1
32
32
0
1
2
3
Zero
ALU
RAdr
Mux
Mux
32
Instruction Reg
32
32
Mux
PCWrCond=0
PCSrc=x BrWr=0
Zero
Target
IorD=1MemWr=0IRWr=0RegDst=0RegWr=0 ALUSelA=1 1
32
32
32
ALU
Control
ALUOp=Add
31
MemtoReg=x
ALUSelB=11
LWwr
1: ALUSelA
RegWr, ExtOp
MemtoReg
ALUSelB=11
ALUOp=Add
x: PCSrc
IorD
32
PC
WrAdr
32
Din Dout
32
32
32
Rt
Rt 0
Mux
Ideal
Memory
Rs
Rd
Imm 16
Rb
busA
Reg File
32
Rw
busWbusB 32
Ra
Mux 0
<< 2
Extend
ExtOp=1
32
32
0
1
2
3
Zero
ALU
RAdr
Mux
Mux
32
Instruction Reg
32
32
Mux
PCWrCond=0
PCSrc=x BrWr=0
Zero
Target
IorD=xMemWr=0IRWr=0RegDst=0RegWr=0 ALUSelA=1 1
32
32
32
ALU
Control
ALUOp=Add
32
MemtoReg=1
ALUSelB=11
33
RegWr
ALUSelA
WrAdr
32
Din Dout
32
32
32
Rt 0
Mux
Ideal
Memory
Rt
Rd
Imm 16
Rb
busA
Reg File
32
Rw
Mux 0
<< 2
Extend
ExtOp
32
busWbusB 32
Ra
0
1
2
3
Zero
32
32
ALU
Control
32
MemtoReg
Target
ALU
RAdr
32
Rs
BrWr
Mux
Mux
Instruction Reg
32
32
RegDst
32
PC
32
PCSrc
Mux
PCWrCond
Zero
IorD MemWr IRWr
ALUSelB
ALUOp34
1: ExtOp
ALUSelA
ALUSelB=11
ALUOp=Add
x: MemtoReg
PCSrc
lw
ALUOp=Add
1: PCWr, IRWr
x: PCWrCond
RegDst, Mem2R
Others: 0s
lw or sw
sw
SWMem
1: ExtOp LWmem
ALUSelA, IorD
1: ExtOp
MemWr
ALUSelB=11
ALUSelA
ALUOp=Add
ALUSelB=11
x: MemtoReg
ALUOp=Add
PCSrc
x: PCSrc,RegDst
MemtoReg
LWwr
1: ALUSelA
RegWr, ExtOp
MemtoReg
ALUSelB=11
ALUOp=Add
x: PCSrc
IorD
Rfetch/Decode
ALUOp=Add
1: BrWr, ExtOp
ALUSelB=10
x: RegDst, PCSrc
IorD, MemtoReg
Others: 0s
beq
Ori
Rtype
RExec 1: RegDst
ALUSelA
ALUSelB=01
ALUOp=Rtype
x: PCSrc, IorD
MemtoReg
ExtOp
Rfinish
ALUOp=Rtype
1: RegDst, RegWr
ALUselA
ALUSelB=01
x: IorD, PCSrc
ExtOp
BrComplete
ALUOp=Sub
ALUSelB=01
x: IorD, Mem2Reg
RegDst, ExtOp
1: PCWrCond
ALUSelA
PCSrc
OriExec
ALUOp=Or
1: ALUSelA
ALUSelB=11
x: MemtoReg
IorD, PCSrc
OriFinish
ALUOp=Or
x: IorD, PCSrc
ALUSelB=11
1: ALUSelA
RegWr
35