DDCArv Ch7
DDCArv Ch7
Computer Architecture
Sarah Harris & David Harris
Chapter 7:
Microarchitecture
Chapter 7: Microarchitecture
Multicycle RISC-V
Processor
Single- vs. Multicycle Processor
• Single-cycle:
+ simple
- cycle time limited by longest instruction (lw)
- separate memories for instruction and data
- 3 adders/ALUs
• Multicycle processor addresses these issues by
breaking instruction into shorter steps
o shorter instructions take fewer steps
o can re-use hardware
o cycle time is faster
IRWrite
CLK CLK CLK
CLK
WE WE3
Instr A1 RD1
PCNext PC RD
A EN
Instr / Data A2 RD2
Memory
A3 Register
WD
WD3 File
IRWrite ImmSrc1:0
CLK CLK CLK CLK
CLK
WE 19:15 Rs1 WE3 A
Instr A1 RD1
PCNext PC RD
A EN
Instr / Data A2 RD2
Memory
A3 Register
WD
WD3 File
ALU
EN
Instr / Data A2 RD2 SrcB
Memory
A3 Register
WD
WD3 File
ALU
EN EN
1
Instr / Data A2 RD2 SrcB
ReadData
Memory
A3 Register
WD
WD3 File
CLK
31:7 Extend ImmExt
Data
ALU
EN A EN 00
1
Instr / Data A2 RD2 SrcB 01
ReadData
Memory 11:7 Rd 10
A3 Register
WD
WD3 File
CLK
31:7 Extend ImmExt
Data
ALUSrcB1:0
ALU
EN A EN 00
1
Instr / Data A2 RD2 00 SrcB 01
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
Multicycle Datapath:
Other Instructions
Multicycle Datapath: sw
Write data in rs2 to memory
ALUSrcB1:0
ALU
EN A EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
ALUSrcB1:0 Zero
CLK
OldPC
ALU
EN EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
PCWrite
AdrSrc Control
MemWrite Unit
IRWrite ResultSrc1:0
ALUControl2:0
ALUSrcB1:0
6:0
op ALUSrcA1:0
14:12
funct3 ImmSrc
1:0
30
funct75 RegWrite
Zero
Zero
CLK
OldPC
ALU
EN A EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
Multicycle Control
Multicycle Control
High-Level View Low-Level View
CLK Zero
Branch PCWrite
PCUpdate
PCWrite
AdrSrc Control RegWrite
MemWrite
MemWrite Unit Main
FSM IRWrite
IRWrite ResultSrc1:0 ResultSrc1:0
ALUControl2:0 op6:0
5
ALUSrcB1:0
ALUSrcA1:0
ALUSrcB1:0
6:0 AdrSrc
op ALUSrcA1:0
14:12 ALU Decoder
funct3 ImmSrc
Instr
ALUOp1:0
30
1:0 same as
funct75 RegWrite single-cycle
ALU
funct32:0 ALUControl2:0
Decoder
Zero funct75
Zero
Instr
op6:0 ImmSrc1:0
Decoder
Zero
CLK
OldPC
ALU
EN A EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
Zero
CLK
OldPC
ALU
EN EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
CLK
S0: Fetch S1: Decode
AdrSrc = 0
IRWrite PCWrite
AdrSrc Control
MemWrite Unit
IRWrite ResultSrc1:0
op = 0000011 (lw) ALUControl2:0
ALUSrcB1:0
6:0
op ALUSrcA1:0
S2: MemAdr 14:12
ALUSrcA = 10 funct3 ImmSrc
1:0
ALUSrcB = 01 30
ALUOp = 00 funct75 RegWrite
Zero
S2: MemAdr 0 x 0 0 0 00 10 01 000 xx
Zero
CLK
OldPC
ALU
EN EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
op = 0000011 (lw)
S2: MemAdr
ALUSrcA = 10
ALUSrcB = 01
ALUOp = 00
op =
0000011
(lw)
S3: MemRead
ResultSrc = 00
AdrSrc = 1
Zero
CLK
OldPC
ALU
EN A EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
op = 0000011 (lw)
S2: MemAdr
ALUSrcA = 10
ALUSrcB = 01
ALUOp = 00
op =
0000011
(lw)
S3: MemRead
ResultSrc = 00
AdrSrc = 1
S4: MemWB
ResultSrc = 01
RegWrite
Zero
CLK
OldPC
ALU
EN A EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
S0: Fetch
AdrSrc = 0 S1: Decode
IRWrite
ALUSrcA = 00
ALUSrcB =10
ALUOp = 00
ResultSrc = 10
PCUpdate
Calculate PC+4
op = 0000011 (lw)
used) op =
0000011
(lw)
S3: MemRead
ResultSrc = 00
AdrSrc = 1
S4: MemWB
ResultSrc = 01
RegWrite
Zero
CLK
OldPC
ALU
EN A EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
Multicycle Control:
Other Instructions
Main FSM: sw
Reset
S0: Fetch
AdrSrc = 0 S1: Decode
IRWrite
ALUSrcA = 00
ALUSrcB =10
ALUOp = 00
ResultSrc = 10
PCUpdate
op = 0000011 (lw)
OR
op = 0100011 (sw)
S2: MemAdr
ALUSrcA = 10
ALUSrcB = 01
ALUOp = 00
op = op =
0000011 0100011
(lw) (sw)
S4: MemWB
ResultSrc = 01
RegWrite
Zero
CLK
OldPC
ALU
EN A EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
S0: Fetch
AdrSrc = 0 S1: Decode
IRWrite
ALUSrcA = 00
ALUSrcB =10
ALUOp = 00
ResultSrc = 10
PCUpdate
op = 0000011 (lw) op =
OR 0110011
op = 0100011 (sw) (R-type)
op = op =
0000011 0100011
(lw) (sw)
S4: MemWB
ResultSrc = 01
RegWrite
Zero
CLK
OldPC
ALU
EN A EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
S0: Fetch
AdrSrc = 0 S1: Decode
IRWrite
ALUSrcA = 00
ALUSrcB =10
ALUOp = 00
ResultSrc = 10
PCUpdate
op = 0000011 (lw) op =
OR 0110011
op = 0100011 (sw) (R-type)
op = op =
0000011 0100011
(lw) (sw)
S4: MemWB
ResultSrc = 01
RegWrite
Zero
CLK
OldPC
ALU
EN A EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
S0: Fetch
AdrSrc = 0 S1: Decode
IRWrite ALUSrcA = 01
ALUSrcA = 00 ALUSrcB = 01
ALUSrcB =10 ALUOp = 00
ALUOp = 00
ResultSrc = 10
PCUpdate
op = 0000011 (lw) op =
OR 0110011
op = 0100011 (sw) (R-type)
S2: MemAdr
ALUSrcA = 10
S6: ExecuteR
ALUSrcA = 10 Read Registers and
Calculate Target Address (PC+imm)
ALUSrcB = 01 ALUSrcB = 00
ALUOp = 00 ALUOp = 10
op = op =
0000011 0100011
(lw) (sw)
S4: MemWB
ResultSrc = 01
RegWrite
Zero
CLK
OldPC
ALU
EN A EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
S0: Fetch
AdrSrc = 0 S1: Decode
IRWrite ALUSrcA = 01
ALUSrcA = 00 ALUSrcB = 01
ALUSrcB =10 ALUOp = 00
ALUOp = 00
ResultSrc = 10
PCUpdate
op = 0000011 (lw) op =
op =
OR 0110011
1100011
op = 0100011 (sw) (R-type)
(beq)
op = op =
0000011 0100011
(lw) (sw)
S4: MemWB
ResultSrc = 01
RegWrite
Zero
CLK
OldPC
ALU
EN A EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
S0: Fetch
AdrSrc = 0 S1: Decode
IRWrite ALUSrcA = 01
ALUSrcA = 00 ALUSrcB = 01
ALUSrcB =10 ALUOp = 00
ALUOp = 00
ResultSrc = 10
PCUpdate
op = 0000011 (lw) op = op =
op =
OR 0110011 0010011
1100011
op = 0100011 (sw) (R-type) (I-type ALU)
(beq)
op = op =
0000011 0100011
(lw) (sw)
S4: MemWB
ResultSrc = 01
RegWrite
Zero
CLK
OldPC
ALU
EN A EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
S0: Fetch
AdrSrc = 0 S1: Decode
IRWrite ALUSrcA = 01
ALUSrcA = 00 ALUSrcB = 01
ALUSrcB =10 ALUOp = 00
ALUOp = 00
ResultSrc = 10
PCUpdate
op = 0000011 (lw) op = op = op =
op =
OR 0110011 0010011 1101111
1100011
op = 0100011 (sw) (R-type) (I-type ALU) (jal)
(beq)
S2: MemAdr S6: ExecuteR S8: ExecuteI S9: JAL S10: BEQ
ALUSrcA = 10 ALUSrcA = 10 ALUSrcA = 10 ALUSrcA = 01 ALUSrcA = 10
ALUSrcB = 01 ALUSrcB = 00 ALUSrcB = 01 ALUSrcB = 10 ALUSrcB = 00
ALUOp = 00 ALUOp = 10 ALUOp = 10 ALUOp = 00 ALUOp = 01
ResultSrc = 00 ResultSrc = 00
PCUpdate Branch
op = op =
0000011 0100011
(lw) (sw)
S4: MemWB
ResultSrc = 01
RegWrite
Zero
CLK
OldPC
ALU
EN A EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result
S0: Fetch
PC + 4 is AdrSrc = 0
IRWrite
S1: Decode
ALUSrcA = 01
written to rd ALUSrcA = 00
ALUSrcB =10
ALUSrcB = 01
ALUOp = 00
op = 0000011 (lw) op = op = op =
op =
OR 0110011 0010011 1101111
1100011
op = 0100011 (sw) (R-type) (I-type ALU) (jal)
(beq)
S2: MemAdr S6: ExecuteR S8: ExecuteI S9: JAL S10: BEQ
ALUSrcA = 10 ALUSrcA = 10 ALUSrcA = 10 ALUSrcA = 01 ALUSrcA = 10
ALUSrcB = 01 ALUSrcB = 00 ALUSrcB = 01 ALUSrcB = 10 ALUSrcB = 00
ALUOp = 00 ALUOp = 10 ALUOp = 10 ALUOp = 00 ALUOp = 01
ResultSrc = 00 ResultSrc = 00
PCUpdate Branch
op = op =
0000011 0100011
(lw) (sw)
S4: MemWB
ResultSrc = 01
RegWrite
S2: MemAdr S6: ExecuteR S8: ExecuteI S9: JAL S10: BEQ
ALUSrcA = 10 ALUSrcA = 10 ALUSrcA = 10 ALUSrcA = 01 ALUSrcA = 10
ALUSrcB = 01 ALUSrcB = 00 ALUSrcB = 01 ALUSrcB = 10 ALUSrcB = 00
ALUOp = 00 ALUOp = 10 ALUOp = 10 ALUOp = 00 ALUOp = 01
ResultSrc = 00 ResultSrc = 00
PCUpdate Branch
op = op =
0000011 0100011
(lw) (sw)
S4: MemWB
ResultSrc = 01
RegWrite
Multicycle
Performance
Multicycle Processor Performance
• Instructions take different number of cycles:
– 3 cycles: beq
– 4 cycles: R-type, addi, sw , jal
– 5 cycles: lw
• CPI is weighted average
• SPECINT2000 benchmark:
– 25% loads
– 10% stores
– 13% branches
– 52% R-type
Zero
Zero
CLK
OldPC
ALU
EN A EN 00
1 24:20 Rs2
Instr / Data A2 RD2 00 SrcB 01
WriteData
ReadData
Memory 11:7 Rd 01 10
A3 Register
WD 4 10
WD3 File
CLK
31:7 Extend ImmExt
Data
Result