Aula 19: UCP: Construindo um Caminho de Dados (Parte III) Diego Passos Universidade Federal Fluminense Fundamentos de Arquiteturas de Computadores Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 1 / 38
Revisão Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 2 / 38
Na Aula Passada Continuamos o projeto do caminho de dados do nosso processador Tomamos várias decisões de projeto Tamanho da palavra Linhas de controle em cada componente Comportamentos específicos de cada componente Número de registradores de propósito geral (Ausência de) ponto flutuante Codificação de números negativos Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 3 / 38
Na Aula Passada (II) Também iniciamos a terceira fase do projeto A interconexão dos componentes Seguindo a estratégia de desenvolvimento incremental, começamos do básico Como implementar a etada de busca de uma instrução Fase comum a qualquer tipo de instrução Demais etapas são específicas de cada tipo de instrução Vimos, por exemplo, como executar uma instrução do tipo R Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 4 / 38
Na Aula Passada (III) RI S o m a d or es 4 RI[25-21] de Leitura 1 PC Memória de Instruções Endereço RI[20-16] Valor Lido 1 Valor Lido 2 de Leitura 2 Zero ALU Resultado Instrução Lida RI[15-11] de Escrita Valor Escrito Controle Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 5 / 38
Na Aula Passada (IV) Este esquemático é quase completo para a execução de instruções do tipo R Mas falta uma coisa: Determinar as linhas de controle da ALU Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 6 / 38
Na Aula de Hoje Eventualmente, veremos como conectar as linhas de entrada da ALU Mas note que operações lógicas/aritméticas também são necessárias para outros tipos de instrução Diferentes do tipo R Como as instruções de desvio condicional Por isso, antes disso, veremos como implementar outras instruções Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 7 / 38
Instruções de Desvio Condicional Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 8 / 38
Instruções de Desvio Condicional Relembrando: Nosso processador simplificado possui apenas uma instrução deste tipo A instrução branch on equal Semântica: Compara dois valores (em registradores) Se forem iguais, altera o valor do PC Se forem diferentes, PC continua apontando para a próxima instrução Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 9 / 38
Instruções de Desvio Condicional (II) Alguns detalhes importantes: A instrução possui formato I Recebe três operandos: 2 registradores, 1 imediato (constante) Se desvio for tomado, PC é incrementado no valor dado pelo imediato Depois do incremento inicial E em unidades do tamanho da instrução Isto é: PC PC + (imm + 1) 4 Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 10 / 38
Branch on Equal: Busca de Operandos RI A instrução compara dois valores Ambos em registradores Especificados nos bits da instrução Logo, o banco de registradores será utilizado Note que a instrução nunca escreve em registrador Não precisamos especifcar o ID do registrador de escrita E nem o valor RI[25-21] RI[20-16] es Valor Lido 1 Valor Lido 2 de Leitura 1 de Leitura 2 de Escrita Valor Escrito Operando 1 Operando 2 Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 11 / 38
Branch on Equal: Execução A execução em si consiste na comparação dos dois valores e no cálculo do novo PC Em caso de desvio Note que nenhum componente visto até aqui realiza comparações Nem mesmo a ALU tem essa funcionalidade Mas podemos alcançar este mesmo efeito usando um truque Repare que nossa ALU tem duas saídas: resultado e o bit zero Bit zero indica se operação realizada deu zero Uma subtração dá zero se, e somente se, os operandos forem iguais Solução: Usamos a ALU para subtrair os dois valores Se o bit zero ficar ativo, valores são iguais Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 12 / 38
Branch on Equal: Execução (II) A interconexão entre o banco de registradores e a ALU é idêntica àquela das instruções R es de Leitura 1 Valor Lido 1 Valor Lido 2 de Leitura 2 Zero ALU Resultado de Escrita Valor Escrito Controle Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 13 / 38
Branch on Equal: Execução (III) Além da comparação, a execução desta instrução faz mais É preciso calcular o novo valor do PC Caso a condição seja verdadeira Relembrando o valor desejado para o PC: PC + (imm + 1) 4 Ou: PC + 4 + imm 4 Note que no processo de busca da próxima instrução já calculávamos PC + 4 Se aproveitarmos aquele resultado, precisamos apenas somá-lo com imm 4 Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 14 / 38
Branch on Equal: Execução (IV) O valor do imediato vem dos 16 bits menos significativos da instrução Multiplicá-lo por 4 é fácil Basta deslocá-lo 2 bits para a esquerda Para somá-lo com PC + 4, poderíamos usar a ALU Mas não vamos porque: Já estamos usando a ALU para fazer a comparação dos dois valores Precisaríamos de outra ALU para isso Mas basta um somador simples Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 15 / 38
Branch on Equal: Execução (V) Resumindo esta parte da execução: 4 S o m a d or RI Deslocamento de 2 à Esquerda S oma d or PC RI[15-0] 16 Extensão de 32 Sinal Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 16 / 38
Branch on Equal: Armazenando o Resultado O resultado de uma instrução de desvio é o novo valor de PC Ou PC + 4, ou PC + 4 + 4 imm Ao final da instrução este valor deve ser armazenado de volta no PC Na etapa de armazenamento de resultado, portanto, precisamos: Decidir entre os dois valores Escrevermos este valor de volta no PC A decisão entre os dois valores é realizada com base no bit zero da saída da ALU Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 17 / 38
Branch on Equal: Armazenando o Resultado (II) 4 S o m a d or RI Deslocamento de 2 à Esquerda S oma d or M ux 0 1 Zero ALU Resultado PC RI[15-0] 16 Extensão de 32 Sinal Controle Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 18 / 38
Branch on Equal: Juntando Tudo 4 S o m a d or RI RI[25-21] RI[20-16] es Valor Lido 1 de Leitura 1 de Leitura 2 Deslocamento de 2 à Esquerda S oma d or M ux 0 1 Valor Lido 2 de Escrita Valor Escrito Zero ALU Resultado PC Memória de Instruções Instrução Lida Endereço RI[15-0] 16 Extensão de 32 Sinal Controle Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 19 / 38
Branch on Equal: Juntando Tudo (II) Assim como ocorreu para as instruções R, este caminho de dados está ainda incompleto As linhas de controle da ALU ainda estão desconectadas Como fizemos anteriormente, vamos deixar estas conexões para mais tarde Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 20 / 38
Instrução Add Immediate Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 21 / 38
Instrução Add Immediate Relembrando: Instrução no formato I Assim como a branch on equal que acabamos de ver Soma valor de um registrador com o imediato Armazena resultado em um registrador De certa forma, essa instrução é uma mistura das instruções R com a instrução de desvio condicional Usa o mesmo formato da de desvio Mas executa uma operação aritmética e armazena resultado em registrador Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 22 / 38
Instrução Add Immediate Nossa implementação para esta instrução vai combinar as soluções já vistas Aproveitar a obtenção do imediato feita para a instrução de desvio Usar o imediato como uma das entradas da ALU O restante da estrutura será idêntica à projetada para as instruções do tipo R Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 23 / 38
Instrução Add Immediate: Busca de Operandos RI RI[25-21] es de Leitura 1 Valor Lido 1 Valor Lido 2 de Leitura 2 de Escrita Valor Escrito Operando 1 Operando 2 RI[15-0] 16 Extensão de 32 Sinal Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 24 / 38
Instrução Add Immediate: Execução Execução é trivial: deixamos por conta da ALU RI RI[25-21] es Valor Lido 1 Valor Lido 2 de Leitura 1 de Leitura 2 de Escrita Valor Escrito Zero ALU Resultado RI[15-0] 16 Extensão de 32 Sinal Controle Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 25 / 38
Instrução Add Immediate: Armazenando o Resultado Simplesmente conectamos a saída da ALU ao valor a ser escrito no banco de registradores ID do registrador para escrita vem diretamente dos bits 20 16 do RI RI RI[25-21] es Valor Lido 1 de Leitura 1 de Leitura 2 RI[20-16] Valor Lido 2 de Escrita Valor Escrito Zero ALU Resultado RI[15-0] 16 Extensão de 32 Sinal Controle Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 26 / 38
Instrução Add Immediate: Juntando Tudo RI es 4 S o m a d or RI[25-21] RI[20-16] Valor Lido 1 Valor Lido 2 de Leitura 1 de Leitura 2 de Escrita Valor Escrito Zero ALU Resultado PC Memória de Instruções Instrução Lida Endereço RI[15-0] 16 Extensão de 32 Sinal Controle Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 27 / 38
Instrução Add Immediate: Juntando Tudo (II) Este caminho de dados é mais um que utiliza a ALU Novamente, não indicamos de onde virão as linhas de controle Assim como fizemos nos outros casos, resolveremos isso depois Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 28 / 38
Instruções de Transferência de Memória Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 29 / 38
Instruções de Transferência de Memória Relembrando: Há duas instruções deste tipo: load word e store word Ambas usam o formato I: dois registradores e um imediato Em ambos os casos, o endereço da MP a ser acessado é dado por uma soma: Valor do primeiro registrador somado ao imediato O segundo registrador é a origem/destino do dado a ser transferido Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 30 / 38
Instruções de Transferência de Memória: Busca de Operandos Na instrução load word, antes da execução, precisamos determinar o endereço a ser acessado Na store word, adicionalmente, precisamos do valor a ser escrito O endereço a ser acessado precisa ser calculado Podemos usar a ALU para isso Ela não será necessária para mais nada nestas instruções Para obter o valor a ser escrito na MP, basta passar o ID do registrador adequado para o banco de registradores Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 31 / 38
Instruções de Transferência de Memória: Busca de Operandos (II) RI RI[25-21] RI[20-16] es Valor Lido 1 de Leitura 1 de Leitura 2 Valor Lido 2 de Escrita Valor Escrito Zero ALU Resultado Endereço RI[15-0] 16 Extensão de 32 Sinal Controle Valor Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 32 / 38
Instruções de Transferência de Memória: Execução Dados o endereço a ser acessado e o valor a ser escrito (no caso da store word), a execução é trivial Trabalho pesado é feito pela interface de acesso à MP RI RI[25-21] RI[20-16] es Valor Lido 1 de Leitura 1 de Leitura 2 Valor Lido 2 de Escrita Valor Escrito Zero ALU Resultado Endereço RI[15-0] 16 Extensão de 32 Sinal Controle Valor Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 33 / 38
Instruções de Transferência de Memória: Execução (II) RI RI[25-21] RI[20-16] es Valor Lido 1 de Leitura 1 de Leitura 2 Valor Lido 2 de Escrita Valor Escrito Zero ALU Resultado Endereço Escrita Leitura Memória de Dados RI[15-0] 16 Extensão de 32 Sinal Controle Valor Valor Lido Endereço Valor Escrito Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 34 / 38
Instruções de Transferência de Memória: Armazenando os Resultados Quais são os resultados da execução das instruções de transferência de memória? No caso da load word, a interface com a MP retornará o valor lido Precisa ser armazenado no registrador adequado No caso da store word o único armazenamento é a própria escrita do dado na MP Tarefa realizada pela interface com a MP Logo, nesta etapa, para a CPU, basta conectar a saída da interface com a MP, à entrada do banco de registradores O ID do registrador vem diretamente dos bits do RI Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 35 / 38
Instruções de Transferência de Memória: Execução (II) RI RI[25-21] RI[20-16] es Valor Lido 1 de Leitura 1 de Leitura 2 Valor Lido 2 de Escrita Valor Escrito Zero ALU Resultado Escrita Leitura Memória de Dados RI[15-0] 16 Extensão de 32 Sinal Controle Valor Lido Endereço Valor Escrito Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 36 / 38
Instruções de Transferência de Memória: Juntando Tudo RI es 4 S o m a d or RI[25-21] RI[20-16] Valor Lido 1 Valor Lido 2 de Leitura 1 de Leitura 2 de Escrita Valor Escrito Zero ALU Resultado Escrita Leitura Memória de Dados PC Memória de Instruções Instrução Lida Endereço RI[15-0] 16 Extensão de 32 Sinal Controle Valor Lido Endereço Valor Escrito Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 37 / 38
Instruções de Transferência de Memória: Juntando Tudo (II) Novamente, ainda não indicamos de onde vêm as linhas de controle da ALU Pior: neste caso temos mais duas desligadas As linhas de escrita e leitura da interface com a MP Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 38 / 38
Instruções de Transferência de Memória: Juntando Tudo (II) Novamente, ainda não indicamos de onde vêm as linhas de controle da ALU Pior: neste caso temos mais duas desligadas As linhas de escrita e leitura da interface com a MP Mais uma vez, vamos deixar isso para a próxima aula! Diego Passos (UFF) UCP: Caminho de Dados (III) FAC 38 / 38