Professional Documents
Culture Documents
CPS104 Lec21.1
GK Spring 2004
Admin.
Homework-4 is posted. Due March. 1st. In class. Midterm Exam March 5th. u In Class u 1 hour u Closed books u Covers all material including Data-path. u Bring SPIM manual and/or Common MIPS Instructions. Wednesday March 3, Review Session u Bring questions about ANY topic we covered in the course.
CPS104 Lec21.2
GK Spring 2004
26 op 6 bits
21 rs 5 bits
lw
u
Addr <- R[rs] + SignExt(imm16) Calculate the memory address R[rt] <- Mem[Addr] Load the data into the register PC <- PC + 4
31
31
CPS104 Lec21.3
GK Spring 2004
Example: lw
0
rt, rs,
rs 5 bits
rt 5 bits
immediate 16 bits
1 Mux 0
ALUctr MemtoReg
0
Rw Ra Rb 32 32-bit Registers
ALU
Mux
32
imm16
16
Data Memory
CPS104 Lec21.4
GK Spring 2004
ExtOp
21 rs 5 bits
mem[PC]
Addr <- R[rs] + SignExt(imm16) Calculate the memory address Mem[Addr] <- R[rt] PC <- PC + 4 Store the register into memory Calculate the next instructions address
CPS104 Lec21.5
GK Spring 2004
21 rs 5 bits
RegDst
1 Mux 0
Rw Ra Rb 32 32-bit Registers
Mux
32 32 WrEn Adr
imm16
16
Data Memory
CPS104 Lec21.6
ExtOp
GK Spring 2004
21 rs 5 bits
else
CPS104 Lec21.7
GK Spring 2004
beq
RegDst
PC
1 Mux 0
ALUctr
imm16 16
Rw Ra Rb 32 32-bit Registers
ALU
Zero
To Instruction Memory
Mux
imm16
16
CPS104 Lec21.8
GK Spring 2004
ExtOp
In theory, the PC is a 32-bit byte address into the instruction memory: u Sequential operation: PC<31:0> = PC<31:0> + 4 u Branch operation: PC<31:0> = PC<31:0> + 4 + SignExt[Imm16] * 4 The magic number 4 always comes up because: u The 32-bit PC is a byte address u And all our instructions are 4 bytes (32 bits) long In other words: u The 2 LSBs of the 32-bit PC are always zeros u There is no reason to have hardware to keep the 2 LSBs In practice, we can simplify the hardware by using a 30-bit PC<31:2>: u Sequential operation: PC<31:2> = PC<31:2> + 1 u Branch operation: PC<31:2> = PC<31:2> + 1 + SignExt[Imm16] u In either case: Instruction-Memory-Address = PC<31:2> concat 00
GK Spring 2004
CPS104 Lec21.9
Using a 30-bit PC: u Sequential operation: PC<31:2> = PC<31:2> + 1 u Branch operation: PC<31:2> = PC<31:2> + 1 + SignExt[Imm16] u In either case: Instruction-Memory-Address = PC<31:2> concat 00
30 30 30 1 Clk imm16 Instruction<15:0> 16 SignExt 00 0 30 Adder Mux Adder Addr<31:2> Addr<1:0> Instruction Memory 32 PC
1 30
30
CPS104 Lec21.10
1 Carry In Adder
00
1 30 30
30
SignExt
CPS104 Lec21.11
GK Spring 2004
j
u
PC<31:2> <- PC<31:28> concat target<26:0> concat <00> Calculate the next instructions address
CPS104 Lec21.12
GK Spring 2004
j
u
Adder SignExt 30
1 30
Jump
Instruction<31:0>
imm16 Instruction<15:0> 16
Branch
CPS104 Lec21.13
Zero
GK Spring 2004
Branch Rd RegDst Rt Rs 5 5 busA 32 0 Mux ALU Rt Jump Clk Instruction Fetch Unit
Rt Zero
Rs
Rd
busW 32 Clk
MemWr
32 32 WrEn Adr
1 32
imm16
Data In 32 Clk
16
Data Memory
ALUSrc
CPS104 Lec21.14
ExtOp
GK Spring 2004
CPS104 Lec21.15
GK Spring 2004
Fetch the instruction from Instruction memory: Instruction <mem[PC] u This is the same for all instructions
30 PC<31:28> Target Instruction<25:0> PC Clk 30 1 4 30 26 0 30 Adder Mux 30 00 1 Mux 0 Addr<31:2> Addr<1:0> Instruction Memory 32
Adder SignExt 30
1 30
imm16 Instruction<15:0> 16
26 rs
21 rt
16 rd
11 shamt
6 funct
RegDst = ?
1 Mux 0
Rt Zero ALU
Rs
Rd
Imm16 MemtoReg = ?
MemWr = ? 0 Mux 32
32 WrEn Adr
imm16
16
Data Memory
ALUSrc = ?
CPS104 Lec21.17
ExtOp = ?
GK Spring 2004
26 rs
21 rt
16 rd
11 shamt
6 funct
RegDst = 1
1 Mux 0
Rt Zero
Rs
Rd
Imm16 MemtoReg = 0
MemWr = 0 0 Mux 32
ALU
32 WrEn Adr
imm16
16
Data Memory
ALUSrc = 0
CPS104 Lec21.18
ExtOp = x
GK Spring 2004
PC <- PC + 4 u This is the same for all instructions except: Branch and Jump
30 PC<31:28> Target Instruction<25:0> PC Clk 30 1 4 30 26 0 30 Adder Mux 30 00 1 Mux 0 Addr<31:2> Addr<1:0> Instruction Memory 32
Adder SignExt 30
1 30
Jump = ?
Instruction<31:0>
imm16 Instruction<15:0> 16
Branch = ? Zero = ?
CPS104 Lec21.19
GK Spring 2004
PC <- PC + 4 u This is the same for all instructions except: Branch and Jump
30 PC<31:28> Target Instruction<25:0> PC Clk 30 1 4 30 26 0 30 Adder Mux 30 00 1 Mux 0 Addr<31:2> Addr<1:0> Instruction Memory 32
Adder SignExt 30
1 30
Jump = 0
Instruction<31:0>
imm16 Instruction<15:0> 16
Branch = 0 Zero = x
CPS104 Lec21.20
GK Spring 2004
26 rs
21 rt
16 immediate
RegDst = ?
1 Mux 0 ALUctr = ?
Rt Zero ALU
Rs
Rd
Imm16 MemtoReg = ?
MemWr = ? 0 Mux 32
32 WrEn Adr
imm16
16
Data Memory
ALUSrc = ?
CPS104 Lec21.21
ExtOp = ?
GK Spring 2004
26 rs
21 rt
16 immediate
RegDst = 0
1 Mux 0 ALUctr = Or
Rt Zero
Rs
Rd
Imm16 MemtoReg = 0
MemWr = 0 0 Mux 32
ALU
32 WrEn Adr
imm16
16
Data Memory
ALUSrc = 1
CPS104 Lec21.22
ExtOp = 0
GK Spring 2004
26 rs
21 rt
16 immediate
RegDst = ?
1 Mux 0
Rt Zero
Rs
Rd
Imm16 MemtoReg = ?
MemWr = ? 0 Mux
ALU
32 WrEn Adr
1 32
imm16
16
Data Memory
ALUSrc = ?
CPS104 Lec21.23
ExtOp = ?
GK Spring 2004
26 rs
21 rt
16 immediate
RegDst = 0
1 Mux 0
Rt Zero
Rs
Rd
Imm16 MemtoReg = 1
MemWr = 0 0 Mux
ALU
32 WrEn Adr
1 32
imm16
16
Data Memory
ALUSrc = 1
CPS104 Lec21.24
ExtOp = 1
GK Spring 2004
26 rs
21 rt
16 immediate
RegDst =
1 Mux 0 5 Rs Rt 5 5
Rt Zero ALU
Rs
Rd
Imm16 MemtoReg =
MemWr = 0 Mux 32
32 WrEn Adr
imm16
16
Data Memory
ALUSrc =
CPS104 Lec21.25
ExtOp =
GK Spring 2004
26 rs
21 rt
16 immediate
RegDst =x
1 Mux 0 Rs Rt 5 5
Rt Zero ALU
Rs
Rd
Imm16 MemtoReg =x
MemWr =1 0 Mux 32
32 WrEn Adr
imm16
16
Data Memory
ALUSrc =1
CPS104 Lec21.26
ExtOp = 1
GK Spring 2004
26 rs
21 rt
16 immediate
RegDst = ?
1 Mux 0
RegWr = ?
Rt
Rs
Rd
Imm16 MemtoReg = ?
busW 32 Clk
32
Mux
imm16
16
CPS104 Lec21.27
ExtOp = ?
GK Spring 2004
26 rs
21 rt
16 immediate
RegDst = x
1 Mux 0
RegWr = 0
Rt Zero ALU
Rs
Rd
Imm16 MemtoReg = x
busW 32 Clk
MemWr = 0 0 Mux 32
32 WrEn Adr
imm16
16
Data Memory
ALUSrc = 0
CPS104 Lec21.28
ExtOp = x
GK Spring 2004
26 rs
21 rt
16 immediate
30 00 Mux
1 30
Instruction<31:0>
imm16 16 Instruction<15:0>
CPS104 Lec21.29
26 rs
21 rt
16 immediate
30 00 Mux
1 30
Instruction<31:0>
imm16 16 Instruction<15:0>
CPS104 Lec21.30
26 target address
RegDst = x
1 Mux 0
Rt
Rs
Rd
Imm16 MemtoReg = x
32
Mux
imm16
16
CPS104 Lec21.31
ExtOp = x
GK Spring 2004
26 target address
Adder SignExt 30
1 30
Jump = 1
Instruction<31:0>
imm16 Instruction<15:0> 16
Branch = X Zero = x
CPS104 Lec21.32
GK Spring 2004