multiplicador e forwarding no mips cmp114 - arquitetura e projeto de sistemas vlsi i andre resende
TRANSCRIPT
Multiplicador e Forwarding no MIPS
CMP114 - Arquitetura e Projeto de Sistemas VLSI I
Andre Resende
Sumário• Objetivos• MIPS Pipeline• Multiplicador
– Implementação– Simulação
• Forwarding– Implementação– Simulação
• Conclusão/Sugestões
Objetivos
• Implementar um multiplicador em hardware e o mecanismo de forwarding na descrição VHDL do processador MIPS com pipeline
• Possibilitar a comparação com o processador FemtoJava
MIPS Pipelined
P C A dd re ss
Instructio nMem ory
Co ntro l
Instruction[15-0]
R e adR e gis te r 1
R e adR e gis te r 2
W riteR e gis te r
W riteD a ta
R e adDa ta 1
R e adDa ta 2
ALU
Zero
A L UR es u lt
S hiftLe ft
2
A d dres s
W riteD a ta
D ataM em ory
R e adD a ta
ADD
4
S ig nE xten d
16 32 A LUC o n tro l
1
0
Mux
0
1
Mux
Re gis ters
Instruction[20-16]Instruction[15-11]
Pipeline
Register
A DDAD D
R es ult
0
1
Mux
6
W B
M
E X
Pipeline
Register
Pipeline
Register
P CS rc
ID/EX
0
1
Mux
A LU O p
R eg D st
A LU S rc
W B
M
E X /M E M
Pipeline
Register
W B
ME M /W B
B r a n c h
M e m R e a d
IF /ID
Multiplicador
• Multiplicador em hardware no processador Mips
• Reuso do código VHDL implementado para o FemtoJava: Multiplicador Booth Paralelo
• 8 bits
• Componente no módulo Execute
Multiplicador – Implementação
• Entradas da ALU foram copiadas para o multiplicador
• Foram criados 2 registradores para armazenar o resultado: Hi e Lo
• Sinal de controle para a multiplicação gerado na unidade de Controle– Sinal de entrada com o functo code
Multiplicador – Implementação
• Componente instanciado dentro da unidade Execute
• Entradas do multiplicador conectadas ao mecanismo de forwarding
1
Multi plica dor
R e a d D a t a
Z e r o
A L U R e s u l t
A L U
A L U C o n t r o l
2 R e a d D a t a
HiLoWrite
Mul_Result
Diagrama de Bloco unidade Execute c/ Multiplicação
mul $4,$3
Simulação Multiplicador
Forwarding
IM Reg
IM Reg
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6
Time (in clock cycles)
sub $2, $1, $3
Programexecution order(in instructions)
and $12, $2, $5
IM Reg DM Reg
IM DM Reg
IM DM Reg
CC 7 CC 8 CC 9
10 10 10 10 10/– 20 – 20 – 20 – 20 – 20
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
Value of register $2 :
DM Reg
Reg
Reg
Reg
X X X – 20 X X X X XValue of EX/MEM :X X X X – 20 X X X XValue of MEM/WB :
DM
Forwarding • Abordagem de Patterson• Algoritmos
– EXE-MEM Hazard: if (EX/MEM.RegWrite
and(EX/MEM.RegisterRd<>0)
and(EX/MEM.RegisterRd = Id/EX.RegisterRs))ForwardA=10
if (EX/MEM.RegWrite
and(EX/MEM.RegisterRd<>0)
and(EX/MEM.RegisterRd = Id/EX.RegisterRt))ForwardB=10
• Algoritmos– MEM-WB Hazard:
if (MEM/WB.RegWrite and(MEM/WB.RegisterRd<>0) and(EX/MEM.RegisterRd<>ID/EX.RegisterRt) and(MEM/WB.RegisterRd = Id/EX.RegisterRs))ForwardA=01 if (MEM/WB.RegWrite and(MEM/WB.RegisterRd<>0) and(EX/MEM.RegisterRd<>ID/EX.RegisterRt) and(MEM/WB.RegisterRd = Id/EX.RegisterRt))ForwardB=01
Forwarding
Forwarding - ControleControle Origem Descrição
ForwardA = 00 ID/EX Operando 1 vem do banco de registradores
ForwardA = 10 EX/MEM Operando 1 é “forwarding” do resultado exatamente anterior da ALU
ForwardA = 01 MEM/WB Operando 1 é “forwarding” da leitura da memória ou resultado ALU anterior
ForwardB = 00 ID/EX Operando 2 vem do banco de registradores
ForwardB = 10 EX/MEM Operando 2 é “forwarding” do resultado exatamente anterior da ALU
ForwardB = 01 MEM/WB Operando 2 é “forwarding” da leitura da memória ou resultado ALU anterior
• Componente dentro da unidade Execute
• Inclusão de 2 multiplexadores: um para a cada entrada ALU em Execute
• Conexão com as saídas de EX/MEM e MEM/WB
Forwarding - Implementação
1
0
1 M u x
A D D A D D
R e s u l t S h i f t L e f t
2
P C + 4
S i g n E x t e n d
R e a d D a t a
S i g n E x t e n d
Z e r o
A L U R e s u l t
A L U
A L U O P A L U
C o n t r o l
A L U S r c
2 R e a d D a t a
0
1 M u x
Reg Dest MEM-WB Reg Dest EXE-MEM
Forward C o n t r o l
0
1 M u x
End Rg D MEM-WB End Rg D EXE-MEM
End Rg 2 ID/Ex
End Rg 1 ID/Ex
Diagrama de Bloco Estagio Execute c/ Forwarding
Ciclo Fetch Decode Execute Memory Write Back
1 lw $3
2 lw $4,20($1) lw $3
3 add $5,$1,$2 lw $4,20($1) lw $3
4 add 6,$2,$3 add $5,$1,$2 lw $4,20($1) lw $3
5 add $3,$2,$1 add $6,$2,$3 add $5,$1,$2 lw $4,20($1) lw $3
6 and $5,$4,$3 add $3,$2,$1 add $6,$2,$3 add $5,$1,$2 lw $4,20($1)
7 or $6,$2,$1 and $5,$4,$3 add $3,$2,$1 add $6,$2,$3 add $5,$1,$2
8 add $7,$4,$5 or $6,$2,$1 and $5,$4,$3and $5,$4,$3 add $3,$2,$1add $3,$2,$1 add $6,$2,$3
9 add $7,$4,$5 or $6,$2,$1or $6,$2,$1 and $5,$4,$3 add $3,$2,$1add $3,$2,$1
10 add $7,$4,$5add $7,$4,$5 or $6,$2,$1 and $5,$4,$3and $5,$4,$3
11 add $7,$4,$5 or $6,$2,$1
add $7,$4,$5
ID: EX: add $7,$4,$5 ME: or $6,$2,$1 WB: $5,$4,$3
108 12
and $5,$4,$3
add $3,$2,$1
Conclusões
• Compreensão código VHDL (1/2 trabalho)
• Velocidade do multiplicador , não afetou o clock da versão pipeline (depende do hardware??)
• Baixa complexidade X dificuldade de implementação
Sugestões
• Multiplicador sensível ao sinal de controle
• Particionamento do multiplicador em ciclos
• Sinal de controle para identificar qdo:Instrução(15-11) Rd