mr3 operação do bloco de dados e do bloco de controle fernando moraes, ney calazans 26/10/2005
TRANSCRIPT
MR3Operação do Bloco de
Dados e do Bloco de Controle
Fernando Moraes, Ney Calazans
26/10/2005
wpc
IR[20:16]
IR[25:21]
IR[15:11]
IR[20:16]
IncPC
IR[25:0]
IR[15:0]
IR[20:16]RIN
outalu data
Rt
wmdrCY1
ce rw
EndereçoMem. Dados
‘
ce/rw
walu
dtPC
instruction I_address
NPC
OP1CY1PC
OP2
result
CY2
CY2
CY2
Rt
Rs
PC
+4
Me
mó
ria d
e
Ins
truç
õe
s
RALUIR
Me
mó
ria d
e
Da
do
sNPC
EXT SINAL
IMED
MDRbanco de
registradores
AdRt
AdRs
AdRd
Rd
<< 2
cte_im
AL
U
Instruções Lógicas e Aritméticas
• ADDU Rd, Rs, Rt• SUBU Rd, Rs, Rt• AND Rd, Rs, Rt• OR Rd, Rs, Rt• XOR Rd, Rs, Rt• NOR Rd, Rs, Rt
Rs
co
mp
Rt
salta
“0000” & IR[25:0] & “00”
IR[15:0] EXT ZERO
wpc
IR[20:16]
IR[25:21]
IR[15:11]
IR[20:16]
IncPC
IR[20:16]RIN
outalu data
Rt
wmdrCY1
ce rw
EndereçoMem. Dados
‘
ce/rw
walu
dtPC
instruction I_address
NPC
OP1CY1PC
OP2
result
CY2
CY2
CY2
Rt
Rs
PC
+4
Me
mó
ria d
e
Ins
truç
õe
s
RALUIR
Me
mó
ria d
e
Da
do
sNPC
IMED
MDRbanco de
registradores
AdRt
AdRs
AdRd
Rd
cte_im
AL
U
Instruções de Deslocamento
• SLL Rd, Rt, shamt
• SRL Rd, Rt, shamt
Rs
Rt
salta
co
mp
ULA desloca shamt bits
IR[25:0]
IR[15:0] EXT SINAL
<< 2
“0000” & IR[25:0] & “00”
IR[15:0] EXT ZERO
Notar: extensão de sinal é inútil, mas usar ela evita entrada adicional no mux
Notar: registrador interno Rs é usado para conter Rt, pois o interno Rt compartilha entrada da ALU com Imed
wpc
IR[20:16]
IR[25:21]
IR[15:11]
IR[20:16]
IncPC
IR[15:0]
IR[20:16]RIN
outalu data
Rt
wmdrCY1
ce rw
EndereçoMem. Dados
‘
ce/rw
walu
dtPC
instruction I_address
NPC
OP1CY1PC
OP2
result
CY2
CY2
CY2
Rt
Rs
PC
+4
Me
mó
ria d
e
Ins
truç
õe
s
RALUIR
Me
mó
ria d
e
Da
do
sNPC
IMED
MDRbanco de
registradores
AdRt
AdRs
AdRd
Rd
cte_im
AL
U
Instruções Lógicas e Aritméticas Imediatas e LUI
• ADDIU Rt, Rs, Imed16• ANDI Rt, Rs, Imed16• ORI Rt, Rs, Imed16• XORI Rt, Rs, Imed16• LUI Rt, imed16
Não se usa Rs no LUI
Rs
Rt
salta
co
mp
IR[25:0]
EXT SINAL
<< 2
“0000” & IR[25:0] & “00”
IR[15:0] EXT ZERO
SÓ ESTENDE SINAL NA INSTRUÇÃO
ADDIU, OUTRAS ESTENDEM ZERO
wpc
IR[20:16]
IR[25:21]
IR[15:11]
IR[20:16]
IncPC
IR[20:16]RIN
outalu data
Rt
wmdrCY1
ce rw
EndereçoMem. Dados
‘
ce/rw
walu
dtPC
instruction I_address
NPC
OP1CY1PC
OP2
result
CY2
CY2
CY2
Rt
Rs
PC
+4
Me
mó
ria d
e
Ins
truç
õe
s
RALUIR
Me
mó
ria d
e
Da
do
sNPC
IMED
MDRbanco de
registradores
AdRt
AdRs
AdRd
Rd
cte_im
AL
U
Instruções de Leitura da Memória: LBU/LW
• LBU Rt, Imed16(Rs)• LW Rt, Imed16(Rs)
Rs
Rt
salta
co
mp
IR[25:0]
IR[15:0] EXT SINAL
<< 2
“0000” & IR[25:0] & “00”
IR[15:0] EXT ZERO
Atenção: na instrução LBU, gravar em MDR o byte LSB e bytes em zero nos 3 MSBs
wmdr
ce rw bw
Me
m.
de
D
ad
os
MDR
x“000000” & data
Atenção: Write back não existe nestas instruções
Atenção: carga destes três registradores é útil
wpc
IR[20:16]
IR[25:21]
IR[15:11]
IR[20:16]
IncPC
IR[20:16]RIN
outalu data
Rt
wmdrCY1
ce rw
EndereçoMem. Dados
‘
ce/rw
walu
dtPC
instruction I_address
NPC
OP1CY1PC
OP2
result
CY2
CY2
CY2
Rt
Rs
PC
+4
Me
mó
ria d
e
Ins
truç
õe
s
RALUIR
Me
mó
ria d
e
Da
do
sNPC
IMED
MDRbanco de
registradores
AdRt
AdRs
AdRd
Rd
cte_im
AL
U
Instruções de Escrita na Memória: SB/SW
• SB Rt, Imed16(Rs) (ativar bw)
• SW Rt, Imed16(Rs)
Rs
Rt
salta
co
mp
IR[25:0]
IR[15:0] EXT SINAL
<< 2
“0000” & IR[25:0] & “00”
IR[15:0] EXT ZERO
wpc
IR[20:16]
IR[25:21]
IR[15:11]
IR[20:16]
IncPC
IR[20:16]RIN
outalu data
Rt
wmdrCY1
ce rw
EndereçoMem. Dados
‘
ce/rw
walu
dtPC
instruction I_address
NPC
OP1CY1PC
OP2
result
CY2
CY2
CY2
Rt
Rs
PC
+4
Me
mó
ria d
e
Ins
truç
õe
s
RALUIR
Me
mó
ria d
e
Da
do
sNPC
IMED
MDRbanco de
registradores
AdRt
AdRs
AdRd
Rd
cte_im
AL
U
Instruções de Comparação – SLT/SLTU
• SLT Rd, Rs, Rt
• SLTU Rd, Rs, Rt
IGUAIS ÀS ARITMÉTICAS
Rs
Rt
salta
co
mp
IR[25:0]
IR[15:0] EXT SINAL
<< 2
“0000” & IR[25:0] & “00”
IR[15:0] EXT ZERO
CUIDAR: SLT ESTENDE SINAL, SLTIU NÃO ESTENDE
wpc
IR[20:16]
IR[25:21]
IR[15:11]
IR[20:16]
IncPC
IR[15:0]
IR[20:16]RIN
outalu data
Rt
wmdrCY1
ce rw
EndereçoMem. Dados
‘
ce/rw
walu
dtPC
instruction I_address
NPC
OP1CY1PC
OP2
result
CY2
CY2
CY2
Rt
Rs
PC
+4
Me
mó
ria d
e
Ins
truç
õe
s
RALUIR
Me
mó
ria d
e
Da
do
sNPC
IMED
MDRbanco de
registradores
AdRt
AdRs
AdRd
Rd
cte_im
AL
U
Instruções de Comparação Imediatas - SLTI/SLTIU
• SLTI Rt, Rs, Imed16• SLTIU Rt, Rs, Imed16
Rs
Rt
salta
co
mp
IR[25:0]
EXT SINAL
<< 2
“0000” & IR[25:0] & “00”
IR[15:0] EXT ZERO
Terceiro ciclo: gera o endereço de salto; salta (escreve no PC) dependendo da
comparação Rs/Rt
wpc
IR[20:16]
IR[25:21]
IR[15:11]
IR[20:16]
IncPC
IR[20:16]RIN
outalu data
Rt
wmdrCY1
ce rw
EndereçoMem. Dados
‘
ce/rw
walu
dtPC
instruction I_address
NPC
OP1CY1PC
OP2
result
CY2
CY2
CY2
Rt
Rs
PC
+4
Me
mó
ria d
e
Ins
truç
õe
s
RALUIR
Me
mó
ria d
e
Da
do
sNPC
IMED
MDRbanco de
registradores
AdRt
AdRs
AdRd
Rd
cte_im
AL
U
Instruções de Salto Condicional
• BEQ Rs, Rt, rótulo
• BGEZ Rs, rótulo
• BLEZ Rs, rótulo
• BNE Rs, Rt, rótulo
Em função da comparação Rs/Rt,
salta ou não
Rs
Rt
salta
co
mp
IR[25:0]
IR[15:0] EXT SINAL
<< 2
“0000” & IR[25:0] & “00”
IR[15:0] EXT ZERO
Cuidado! Para simplificar este bloco, concatenação dos 4 bits superiores do PC
para gerar endereço de salto é feita na ALU.
Instruções de Salto Incondicional J
wpc
IR[20:16]
IR[25:21]
IR[15:11]
IR[20:16]
IncPC
IR[20:16]RIN
outalu data
Rt
wmdrCY1
ce rw
EndereçoMem. Dados
‘
ce/rw
walu
dtPC
instruction I_address
NPC
OP1CY1PC
OP2
result
CY2
CY2
CY2
Rt
Rs
PC
+4
Me
mó
ria d
e
Ins
truç
õe
s
RALUIR
Me
mó
ria d
e
Da
do
sNPC
IMED
MDRbanco de
registradores
AdRt
AdRs
AdRd
Rd
cte_im
AL
U
• J Imed26
Rs
Rt
salta
co
mp
IR[25:0]
IR[15:0] EXT SINAL
<< 2
“0000” & IR[25:0] & “00”
IR[15:0] EXT ZERO
Exercício • JAL Imed26• JALR Rd, Rs• JR Rs
wmdr wpc CY1
CY2
Rt
CY2
Rs
banco de
registradores
AdRt
AdRs IR[20:16]
IR[25:21]
AdRd
IR[15:11]
IR[20:16]
ce rw bw
D_a
dd
res
s
PC
+4
ce/rw
Mem
óri
a d
e
Instr
uçõ
es
wreg
outalu
walu
AL
U
RALU
dtPC IR
instruction I_address
IncPC NPC
OP1 CY1 PC
data
Mem
óri
a
de D
ado
s
NPC
EXT SINAL
CY2
IMED
OP2
MDR
Rt
result
Rd
IR[25:0]
IR[15:0]
IR[20:16]
<< 2
RIN
cte_im
Rs
co
mp
ara
do
r Rt
salta
“0000” & IR[25:0] & “00”
EXT ZERO
x“000000” & data
Hi
Lo
wreg
MULT
DIV
“11111”
Multiplicação e Divisão
wmdr wpc CY1
CY2
Rt
CY2
Rs
banco de
registradores
AdRt
AdRs IR[20:16]
IR[25:21]
AdRd
IR[15:11]
IR[20:16]
ce rw bw
D_a
dd
res
s
PC
+4
ce/rw
Mem
óri
a d
e
Instr
uçõ
es
wreg
outalu
walu
AL
U
RALU
dtPC IR
instruction I_address
IncPC NPC
OP1 CY1 PC
data
Mem
óri
a
de D
ado
s
NPC
EXT SINAL
CY2
IMED
OP2
MDR
Rt
result
Rd
IR[25:0]
IR[15:0]
IR[20:16]
<< 2
RIN
cte_im
Rs
co
mp
ara
do
r Rt
salta
“0000” & IR[25:0] & “00”
EXT ZERO
x“000000” & data
Hi
Lo
wreg
MULT
DIV
“11111”
• Divisão:• Usar div/mod• Consome 3 ciclos de clock para
gravar no Lo e Hi
Banco de Registradores
AdRs
32 registradores de 32 bits
Decodificador 5 32
REG0 REG1 REG2 REG3 REG4
...
REG28 REG29 REG30 REG31
clock reset
Rd
32
5
enable
wreg
32
32
32 Rs
AdRt AdRd
Rt
Bloco de Controle
• Três primeiros ciclos iguais para todas as instruções
Reset=’1’ (todos os
registradores são zerados)
Swbk wreg wpc
Sfetch CY1
Sld ce wmdr
IR=LBU/LW
Sst rw0, ce, wpc bw0 se IR=SB
Ssalta wpc wreg se IR=JAL/JALR
Sreg CY2 Init_mul se IR=MULTU
IR=SB/ SW IR =J/JAL/JALR/JR /BEQ/
BGEZ/BLEZ/BNE
Sidle
Salu wAlu
Caso geral
Reset=’1’
Reset=’0’
IR=MULTU e End_mul=’0’
(IR=DIVU) ou (IR=MULTU e End_mul=’1’)
wPC