Professional Documents
Culture Documents
1
Administrivia
• Lecture quizzes will now be due on Saturday each week
• Project 2 Deadlines
• Project 1 Clobbering
2
Great Idea #1: Abstraction
(Levels of Representation/Interpretation)
Computer Science 61C Spring 2021 Kolb & Weaver
lw t0, t2, 0
temp = v[k];
High Level Language
v[k] = v[k+1];
lw t1, t2, 4
Program (e.g., C) v[k+1] = temp;
sw t1, t2, 0
Compiler
sw t0, t2, 4
Anything can be represented
Assembly Language as a number,
Program (e.g., RISC-V) i.e., data or instructions
Assembler 0000 1001 1100 0110 1010 1111 0101 1000
Machine Language 1010 1111 0101 1000 0000 1001 1100 0110
Program (RISC-V) 1100 0110 1010 1111 0101 1000 0000 1001
0101 1000 0000 1001 1100 0110 1010 1111
Machine
Interpretation
We are here! Hardware Architecture Description
(e.g., block diagrams)
Architecture
Implementation
Not in CS61C
4
“State” Required by RV32I ISA
Computer Science 61C Spring 2021 Kolb & Weaver
• Registers (x0..x31)
• Register file (or regfile) Reg holds 32 registers x 32 bits/register: Reg[0].. Reg[31]
• Memory (MEM)
• Holds both instructions & data, in one 32-bit byte-addressed memory space
• We’ll use separate memories for instructions (IMEM) and data (DMEM)
rd
PC
Reg[]
rs1
IMEM
DMEM
ALU
rs2
+4 imm
mux
1. Instruction
2. Decode/
5. Register
3. Execute 4. Memory
Fetch Register
Write
Read
Clock
time
Implementing the add instruction
Computer Science 61C Spring 2021 Kolb & Weaver
CS 61c
8
Datapath for add
Computer Science 61C Spring 2021 Kolb & Weaver
+4 Reg[]
DataD Reg[rs1]
+ alu
pc IMEM
inst[11:7]
AddrD
pc+4 inst[19:15] AddrA DataA
Reg[rs2]
inst[24:20] AddrB DataB
inst[31:0] RegWEn
(RegWriteEnable)
(1=write, 0=no write)
Control Logic
9
Timing Diagram for add
Computer Science 61C Spring 2021 Kolb & Weaver
+4 Reg[]
DataD Reg[rs1
+ alu
pc IME inst[11:7] AddrD ]
pc+4
M inst[19:15]AddrADataA Reg[rs2
inst[24:20]AddrBDataB ]
inst[31:0]
RegWEn
clock time
Clock
PC 1000 1004
CS 61c
11
Datapath for add/sub
Computer Science 61C Spring 2021 Kolb & Weaver
+4 Reg[]
DataD Reg[rs1]
pc inst[11:7] ALU alu
IMEM AddrD
pc+4 inst[19:15] AddrA DataA Reg[rs2]
inst[24:20] AddrB DataB
inst[31:0] RegWEn
ALUSel
13
Implementing the addi instruction
Computer Science 61C Spring 2021 Kolb & Weaver
addi x15,x1,-50
10/3/17
14
Datapath for add/sub
Computer Science 61C Spring 2021 Kolb & Weaver
+4 Reg[]
DataD Reg[rs1]
ALU
pc inst[11:7] alu
IMEM AddrD
pc+4 inst[19:15] AddrA DataA Reg[rs2]
inst[24:20] AddrB DataB
inst[31:0] RegWEn
ALUSel
+4 Reg[]
DataD
ALU
pc inst[11:7] Reg[rs1] alu
IMEM AddrD
pc+4 inst[19:15] AddrA DataA 0
inst[24:20] AddrB DataB
Reg[rs 1
2]
inst[31:20]
Imm.
imm[31:0]
Gen
Control Logic
CS 61c
16
I-Format immediates
Computer Science 61C Spring 2021 Kolb & Weaver
inst[31:0]
------inst[31]-(sign-extension)------- inst[30:20]
inst[31:20] imm[31:0]
imm[31:0]
Imm.
+4 Reg[]
DataD
ALU
pc inst[11:7] Reg[rs1] alu
IMEM AddrD
pc+4 inst[19:15] AddrA DataA 0
inst[24:20] AddrB DataB
Reg[rs 1
2]
Also works for all other I-
inst[31:20]
format arithmetic instruction
Imm.
imm[31:0] (slti,sltiu,andi,ori,
Gen xori,slli,srli,srai)
just by changing ALUSel
inst[31:0] ImmSel=I RegWEn=1 BSel=1 ALUSel=Add
Control Logic
CS 61c
18
Implementing Load Word instruction
Computer Science 61C Spring 2021 Kolb & Weaver
lw x14, 8(x2)
2/22/18
19
Adding addi to datapath
Computer Science 61C Spring 2021 Kolb & Weaver
+4 Reg[]
DataD
pc inst[11:7] Reg[rs1] ALU alu
IMEM AddrD
pc+4 inst[19:15] AddrA DataA 0
inst[24:20] AddrB DataB
Reg[rs 1
2]
inst[31:20]
Imm.
imm[31:0]
Gen
Control Logic
CS 61c
20
Adding lw to datapath
Computer Science 61C Spring 2021 Kolb & Weaver
alu
+4
wb
Reg[]
DataD Reg[rs1] 1
pc inst[11:7] ALU DMEM
IMEM AddrD Reg[rs2] Addr DataR 0
wb
pc+4 inst[19:15] AddrA DataA 0
mem
inst[24:20] AddrB DataB 1
inst[31:20]
Imm.
imm[31:0]
Gen
CS 61c
21
Adding lw to datapath
Computer Science 61C Spring 2021 Kolb & Weaver
alu
+4
wb
Reg[]
DataD Reg[rs1] 1
pc inst[11:7] ALU DMEM
IMEM AddrD Reg[rs2] Addr DataR 0
wb
pc+4 inst[19:15] AddrA DataA 0
mem
inst[24:20] AddrB DataB 1
inst[31:20]
Imm.
imm[31:0]
Gen
CS 61c
22
All RV32 Load Instructions
Computer Science 61C Spring 2021 Kolb & Weaver
23
Implementing Store Word instruction
Computer Science 61C Spring 2021 Kolb & Weaver
sw x14, 8(x2)
alu
+4
wb
Reg[]
DataD Reg[rs1] 1
pc inst[11:7] ALU DMEM
IMEM AddrD Reg[rs2] Addr DataR 0
wb
pc+4 inst[19:15] AddrA DataA 0
mem
inst[24:20] AddrB DataB 1
inst[31:20]
Imm.
imm[31:0]
Gen
CS 61c
25
Adding sw to datapath
Computer Science 61C Spring 2021 Kolb & Weaver
+4
wb
Reg[] alu
DataD Reg[rs1]
pc inst[11:7]
ALU DMEM 1
pc+4 IMEM AddrD Reg[rs2] Addr DataR 0
wb
inst[19:15] AddrA DataA 0
DataW mem
inst[24:20] AddrB DataB 1
inst[31:7]
Imm.
imm[31:0]
Gen
*= “Don’t Care”
CS 61c
26
Adding sw to datapath
Computer Science 61C Spring 2021 Kolb & Weaver
alu
+4
wb
Reg[]
DataD Reg[rs1] 1
pc inst[11:7] ALU DMEM
IMEM AddrD Reg[rs2] Addr DataR 0
wb
pc+4 inst[19:15] AddrA DataA 0
mem
inst[24:20] AddrB DataB 1
inst[31:7]
Imm.
imm[31:0]
Gen
*= “Don’t Care”
CS 61c
27
I-Format immediates
Computer Science 61C Spring 2021 Kolb & Weaver
inst[31:0]
------inst[31]-(sign-extension)------- inst[30:20]
inst[31:20] imm[31:0]
imm[31:0]
Imm.
CS 61c
28
I & S Immediate Generator
inst[31:0]
Computer Science 61C Spring 2021 Kolb & Weaver
31 25 24 20 19 15 14 12 11 7 6 0
imm[11:0] rs1 funct3 rd I-opcode
imm[11:5] rs2 rs1 funct3 imm[4:0] S-opcode
5
5
1 6
I S
30
Adding sw to datapath
Computer Science 61C Spring 2021 Kolb & Weaver
+4
wb
Reg[] alu
DataD Reg[rs1]
pc inst[11:7]
ALU DMEM 1
pc+4 IMEM AddrD Reg[rs2] Addr DataR 0
wb
inst[19:15] AddrA DataA 0
DataW mem
inst[24:20] AddrB DataB 1
inst[31:7]
Imm.
imm[31:0]
Gen
CS 61c
31
Adding branches to datapath
Computer Science 61C Spring 2021 Kolb & Weaver
+4
wb
Reg[] pc
1
alu
DataD Reg[rs1]
1 ALU
alu
pc inst[11:7] 0 DMEM 1
pc+4
0 IMEM AddrD
Branch
Reg[rs2] Addr DataR 0
wb
inst[19:15] AddrA DataA 0
Comp. DataW mem
inst[24:20] AddrB DataB 1
inst[31:7]
Imm.
imm[31:0]
Gen
PCSel inst[31:0] ImmSel RegWEn BrUnBrEqBrLT BSel ASel ALUSel MemRW WBSel
CS 61c
32
Adding branches to datapath
Computer Science 61C Spring 2021 Kolb & Weaver
+4
wb
Reg[] pc
1
alu
DataD Reg[rs1]
1 ALU
alu
pc inst[11:7] 0 DMEM 1
pc+4
0 IMEM AddrD Reg[rs2] Addr DataR 0
wb
inst[19:15] AddrA DataA Branch 0
Comp. DataW mem
inst[24:20] AddrB DataB 1
inst[31:7]
Imm.
imm[31:0]
Gen
ALUSel=Add
CS 61c
33
Branch Comparator
Computer Science 61C Spring 2021 Kolb & Weaver
A
Branch • BrEq = 1, if A=B
B
• BrUn =1 selects unsigned comparison for
BrLT, 0=signed
CS 61c
34
Implementing JALR Instruction (I-Format)
Computer Science 61C Spring 2021 Kolb & Weaver
• no multiplication by 2 bytes
35
Adding branches to datapath
Computer Science 61C Spring 2021 Kolb & Weaver
+4
wb
Reg[] pc
1
alu
DataD Reg[rs1]
1 ALU
alu
pc inst[11:7] 0 DMEM 1
pc+4
0 IMEM AddrD Reg[rs2] Addr DataR 0
wb
inst[19:15] AddrA DataA Branch 0
Comp. DataW mem
inst[24:20] AddrB DataB 1
inst[31:7]
Imm.
imm[31:0]
Gen
PCSel inst[31:0] ImmSel RegWEn BrUnBrEqBrLT BSel ASel ALUSel MemRW WBSel
CS 61c
36
Adding jalr to datapath
Computer Science 61C Spring 2021 Kolb & Weaver
pc+4
+4
wb
Reg[] pc
1
alu
DataD Reg[rs1] 2
1 ALU
alu
pc inst[11:7] 0 DMEM 1
pc+4
0 IMEM AddrD Reg[rs2] Addr DataR 0
wb
inst[19:15] AddrA DataA Branch 0
Comp. DataW mem
inst[24:20] AddrB DataB 1
inst[31:7]
Imm.
imm[31:0]
Gen
PCSel inst[31:0] ImmSel RegWEn BrUnBrEqBrLT BSel ASel ALUSel MemRW WBSel
CS 61c
37
Adding jalr to datapath
Computer Science 61C Spring 2021 Kolb & Weaver
pc+4
alu +4
wb
Reg[] pc
1
alu
DataD Reg[rs1] 2
1 ALU
pc inst[11:7] 0 DMEM 1
pc+4
0 IMEM AddrD Reg[rs2] Addr DataR 0
wb
inst[19:15] AddrA DataA Branch 0
DataW mem
inst[24:20] AddrB DataB Comp. 1
inst[31:7]
Imm.
imm[31:0]
Gen
CS 61c
38
Implementing jal Instruction
Computer Science 61C Spring 2021 Kolb & Weaver
39
Adding jal to datapath
Computer Science 61C Spring 2021 Kolb & Weaver
pc+4
+4 Reg[] pc alu
wb 1
DataD 2
alu 1 Reg[rs1]
0 ALU DMEM
pc inst[11:7] 1
pc+4
0 IMEM AddrD Reg[rs2] Addr DataR 0
wb
inst[19:15] AddrA DataA Branch 0
Comp. DataW mem
inst[24:20] AddrB DataB 1
inst[31:7]
Imm.
imm[31:0]
Gen
PCSel inst[31:0] ImmSel RegWEn BrUnBrEqBrLT BSel ASel ALUSel MemRW WBSel
CS 61c
40
Adding jal to datapath
Computer Science 61C Spring 2021 Kolb & Weaver
pc+4
alu +4 wb
Reg[] pc
1
alu
DataD Reg[rs1] 2
1 ALU
pc inst[11:7] 0 DMEM 1
pc+4
0 IMEM AddrD Reg[rs2] Addr DataR 0
wb
inst[19:15] AddrA DataA Branch 0
Comp. DataW mem
inst[24:20] AddrB DataB 1
inst[31:7]
Imm.
imm[31:0]
Gen
CS 61c
41
Single-Cycle RISC-V RV32I Datapath
Computer Science 61C Spring 2021 Kolb & Weaver
pc+4
+4 Reg[] pc alu
wb 1
DataD 2
alu 1 Reg[rs1]
0 ALU DMEM
pc inst[11:7] 1
pc+4
0 IMEM AddrD Reg[rs2] Addr DataR 0
wb
inst[19:15] AddrA DataA Branch 0
Comp. DataW mem
inst[24:20] AddrB DataB 1
inst[31:7]
Imm.
imm[31:0]
Gen
PCSel inst[31:0] ImmSel RegWEn BrUnBrEqBrLT BSel ASel ALUSel MemRW WBSel
CS 61c
42
And in Conclusion, …
• Universal datapath
• 5 Phases of execution