Processadores – Aula 01 Professor: André Luis Meneses Silva E-mail/msn: [email protected] Página: www.dcomp.ufs.br/index.php/docentes:Andre Agenda RISC vs CISC Processadores Execução de uma instrução Convenções Lógicas de Projeto Metodologia de Clocking Construindo um caminho de dados. RISC vs CISC Um pouco de história... Durante o final da década de 70, houve experimentos com processadores que faziam uso de instruções muito complexas possibilitadas através de interpretador. Os pesquisadores ainda tentavam fechar a lacuna entre o que as máquinas podiam fazer e o que as linguagens de programação de alto nível demandavam. Por outro lado, a IBM trabalhou em um minicomputador de alto desempenho, denominado 801, que pregava o contrário, ou seja, instruções bastante simples, sem uso de interpretador. RISC vs CISC Em 1980, David Patterson e Carlo Séquin começaram a projetar chips para CPU e cunharam o termo RISC para os chips que produziram. Em 1984, Hennessy projetou e fabricou o MIPS. A partir daí começou a diferenciação e a guerra entre os defensores do CISC e RISC. RISC vs CISC CISC (Complex Instruction Set Computer) RISC (Reduced Instruction Set Computer) Se caracteriza por possuir um conjunto de instruções bastante complexo. Possui uma quantidade muito maior de instruções. Possui uma quantidade menor de registradores. Se caracteriza por possuir um conjunto de instruções bastante simples. Possui uma quantidade pequena de instruções. Possui muitos registradores Mas afinal quem venceu a batalha? RISC vs CISC Embora processadores RISC, na época, possuíssem desempenho muito superior aos do CISC, os CISC não foram derrotados. Várias empresas já tinham desenvolvidos projetos de software completos para processadores CISC. A Intel, grande fabricante de processadores CISC, adequou as idéias da arquitetura RISC em sua arquitetura CISC. Desde os 486, os processadores Intel são híbridos, possuindo um núcleo RISC para instruções mais simples e um núcleo CISC para as instruções mais complexas. Processadores CPU (Unidade Central de processamento) “Cérebro” do computador Executar programas armazenados na memória principal. Os componentes de um sistema computacional são ligados através de um barramento. Barramento é um conjunto de fios paralelos que transmitem endereços, dados e sinais de controle. Barramentos podem ser: Externos à CPU. Internos à CPU. Processadores Elementos de uma CPU Unidade de controle Responsável por buscar instruções na memória principal e determinar o seu tipo. Caminho de Dados: Elementos que manipulam ou armazenam dados. Unidade Lógica e Aritmética (ALU) Responsável por efetuar as operações de adição, subtração, and, or, etc. Registradores Memórias locais de alta velocidade. Cache Organização de um computador: Visão Geral CPU CPU: Execução de Instrução Passos: Trazer a próxima instrução da memória até o registrador. Alterar o contador do programa para indicar a próxima instrução. Determinar o tipo de instrução trazido. Se a instrução usar uma palavra na memória, determinar onde essa palavra está. Trazer a palavra para dentro de um registrador da CPU, se necessário. Executar a instrução Voltar a etapa 1 para iniciar a execução da instrução seguinte. CPU 1. Trazer a próxima instrução da memória até o registrador. CPU 2. Alterar o contador do programa para indicar a próxima instrução. CPU 3. Determinar o tipo de instrução trazido. CPU 4. Se a instrução usar uma palavra na memória, determinar onde essa palavra está. CPU 5. Trazer a palavra para dentro de um registrador da CPU, se necessário. CPU 6. Executar a instrução 7. Repetir os passos apresentados CPU Quem é o responsável por controlar estes elementos de hardware? Alguma coisa está faltando neste hardware? Qual dos dois valores é usado para o PC, por exemplo? Multiplexador Multiplexador Unidade de Controle Multiplexador Qual o papel de cada MUX? Passar para PC o valor da próxima instrução (PC + 4) ou o valor do endereço do desvio Conduzir a saída da ALU, ou da memória de dados para o banco de registradores. Conduzir o valor do registrador ou do campo offset de uma instrução. Convenções lógicas de Projeto Elementos funcionais de um processador: Elementos que operam nos valores de dados São os elementos combinacionais. Suas saídas dependem apenas da entrada atual. Dada a mesma entrada, estes elementos produzem uma mesma saída. Não possuem memória. sempre Elementos que contêm estados São os elementos seqüenciais Possuem um armazenamento interno Possuem, no mínimo, duas entradas e uma saída. Valores de entrada: clock e o dado a ser escrito. Valor de saída: dado a ser lido. Clock informa quando se deve escrever. Porém, a leitura pode ser feita a qualquer momento. Convenções lógicas de Projeto Sinal Ativo Quando o sinal de clock está logicamente alto Sinal Inativo Quando o sinal de clock está logicamente baixo Metodologia de clocking Define quando os sinais podem ser lidos e quando podem ser escritos. Importante para estabelecer a sincronização destas operações. Sem uma metodologia de clocking, ou seja, sem a sincronização das leituras/escritas não teríamos garantia que o sinal lido corresponde ao valor antigo, ao valor recém-escrito ou ainda a uma mistura de ambos. Metodologia de clocking Sincronização acionada por transição Quaisquer valores armazenados em um elemento seqüencial é atualizado apenas em uma transição de clock (transição de subida ou descida). Construindo um caminho de Dados Baseado no processador MIPS que vimos na disciplina, iremos listar progressivamente cada um dos elementos necessários para a construção do caminho de dados. Cada elemento de um caminho de dados é uma unidade funcional usada para operar sobre os dados ou conter esses dados dentro de um processador. Construindo um caminho de Dados Elementos de um caminho de dados Para lidar com as instruções precisamos: Memória de instruções Armazena instruções de um programa Fornece uma instrução de acordo com o endereço passado Registrador PC (contador do programa) Contém o endereço da instrução atual Somador Utilizado, neste caminho de dados, para incrementar o valor do PC. Construindo um caminho de dados Os três primeiros elementos do caminho de dados e suas interconexões. Construindo um caminho de Dados Elementos do caminho de dados Banco de registradores Utilizado para execução de instruções necessitam fazer acesso a registradores. Exemplo: Instruções de formato R. que Revisando: No Mips, instruções de formato R são aquelas que lêem valores de 2 registradores, realizam uma operação na ALU com o conteúdo destes dois registradores e escrevem o resultado em um outro registrador. Construindo um caminho de Dados Devido às instruções de formato R, o banco de registradores precisa: Para a leitura: Duas entradas para identificar o registrador que desejamos fazer a leitura. Duas saídas para obter os valores destes registradores. Para a escrita: Duas entradas. Uma para identificar o valor a ser escrito e outra entrada para o registrador no qual desejamos realizar a escrita. Construindo um caminho de Dados Banco de registradores Construindo um caminho de Dados lw $t1, offset($t2) As instruções lw e sw, calculam um endereço de memória somando o registrador de base com o campo offset de 16 bits. No caso de sw, além desta operações, precisamos ler o valor de $t1 para podermos armazená-lo em memória. No caso de lw, precisamos escrever o valor da memória em $t1. Logo, além do registrador esta instrução também necessita de uma ALU para realização das operações aritméticas. Construindo um caminho de Dados Banco de registradores + ALU Construindo um caminho de Dados Adicionalmente, para lw e sw, também é necessário uma memória de dados. A memória de dados também precisa dar suporte a leitura e escrita. Além disso, é necessário um hardware adicional para transformar a constante offset de 16 bits em um número de 32 bits. Construindo um caminho de Dados Construindo um caminho de dados Instruções de desvio BEQ $t1, $t2, offset Para termos o comportamento desta instrução precisamos calcular o desvio que é obtido estendo o sinal do campo offset de 16 bits para 32. Em seguida, o campo offset é deslocado de 2 posições. Porque? Após isso o campo offset é somado ao valor de PC + 4 (o endereço da próxima instrução). Também utilizamos a ALU para verificarmos se os valores de $t1, $t2 são iguais. Construindo um caminho de dados Construindo um caminho de dados Esta mesma idéia é válida para as instruções de desvio incondicional. Sendo necessário fazer alguns pequenos ajustes. Substituímos os 28 bits menos significativos de PC+4 pelos 26 bits significativos do offset deslocados de duas posições. Próxima Aula Referências Organização e Projeto de Computadores Seções 5.1 a 5.3