Engineering
Dave Patterson
(www.cs.berkeley.edu/~patterson)
www-inst.eecs.berkeley.edu/~cs152/
<21:25>
<16:20>
<11:15>
<0:15>
Memory
Adr
Rs Rt Rd Imm16
busA
busW Rw Ra Rb
00
32 32-bit 32
ALU
Mux
32 Registers busB 32 0
PC
Clk 0
Mux
32
Mux
Adder
32 WrEn Adr
Extender
1 Data In
PC Ext
Data 1
Clk imm16 32
imm16
16 Memory
Clk
ExtOp ALUSrc
CS 152 L07 Single Cycle 2 (7) UC Regents Fall 2004 © UCB
Recap: The MIPS-lite Subset
° ADD and subtract 31 26 21 16 11 6 0
• add rd, rs, rt op rs rt rd shamt funct
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
• sub rd, rs, rt
31 26 21 16 0
° OR Imm:
op rs rt immediate
• ori rt, rs, imm16 6 bits 5 bits 5 bits 16 bits
ALU
32 32-bit
32 Registers busB 32 0
0
Mux
Clk
Mux
32
32 WrEn Adr
Extender
1
1 Data In
imm16 32 Data
16 Memory
Clk
ExtOp ALUSrc
CS 152 L07 Single Cycle 2 (9) UC Regents Fall 2004 © UCB
Two equivalent ways to specify control
Control Control … Control AddU SubU ORI LW SW BEQ
line 0 line 1 line n Control A X
AddU A B line 0
Control
SubU line 1
ORI …
Control B Y
LW line n
SW
BEQ X Y (Rotate about 45degree axis)
4 0 0 1 1 1 1
5 0 1 1 1 1 1
00
6 1 1 1 1 1 1
Mux
PC
7 1 1 1 1 1 X
Adder
8 X X X X X 1
9 None of the above
imm16
Clk
PC Ext
ALU
32 32-bit
32 Registers busB 32 0
0
Mux
Mux
32
Clk
32 WrEn Adr
Extender
1
1 Data In
imm16 32 Data
16 Memory
Clk
ExtOp ALUSrc
CS 152 L07 Single Cycle 2 (13) UC Regents Fall 2004 © UCB
Specify ALU source mux Control
° ALUsrc: 0 reg as ALU B input; 1 immediate as ALU B input
Rd Rt
1 0 An swer? Ad dU SubU ORI LW SW BEQ
Rs Rt 0 0 0 0 0 0 0
5 5 5 1 0 0 0 0 0 1
busA 2 0 0 0 0 1 1
busW Rw Ra Rb
32 3 0 0 1 1 1 0
ALU
32 32-bit
32 Registers busB 0 4 0 0 0 1 1 1
5 0 0 0 1 1 X
Mux
32
Clk 32 6 1 1 1 1 1 1
Extender
1 Data In 7 1 1 1 1 1 X
imm16 32
16 8 X X X X X 1
9 None of t he above
ExtOp ALUSrc
Rd Rt
1 0 Answer? AddU SubU ORI LW SW BEQ
Rs Rt 0 0 0 0 0 0 1
5 5 5 1 0 0 0 0 1 1
busA 2 0 0 0 1 1 1
busW Rw Ra Rb
32 3 0 0 1 1 1 1
ALU
32 32-bit
32 Registers busB 0 4 0 1 1 1 1 1
5 1 1 1 1 1 1
Mux
32
Clk 32 6 X 0 1 1 1 1
Extender
1 Data In 7 X X 0 1 1 1
imm16 32
16 8 X X 1 0 0 0
9 None of the above
ExtOp ALUSrc
32 7 1 1 1 1 0 0
Clk
8 1 1 1 1 X X
Extender
1
imm16 32
9 None of the above
16
ExtOp ALUSrc
32 4 0 0 1 1 0 0
Clk
5 0 1 1 0 0 0
Extender
1
imm16 6 1 1 0 0 0 0
32
16 7 1 1 0 0 X X
8 1 1 0 0 0 X
9 None of the above
ExtOp ALUSrc
ALU
32 32-bit
32 Registers busB 32 0
0
Mux
Mux
32
Answer? AddU SubU ORI LW SW BEQ
Clk busW 32 WrEn Adr 0 0 0 0 0 0 0
Extender
1
1 Data In 1 0 0 0 0 0 1
imm16 32 Data
16 2 0 0 0 0 1 0
Memory 3 0 0 0 1 0 0
Clk
4 0 0 1 0 0 0
5 0 1 0 0 0 0
ExtOp ALUSrc 6 1 0 0 0 0 0
7 0 0 0 0 1 X
8 X X X 0 1 X
9 None of the above
ALU
32 32-bit
32 Registers busB 32 0
0
Mux
Mux
32
Answer? AddU SubU ORI LW SW BEQ
Clk busW 32 WrEn Adr 0 0 0 0 0 0 0
Extender
1
1 Data In 1 0 0 0 0 0 1
imm16 32 Data 2 0 0 0 0 1 0
16 Memory
Clk 3 0 0 0 1 0 X
4 0 0 0 1 X X
5 0 1 0 0 0 0
ExtOp ALUSrc 6 1 0 0 0 0 0
7 0 0 0 0 1 X
8 0 0 0 1 0 X
9 None of the above
ALU
32 32-bit
32 Registers busB 32 0
0
Mux
Mux
32
Answer? AddU SubU ORI LW SW BEQ
Clk busW 32 WrEn Adr 0 0 0 0 0 0 0
Extender
1
1 Data In 1 0 0 0 0 0 1
imm16 32 Data
16 2 0 1 0 0 0 1
Memory
Clk 3 0 1 2 0 0 1
4 0 1 2 0 0 X
5 0 1 2 0 X X
ExtOp ALUSrc 6 0 1 2 X X X
7 X 1 2 X X X
8 X X 2 0 0 1
9 None of the above
Inst Instruction<31:0>
Memory
Adr
PCSrc
4
Adder
00
Mux
PC
Adder
imm16
Clk
PC Ext
0
0 X 0
Mux
PC
1 0 0
Adder
1
1 1 1
imm16
Clk
<21:25>
<16:20>
<11:15>
<0:15>
Rd Rt Fetch Unit
RegDst = 0 Clk
1 Mux 0
Rs Rt ALUctr Rt Rs Rd Imm16
RegWr <= 1 5 5 5 <= Add MemtoReg <= 1
busA Zero MemWr = 0
Rw Ra Rb
busW 32
ALU
32 32-bit
32 0
Registers busB 0 32
Mux
Clk
Mux
32
WrEn Adr 1
Extender
1 Data In 32
imm16 Data 32
32
16 Memory
Clk
ALUSrc = 1
ExtOp <= 1
CS 152 L07 Single Cycle 2 (32) UC Regents Fall 2004 © UCB
The Single Cycle Datapath during Store
31 26 21 16 0
op rs rt immediate
<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
ALU
32 32-bit
32 0
Registers busB 0 32
Mux
Clk
Mux
32
32
WrEn Adr 1
Extender
1 Data In 32
imm16 Data
32
16 Memory
Clk
ALUSrc <=
ExtOp <=
CS 152 L07 Single Cycle 2 (33) UC Regents Fall 2004 © UCB
The Single Cycle Datapath during Store
31 26 21 16 0
op rs rt immediate
<21:25>
<16:20>
<11:15>
<0:15>
Rd Rt Fetch Unit
RegDst <= x Clk
1 Mux 0
Rs Rt ALUctr Rt Rs Rd Imm16
RegWr <= 0 5 5 5 <= Add
MemtoReg <= x
busA Zero MemWr <= 1
Rw Ra Rb
busW 32
ALU
32 32-bit
32 0
Registers busB 0 32
Mux
Clk
Mux
32
32
WrEn Adr 1
Extender
1 Data In 32
imm16 Data
32
16 Memory
Clk
ALUSrc <= 1
ExtOp <= 1
CS 152 L07 Single Cycle 2 (34) UC Regents Fall 2004 © UCB
The Single Cycle Datapath during Branch
31 26 21 16 0
op rs rt immediate
<21:25>
<16:20>
<11:15>
<0:15>
Rd Rt Fetch Unit
RegDst <= x Clk
1 Mux 0
RegWr <= 0 Rs Rt ALUctr <=Sub Rt Rs Rd Imm16
5 5 5 MemtoReg <= x
busA Zero MemWr <= 0
Rw Ra Rb
busW 32
ALU
32 32-bit
32 0
Registers busB 0 32
Mux
Clk
Mux
32
32
WrEn Adr 1
Extender
1 Data In 32
imm16 Data
32
16 Memory
Clk
ALUSrc <= 0
ExtOp <= x
CS 152 L07 Single Cycle 2 (35) UC Regents Fall 2004 © UCB
Step 4: Given Datapath: RTL -> Control
Instruction<31:0>
<21:25>
<21:25>
<16:20>
<11:15>
Inst
<0:15>
Memory
Adr
Op Fun Rt Rs Rd Imm16
Control
DATA PATH
31 26 21 16 11 6 0
R-type op rs rt rd shamt funct add, sub
<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
ALU
32 32-bit
32 0
Registers busB 0 32
Mux
Clk
Mux
32
32
WrEn Adr 1
Extender
1 Data In 32
imm16 Data
32
16 Memory
Clk
ALUSrc <= 1
ExtOp <= 0
CS 152 L07 Single Cycle 2 (40) UC Regents Fall 2004 © UCB
Example for OR immediate case
case (Instruction<31:25>)
13 /* ORi */ :
begin
RegDst = 0;
ALUSrc = 1;
MemtoReg = 0;
RegWrite = 1;
MemWrite = 0;
PCSrc = 0;
ExtOp = 0;
ALUctr = 2’b10;
end
…
default : statement
endcase
CS 152 L07 Single Cycle 2 (41) UC Regents Fall 2004 © UCB
Specify all control in one assignment
case (Instruction<31:25>)
13 /* ORi */ :
{RegDst,ALUSrc,MemtoReg,
RegWrite,MemWrite,PCSrc,Jump,
ExtOp,ALUctr}
= {1’b0, 1’b1, 1’b0, 1’b1,
1’b0, 1’b0, 1’b0, 2’b01};
…
default : statement
endcase
13 /* ORi */ :
{RegDst,ALUSrc,MemtoReg,
RegWrite,MemWrite,PCSrc,Jump,
ExtOp,ALUctr}
= {RegDstRt, ALUSrcBImm,
RegValALU, RegWr, NoMemWr,
PCSrc4, ZeroExt, Or};
…
default : statement
endcase
func
ALU ALUctr
op Main 6
ALUop Control 3
6 Control
(Local)
N
ALU
CS 152 L07 Single Cycle 2 (45) UC Regents Fall 2004 © UCB
The Encoding of ALUop
func
op 6 ALU ALUctr
Main
ALUop Control
6 Control 3
(Local)
N
° In this exercise, ALUop has to be 2 bits wide to
represent:
• (1) “R-type” instructions
• “I-type” instructions that require the ALU to perform:
- (2) Or, (3) Add, and (4) Subtract
R-type ori lw sw beq
ALUop (Symbolic) “R-type” Or Add Add Subtract
ALUop<1:0> 11 10 00 00 01
ALUSrc
RegDst
MemtoReg
MemWrite
Branch
Jump
ExtOp
ALUop<2>
ALUop<1>
ALUop<0>
<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
ALU
32 32-bit
32 0
Registers busB 0 32
Mux
Clk
Mux
32
32
WrEn Adr 1
Extender
1 Data In 32
imm16 Data
32
Instr<15:0> 16 Memory
Clk
ALUSrc
ExtOp
CS 152 L07 Single Cycle 2 (63) UC Regents Fall 2004 © UCB