Fernando Moraes, Ney Calazans 26/10/2005 MR3 Operação do Bloco de Dados e do Bloco de Controle Fernando Moraes, Ney Calazans 26/10/2005
Instruções Lógicas e Aritméticas result NPC IncPC ce rw +4 NPC Endereço Mem. Dados ‘ RIN CY1 IR[20:16] OP1 PC Instruções Memória de IR[25:21] AdRs Rd Memória de Dados Rs IR[20:16] AdRt ALU outalu RALU data MDR dtPC banco de registradores CY2 PC IR wpc CY1 Rt walu wmdr IR[15:11] AdRd OP2 IR[20:16] CY2 I_address instruction IR[15:0] EXT SINAL ce/rw cte_im Rs << 2 comp IMED Rt salta IR[25:0] “0000” & IR[25:0] & “00” CY2 Rt IR[15:0] EXT ZERO ADDU Rd, Rs, Rt SUBU Rd, Rs, Rt AND Rd, Rs, Rt OR Rd, Rs, Rt XOR Rd, Rs, Rt NOR Rd, Rs, Rt
Instruções de Deslocamento result NPC IncPC ce rw +4 NPC Endereço Mem. Dados ‘ RIN CY1 IR[20:16] OP1 PC Instruções Memória de IR[25:21] AdRs Rd Memória de Dados Rs IR[20:16] 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 AdRt ALU outalu RALU data MDR dtPC PC IR banco de registradores CY2 wpc CY1 Rt walu wmdr IR[15:11] AdRd OP2 ULA desloca shamt bits IR[20:16] CY2 I_address instruction IR[15:0] EXT SINAL ce/rw cte_im Rs << 2 comp IMED Rt salta IR[25:0] “0000” & IR[25:0] & “00” CY2 Rt IR[15:0] EXT ZERO SLL Rd, Rt, shamt SRL Rd, Rt, shamt
banco de registradores Instruções Lógicas e Aritméticas Imediatas e LUI result NPC IncPC ce rw +4 NPC Endereço Mem. Dados ‘ RIN CY1 IR[20:16] OP1 PC Instruções Memória de IR[25:21] AdRs Rd Memória de Dados Rs IR[20:16] AdRt ALU outalu RALU data MDR dtPC PC IR banco de registradores CY2 wpc CY1 Rt walu wmdr IR[15:11] AdRd OP2 IR[20:16] CY2 I_address instruction IR[15:0] EXT SINAL ce/rw SÓ ESTENDE SINAL NA INSTRUÇÃO ADDIU, OUTRAS ESTENDEM ZERO cte_im Rs << 2 comp IMED Rt salta IR[25:0] “0000” & IR[25:0] & “00” 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 IncPC ce rw +4 NPC Endereço Mem. Dados ‘ RIN CY1 IR[20:16] OP1 PC Instruções Memória de IR[25:21] AdRs Rd Memória de Dados Rs IR[20:16] AdRt ALU outalu RALU data MDR dtPC PC IR banco de registradores CY2 wpc CY1 Rt walu wmdr IR[15:11] AdRd OP2 IR[20:16] CY2 I_address instruction IR[15:0] EXT SINAL ce/rw cte_im Rs << 2 comp IMED Rt salta IR[25:0] “0000” & IR[25:0] & “00” CY2 Rt IR[15:0] EXT ZERO wmdr ce rw bw Mem. de Dados MDR x“000000” & data LBU Rt, Imed16(Rs) LW Rt, Imed16(Rs) Atenção: na instrução LBU, gravar em MDR o byte LSB e bytes em zero nos 3 MSBs
Instruções de Escrita na Memória: SB/SW RIN outalu data Rt wmdr CY1 ce rw Endereço Mem. Dados ‘ ce/rw walu dtPC instruction I_address NPC OP1 PC OP2 result CY2 Rs +4 Instruções Memória de RALU IR Memória de Dados IMED MDR banco de registradores AdRt AdRs AdRd Rd cte_im ALU Atenção: Write back não existe nestas instruções IncPC IR[20:16] Atenção: carga destes três registradores é útil IR[25:21] IR[20:16] wpc IR[15:11] IR[20:16] IR[15:0] EXT SINAL Rs << 2 comp salta IR[25:0] “0000” & IR[25:0] & “00” Rt IR[15:0] EXT ZERO SB Rt, Imed16(Rs) (ativar bw) SW Rt, Imed16(Rs)
Instruções de Comparação – SLT/SLTU result NPC IncPC ce rw +4 NPC Endereço Mem. Dados ‘ RIN CY1 IR[20:16] OP1 PC Instruções Memória de IR[25:21] AdRs Rd Memória de Dados Rs IR[20:16] AdRt ALU outalu RALU data MDR dtPC CY2 PC IR banco de registradores wpc CY1 Rt walu wmdr IR[15:11] AdRd OP2 IR[20:16] CY2 I_address instruction IR[15:0] EXT SINAL ce/rw cte_im Rs << 2 comp IMED Rt salta IR[25:0] “0000” & IR[25:0] & “00” CY2 Rt IR[15:0] EXT ZERO SLT Rd, Rs, Rt SLTU Rd, Rs, Rt IGUAIS ÀS ARITMÉTICAS
banco de registradores Instruções de Comparação Imediatas - SLTI/SLTIU result NPC IncPC ce rw +4 NPC Endereço Mem. Dados ‘ RIN CY1 IR[20:16] OP1 PC Instruções Memória de IR[25:21] AdRs Rd Memória de Dados CUIDAR: SLT ESTENDE SINAL, SLTIU NÃO ESTENDE Rs IR[20:16] AdRt ALU outalu RALU data MDR dtPC banco de registradores CY2 PC IR wpc CY1 Rt walu wmdr IR[15:11] AdRd OP2 IR[20:16] CY2 I_address instruction IR[15:0] EXT SINAL ce/rw cte_im Rs << 2 comp IMED Rt salta IR[25:0] “0000” & IR[25:0] & “00” CY2 Rt IR[15:0] EXT ZERO SLTI Rt, Rs, Imed16 SLTIU Rt, Rs, Imed16
Instruções de Salto Condicional result 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 NPC IncPC ce rw +4 NPC Endereço Mem. Dados ‘ RIN CY1 IR[20:16] OP1 PC Instruções Memória de AdRs Rd Memória de Dados IR[25:21] Rs IR[20:16] AdRt ALU outalu RALU data MDR dtPC banco de registradores CY2 PC IR wpc CY1 Rt walu wmdr IR[15:11] AdRd OP2 IR[20:16] CY2 I_address instruction IR[15:0] EXT SINAL ce/rw cte_im Rs << 2 comp IMED Rt salta IR[25:0] “0000” & IR[25:0] & “00” CY2 Rt IR[15:0] EXT ZERO BEQ Rs, Rt, rótulo BGEZ Rs, rótulo BLEZ Rs, rótulo BNE Rs, Rt, rótulo
Instruções de Salto Incondicional J result NPC IncPC ce rw +4 NPC Endereço Mem. Dados ‘ RIN CY1 IR[20:16] OP1 PC Instruções Memória de IR[25:21] AdRs Rd Memória de Dados Rs IR[20:16] AdRt ALU outalu RALU data MDR dtPC CY2 PC IR banco de registradores Cuidado! Para simplificar este bloco, concatenação dos 4 bits superiores do PC para gerar endereço de salto é feita na ALU. wpc CY1 Rt walu wmdr IR[15:11] AdRd OP2 IR[20:16] CY2 I_address instruction IR[15:0] EXT SINAL ce/rw cte_im Rs << 2 comp IMED Rt salta IR[25:0] “0000” & IR[25:0] & “00” CY2 Rt IR[15:0] EXT ZERO J Imed26
Exercício JAL Imed26 JALR Rd, Rs JR Rs
Multiplicação e Divisão Usar div/mod Consome 3 ciclos de clock para gravar no Lo e Hi
Banco de Registradores
Bloco de Controle Três primeiros ciclos iguais para todas as instruções