Lec5a Singlecycle Control
Lec5a Singlecycle Control
Processor
Input
Control
Memory
Datapath
Output
Lec 3.2
An Abstract View of the Implementation
Ideal Control
Instruction Control Signals Conditions
Instruction
Memory
Rd Rs Rt
5 5 5
Instruction
Address
A Data
Rw Ra Rb 32 Data
32 Address
Next Address
32 Ideal Out
32 32-bit
ALU
Data
PC
Clk Clk
32
Clk
Datapath
Lec 3.3
Recap: A Single Cycle Datapath
We have everything except control signals (underline)
Instruction<31:0>
nPC_sel Instruction
<21:25>
<16:20>
<11:15>
<0:15>
Rd Rt Fetch Unit
Clk
RegDst 1 Mux 0
Rs Rt Rt Rs Rd Imm16
RegWr 5 5 5 ALUctr Zero
busA MemWr MemtoReg
Rw Ra Rb
busW 32
32 32-bit
ALU
32 0
Registers busB 0 32
Clk
Mux
32
Mux 32
WrEn Adr 1
Extender
1 Data In32
imm16 Data
32
16 Memory
Clk
ALUSrc
ExtOp
Lec 3.4
Recap: Meaning of the Control Signals
nPC_MUX_sel: 0 ⇒ PC <– PC + 4
1 ⇒ PC <– PC + 4 + SignExt(Im16) || 00
nPC_MUX_sel
Inst
Memory
Adr
4
Adder
00
Mux
PC
Adder
imm16
PC Ext
Clk
Lec 3.5
Recap: Meaning of the Control Signals
ExtOp: “zero”, “sign” MemWr: 1 ⇒ write memory
MemtoReg: 0 ⇒ ALU; 1 ⇒ Mem
ALUsrc: 0 ⇒ regB; 1 ⇒ immed
RegDst: 0 ⇒ “rt”; 1 ⇒ “rd”
ALUctr: “add”, “sub”, “or”
RegWr: 1 ⇒ write register
Equal
Rd Rt ALUctr MemWr MemtoReg
RegDst
1 0
Rs Rt
RegWr 5 5 5
busA
Rw Ra Rb =
busW 32 32-bit 32
ALU
32 Registers busB 32 0
0
Mux
32
Mux
1 Data In 1
imm16 32 Data
16 Memory
Clk
ExtOp ALUSrc
Lec 3.6
RTL: The Add Instruction
31 26 21 16 11 6 0
op rs rt rd shamt funct
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
Lec 3.7
Instruction Fetch Unit at the Beginning of Add
nPC_MUX_sel
4
Adder
00
0
Mux
PC
1
Adder
imm16
Clk
Lec 3.8
The Single Cycle Datapath During Add
<21:25>
<16:20>
<11:15>
<0:15>
Rd Rt Fetch Unit
RegDst = 1 Clk
1 Mux 0
Rs Rt ALUctr = Add Rt Rs Rd Imm16
RegWr = 1 5 5 5 MemtoReg = 0
busA Zero
Rw Ra Rb MemWr=0
busW 32
32 32-bit
ALU
32 0
Registers busB 0 32
Clk
Mux
32
Mux
32
WrEn Adr 1
Extender
1 Data In 32
imm16 Data
32
16 Memory
Clk
ALUSrc=0
ExtOp = x
Lec 3.9
Instruction Fetch Unit at the End of Add
PC <- PC + 4
• This is the same for all instructions except: Branch and Jump
Inst
Memory Instruction<31:0>
Adr
nPC_MUX_sel
4
Adder
00
0
Mux
PC
1
Adder
imm16
Clk
Lec 3.10
The Single Cycle Datapath During Or Immediate
R[rt] <- R[rs] or ZeroExt[Imm16]
Instruction<31:0>
nPC_sel =
Instruction
<21:25>
<16:20>
<11:15>
<0:15>
Rd Rt Fetch Unit
RegDst = Clk
1 Mux 0
Rs Rt ALUctr = Rt Rs Rd Imm16
RegWr = 5 5 5 MemtoReg =
busA Zero MemWr =
Rw Ra Rb
busW 32
32 32-bit
ALU
32 0
Registers busB 0 32
Clk
Mux
32 Mux
32
WrEn Adr 1
Extender
1 Data In 32
imm16 Data
32
16 Memory
Clk
ALUSrc =
ExtOp =
Lec 3.11
The Single Cycle Datapath During Or Immediate
Instruction<31:0>
nPC_sel= +4
Instruction
<21:25>
<16:20>
<11:15>
<0:15>
Rd Rt Fetch Unit
RegDst = 0 Clk
1 Mux 0
Rs Rt ALUctr = Or Rt Rs Rd
Imm16
RegWr = 1 5 5 5 MemtoReg = 0
busA Zero MemWr = 0
Rw Ra Rb
busW 32
32 32-bit
ALU
32 0
Registers busB 0 32
Clk
Mux
32
Mux
32
WrEn Adr 1
Extender
1 Data In 32
imm16 Data
32
16 Memory
Clk
ALUSrc = 1
ExtOp = 0
Lec 3.12
The Single Cycle Datapath During Load
R[rt] <- Data Memory [ R[rs] + SignExt[imm16] ]
Instruction<31:0>
nPC_sel= +4
Instruction
<21:25>
<16:20>
<11:15>
<0:15>
Rd Rt Fetch Unit
RegDst = 0 Clk
1 Mux 0
Rs Rt ALUctr=Add Rt Rs Rd Imm16
RegWr = 1 5 5 5 MemtoReg = 1
busA Zero MemWr = 0
Rw Ra Rb
busW 32
32 32-bit
ALU
32 0
Registers busB 0 32
Clk
Mux
32
Mux 1
WrEn Adr
Extender
1 Data In 32
imm16 Data 32
32
16 Memory
Clk
ALUSrc = 1
ExtOp = 1
Lec 3.13
The Single Cycle Datapath During Store
Data Memory [ R[rs] + SignExt[imm16] ] <- R[rt]
Instruction<31:0>
nPC_sel =
Instruction
<21:25>
<16:20>
<11:15>
<0:15>
Rd Rt Fetch Unit
RegDst = Clk
1 Mux 0
Rs Rt ALUctr = Rt Rs Rd Imm16
RegWr = 5 5 5 MemtoReg =
busA Zero MemWr =
Rw Ra Rb
busW 32
32 32-bit
ALU
32 0
Registers busB 0 32
Mux
Clk
32 Mux 32
WrEn Adr 1
Extender
1 Data In 32
imm16 Data
32
16 Memory
Clk
ALUSrc =
ExtOp =
Lec 3.14
The Single Cycle Datapath During Store
Instruction<31:0>
nPC_sel= +4
Instruction
<21:25>
<16:20>
<11:15>
<0:15>
Rd Rt Fetch Unit
RegDst = x Clk
1 Mux 0
Rs Rt ALUctr= Add Rt Rs Rd Imm16
RegWr = 0 5 5 5 MemtoReg = x
busA Zero
Rw Ra Rb MemWr = 1
busW 32
32 32-bit
ALU
32 0
Registers busB 0 32
Clk
Mux
32
Mux
32
WrEn Adr 1
Extender
1 Data In 32
imm16 Data
32
16 Memory
Clk
ALUSrc = 1
ExtOp = 1
Lec 3.15
The Single Cycle Datapath During Branch
if (R[rs] - R[rt] == 0) then Zero <- 1 ; else Zero <- 0
Instruction<31:0>
nPC_sel= “Br”
Instruction
<21:25>
<16:20>
<11:15>
<0:15>
Rd Rt Fetch Unit
RegDst = x Clk
1 Mux 0
Rs Rt ALUctr= Sub Rt Rs Rd
Imm16
RegWr = 0 5 5 5 MemtoReg = x
busA Zero MemWr = 0
Rw Ra Rb
busW 32
32 32-bit
ALU
32 0
Registers busB 0 32
Clk
Mux
32 Mux
32
WrEn Adr 1
Extender
1 Data In 32
imm16 Data
32
16 Memory
Clk
ALUSrc = 0
ExtOp = x
Lec 3.16
Instruction Fetch Unit at the End of Branch
Inst
Memory
Instruction<31:0>
nPC_sel Adr
Zero
00
0
nPC_sel zero? MUX
Mux
PC
0 x 0
1 0 0
1
Adder
1 1 1
imm16
Clk
Lec 3.17
Step 4: Given Datapath: RTL -> Control
Instruction<31:0>
<21:25>
Inst
<21:25>
<16:20>
<11:15>
<0:15>
Memory
Adr
Op Fun Rt Rs Rd Imm16
Control
DATA PATH
Lec 3.18
Summary of Control Signals
Lec 3.19
Summary of the Control Signals
ExtOp x x 0 1 1 x
Lec 3.20
Concept of Local Decoding
ExtO x 0 1 1 x
p
ALUop<N:0> “R-type” Or Add Add Sub
func
ALU ALUctr
op Main 6
ALUop Control 3
6 Control
(Local)
N
ALU
Lec 3.21
Encoding of ALUop
func
op 6 ALU ALUctr
Main
ALUop Control
6 Control 3
(Local)
N
Lec 3.22
Decoding of the “func” Field
func
op 6 ALU ALUctr
Main
ALUop Control
6 Control 3
(Local)
N
31 26 21 16 11 6 0
R-type op rs rt rd shamt funct
Lec 3.23
Truth Table for ALUctr
funct<3:0> Instruction Op.
0000 add
ALUop R-type ori lw sw beq 0010 subtract
(Symbolic) “R-type” Or Add Add Sub 0100 and
ALUop<2:0> 1 00 0 10 0 00 0 00 0 01 0101 or
1010 set-on-less-than
Lec 3.24
Logic Equation for ALUctr<2>
ALUop func
bit<2> bit<1> bit<0> bit<3> bit<2> bit<1> bit<0> ALUctr<2>
0 x 1 x x x x 1
1 x x 0 0 1 0 1
1 x x 1 0 1 0 1
Lec 3.25
Logic Equation for ALUctr<1>
ALUop func
bit<2> bit<1> bit<0> bit<3> bit<2> bit<1> bit<0> ALUctr<1>
0 0 0 x x x x 1
0 x 1 x x x x 1
1 x x 0 0 0 0 1
1 x x 0 0 1 0 1
1 x x 1 0 1 0 1
Lec 3.26
Logic Equation for ALUctr<0>
ALUop func
bit<2> bit<1> bit<0> bit<3> bit<2> bit<1> bit<0> ALUctr<0>
0 1 x x x x x 1
1 x x 0 1 0 1 1
1 x x 1 0 1 0 1
Lec 3.27
ALU Control Block
func
6 ALU ALUctr
ALUop Control
3
(Local)
3
Lec 3.28
Step 5: Logic For Each Control Signal
RegWr: <=_____________
Lec 3.29
Step 5: Logic for Each Control Signal
Lec 3.30
“Truth Table” for the Main Control
RegDst
func
ALUSrc ALU ALUctr
op Main 6
6 Control
: Control 3
ALUop (Local)
3
ExtOp x 0 1 1 x
ALUop (Symbolic) “R-type” Or Add Add Subtract
ALUop <2> 1 0 0 0 0
ALUop <1> 0 1 0 0 0
ALUop <0> 0 0 0 0 1
Lec 3.31
“Truth Table” for RegWrite
op 00 0000 00 1101 10 0011 10 1011 00 0100
R-type ori lw sw beq
RegWrite 1 1 1 0 0
Lec 3.32
PLA Implementation of the Main Control
op<5> .
. op<5> .. op<5> .. op<5> .. op<5> ..
<0> <0> <0> <0> <0>
ALUSrc
RegDst
MemtoReg
MemWrite
Branch
ExtOp
ALUop<2>
ALUop<1>
ALUop<0>
Lec 3.33
Putting it All Together: A Single Cycle Processor
ALUop
ALU ALUctr
Instr<31:26> RegDst 3 func Control
Main 3
op Instr<5:0> 6
6 Control ALUSrc
: Instruction<31:0>
nPC_sel
Instruction
<21:25>
<16:20>
<11:15>
<0:15>
Rd Rt Fetch Unit
RegDst Clk
1 Mux 0
Rs Rt Rt Rs Rd Imm16
RegWr 5 5 5 ALUctr
busA Zero MemWr MemtoReg
Rw Ra Rb
busW 32
32 32-bit
ALU
32 0
Registers busB 0 32
Clk
Mux
32 Mux
32
WrEn Adr 1
Extender
1 Data In32
imm16 Data
32
Instr<15:0> 16 Clk
Memory
ALUSrc
ExtOp
Lec 3.34
Recap: An Abstract View of the Critical Path (Load)
32 32 Ideal
32 32-bit
ALU
Data
PC
Clk Clk
32
Clk
Lec 3.35
Worst Case Timing (Load)
Clk
Clk-to-Q
PC Old Value New Value
Instruction Memory Access Time
Rs, Rt, Rd, Old Value New Value
Op, Func
Delay through Control Logic
ALUctr Old Value New Value
Cycle time for load is much longer than needed for all other
instructions
Lec 3.37
Summary
Lec 3.38