230 likes | 436 Views
Exemplo de arquitetura registrador-registrador- MIPS. MIPS. ISA – todas as instruções de 32 bits, em 3 formatos: Máquina RISC – aritmética registrador-registrador 32 registradores de 32 bits Memória endereçada por 32 bits, organizada em bytes – ou seja,
E N D
MIPS • ISA – todas as instruções de 32 bits, em 3 formatos: • Máquina RISC – aritmética registrador-registrador • 32 registradores de 32 bits • Memória endereçada por 32 bits, organizada em bytes – ou seja, a diferença de endereçamento de uma palavra (32 bits) e outra, da memória, é múltipla de 4. 230 words têm endereços de bytes 0, 4, 8, ... 232-4 op rs rt rd funct R I J op rs rt 16 bit address op 26 bit address
Banco de 32 Registradores do MIPS Notação: sempre usa $ como prefixo $0 . . . $31
Instruções típicas op rs rt rd funct op rs rt 16 bit address op 26 bit address • InstruçãoSignificadoadd $s1,$s2,$s3 $s1 = $s2 + $s3sub $s1,$s2,$s3 $s1 = $s2 – $s3slt $s1,$s2,$s3 se $s2 < $s3 então $s1=1 senão $s1=0 lw $s1,100($s2) $s1 = Memory[$s2+100] sw $s1,100($s2) Memory[$s2+100] = $s1 bne $s4,$s5,L Próx. instr. é no Label se $s4< >$s5 beq $s4,$s5,L Próx. instr. é no Label se $s4 = $s5 j Label Próx. instr. é no Label • Formatos: R I I J 5 6 6 5 5 5 R I J
Instruções aritméticas usando operandos imediatos (constantes) instrução significado addi $29, $29, 4 I andi $29, $29, 6 ori $29, $29, 4 slti $t1, $s1, 2 $29 = $29+ 4 $29 = $29 and 6 $29 = $29 or 4 Se $s1 < 2 então $t1=1 senão $t1=0 Formato: I op rs rd 16 bits imediato
Modos de Endereçamento imediato registrador memória (dados) memória (instrução) memória (instrução)
HARDWARE: Unidades funcionais necessárias Mem.dados Mem. instrução Somador PC Extensão de sinal Banco de registradores ALU
Implementação de MIPS em um único ciclo controle PC regs Mem. instrução Mem. dados
Controle: - decodificação do opcode e geração dos sinais de controle control ALU-control opcode sinais de controle
Fluxo numa instrução aritmética (R-format) RegDst ALUOp Memto Reg ALUSrc
Circuito de Controle (decodificação do opcode e geração dos sinais de controle) 0 0 0 opcode 0 0 0 1 0 0 1 sinais de controle 0 0 0 1 0
Fluxo para a instrução lw LMD (Load Mem. Data)
Circuito de Controle (para lw) 1 0 0 opcode 0 1 1 0 1 1 1 sinais de controle 1 0 0 0 0
Fluxo para a instrução sw SMD – Store Mem. Data
Circuito de Controle (para sw) 1 0 1 opcode 0 1 1 0 1 0 0 sinais de controle 0 1 0 0 0
Circuito de Controle (para beq) 0 0 0 opcode 1 0 0 0 0 0 0 sinais de controle 0 0 1 0 1
Fluxo de dados multiciclo – usando uma única memória para instruções e dados ALUSrcA IorD RegDst MemtoReg ALUSrcB
Passo 1: Busca da instrução (Instruction Fetch) • Usar o PC para a leitura da instrução e carga da mesma no registrador de instrução (Instruction Register). • Incrementar o valor do PC por 4 e carregar o resultado no PC. IR = Memory[PC]; PC = PC + 4;Podemos obter os valores dos sinais de controle?
Passo 2: Decod. da Instrução e Busca de Registradores • Leitura dos registradores rs e rt • Computar o endereço de branch no caso da instrução de branch A = Reg[IR[25-21]]; B = Reg[IR[20-16]]; ALUOut = PC + (sign-extend(IR[15-0]) << 2); • Preparando para acionar as linhas de controle baseadas no tipo de instrução (a instrução está sendo "decodificada" na lógica de controle)
Passo 3 (dependente da instrução) • ALU está realizando uma das três funções, baseadas no tipo de instrução • Referência à memória: ALUOut = A + sign-extend(IR[15-0]); • R-type: ALUOut = A op B; • Branch: if (A==B) PC = ALUOut;
Passo 4 (R-type ou acesso à memória) • Acesso à memória através de loads e stores MDR = Memory[ALUOut]; ou Memory[ALUOut] = B; • Fim das instruções R-type Reg[IR[15-11]] = ALUOut;A escrita é realizada no fim do ciclo, na borda
Passo 5 (Write-back, para instrução load) • Reg[IR[20-16]]= MDR; Fim da instrução load!