Escolar Documentos
Profissional Documentos
Cultura Documentos
IAC Aula26 MIPS-Multicycle2
IAC Aula26 MIPS-Multicycle2
MemToReg
SignImm
15:0
Sign Extend
1
18/06/2021
• Seleção de Muxes
PCSrc Selects
Main ALUSrcB1:0
Opcode5:0 Controller ALUSrcA
• Enable
(FSM)
PCWrite
MemWrite
IRWrite
RegWrite
Enables
• ALUOp1:0
Branch
ALUOp1:0
2
18/06/2021
SignImm
15:0
Sign Extend
3
18/06/2021
ALUSrcB1:0
PCEn PCSrc
1
010
CLK CLK CLK 0 (add)
CLK CLK 0
0 SrcA 0
0 WE 25:21 WE3 A Zero CLK
PC' PC RD Instr A1 RD1 1 0
0 Adr A 01
ALU
20:16 B ALUResult ALUOut
EN EN A2 RD2 00 1
1 X
Instr / Data 1 20:16 4 01 SrcB
1 0
Memory 15:11 A3 10
CLK 1 X Register
WD 11
0 File
Data WD3
1
<<2
SignImm
15:0
Sign Extend
S0-2: IncPC: Em paralelo com o Fetch, é calculado PC' = PC + 4: S0: Fetch + IncPC
ALUSrcA = 0 => SrcA = PC; ALUSrcB = 01 => SrcB = 4; IorD = 0
IRWrite
ALUOp = 00 => ALUControl = 010 (soma). AluSrcA = 0
ALUSrcB = 01
➢ PC será atualizado com PC', fazendo: ALUOp = 00
PCSrc = 0 => PC' = ALUResult; PCSrc = 0
PCWrite
PCWrite activo => PCEn = 1.
© A. Nunes da Cruz IAC - MIPS - Multicycle: Unidade de Controlo 6/29
fetch
PC current=PC PC = PC+4
Mem
data
decode
RF
outputs
A,B
execute
ALU
result
PC + 4 Write back
ALUout
IRWrite,
PCWrite
4
18/06/2021
ALUSrcB1:0
PCEn
ALU
20:16 B ALUResult ALUOut
EN A EN A2 00 1
1 X RD2
Instr / Data 0 20:16 4 01 SrcB
0 0
Memory 15:11 A3 10
CLK 1 X Register
WD 11
0 File
Data WD3
1
<<2
SignImm
15:0
Sign Extend
A fase de descodificação (UC) usa o opcode da instrução para decidir o que fazer a seguir.
Não são necessários sinais de controlo nesta fase. Todavia, a FSM deve aguardar um ciclo
de clock para que as operações de leitura (RF) e descodificação se completem.
© A. Nunes da Cruz IAC - MIPS - Multicycle: Unidade de Controlo 8/29
fetch
PC current=PC PC = PC+4
Mem
data
decode
RF
outputs
execute
ALU
result
PC + 4 Write back
ALUout
IRWrite,
PCWrite
A FSM aguarda um ciclo de clock para que as operações de leitura (RF) e descodificação se completem.
© A. Nunes da Cruz IAC - MIPS - Multicycle: Unidade de Controlo 9/29
5
18/06/2021
ALUSrcB1:0
PCEn IorD MemWrite IRWrite RegDst MemToReg RegWrite ALUSrcA ALUControl2:0 PCSrc
010
CLK CLK CLK 1 (add)
CLK CLK
0 SrcA
X WE 25:21 WE3 A Zero CLK X
PC' PC Adr Instr A1 RD1 1 0
0 RD 10
ALU
20:16 B ALUResult ALUOut
EN A EN A2 RD2 00 1
1 X
Instr / Data 0 20:16 4 01 SrcB
0 0
Memory 15:11 A3 10
CLK 1 X Register
WD 11
0 File
Data WD3
1
<<2
SignImm
15:0
Sign Extend lw rt, imm(rs)
lw rt,imm(rs)
© A. Nunes da Cruz IAC - MIPS - Multicycle: Unidade de Controlo 11/29
6
18/06/2021
PCEn IorD MemWrite IRWrite RegDst MemToReg RegWrite ALUSrcA ALUSrcB1:0 ALUControl2:0 PCSrc
ALU
20:16
EN A EN A2 RD2 00 ALUResult
1 1
0
Instr / Data 0 20:16 4 01 SrcB
0 0
Memory 15:11 A3 10 ALUOut
CLK 1 1 Register
WD 11
0 File
Data WD3
1
<<2
SignImm
15:0
Sign Extend
lw rt,imm(rs)
Mem IR = M( PC )
data PC = PC+4
decode
RF
outputs A = R(Rs), B = R(Rt)
A, B
execute
ALU
Data address
result ALUout =
A + SExt(imm)
ALUout Data address
memory
Mem
data Data = M( ALUout )
MemWriteback
Data Data to Rt
At the rising
PCWrite, IorD edge of CLK:
RegWrite
IRWrite R(Rt) = Data
7
18/06/2021
IorD = 1
IorD = 1
MemWrite
S4: Mem
Writeback
RegDst = 0
MemToReg = 1
RegWrite
sw rt,imm(rs)
© A. Nunes da Cruz IAC - MIPS - Multicycle: Unidade de Controlo 14/29
PCEn IorD MemWrite IRWrite RegDst MemToReg RegWrite ALUSrcA ALUSrcB1:0 ALUControl2:0 PCSrc
SignImm
15:0
Sign Extend
sw rt, imm(rs)
8
18/06/2021
Mem IR = M(PC)
data PC = PC+4
decode
RF
outputs A = R(Rs), B = R(Rt)
A, B
execute
ALU
Data address
output ALUOut =
A + SExt(imm)
ALUout Data address
memory
Mem
B to M
data
M(ALUout) = R(Rt)
Mem Write
PCWrite,
IRWrite At the rising edge of CLK:
IorD MemWrite M(ALUout) = R(Rt)
IorD = 1
IorD = 1
RegDst = 1
MemToReg = 0
S7: O valor em ALUOut é escrito no
MemWrite
RegWrite Banco de Registos:
RegDst = 1, seleciona o registo rd.
S4: Mem
Writeback MemToReg = 0, o valor WD3 vem do
registo ALUOut.
RegDst = 0
MemToReg = 1 RegWrite é activado para escrever,
RegWrite
completando a execução.
© A. Nunes da Cruz IAC - MIPS - Multicycle: Unidade de Controlo 17/29
9
18/06/2021
001
CLK CLK CLK 1
CLK CLK 1 (or)
0 SrcA
X WE 25:21 WE3 A Zero CLK X
PC' PC Adr Instr A1 RD1 1 0
0 RD B 00
ALU
20:16 ALUResult
EN A EN A2 RD2 00 1
1 1
Instr / Data 0 20:16 4 01 SrcB
0 0
Memory 15:11 A3 10 ALUOut
CLK 1 0 Register
WD 11
0 File
Data WD3
1
<<2
SignImm
15:0
Sign Extend
or rd,rs,rt
fetch
PC current=PC PC = PC+4
IR = M( PC )
Mem PC = PC+4
data
decode
RF
outputs A = R(Rs), B = R(Rt)
A,B
execute
ALU
result
PC + 4 ALUOut = ( A Op B )
ALUWriteback
ALUout A op B
IRWrite,
PCWrite At the rising edge of CLK:
R(Rd) = ALUout
RegWrite
10
18/06/2021
PCEn IorD MemWrite IRWrite RegDst MemToReg RegWrite ALUSrcA ALUControl2:0 Branch PCWrite PCSrc
1
010(add)
CLK CLK CLK 0 1
CLK CLK SrcA 110(sub)
0
X WE 25:21 WE3 A Zero CLK 1
PC' PC Adr Instr A1 RD1 1
0 RD B 11 00 0
ALU
A
20:16
A2 RD2 00 ALUResult
EN EN 1
1 X SrcB
1 Instr / Data 0 20:16 4 01
0
Memory 15:11 A3 10 ALUOut
CLK 1 X Register
WD 11
0 File
Data WD3
1
<<2
SignImm
15:0
Sign Extend
beq rs,rt,imm
11
18/06/2021
fetch
PC current=PC PC = PC+4 PC' = BTA PC = BTA
Mem IR = M(PC)
data PC = PC+4
decode
RF
outputs
A = R(Rs), B = R(Rt)
A,B
execute
ALU
result
ALUOut = BTA =
PC + 4 PC+4+Simm<<2 A == B? PC+4 + SExt(imm)<<2
ALUout BTA
A ALU é usada nos 3 IRWrite,
ciclos: PCWrite
RegDst = 1
IorD = 1 IorD = 1
MemToReg = 0
MemWrite
RegWrite
S4: Mem
Writeback
RegDst = 0
MemToReg = 1
RegWrite
O número de ciclos depende da instrução!
© A. Nunes da Cruz IAC - MIPS - Multicycle: Unidade de Controlo 23/29
12
18/06/2021
addi rt,rs,imm
© A. Nunes da Cruz IAC - MIPS - Multicycle: Unidade de Controlo 24/29
010
MemToReg
RegDst
SignImm
15:0
Sign Extend addi rt,rs,imm
S10
S10: O valor em ALUOut é escrito no Banco de Registos. RegDst = 0 seleciona o registo destino rt. RegDst = 0
MemToReg = 0
MemToReg = 0, significa que o valor a escrever em WD3 vem de ALUOut. RegWrite
RegWrite é activado para escrever no RF, completando a execução da instrução do tipo-I.
© A. Nunes da Cruz IAC - MIPS - Multicycle: Unidade de Controlo 25/29
13
18/06/2021
IorD MemWrite IRWrite RegDst MemtoReg RegWrite ALUSrcA ALUControl2:0 Branch PCWrite PCSrc1:0
ALUSrcB1:0
PCEn
1
ALU
Adr 20:16 B ALUResult ALUOut
EN A EN A2 RD2 00 01
1
Instr / Data 0 20:16 4 01 SrcB
1 0 10
Memory 15:11 A3 10 PCJump
CLK 1 Register
WD 11 (JTA)
0 File
Data WD3
1
<<2 27:0
<<2
SignImm
15:0
Sign Extend
25:0 (jump)
JTA = (PC+4)31:28 : (Imm25:0<<2)
Op = SW
Op = LW S7: ALU
S3:
S5: MemWrite
Writeback S10: ADDI
MemRead Writeback
RegDst = 1 RegDst = 0
IorD = 1
IorD = 1 MemToReg = 0 MemToReg = 0
MemWrite
RegWrite RegWrite
S4: Mem
Writeback
RegDst = 0
MemToReg = 1
RegWrite
14
18/06/2021
Jump MemToReg
Control
MemWrite
Unit
Branch
PCSrc
ALUControl2:0
31:26
Op ALUSrc
5:0
Funct RegDst
RegWrite
CLK CLK
CLK
0 25:21 WE3 SrcA Zero WE
0 PC' PC Instr A1 RD1 0 Result
1 A RD
ALU
1 ALUResult ReadData
A RD 1
Instruction 20:16
A2 RD2 0 SrcB Data
Memory
A3 1 Memory
Register WriteData
WD3 WD
File
20:16
PCJump 0
15:11
1
WriteReg4:0
PCPlus4
+
SignImm
4 15:0 <<2
Sign Extend PCBranch
+
27:0 31:28
25:0
<<2
ImmExt
15:0
Sign Extend
25:0 (Addr)
15