120 likes | 248 Views
MR2. Operação do Bloco de Dados e do Bloco de Controle. Fernando Moraes, Ney Calazans, Fabiano Hessel 26/10/2004. Instruções Lógicas e Aritméticas. result. NPC. ce rw. IncPC. Endereço Mem. Dados ‘. NPC. +4. RIN. OP1. IR[20:16]. CY1. ADDU Rd, Rs, Rt SUBU Rd, Rs, Rt
E N D
MR2 Operação do Bloco de Dados e do Bloco de Controle Fernando Moraes, Ney Calazans, Fabiano Hessel26/10/2004
Instruções Lógicas e Aritméticas result NPC ce rw IncPC EndereçoMem. Dados ‘ NPC +4 RIN OP1 IR[20:16] CY1 • ADDU Rd, Rs, Rt • SUBU Rd, Rs, Rt • AND Rd, Rs, Rt • OR Rd, Rs, Rt • XOR Rd, Rs, Rt Memória de Instruções Memória de Dados Rd PC AdRs IR[25:21] Rs IR[20:16] ALU AdRt data RALU MDR outalu CY2 dtPC banco deregistradores PC IR walu CY1 wpc Rt wmdr IR[15:11] OP2 AdRd IR[20:16] CY2 instruction I_address ce/rw IR[15:0] EXT SINAL cte_im Rs comp Rt << 2 IMED salta “0000” & IR[25:0] & “00” IR[25:0] CY2 Rt IR[15:0] EXT ZERO
ULA desloca shamt bits 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 Instruções de Deslocamento result NPC ce rw IncPC EndereçoMem. Dados ‘ NPC +4 RIN OP1 IR[20:16] CY1 • SLL Rd, Rt, shamt • SRL Rd, Rt, shamt Memória de Instruções Memória de Dados Rd PC AdRs IR[25:21] Rs IR[20:16] ALU AdRt data RALU MDR outalu CY2 dtPC banco deregistradores PC IR walu CY1 wpc Rt wmdr IR[15:11] OP2 AdRd IR[20:16] CY2 instruction I_address ce/rw IR[15:0] EXT SINAL cte_im Rs comp Rt << 2 IMED salta “0000” & IR[25:0] & “00” IR[25:0] CY2 Rt IR[15:0] EXT ZERO
SÓ ESTENDE SINAL NA INSTRUÇÃO ADDIU, OUTRAS ESTENDEM ZERO Instruções Lógicas e Aritméticas Imediatas e LUI result NPC ce rw IncPC EndereçoMem. Dados ‘ NPC +4 RIN OP1 IR[20:16] CY1 Memória de Instruções Memória de Dados Rd PC AdRs IR[25:21] Rs IR[20:16] ALU AdRt data RALU MDR outalu CY2 dtPC banco deregistradores PC IR walu CY1 wpc Rt wmdr IR[15:11] OP2 AdRd IR[20:16] CY2 instruction I_address ce/rw IR[15:0] EXT SINAL cte_im Rs comp Rt << 2 IMED salta “0000” & IR[25:0] & “00” IR[25:0] CY2 Rt Não se usa Rs no LUI IR[15:0] EXT ZERO • ADDIU Rt, Rs, Imed16 • ANDI Rt, Rs, Imed16 • ORI Rt, Rs, Imed16 • XORI Rt, Rs, Imed16 • LUI Rt, imed16
Instruções de Leitura da Memória: LBU/LW result NPC ce rw IncPC EndereçoMem. Dados ‘ NPC +4 RIN OP1 IR[20:16] CY1 • LBU Rt, Imed16(Rs) • LW Rt, Imed16(Rs) Memória de Instruções Memória de Dados Rd PC AdRs IR[25:21] Rs IR[20:16] ALU AdRt data RALU MDR outalu CY2 dtPC banco deregistradores PC IR walu CY1 wpc Rt wmdr IR[15:11] OP2 AdRd IR[20:16] CY2 instruction I_address ce/rw IR[15:0] EXT SINAL cte_im Rs comp Rt << 2 IMED salta “0000” & IR[25:0] & “00” IR[25:0] CY2 Rt IR[15:0] EXT ZERO Atenção: na instrução LBU, gravar em MDR o byte LSB e bytes em zero nos 3 MSBs (MUX escondido)!
result NPC ce rw EndereçoMem. Dados ‘ NPC +4 RIN OP1 CY1 Memória de Instruções Memória de Dados Rd PC AdRs Rs ALU AdRt data RALU MDR outalu CY2 dtPC banco deregistradores PC IR walu CY1 Rt wmdr OP2 AdRd CY2 instruction I_address ce/rw cte_im Rt IMED CY2 Atenção: Write back não existe nestas instruções Atenção: carga destes três registradores é útil Instruções de Escrita na Memória: SB/SW IncPC IR[20:16] • SB Rt, Imed16(Rs) (ativar bw) • SW Rt, Imed16(Rs) IR[25:21] IR[20:16] wpc IR[15:11] IR[20:16] IR[15:0] EXT SINAL Rs comp << 2 salta “0000” & IR[25:0] & “00” IR[25:0] Rt IR[15:0] EXT ZERO
Instruções de Comparação – SLT/SLTU result NPC ce rw IncPC EndereçoMem. Dados ‘ NPC +4 RIN OP1 IR[20:16] CY1 • SLT Rd, Rs, Rt • SLTU Rd, Rs, Rt Memória de Instruções Memória de Dados Rd PC AdRs IR[25:21] Rs IR[20:16] ALU AdRt data RALU MDR outalu CY2 dtPC banco deregistradores PC IR walu CY1 wpc Rt wmdr IR[15:11] OP2 AdRd IR[20:16] CY2 instruction I_address ce/rw IR[15:0] EXT SINAL cte_im Rs comp Rt << 2 IMED salta “0000” & IR[25:0] & “00” IR[25:0] CY2 Rt IR[15:0] EXT ZERO IGUAIS ÀS ARITMÉTICAS
CUIDAR: SLT ESTENDE SINAL, SLTIU NÃO ESTENDE Instruções de Comparação Imediatas - SLTI/SLTIU result NPC ce rw IncPC EndereçoMem. Dados ‘ NPC +4 RIN OP1 IR[20:16] CY1 Memória de Instruções Memória de Dados Rd PC AdRs IR[25:21] Rs IR[20:16] ALU AdRt data RALU MDR outalu CY2 dtPC banco deregistradores PC IR walu CY1 wpc Rt wmdr IR[15:11] OP2 AdRd IR[20:16] CY2 instruction I_address IR[15:0] ce/rw EXT SINAL cte_im Rs comp Rt << 2 IMED salta “0000” & IR[25:0] & “00” IR[25:0] CY2 Rt IR[15:0] EXT ZERO • SLTI Rt, Rs, Imed16 • SLTIU Rt, Rs, Imed16
Em função da comparação Rs/Rt, salta ou não Terceiro ciclo: gera o endereço de salto; salta (escreve no PC) dependendo da comparação Rs/Rt Instruções de Salto Condicional result NPC ce rw IncPC EndereçoMem. Dados ‘ NPC +4 RIN OP1 IR[20:16] CY1 • BEQ Rs, Rt, rótulo • BGEZ Rs, rótulo • BLEZ Rs, rótulo • BNE Rs, Rt, rótulo Memória de Instruções Memória de Dados Rd PC AdRs IR[25:21] Rs IR[20:16] ALU AdRt data RALU MDR outalu CY2 dtPC banco deregistradores PC IR walu CY1 wpc Rt wmdr IR[15:11] OP2 AdRd IR[20:16] CY2 instruction I_address ce/rw IR[15:0] EXT SINAL cte_im Rs comp Rt << 2 IMED salta “0000” & IR[25:0] & “00” IR[25:0] CY2 Rt 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 result NPC ce rw IncPC EndereçoMem. Dados ‘ NPC +4 RIN OP1 IR[20:16] CY1 Memória de Instruções Memória de Dados Rd PC AdRs IR[25:21] Rs IR[20:16] ALU AdRt data RALU MDR outalu CY2 dtPC banco deregistradores PC IR walu CY1 wpc Rt wmdr IR[15:11] OP2 AdRd IR[20:16] CY2 instruction I_address ce/rw IR[15:0] EXT SINAL cte_im Rs comp Rt << 2 IMED salta “0000” & IR[25:0] & “00” IR[25:0] CY2 Rt IR[15:0] EXT ZERO • J Imed26
Bloco de Controle • Três primeiros ciclos iguais para todas as instruções