Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE CATÓLICA DE GOIÁS DEPARTAMENTO DE COMPUTAÇÃO GRADUAÇÃO EM ENGENHARIA DE COMPUTAÇÃO PROJETO DE UM PROCESSADOR MODULAR PARA FINS DIDÁTICOS JULIANO ADÔRNO MAIA TAYNARA MENDONÇA SANTANA JUNHO 2009 ii PROJETO DE UM PROCESSADOR MODULAR PARA FINS DIDÁTICOS JULIANO ADÔRNO MAIA TAYNARA MENDONÇA SANTANA Trabalho de Conclusão de Curso apresentado por Juliano Adorno Maia e Taynara Mendonça Santana à Universidade Católica de Goiás, como parte dos requisitos para obtenção do título de Bacharel em Engenharia de Computação. Prof. Carlos Alexandre F. de Lima, MsC. Prof. Jeová Martins Ribeiro, Esp. Orientador Coordenador de TCC iii DEDICATÓRIA Aos familiares, pela compreensão, carinho e confiança em nós depositada. Aos colegas, pelo apoio e incentivo. iv “Divide as dificuldades que tenhas de examinar em tantas partes quantas for possível, para uma melhor solução”. René Descartes v AGRADECIMENTOS Ao Professor Carlos Alexandre, orientador acadêmico, pelo apoio e confiança depositada. Aos professores Charles dos Santos Costa e Felippe dos Santos e Silva, pela inestimável colaboração. À Coordenação do Departamento de Computação e ao Departamento de Engenharia da Universidade Católica de Goiás por ter ajudado de forma inestimável na execução deste trabalho. Ao colega Emanuel de Azevedo, pela colaboração e apoio. Também o apoio técnico do laboratorista Valdemar Flores Júnior. vi RESUMO Apresenta-se um projeto sobre o desenvolvimento de um processador para fins didáticos. Este trabalho tem como características dar apoio ao ensino das disciplinas de Arquitetura de Computadores e Sistemas Digitais. Caracteriza-se por implementar seus módulos de forma discreta mostrando a função de cada componente interno da arquitetura básica de uma unidade processadora de dados. Neste trabalho foram desenvolvidos alguns componentes, mas dando a oportunidade para projetos futuros onde poderão ser desenvolvidos os dispositivos restantes e toda a sincronização entre eles finalizando assim a implementação de um processador. Palavras-Chave: Processador, Arquitetura de Computadores, Fins didáticos, Componentes. vii ABSTRACT It's presented a project about the development of a processor for didactic purposes. This work has as particularities to give support to teaching of Computers Architecture and Digital Systems. It's characterized by implementing their modules in a discrete form showing the function of each internal component of the basic architecture of a data processing unity. In this work was developed some components but giving the chance for future projects where can be developed the remainder devices and all the synchronization between them, thus ending the implementation of a processor. Keywords: Processor, Computers Architecture, Didactic Purposes, Components. viii PROJETO DE UM PROCESSADOR MODULAR PARA FINS DIDÁTICOS SUMÁRIO LISTA DE FIGURAS x LISTAS DE TABELAS xi LISTA DE ABREVIATURAS E SIGLAS xii I. INTRODUÇÃO 1 II. FUNDAMENTOS DE PROCESSADORES 3 2.1. Principais Elementos de um Computador 3 2.1.1 Processador e Microprocessador 4 2.1.1.1 Unidade de Controle 5 2.1.1.2 Unidade Lógica e Aritmética 5 2.1.1.3 Conjunto de Registradores 6 2.1.2 Memória 6 2.1.3 Dispositivo de Entrada e Saída 6 2.1.4 Barramento do Sistema 7 2.2 Funcionamento de um Processador Primitivo 7 2.3 Considerações sobre Desempenho 10 III. EVOLUÇÃO DOS PROCESSADORES ELETRÔNICOS 12 3.1 Considerações Iniciais 12 3.2 Microprocessadores 13 3.2.1 Primeiros Processadores 13 3.2.2 Processador 286 14 3.2.3 Processador 386 14 3.2.4 Processador 486 14 3.2.5 Pentium 14 3.2.6 Pentium PRO 15 3.2.7 Pentium II 15 3.2.8 Pentium III 15 3.2.9 Pentium IV 16 3.2.10 Celeron 16 3.2.11 Xeon 16 3.3 Como são Fabricados os chips de Processadores 17 3.4 Considerações Finais 19 IV. PROPOSTAS DE PROCESSADORES MODULARES 21 4.1 Processador Modular 21 4.2 Trabalhos Relacionados 21 4.2.1 SAP – 1 22 4.2.1.1 Descrição do Funcionamento do SAP – 1 23 4.2.1.2 Conjunto de Instruções do SAP 25 4.2.1.3 Programação do SAP 26 4.2.2 VSM 26 4.2.2.1 Estrutura Física do VSM 26 4.2.2.2 Conjunto de Instruções do VSM 27 V. DESCRIÇÃO DO PROJETO 29 5.1 Aspectos didáticos 29 5.1.1 Métodos e Técnicas de ensino 29 5.1.2 Recursos didáticos 30 5.2 Descrição dos módulos 31 ix 5.2.1 Unidade de controle e temporização 31 5.2.2 Unidade lógica aritmética 33 5.2.3 Memória de trabalho 33 5.2.4 Registrador de dados e endereço 33 5.2.5 contador de programa 33 5.3 Observações Gerais 34 VI. IMPLEMENTAÇÕES E TESTES 35 6.1 Desenvolvimento da ULA de oito bits 35 6.2 Construção de cabos e barramentos 39 6.3 Desenvolvimento de um display 40 6.4 Desenvolvimento de registradores 41 6.5 Desenvolvimento da unidade 42 6.6 Integração entre os módulos 44 VII. CONCLUSÃO E PROPOSTAS PARA PROJETOS FUTUROS 46 Referências 48 x LISTA DE FIGURAS Figura 2.1 – Elementos básicos de um computador 4 Figura 2.2 – Arquitetura simplificada de um processador 5 Figura 2.3 – Fluxo de instruções e dados (Exemplo) 8 Figura 3.1 – Evolução dos microprocessadores da Intel 20 Figura 4.1 – Arquitetura do funcionamento do SAP-1 23 Figura 4.2 – Arquitetura do VSM 26 Figura 5.1 – Diagrama de blocos do projeto 32 Figura 6.1 – Circuito de Expansão de duas ULAs de 4 bits para a ULA de 8 bits 36 Figura 6.2 – Protótipo da ULA de 8 bits, montado em um Protoboard 36 Figura 6.3 – Layout do circuito impresso da ULA de 8 bits 38 Figura 6.4(a) – Lado da fiação impressa 38 Figura 6.4(b) – Placa da ULA, lado dos componentes 39 Figura 6.5(a) – cabo de 2 vias 40 Figura 6.5(b) – cabo de 8 vias 40 Figura 6.5(c) – cabo de 6 vias 40 Figura 6.5(d) – cabo de 1 via 40 Figura 6.6 – Dispositivo de entrada 41 Figura 6.7 – Protótipo de um registrador de 8 bits 42 Figura 6.8 – Circuito de uma chave de dados de 1 bits 43 Figura 6.9 – Circuito implementado das chaves de dados de 8 bits 43 Figura 6.10 – Arquitetura proposta no projeto de desenvolvimento do processador para fins didáticos 44 Figura 6.11(a) – Vista frontal da bancada 45 Figura 6.11(b) – Vista posterior da bancada 45 Figura 6.11(c) – Bancada pronta com os módulos em funcionamento 45 xi LISTA DE TABELAS Tabela 3.1 – Evolução dos microprocessadores da Intel 20 Tabela 6.1 – Instruções utilizadas na ULA 36 Tabela 6.2 – Conversão do código BCD para o hexadecimal 41 xii LISTA DE ABREVIATURAS E SIGLAS PC Personal Computer FPU Floating Point Unit MMX Math Matrix Extensions AGP Advanced Graphics Surppot DMA Dynamic Memory Acess). SSE Streaming SIMD Extentions DIB Dual Independent Architetura ULA Unidade Lógica Aritmética SIMD Simple Instruction, Multiple Data CPU Central Processing Unit SAP Simple-As-Possible VSM A Very Simple Microprocessor REM Registrador de endereço na memória LED Diodos Emissores de Luz TTL Transistor, Transistor Logic UCP Unidade Central de Processamento PROJETO DE UM PROCESSADOR MODULAR PARA FINS DIDÁTICOS CAPÍTULO I INTRODUÇÃO Nos dias de hoje, agrande importância e utilização de computadores e sistemas microprocessados, desperta em estudantes de cursos tecnológicos o interesse em dominar o conhecimento de cada parte integrante de uma UCP (Unidade Central de Processamento) e, nem sempre, se satisfazem com leitura de manuais ou simulações. Este trabalho de conclusão de curso consiste no projeto de um processador modular para fins didáticos, de oito bits, construído a partir de circuitos integrados tradicionais TTL, idealizado para o auxílio de disciplinas como Arquitetura de Computadores e Sistemas Digitais. A motivação deste vem das dificuldades que os alunos encontram, principalmente na disciplina de Arquitetura e Organização de Computadores, em entender e visualizar certos conceitos sobre a estrutura interna de um microprocessador básico. Este projeto, mostra de forma modularizada as partes principais de uma unidade processadora digital de dados, com objetivo de facilitar o entendimento da estrutura de uma unidade processadora, através da construção, verificação e acompanhamento das etapas de funcionamento passo a passo. A eficácia deste tipo de abordagem pôde ser confirmada em entrevistas informais com alunos e professores da Computação e da Engenharia Elétrica da UCG (Universidade Católica de Goiás), que desenvolveram, durante um semestre, projetos de relógio digital e minicalculador. Esse projeto dá oportunidade a que alunos possam construir um processador modular, treinando e aplicando conceitos de processamento de dados na prática. Pode ser utilizado sob roteiros elaborados por professores da área quando houver um conjunto já montado e pode ser usado para experimentação de novas propostas, o que representa uma novidade em trabalhos da UCG: a perspectiva didática. A abordagem didática está caracterizada na possibilidade de modularizar a solução de um problema. O usuário pode identificar através de rótulos cada parte da estrutura interna do processador. A construção de pequenos sistemas utilizando uma UCP pode ser feita pelos usuários, desde que estes tenham um conhecimento razoável de Sistemas Digitais e Arquitetura de Computadores. Pelas mesmas razões também fica fácil a manutenção em seus aparatos, haja vista que, se houver um problema em um dispositivo, é só removê-lo e verificar onde está a falha. 2 O texto deste trabalho foi organizado em sete capítulos. Esta Introdução, de acordo com as diretrizes do Departamento de Computação, corresponde ao Capítulo I. No Capítulo II se caracteriza um sistema, em particular um computador genérico elementar, seus aspectos construtivos e operacionais. Um fragmento de programa referido ao nível da máquina é usado para descrever o seu funcionamento. O Capítulo III apresenta, a título de estado da arte, um breve histórico dos computadores e microprocessadores, sua evolução e um resumo sobre processo de fabricação. O Capítulo IV explora duas propostas de máquinas simples, relacionadas com a filosofia deste trabalho, elaboradas com o intuito de demonstração e construção de projetos. No Capítulo V se define e caracteriza o objeto principal de estudo deste trabalho, o processador modular, que é construído em forma de várias placas cada uma com uma função específica que, em conjunto, desempenham o papel do processador. Os aspectos práticos sobre o desenvolvimento do projeto, representado por uma ULA (Unidade Lógica Aritmética) de oito bits, vias de comunicação entre dispositivos, unidade de saída (um visualizador de dados), registradores de propósito geral e chaves de dados são vistos no Capítulo VI. Na conclusão do trabalho (Capítulo VII) são colocados aspectos sobre as dificuldades e os resultados obtidos na implementação do projeto, alguns argumentos em defesa viabilidade do processador modular como recurso alternativo no ensino de Arquitetura e Organização de Computadores e possíveis projetos futuros, tais como a implementação dos módulos restantes ou, ainda, a ampliação do Projeto. A metodologia usada na elaboração deste trabalho envolveu a pesquisa tanto de conceitos técnicos, como didáticos, os fatores determinantes no desenvolvimento de um projeto desta natureza. A parte técnica teve dois focos básicos de investigação: a pesquisa bibliográfica (conceitos, fundamentos e componentes dedicados) e as técnicas de implementação, sempre visando a comodidade do futuro usuário. Na parte experimental foram utilizados recursos próprios (a maioria dos componentes, placas e serviços) e da UCG (suporte dos profissionais, laboratórios e ferramentas). O conhecimento adquirido ao longo do curso de Engenharia de Computação, nos conteúdos de disciplinas como Eletrônica, Sistemas Digitais e Arquitetura e Organização de Computadores foi o que propiciou o desenvolvimento e a elaboração prática do trabalho. PROJETO DE UM PROCESSADOR MODULAR PARA FINS DIDÁTICOS CAPÍTULO II FUNDAMENTOS DE PROCESSADORES O processador é a parte essencial de um computador digital. O computador digital é um sistema sequencial programável, destinado ao processamento automático de informações na forma binária1 – por exemplo, a resolução de problemas, supervisão e controle de máquinas e aparelhos etc. –, que se conecta com o mundo exterior através de um conjunto de entradas e de saídas. Genericamente, sistema é um conjunto de partes interligadas e coordenadas entre si, com uma finalidade definida que, por sua vez, envolve tarefas predeterminadas. O computador é sequencial porque suas ações elementares, responsáveis pelo cumprimento de uma tarefa, são executadas uma após a outra. É programável porque permite alterações nas tarefas sem a necessidade de modificar ou substituir partes físicas do sistema. Entradas são dispositivos ou linhas elétricas por onde se fornecem os dados que determinam e condicionam a tarefa a se cumprir, enquanto saídas são dispositivos que fornecem os resultados. Este capítulo, apesar de fazer parte de um trabalho sobre processador, introduz um resumo sobre componentes de um computador elementar, necessário ao acompanhamento do trabalho, porque, para efeito de demonstração prática, o sistema mínimo do projeto requer e inclui tais componentes, adquirindo status de computador. 2.1 Principais elementos de um computador A arquitetura de um computador é definida como o conjunto de atributos da máquina que um programador deve conhecer para compreender o que o programa realizará em tempo de execução. Ela é representada “fisicamente” na estrutura e na organização de componentes de hardware, que se referem ao funcionamento interno do computador, e “logicamente” no conjunto de instruções e nos modos de endereçamento. [STALLINGS] Apesar da grande evolução ocorrida na computação desde o aparecimento dos primeiros computadores, o diagrama básico apresentado na Figura 2.1 ainda pode ser utilizado para descrever um sistema computacional atual. O processador é responsável pelo tratamento de informações armazenadas em memória (programas em código de máquina e 1 Informação binária é aquela que se apresenta codificada em cadeias de bits (dígitos binários), “zeros” e “uns”. 4 dados). A memória trata do pelo armazenamento dos programas e dados. Os periféricos são os dispositivos responsáveis pelas entradas e saídas de dados, ou seja, pelas interações entre o computador e o mundo externo. Interconectando-se um processador a alguns circuitos auxiliares e de memória, foi possível construir-se um computador inteiro em uma única placa. O barramento interliga eletricamente estes componentes: é uma via de comunicação por onde transitam todos os dados tratados pelo computador. Figura 2.1 – Elementos básicos de um computador. [MONSERRAT] 2.1.1 Processador e microprocessadorO processador é considerado o “cérebro” do computador. Sua função básica é executar instruções, fazer cálculos e tomar decisões, de acordo com um programa armazenado na memória. O processador é também conhecido por UCP (Unidade Central de Processamento) ou, em inglês, CPU (Central Processing Unit). Quando está encerrado em um único circuito integrado (chip), é chamado de microprocessador. Antes do advento dos microprocessadores, as CPUs eram formadas por um grande número de chips, distribuídos ao longo de uma ou mais placas de circuito impresso. A filosofia do presente projeto, para atendimento à questão didática, segue esta última orientação, sendo seu processador formado de placas separadas, aqui chamadas de módulos. Um processador (ou microprocessador) é composto basicamente de três elementos: a unidade de controle, a unidade lógica e aritmética e o conjunto de registradores. A Figura 2.2 ilustra de forma simplificada estas partes e sua inter-relação. Memória Processador Dispositivos de E/S Barramento Mundo Exterior 5 Figura 2.2 – Arquitetura simplificada de um processador. [TOKHEIM] 2.1.1.1 Unidade de controle A unidade de controle coordena as tarefas do processador, comandando os demais componentes da sua arquitetura para garantir a correta execução do programa e a utilização dos dados nas operações que os manipulam. Assim, ela gerencia todos os eventos associados à operação do computador, particularmente as chamadas “interrupções”2. Associado à unidade de controle está um circuito de temporização (clock), representado por um oscilador, que fornece os pulsos utilizados para sincronizar e ditar a medida de tempo de transferência de dados no computador. A frequência do clock é um dos fatores relacionados com a capacidade de processamento do computador. Este, no entanto, não é objeto de estudo do presente trabalho. 2.1.1.2 Unidade lógica e aritmética Componente essencial no sistema computacional, a ULA (Unidade Lógica e Aritmética), ou ALU (Arithmetic Logic Unit), realiza as operações lógicas e aritméticas a serem realizadas no contexto de uma tarefa. O parâmetro da ALU que influencia no desempenho global de um sistema computacional é a quantidade de operações que ela suporta. 2 Interrupções são mecanismos que interrompem a execução normal para atender a um evento prioritário. [STALLINGS] Unidade Lógica e Aritmética Registrador temporário Acumulador Contador de Programa Registrador de Instruções Decodificador de instruções Unidade de Controle (e Temporização) Linhas de entrada Linhas de controle Barramento de endereços Barramento de dados 6 2.1.1.3 Conjunto de registradores Os registradores são dispositivos de armazenamento temporário e de acesso rápido, porque se localizam no interior do processador. Possuem um número fixo de bits, geralmente usado para definir o “tamanho” do processador. Cada registrador tem uma função específica, por exemplo, o Acumulador, que é operando na maioria das instruções aritméticas, o Contador de Programa, que aponta para próxima instrução a se executar, e o Registrador de Instrução, que armazena o código da instrução. Os registradores de propósito geral, que também costumam ter funções específicas, são diretamente acessados pelo programador. O tamanho dos registradores influencia no desempenho global do sistema: quanto maior o registrador, mais fácil realizar operações com grandes valores, sem precisar usar artifícios. 2.1.2 Memória É um conjunto de circuitos capaz de armazenar os dados e os programas a serem executados. Há diferentes categorias de memórias: a memória principal é o local onde normalmente ficam armazenados os programas e os dados a serem manipulados pelo processador, a memória secundária permite armazenar uma maior quantidade de dados e instruções por um período de tempo mais longo e a memória cache, que consiste de uma pequena porção de memória com curto tempo de resposta, geralmente integrada aos processadores, o que permite incrementar o desempenho durante a execução do programa. 2.1.3 Dispositivos de entrada/saída Através dos dispositivos de entrada e saída (I/O, Input/Output), também chamados de periféricos, o computador pode armazenar ler, transmitir e receber dados. São equipamentos utilizados como portadores das informações que o computador processa. Alguns são específicos de entrada; outros apenas de saída. Por exemplo, quando se pressiona uma tecla de um microcomputador, o circuito de interface do teclado envia o código da tecla pressionada para a CPU. Por outro lado, quando a CPU precisa enviar uma mensagem para o usuário, esta é colocada na tela do monitor, através do circuito chamado de interface de vídeo. É claro que há dispositivos que combinam as duas funções. 7 2.1.4 Barramento do sistema Barramento é o caminho em que os dados e sinais de controle trafegam dentro do computador. É utilizado para comunicação de sinais digitais e pode ser estabelecido entre dois ou mais elementos do computador (processador, memória, chips da placa-mãe e periféricos). O tamanho do barramento é importante para determinar quantos dados podem ser transmitidos de uma só vez. Uma característica marcante do barramento é ser compartilhado: vários dispositivos podem ser conectados neles, desde que só um por vez funcione como fonte; os outros ficam recebendo. 2.2 Funcionamento de um processador primitivo Procedimentos envolvendo entrada de dados, cálculos, armazenamento e saída de resultados são tarefas típicas de um computador. Esta seção examina um exemplo de operação de um processador primitivo, baseado na Figura 2.2, relativo a um fragmento de programa que executa a seguinte lista: 1. Carregar o Acumulador com o valor imediato3 (constante) 53 2. Carregar o Registrador temporário com o imediato 165 3. Adicionar o conteúdo do Acumulador com o do Registrador 4. Armazenar o resultado no acumulador A descrição a seguir não detalha o aparato eletrônico (hardware) usado para realizar o procedimento, apenas o fluxo de dados dentro do sistema. Também não é explorado o sincronismo4 das operações. Opcionalmente, o resultado poderia ser apresentado em um mostrador ou monitor, bastando colocar-se alguma instrução que possa transferi-lo para o dispositivo de saída. Esta direção não foi adotada para reduzir o número de passos. É previsível, ainda, a existência de instruções que disponibilizam o teclado, decodificam caracteres e os enviam para o processador que, por simplicidade, não serão exploradas neste exemplo. O diagrama da Figura 2.3 auxilia na explicação do processo e da participação dos elementos internos do processador na sequência de eventos. O fluxo de instruções e dados será descrito em passos, sendo cada passo indicado em um círculo respectivamente numerado 3 O operando imediato fica no próprio código da instrução, não pode ser mudado em tempo de execução. 4 Os pulsos clock estabelecem o momento da ocorrência de eventos, sincronizam a comunicação entre elementos do hardware. 8 na Figura 2.3. O processador centraliza e controla todas as operações, sempre obedecendo à sequência: busca, decodifica e executa. Entretanto, as operações realizadas são ditadas pelas instruções listadas na memória de programa. Os endereços estão em decimal, os conteúdos em binário. Em primeiro lugar, supõe-se que os conteúdos da memória de programa incluem as instruções já carregadas em cinco posições contíguas de memória (códigos fictícios), a partir da posição adotada 200, valor inicial do PC(Progmam Counter – contador de programa ou ponteiro de instruções). Apesar aparentemente de ter quatro instruções no fragmento exemplo, são cinco os locais na memória de programa. A principal razão para isto é o tamanho da unidade de armazenamento em memória, o byte, que corresponde a uma cadeia de 8 bits. Cada posição-byte tem um endereço único na memória. Como nem sempre é possível se codificar uma instrução em um único byte, algumas instruções precisam ser divididas em porções de armazenamento. É o caso das duas primeiras instruções que armazenam os respectivos operandos imediatos em bytes separados. Surpreendentemente, a terceira e a quarta instruções são codificadas em um mesmo byte. Figura 2.3 – Fluxo de instruções e dados (Exemplo). Adaptada de [TOKHEIM] Unidade Lógica e Aritmética Registrador temporário Acumulador Contador de Programa Registrador de Instruções Decodificador de instruções Unidade de Controle e Temporização (UCT) Barramento de endereços Barramento de dados Memória de Programa Endereço Conteúdo ... ... 200 00000000 201 00110101 202 00000001 203 10100101 204 00000011 ... ... MAR MBR 1 3 5 7 9 1 3 5 7 9 1 3 5 7 9 3 5 7 9 12 2 6 10 2 6 10 10 10 10 11 4 4 11 8 8 1 3 5 7 9 2 6 10 2 6 10 9 Passo 1: o processador coloca o endereço 200 no barramento. O acesso à memória, em geral, é feito através de um MAR (Memory Address Register – Registrador de endereçamento à memória). Uma linha de controle habilita a leitura do conteúdo endereçado na memória de programa, isto é, copia a informação de uma posição de memória para outro local, no caso um MBR (Memory Buffer Register – Registrador temporário de dados) que se comunica com o barramento de dados. A primeira instrução (código fictício 00000000: carregar o imediato no Acumulador) é transferida para barramento de dados. Passo 2: a primeira instrução é colocada pelo processador (sinal de habilitação) no IR (Instruction Register – Registrador de instruções). O processador decodifica (interpreta) a instrução e “descobre” no código que o operando de destino é o Acumulador e que o operando de origem está na próxima posição de memória. Passo 3: o processador incrementa o contador de programa, envia o endereço (201) para o barramento de endereço e habilita a linha de controle da memória de programa. O dado lido (00110101) está no barramento de dados. Passo 4: o dado vai para o Acumulador, dirigido por sinais adequados gerados pela UCT (Unidade de Controle e Temporização). Neste ponto, completa-se a execução da primeira instrução: o valor 53 (00110101) está no Acumulador. Passo 5: o processador incrementa novamente o PC, coloca o endereço (202) no MAR e habilita a memória para leitura do conteúdo endereçado. O código (fictício) da segunda instrução (00000001: Carregar o imediato para o Registrador Temporário) é colocado no barramento de dados. Passo 6: o código da segunda instrução é armazenado no IR e interpretado, para orientar a UCT a gerar os sinais de controle. O processador já “sabe” que há um outro operando na próxima posição, cujo destino é o Registrador temporário. Passo 7: o processador incrementa o contador de programa, envia o endereço (203) para o barramento de endereço e habilita a linha de controle da memória de programa. A UCT vai gerar os sinais que preparam o Registrador para receber o dado. 10 Passo 8: o dado lido vai para o Registrador Temporário, dirigido pelos sinais gerados pela UCT. Neste ponto, completa-se a execução da segunda instrução: o valor 165 (10100101) está no Registrador Temporário. Passo 9: o processador incrementa o contador de programa, envia o endereço (204) para o barramento de endereço e habilita a linha de controle da memória de programa. O conteúdo lido vai para o barramento de dados. Passo 10: o Registrador de Instruções recebe o dado do barramento o qual, em seguida, é decodificado, de modo que a UCT gera os sinais que vão dirigir a atuação da ULA. O processador envia os sinais para a ULA executar a adição dos dois conteúdos (Acumulador + Registrador Temporário). A unidade lógica e aritmética é um circuito combinacional: está sempre operando com suas entradas, de acordo com suas linhas de seleção (acionadas pelos sinais de controle). Isto significa que à sua saída já está presente o valor correspondente à soma de 53 com 165, ou seja, 218 (11011010), resultado da execução da terceira instrução do fragmento, bastando uma “autorização” para ser carregado no Acumulador. Passo 11: a autorização referida no passo 10 também é um sinal de controle enviado pela UCT ao habilitador do Acumulador. Executa-se, assim, o que seria a quarta instrução do fragmento. Não se trata de uma nova instrução porque nenhum código foi buscado na memória. O valor antigo do Acumulador é perdido (substituído). O resultado está disponível no Acumulador. Passo 12 em diante (não contemplados neste fragmento-exemplo): o processador repete seu ritual de busca à próxima instrução, decodificação e execução. 2.3 Considerações sobre desempenho Numa visão simplificada, o desempenho de um sistema se refere ao intervalo de tempo em que ele executa um programa (tempo de resposta, tempo de execução) ou um grupo de programas (throughput, taxa de transferência efetiva). Esta seção descreve sucintamente formas de medida, e os principais fatores que influenciam no desempenho global de um sistema, apesar de não ser exatamente o foco deste trabalho. 11 O tempo gasto total (em segundos) para completar uma tarefa computacional, que inclui os acessos à memória e ao disco, as atividades de entrada e saída e o overhead (processamento ou armazenamento em excesso) é a medida usual de desempenho de um sistema de computacional. Os projetistas usam a freqüência (constante) do clock para medir a velocidade do hardware. Por exemplo, um ciclo de clock igual a 2ηs corresponde a uma freqüência de 500MHz. Uma alternativa é a MIPS (Million Instruction Per Second), que especifica a taxa de execução de instruções, mas não considera a capacidade de executar mais ou menos trabalho, não servindo, portanto, para comparar máquinas com conjuntos de instruções diferentes. Outra é a métrica denominada MFLOPS (Million Floating-Point Operations Per Second), que relaciona o número de operações de ponto-flutuante (adição, subtração, multiplicação ou divisão), aplicadas a operandos expressos em precisão simples ou dupla, com o tempo de execução. Além da velocidade do processador, representada pela frequência do clock, as características essenciais para se determinar o desempenho de um computador são: o comprimento do código que pode ser trabalhado nos barramentos, as instruções já implementadas em hardware, a memória de trabalho e os dispositivos de entrada e saída. Um barramento rápido permite o aumento da velocidade de transferência de dados. Devido à organização dos programas, o processador geralmente acessa repetidas vezes as mesmas posições de memória. Para se tirar proveito desta repetição foi criado o cache de memória, um banco de memória pequeno, porém rápido, que armazena o conteúdo das últimas posições de memória solicitadas pelo processador. Assim, o processador primeiro consulta o cache e, se o conteúdo da posição necessária já estiver nele, não será necessário esperar que ele seja transferido da memória. Os primeiros processadores trabalhavam apenas com cache externo, chamado de nível dois (L2), que armazena dados gerais da memória. Depois, começaram a trabalharcom cache interno bem pequeno, muito mais rápido, chamado de nível um (L1), utilizado para armazenar instruções e dados da execução dinâmica do processador. [LATORRE] PROJETO DE UM PROCESSADOR MODULAR PARA FINS DIDÁTICOS CAPÍTULO III EVOLUÇÃO DOS PROCESSADORES ELETRÔNICOS Este capítulo, baseado em [STALLINGS], apresenta um breve histórico dos computadores, um relato sobre como os microprocessadores comerciais foram evoluindo ao longo do tempo e um resumo do processo de fabricação dos circuitos integrados de microprocessadores. 3.1 Considerações iniciais Os computadores digitais (decimais) já existiam no século XIX. Eram mecânicos, acionados por manivelas e realizavam cálculos através de um sistema de engrenagens, comuns em caixas registradoras da época. No final do século, surgiram os relés, dispositivos eletromecânicos formados por peças magnéticas que podem se deslocar, pela ação da corrente elétrica, e unir dois contatos metálicos. Estes dispositivos foram usados inicialmente na construção de centrais telefônicas. Os relés associados às válvulas termiônicas propiciaram o invento dos primeiros computadores eletrônicos digitais, no final da década de 40, utilizados para codificação e decodificação de mensagens e alguns cálculos. O alto custo, o tamanho exagerado, a lentidão dos relés – que demoravam mais que um milésimo de segundo para fechar um circuito –, o alto consumo de energia e problemas de aquecimento inviabilizavam estes equipamentos para uso pessoal. De qualquer forma, já aparecia o conceito de processador digital e, inevitavelmente para a época, ele era composto de vários módulos. Vários pesquisadores começaram a procurar alternativas para os componentes digitais. O primeiro projeto de transistor foi apresentado em 1947, ainda utilizando um bloco de Germânio, um dos semicondutores mais pesquisados na época, e três filamentos de Ouro. Um filamento era o polo positivo, outro o polo negativo, e o terceiro tinha a função de controle. Durante a década de 50, os modelos foram sendo aperfeiçoados. Assim, a válvula foi substituída pelo transistor porque este gastava uma fração de energia gasta por ela e, ao mesmo tempo, era muito mais rápido na comutação. Uma outra grande evolução ocorreu com a substituição do Germânio pelo Silício, que permitiu a redução de custos e miniaturização. Surgiram então os primeiros computadores pessoais, já na década de 70. 13 3.2 Microprocessadores comerciais Nesta seção, por razões de simplificação, são relacionados apenas os processadores (ou microprocessadores) lançados pela Intel. 3.2.1 Primeiros processadores O primeiro microchip (circuito integrado de microprocessador) – o 4004 – foi lançado pela Intel, em 1971. Bastante rudimentar, processava em apenas 4 bits por vez e operava a 1 MHz. O processador 4004 demorava 10 ciclos para processar cada instrução, o que equivale a 100.000 instruções por segundo. Pouco tempo depois, a Intel lançou um novo processador que fez sucesso durante muitos anos, o 8080, um processador de 8 bits que operava 2 MHz. O 8085 pode ser considerado uma variante do 8080. O 8088 era uma versão econômica do 8086, que havia sido lançado pela Intel em 78. Quando a IBM estava desenvolvendo seu computador pessoal, chegou a ser cogitado o uso do 8086, mas acabou sendo escolhido o 8088 devido ao seu baixo custo. Tanto o 8086 quanto o 8088 são processadores de 16 bits. A diferença entre eles é que o 8088, apesar de internamente trabalhar com palavras binárias de 16 bits, usava um barramento de apenas 8 bits, ou seja, apesar de processar 16 bits de dados de cada vez, ele se comunicava com os demais periféricos, como placas de vídeo, discos, etc. usando palavras de apenas 8 bits. Isso permitiu à IBM utilizar componentes mais baratos no PC, já que na época componentes de 16 bits eram extremamente caros. O PC original da IBM foi lançado em agosto de 81. Possuía apenas 64 Kbytes de memória RAM, um monitor MDA mono de 12 polegadas, usava uma unidade de disquetes de 5 1/4 de apenas 160 Kbytes, e vinha sem disco rígido. O sistema operacional usado era o MS-DOS 1.0. Dois anos depois, foi lançado o PC XT, que, apesar de continuar usando o 8088 de 4,77 MHz, vinha com 256 Kbytes de RAM, um disco rígido de 10 Mbyte, monitor CGA e o MS-DOS 2.0. Um detalhe importante na rápida evolução dos processadores é que ela não foi acompanhada por muitas placas periféricas, por questões econômicas e também para permitir a compatibilidade de novos equipamentos com equipamentos antigos. O processador permite a comunicação com estas placas através de um barramento de menor capacidade, ou seja, é possível um processador 64 bits trocar informações com placas de 8, 16, 32 bits. 14 3.2.2 Processador 286 Com o 286 surgiu a segunda geração de processadores, sendo ele o único exemplar. Este processador introduziu diferenças significativas em relação aos processadores da primeira geração, uma delas, um marco no desenvolvimento dos processadores: o modo protegido. 3.2.3 Processador 386 O 386 foi o primeiro processador de 32 bits – operava, tanto internamente, quanto externamente a 32 bits. Este processador continuou com o modo real para manter compatibilidade com os processadores anteriores, mas seu modo protegido era mais evoluído que o do processador 286. Foi a partir daí que começaram a aparecer os sistemas operacionais multitarefa, capazes de executar vários programas em separado, protegidos um da “capacidade destrutiva” do outro. Os sistemas operacionais gráficos se tornaram possíveis com este novo recurso. Seu coprocessador matemático5 era o 387. 3.2.4 Processador 486 O 486 foi um melhoramento do 386. Além de adicionadas algumas instruções, a versão original possuía processador matemático interno e não um circuito integrado à parte. Dessa forma, a velocidade de processamento matemático é inerente ao processador. 3.2.5 Pentium A Intel registrou a marca Pentium para ter um nome próprio para um novo e poderoso processador de 64 bits de barramento. Possui vários clocks internos diferentes que chegam a 200 MHz e, também, cache interno. A melhora do desempenho que destaca o Pentium em relação aos anteriores é que, a partir dele, foi usado nos processadores da família Intel, o recurso do paralelismo. Na verdade, um Pentium equivale a dois processadores 486 em um só componente, com um algoritmo de processamento paralelo. Assim, as operações, quando possível, são desmembradas em operações elementares e executadas aos pedaços. 5 FPU (Floating Point Unit– Unidade de Ponto Flutuante), é outro nome pelo qual o coprocessador matemático é também chamado. 15 3.2.6 Pentium Pro O Pentium Pro marca o início da sexta geração de microprocessadores. Sua arquitetura foi usada como base para o Pentium II e o Pentium III, assim como para o Xeon e o Celeron, processadores examinados mais adiante. Ele possui três unidades de execução e é preditivo: monitora 20 a 30 instruções à frente no software, analisa quais instruções são dependentes de cada resultado, criando uma lista otimizada dessas instruções. Baseadas nesta lista, instruções são carregadas especulativamente. Isto permite que ele consiga realizar três instruções em um único ciclo, agilizando o trabalho em sistemas que utilizam processamento paralelo. 3.2.7 Pentium II O Pentium II foi lançado em 1997, sendo compatível com todas as arquiteturas Intel anteriores. Ele é um processador baseado no Pentium Pro, com cache L1 de 32 Kbytes, separada em dois blocos 16 Kytes para dados e instruções, cache L2 interna de 512 Kbytes e suporte para a tecnologia MMX (Math Matrix Extensions). Estruturalmente, a principal alteração do Pentium II foiutilizar um conector em vez de um soquete para efetuar a montagem da placa mãe. A Intel também utilizou a tecnologia AGP (Advanced Graphics Surppot), que é um conjunto de chips gráficos com acesso dedicado á memória principal do computador, memória com ECC (Error Correction Code) e compatibilidade com discos rígidos com ultra DMA (Dynamic Memory Acess). 3.2.8 Pentium III Os primeiros modelos do Pentium III eram montados em um cartucho parecido com o do Pentium II, encaixados na placa-mãe através de um conector. Depois, foi lançado um outro modelo em que o sistema de encaixe é um soquete. As inovações importantes do Pentium III foram a utilização da tecnologia SSE (Streaming SIMD6 Extensions) – um conjunto de 70 novas instruções – e a arquitetura com dois barramentos independentes DIB (Dual Independent Bus). Assim como no Pentium II o processador Pentium III adotou o sistema de memória cache externa ao processador. 6 Instruções SIMD (Single Instruction Multiple Data) são utilizadas para a resolução de problemas de engenharia, em que existem estruturas de dados regulares como vetores e matrizes. 16 3.2.9 Pentium IV O Pentium IV contém 144 novas instruções em relação à tecnologia SSE usada no Pentium III. A novidade é o uso de registradores de 128 bits. O Pentium IV “conversa” com a memória RAM usando 128 bits por vez, mas continua sendo um processador de 32 bits, pois utiliza a mesma arquitetura básica de 386. 3.2.10 Celeron Há muitas características semelhantes no Pentium IV e no Celeron, cuja as unidades lógicas aritméticas (ULA) trabalham no dobro da freqüência do núcleo do processador. As instruções deste processador aceleram a operação da aplicação que tenha sido compilada usando estas instruções. Aplicações típicas que se beneficiam dessas instruções são codificação de vídeo, sincronização de threads7 e conversão de números de pontos flutuante em inteiros. 3.2.11 Xeon A partir do Pentium II, para cada processador de uso geral, a Intel lançou também uma versão voltada para o mercado de servidores, os chamados Xeon (pronuncia-se “zion”). o processador Xeon reconhece mais memória RAM, permite trabalhar em ambiente multiprocessado8 e possui um desempenho muito maior que os processadores convencionais. A configuração de multiprocessamento simétrico (mais de um processador no mesmo micro) não funciona em sistemas operacionais comuns como o Windows 9x e o Windows ME e os recursos oferecidos pelas placas-mãe, para esses processadores tem recursos caros que normalmente só são interessantes para servidores. Em 2005 a Intel lançou oficialmente o último membro da sua família de processadores o qual ainda não tinha uma versão de 64 bits: o Xeon MP, um processador voltado para servidores multiprocessados contendo quatro ou mais processadores, baseado na micro- arquitetura do Pentium IV. 7 Thread é uma seqüência de instruções que vão ser executadas num programa, independentemente umas das outras. 8 Multiprocessados, placas-mãe com vários processadores instalados sobre elas. 17 3.3 Como são Fabricados os chips de processadores O componente principal na fabricação de circuitos integrados é o transistor. As condições de corte e de saturação são utilizadas na modelagem dos dois estados de chaveamento. Usando a região ativa, também é possível modelar outros componentes, como diodos, resistores e capacitores. A mudança de estado de um transistor comanda a mudança de estado de outros estágios, permitindo processar dados binários. Estas mudanças de estado podem ser feitas bilhões de vezes por segundo, obviamente gerando calor na conversão de energia elétrica. É por isso que, quanto mais rápidos se tornam os processadores, mais eles se aquecem e consomem energia. Quando se desenvolveu a tecnologia para construir vários transistores sobre o mesmo substrato de Silício, a fabricação de processadores teve seu custo bastante reduzido. Foi assim com o primeiro microchip comercial, lançado pela Intel em 1971 com o nome de 4004, um processador de apenas 4 bits composto por pouco mais de 2000 transistores. O elemento básico para a construção de qualquer chip é um waffer, obtido através da fusão do Silício com produtos químicos que permitem sua dopagem. Inicialmente são produzidos cilindros de 20 a 30 centímetros de diâmetro, que são cortados em fatias bastante finas que, por sua vez, são polidas para se obter os waffers. Um waffer é usado para produzir vários processadores que serão separados e encapsulados individualmente, ao final da produção. A primeira etapa do processo é oxidar a parte superior do waffer, transformando-o em dióxido de silício. Isto é obtido expondo o waffer a gases corrosivos e altas temperaturas. A fina camada de dióxido de silício que se forma é que será usada. Em seguida, é aplicada uma camada bastante fina de um material fotossensível sobre a camada de dióxido de silício. Usando uma máscara especial, é projetada luz ultravioleta que vai incidir em apenas em algumas regiões da superfície. A máscara tem um padrão diferente para cada área do processador, de acordo com o desenho (projeto) que se pretende obter. A técnica descrita aqui é chamada de litografia óptica. A camada fotossensível é originalmente sólida, mas ao ser atingida por ultravioleta transforma-se numa substância gelatinosa, que pode ser facilmente removida. Depois de remover as partes moles da camada fotossensível restam algumas áreas do dióxido de silício expostas, e outras que continuam cobertas pelo que restou da camada. O waffer é então, banhado com um produto especial que remove as partes do dióxido de silício que não estão protegidas pelo material que restou da camada fotossensível. O restante continua intacto. 18 Finalmente, é removida a parte que ficou da camada fotossensível. Como se têm substâncias diferentes, é possível remover uma camada de cada vez, ora o dióxido de silício, ora a própria camada fotossensível. Com isto é possível se desenhar as estruturas necessárias para formar os transistores, elementos básicos que compõem os circuitos do processador. Começa, então, a construção da segunda camada do transistor. Inicialmente, o waffer passa novamente pelo processo de oxidação inicial, sendo coberto por uma nova camada (desta vez bem mais fina) de dióxido de silício – a base. Apesar da inclusão desta nova camada, o desenho conseguido anteriormente é mantido. Em seguida, é aplicada sobre a estrutura uma camada de cristal de silício e sobre esta é aplicada uma nova camada de material fotossensível. Novamente, o waffer passa pelo processo de litografia, desta vez utilizando uma máscara diferente e conveniente para o projeto e mais uma vez a parte da camada fotossensível que foi exposta à radiação é removida, deixando expostas partes das camadas de cristal de silício e dióxido de silício, que são removidas em seguida. Assim como na etapa anterior, o que restou da camada fotossensível é removido e termina, então, a construção da segunda camada dos transistores. Uma das principais etapas do processo de fabricação é a aplicação das impurezas, que transformarão partes do waffer de silício em um material condutor. Os íons aderem apenas à camada de silício que foi exposta no processo anterior e não às camadas de dióxido de silício ou na camada de cristal de silício. É adicionada, então, a terceira camada, composta de um tipo diferente de cristal de silício e novamente aplicada uma camada fotossensível sobre tudo. O waffer passa novamente pelo processo de litografia, usando mais uma vez uma máscara diferente e de acordo com o projeto. As partes das matérias fotossensíveis expostas à luz são removidas, expondo partesdas camadas inferiores, que são removidas em seguida. A terceira camada do transistor está pronta, faltam apenas os filamentos condutores, três para cada transistor. Uma finíssima camada de metal é aplicada sobre a estrutura anterior. Nos processadores atuais, que são produzidos através de uma técnica de produção de 0,13 mícrons, esta camada metálica tem equivalente a apenas 6 átomos de espessura. O processo de aplicação da camada fotossensível, de litografia e de remoção das camadas é aplicado mais uma vez, com o objetivo de remover as partes indesejadas da camada de metal. Os transistores estão prontos. Cada processador é constituído por milhões de transistores. Um Pentium II possui pouco mais de 9 milhões de transistores, um Pentium II já possui 22 milhões, um Athlon possui 35 milhões de transistores, enquanto um Pentium IV possui incríveis 42 milhões. Graças ao atual nível de miniaturização, estas quantidades fabulosas de transistores ocupam 19 uma área muito pequena. Um Athlon, por exemplo, mede apenas 112 milímetros quadrados. Com isto, um único waffer de silício é suficiente para produzir vários processadores, que são depois separados e encapsulados numa estrutura de silício, que os protege e facilita o manuseio e instalação. O formato do encapsulamento varia de processador para processador. 3.4 Considerações finais Uma característica fácil de observar no gráfico da Figura 3.1, e que também é ilustrada na Tabela 3.1, é a crescente densidade de elementos (transistores por pastilha). Do ponto de vista da Figura 3.1, o projeto de um processador modular estaria “na contramão da história”, mas, conforme previamente esclarecido, de acordo com os objetivos traçados para este trabalho, os microprocessadores não fazem parte do foco do projeto. Estas informações foram aqui colocadas a título de ilustração e, no máximo, guiariam a evolução de futuros trabalhos nesta linha. Figura 3.1 – Crescimento do número de transistores da CPU. [STALLINGS] 1975 1970 1980 1985 1990 1995 2000 2005 4004 8086 80286 386 486 Pentium Pentium Pro Pentium II 103 104 105 106 107 108 20 Tabela 3.1 – Evolução dos microprocessadores da Intel [STALLINGS] MICROPROCESSADORES DA DÉCADA DE 70 Processador 4004 8008 8080 8086 8088 Lançamento 15/11/1971 1/4/1972 1/4/1974 8/6/1978 1/6/1979 Clock 108 kHz 108 kHz 2MHz 5/8/10 MHz 5/8 MHz Barramento 4 bits 8 bits 8 bits 16 bits 8 bits Transistores 2.300 3.500 6.000 29.000 29.000 Tamanho 10 mícrons 6 mícrons 6 mícrons 3 mícrons 3 mícrons Cap. Endereço 640 bytes 16 kbytes 64 kbytes 1 megabyte 1 megabyte Mem. Virtual — — — — — MICROPROCESSADORES DA DÉCADA DE 80 Processador 286 386DX 386SX 486DX Lançamento 1/2/1982 17/10/1985 16/6/1988 10/4/1989 Clock 6/12,5 MHz 16/33 MHz 16/33 MHz 25/50 MHz Barramento 16 bits 32 bits 16 bits 32 bits Transistores 134.000 275.000 275.000 1,2 milhão Tamanho 1,5 1 1 0,8 Cap. Endereço 16 megabytes 4 gigabytes 4 gigabytes 4 gigabytes Mem. Virtual 1 gigabyte 64 terabytes 64 terabytes 64 terabytes MICROPROCESSADORES DA DÉCADA DE 90 Processador 486SX Pentium® Pentium® Pro Pentium® II Lançamento 22/4/1991 22/3/1993 1/11/1995 7/5/1997 Clock 16/33 MHz 60/166 MHz 150/200 MHz 200/300 MHz Barramento 32 bits 32 bits 64 bits 64 bits Transistores 1,185 milhão 3,1 milhões 5,5 milhões 7,5 milhões Tamanho 1 0,8 0,6 0,6 Cap. Endereço 4 megabytes 4 gigabytes 64 gigabytes 64 gigabytes Mem. Virtual 64 gigabytes 64 terabytes 64 terabytes 64 terabytes 21 PROJETO DE UM PROCESSADOR MODULAR PARA FINS DIDÁTICOS CAPÍTULO IV PROPOSTAS DE PROCESSADORES MODULARES Neste capítulo se define “processador modular” e se listam as características de duas propostas de processador-computador modular: o SAP (Simple As Possible) e o VSM (Very Simple Microprocessor). O projeto do processador modular, objeto deste trabalho de conclusão de curso, é descrito no Capítulo V. 4.1 Processador modular A modularidade ajuda o pesquisador ou projetista a resolver problemas, dividindo-os em um conjunto de problemas menores, cujas soluções combinadas representam a solução total. Um processador modular é um circuito digital construído em blocos funcionais que propiciam o projeto flexível de um sistema e favorecem a compreensão do todo, a partir do domínio das partes. O conjunto de módulos proposto neste projeto é baseado em circuitos integrados digitais tradicionais, de relativa simplicidade de manuseio e de aquisição. A interligação lógica destes módulos permite a construção de um sistema em diferentes níveis de complexidade. A flexibilidade admite mudanças de rumos e novas propostas de projeto, alterando-se, por exemplo, a arquitetura ou o conjunto de instruções, com a implementação de unidades alternativas. É claro que, para tirar proveito deste recurso, um aluno (usuário) deve primeiro adquirir os conhecimentos de arquitetura que orientarão posicionamento dos módulos e as interconexões que resultarão na função lógica desejada. 4.2 Trabalhos relacionados Os computadores SAP (Simple As Possible – Simples Quanto Possível) [MALVINO] e o VSM (Very Simple Microprocessor – Microprocessador Muito Simples) [SICARD] são as duas propostas mais difundidas de aparatos computacionais modulares utilizados para fins didáticos. Na verdade, o projeto do SAP tem três gerações, sendo o VSM uma versão 22 avançada do SAP-1, em termos de conjunto de instruções, apesar de ser 4 bits, enquanto o SAP é de 8 bits são considerados computadores primitivos, devido à pobreza de recursos implementados, já que foram projetados para principiantes, com a finalidade de introduzir conceitos relacionados à operação interna, razão pela qual são examinados neste texto. A segunda geração do SAP, o SAP-2 (8 bits), inclui instruções de salto que possibilitam a construção de estruturas de controle de fluxo, como seleção e repetição. O SAP-3 já é uma proposta de processador de 8 bits comparável ao microprocessador 8085, incluindo instruções complexas como as de manipulação de pilha. 4.2.1 SAP-1 O SAP-1 é considerado um computador porque armazena o programa e os dados antes de começar os cálculos. Depois, executa automaticamente as instruções de programa, sem a intervenção humana. Com uma arquitetura organizada em barramentos, todas as saídas dos registradores para o mesmo são de três estados (tri-state), o que possibilita a transferência de dados ordenadamente, sem risco de colisão. A Figura 4.1 mostra um diagrama correspondente à arquitetura do SAP-1. Os números nas setas da Figura 4.1 significa o número de bits ou de vias. 23 Figura 4.1 – Arquitetura do SAP [MALVINO]. 4.2.1.1 Descrição do funcionamento do SAP-1 O funcionamento inicia com um Reset, antes da cada processamento no computador, que “zera” o Contador de Programa. Sua tarefa é fornecer à memória o endereço da próxima instrução a ser buscada e executada. Pode contar de 0000 a 1111 (de zero a quinze em Contador de Programa Entrada e REM RAM 16 x 8 Registrador de Instruções controlador / sequencializad or 8 8 8 8 8 8 8 8 4 4 4 4 4 4 12 8 8 Acumulador A Somador / Subtrator Registrador B Registrador de Saída Indicação Visual binária 4 Barramento ML CLK PC CLK CLR PE CE IL CLK CLR IE CLK CLR CLK CLR AL CLKAE US UE BL CLK OL OBUUAAIIMPP LLESELELCELEC 24 decimal). A primeira instrução é armazenada no endereço binário 0000 (zero), a segunda instrução no endereço 0001 (um), a terceira no endereço 0010 (dois) e assim por diante. Quando começa o processamento ou execução no computador, o contador de programa envia o endereço 0000 à memória, e se incrementa para 0001. Depois de a primeira instrução ser buscada e executada, o contador envia o endereço 0001 e, novamente, é incrementado. A segunda instrução é buscada e executada, o endereço 0010 é fornecido à memória para o desenvolvimento da próxima instrução, o PC é novamente incrementado e continua assim até a última instrução (parada). O endereço no contador de programa é retido no registrador de endereço de memória. Mais tarde o REM aplica este endereço de 4 bits à RAM, onde uma operação de leitura será realizada. A memória RAM pode ser programada por meio dos registradores, de chave de dados e de endereços. Isto permite armazenar um programa e os dados antes de um processamento no computador. Durante o processamento do computador, a RAM recebe endereço de 4 bits do REM e nela se executa uma operação de leitura. Desta maneira a instrução ou palavra de dados armazenada é colocada no barramento para uso em alguma outra parte no computador. O registrador de Instruções faz parte da unidade de controle. Para buscar uma instrução, o computador realiza uma operação de leitura de memória, coloca o conteúdo do local de memória endereçado no barramento. Ao mesmo tempo, o registrador de instruções é preparado para carregamento na próxima transição positiva de clock. O conteúdo do registrador de instruções é dividido em dois nibbles (2x4 bits). O nibble superior é uma saída de dois estados que vai diretamente ao bloco rotulado, “controlador-sequencializador”. O nibble inferior é uma saída de três estados que é lida no barramento quando necessário. Antes de cada processamento, um sinal CLR é enviado ao contador de programa e um sinal CLR é enviado ao registrador de instruções. Isso zera o contador de programa e elimina a última instrução no registrador de instruções. Um sinal clock (CLK) é enviado a todos os registradores de memória intermediária, sincronizando a operação do computador ou seja, todas as transferências ocorrem na transição positiva de um sinal CLK comum. Observa-se que um sinal CLK também vai ao contador de programa. 25 O Acumulador é um registrador de memória inrtermediária que também armazena respostas durante um processamento. A saída de dois estados liga-se diretamente ao somador- subtrador. A saida de três estados vai ao barramento. O somador-subtrador é um circuito combinacional, o que siginifica que seu conteúdo pode variar logo que suas palavras de entrada variem. O registrador B é um registrador de memória intermediária, usado em operações aritméticas. Um baixo Lb e uma transição positiva do clock carregam a palavra do barramento dentro do registrador B. A saída de dois estados do registrador B alimenta o somador- subtrador, fornecendo o número a ser adcionado ou subtraído do conteúdo do acumulador. No final de um processamento, o acumulador contém a resposta ao problema que está sendo resolvido. Neste ponto para transferir a resposta para o mundo exterior. Usa-se o registrador de saída. Quando Ea for alto e Lo for baixo, a próxima transição positiva do clock carregará a palavra do acumulador no registrador de saída. O registrador de saida, é conectado aos circuitos de interface que comandam dispositivos periféricos, por exemplo um display. O indicador visual em binário é uma fileira de oito diodos emissores de luz (LEDs). Usada para mostrar o conteúdo da porta de saída. Após a transferência da resposta ao acumulador pode-se ver a resposta em forma binária. 4.2.1.2 Conjunto de instruções do SAP Antes de se programar em baixo nível é preciso saber o conjunto de instruções e operações básicas que podem ser executadas. No caso em análise tem o seguinte conjunto de instruções: a) LDA, carrega o acumulador com conteúdo relativo ao endereço hexadecimal colocado em seguida; b) ADD, acrescenta o conteúdo do local e memória especificado ao conteúdo do acumulador, substituindo o conteúdo original; c) SUB, subtrai um conteúdo do local e memória especificado do conteúdo do acumulador; d) OUT, trasfere o conteúdo do acumulador para a porta de saída, e HTL suspende o processamento de dados. 26 4.2.1.3 Programação do SAP A programação do SAP é realizada através de códigos específicos, que são utilizados para carregar palavras e instruções chamadas, também, de código operação. Devido ao projeto do SAP ser teórico e não houver nenhuma implementação deste, o autor não mencionol como os dados poderiam entrar na memória (falta uma unidade de entrada). 4.2.2 VSM O VSM (Very Simple Microprocessor = microprocessador muito simples), é uma versão atualizada da arquitetura de computador muito popular, o SAP. Também introduz os conceitos básicos da arquitetura de um microprocessador da maneira mais simples possível. 4.2.2.1 Estrutura física do VSM Figura 4.2 - Arquitetura do VSM. CLOCK CLEAR CONTROLADOR • HABILITA SINAIS • DESABILITA SINAIS CONTADOR DE PROGRAMA MEMORIA DO PROGRAMA (8x8) BARRAMENTO INTERNO ACUMULADOR “A” UNIDADE ARITMÉTICA ACUMULADOR “B” REGISTRADOR DE ENTRADA REGISTRADOR DE SAÍDA DADOS EXTERNOS DADOS EXTERNOS 27 O contador de programa, conta de 0000 até 1111, monitora o endereço das instruções ativas. Inicialmente está ativado com o endereço 0000. Assim, o processador inicia da primeira instrução da memória. A memória do programa, armazena o programa a ser executado. Cada linha de programa tem o tamanho de 8 bits: Os quatro bits mais significantes são instruções próprias, os bits menos significantes são os dados que acompanham as intruções, quando estes forem necessários. O acumulador “A” armazena temporariamente os resultados computados pelo microprocessador. O acumulador é um registrador de 4 bits. Quando o resultado é requisitado o acumulador coloca o mesmo no barramento interno. O acumulador “B”, é semelhante ao acumulador “A”. É utilizado principalmente para o fornecimento do número a ser adicionado ou subtraído do acumulador “A”. A unidade aritmética realiza as operacões de adição e subtração, entre outras do gênero, como incremente e decremeto. O registrador de entrada dá a oportunidade de entrar com dados do mundo exterior para dentro do processador. O registrador de saída, transfere os dados do barramento interno para o mundo exterior. Normalmente, a instrução é realizada no final do programa para apresentar o resultado final. O registrador de saída armazena os dados na borda descendente do pulso de clock. Este registrador é conectado a uma interface com o display de saída para mostrar o resultado ao usuário. 4.2.2.2 Conjunto de instruções do VSM As instruções básicas estão listadas a seguir. As mesmas estão codificadas em 4 bits, portanto sendo possível obter apenas 16 instruções. a) Não Operação (NOP = 0000) A instrução NOP não tem efeito interno nos registradores. Contudo, esta instrução é muito interessante para entender-se como trabalha o controle de um ciclo básico de clock. b) Adição (ADD = 0001) O conteúdo do acumulador “A” é adicionado ao dado que vem como parâmetro, e o resultado é atualizado no acumulador “A”. A adição é feita com 2 números de 4 bits. O carry é ignorado. c) Subtração (SUB = 0010) 28 O conteúdo do acumulador“A” é subtraído ao dado que vem como parâmetro e o resultado é atualizado no acumulador “A”. A subtração é realizada nos 4 bits. O carry é ignorado. d) Obter Entrada (IN = 0011) O conteúdo da porta de entrada é transferido para o acumulador “A”. Enviar os dados para a saída (OUT = 0100).Os dados do acumulador “A” é armazenado na porta de saída. A porta de saída é um registrador de 4 bits que armazena os valores conservando-se permanentemente até que a instrução “OUT” seja novamente atualizada. e) Carregar Instrução (LDA = 0101) LDA serve para carregar o acumulador “A” com um valor. 29 PROJETO DE UM PROCESSADOR MODULAR PARA FINS DIDÁTICOS CAPÍTULO V DESCRIÇÃO DO PROJETO Este capítulo descreve o projeto de um processador modular de 8 bits, na verdade, um sistema mínimo, idealizado para auxiliar o aprendizado de conteúdos de sistemas digitais em cursos de tecnologia. É difícil para acadêmicos de Engenharia tratar, com autoridade, de aspectos da teoria didática porque não se tem muito contato com ela no decorrer do curso regular. Além disso, num trabalho de conclusão de curso, o espaço é limitado para se aprofundar nas ideias. Por estas razões, é possível que alguns conceitos aqui veiculados não tenham sido colocados de modo muito preciso, do ponto de vista educacional. 5.1 Aspectos didáticos A teoria construtivista, representada principalmente por Piaget, Bruner e Vygotsky, trata de conteúdos que mais se aproximam da idéia do projeto. Segundo esta teoria, o aprendizado é um processo ativo, no qual o aprendiz adquire, filtra, transforma informações e constrói novos conceitos, habilidades, atitudes e valores, baseado em conhecimentos prévios e nos que estão sendo estudados e no contato com a realidade, o meio ambiente e as outras pessoas. Considerando a possibilidade de alteração no desempenho de uma pessoa pela interferência de outra, o professor traduz a informação para um formato adequado à compreensão do aluno e incentiva suas descobertas. Os materiais servem de ponte entre o que o aprendiz já sabe e o que ele deve saber a fim de que o material possa ser aprendido de forma significativa. Dessa forma, o ambiente proposto, é um facilitador do desenvolvimento cognitivo porque, ao usá-lo, o aprendiz precisa filtrar a informação recebida em sala de aula e transformá-la numa nova informação através de inferência de hipóteses, assim, construindo um novo conhecimento. [MOTA] 5.1.1 Métodos e técnicas de ensino Para que o processo ensino-aprendizagem seja proveitoso e produza os resultados esperados, é necessário que se adotem métodos e técnicas adequadas. Métodos são roteiros gerais para executar as atividades e técnicas são as formas concretas de proceder. É claro que 30 cada conteúdo exige técnicas próprias e, em geral, variadas. Um projeto como este aqui apresentado não tem a pretensão de ser “o caminho”, apenas mais um recurso. A educação sistemática é uma atividade de socialização, de relacionamento. É claro que o método socializado é importante; conhecimentos podem ser adquiridos por meio da colaboração, mas é o indivíduo quem aprende e não o grupo. Sem individualização a aprendizagem não se realiza, porque ela é um fenômeno ou processo essencialmente individual. Por isso, ela é muito importante, tanto no início de uma atividade (para oferecer elementos de conhecimento e informação), como no final (para aprofundar e integrar os conhecimentos adquiridos). Para efeito de utilização deste projeto, um método que reúne os dois aspectos (sócio-individualizado) deve ser pesquisado. As técnicas mais utilizadas na sala de aula são expositivas, como a palavra do professor, os cartazes e os audiovisuais, têm como característica principal transmitir uma mensagem codificada, com ideias estruturadas, mas não fechadas (idealmente). Estas técnicas são ruins quando a interpretação é limitada ou condicionante. De preferência, devem ser associadas à experimentação, na busca de rendimento. 5.1.2 Recursos didáticos Meios de ensino ou recursos didáticos são os materiais utilizados pelo professor e pelos alunos para a organização e condução metódica do processo de ensino/aprendizagem [LIBÂNEO]. Devem ser utilizados para facilitar, acelerar e intensificar a aprendizagem, auxiliando o professor no papel de facilitador. Os meios que são mais utilizados são a própria voz do professor, quadro-de-giz ou quadro-branco, ilustrações, projeções e materiais impressos. Com o desenvolvimento tecnológico, equipamentos e aparelhos eletroeletrônicos estão cada vez presentes na sala de aula, com destaque para o computador, em particular, os programas simuladores, com uma vasta biblioteca de componentes que permitem o desenvolvimento de experimentos sem a necessidade dos componentes reais. Esses programas podem servir para aulas de reforço, autodidatismo, levantamento de previsões de resultados e Ensino a Distância, mas dificilmente vão satisfazer aqueles que gostam de ver o resultado concreto. Para estes, a saída são as matrizes de contato, as placas de circuito impresso e os kits didáticos. É nesta categoria que o projeto se encaixa, como um recurso ativo e dinâmico, que permite ao educando tentar e testar novas alternativas. 31 5.2 Descrição dos módulos Há muitas empresas produzindo microprocessadores para finalidades diversas e outras tantas montando microcomputadores a partir de microprocessadores, memórias e outros componentes. O computador aqui descrito é genérico e primitivo, projetado em módulos baseados em circuitos integrados tradicionais, mas que possibilita observar algumas características comuns dos microcomputadores usuais, como a arquitetura (registradores e barramentos), o conjunto de instruções (transferência de dados, operações lógicas e aritméticas) e os sinais de controle. O fato de ser modular traz a vantagem da flexibilidade de montagem das experiências e a possibilidade de visualizar os dados nos diversos pontos do circuito numa execução passo-a-passo. A Figura 5.1 mostra um sistema típico montado com elementos examinados neste projeto. A descrição a seguir se orienta nesta figura. Não se trata de protótipo porque o processador é modular, ou seja, as combinações podem variar dependendo da proposta adotada. Nem todos os módulos projetados ou previstos foram implementados, apenas um sistema mínimo para teste, conforme é descrito no Capítulo VI. 5.2.1 Unidade de controle e temporização Os sinais gerados pelo circuito de sincronismo afetam todos os eventos da CPU. São linhas de saída que indicam aos outros componentes quando eles devem operar, por exemplo, governar a leitura e escrita da memória ou habilitar algum alimentador do barramento (buffer tri-state). O computador inicia com um reset automático, pode reiniciar a qualquer momento, usando a tecla RST. A UCT possui um gerador de onda quadrada chamado de clock automático e um contador em anel. Um multiplexador seleciona entre o clock automático (do gerador) e um clock manual de uma chave sem rebatimento. O clock automático de alguns quilohertz (não é importante o valor, só a faixa) atua no modo de execução direta (R); o manual no modo passo a passo (RPP). O contador em anel é um circuito de recirculação de 4 bits baseado em registrador de deslocamento que ativa uma das 4 saídas de cada vez, e na mesma sequência. Estas saídas determinam as quatro fases do ciclo de busca e execução da instrução. Na primeira, o endereço apontado pelo PC é armazenado no registrador de endereços. Na segunda, o PC, ou seja, aponta para o endereço da próxima instrução. Na terceira, o endereço armazenado no 32 MAR é transferido para o barramentode endereços e a memória é habilitada para leitura. O conteúdo da memória deve corresponder a um código de uma instrução, cujo valor é armazenado no Registrador de Instruções. Na quarta, a instrução é executada. Figura 5.1 – Diagrama de blocos do Projeto PC ACC B FLAGS IR CLOCK RST LD R RPP BUFFER RAM MBR DADOS REG ENTRADA END MAR UCT Teclado Teclado U D E 33 5.2.2 Unidade Lógica e Aritmética A Unidade Lógica e Aritmética é responsável por realizar as a maioria das operações do processador, tais como: adição, subtração, incrementação, inversão, AND, OR e XOR. As entradas de seleção, geradas a partir da decodificação da instrução, definem o tipo de operação a ser realizada. A partir da operação da ULA, também podem ser carregados os bits indicadores do status da máquina num registrador chamado de FLAGS. Os indicadores típicos são de estouro de aritmética natural (carry), de estouro de aritmética sinalizada (overflow), de zero, de sinal e auxiliar. 5.2.3 Memória de trabalho A memória RAM é programada através do Registrador de Entrada, no modo programa (LD). Recebe sinais de habilitação para escrita: o conteúdo do barramento de dados é armazenado no endereço indicado. Sinais de controle vão alternando endereços e dados de acordo com os comandos: Acima (U), Abaixo (D) e Enter (E). No momento apropriado, a interface de teclado interrompe a CPU através de linhas especiais. 5.2.4 Registradores de dados e endereços Na fase de busca da instrução ou no modo de carga do programa, o Registrador de Endereços armazena o conteúdo do Contador de Programa. Os registradores de dados são o Acumulador (ACC) bidirecional e o Registrador Temporário (B). 5.2.5 Contador de programa O Contador de Programa indica o endereço da próxima instrução a ser executada. Tem sinais associados que permitem sua carga paralela (com o dado do barramento de dados), habilitador de contagem, habilitador de transferência (para o barramento de dados), direção (crescente ou decrescente) e inicialização (reset) 34 5.3 Observações gerais O decodificador de instruções está dentro da UCT e utiliza uma tabela armazenada em uma ROM (Read Only Memory – Memória só de leitura, não volátil) para gerar sinais a partir da instrução fornecida pelo Registrador de Instruções. As setas mais grossas no diagrama da Figura 5.1 indicam vias de dados com mais de um bit. Monitores auxiliares, construídos na forma de barra de leds podem ser usados para indicar o estado destas vias a qualquer instante. Todos os dispositivos que alimentam o barramento de dados (MBR, PC, ACC, saída da ULA, FLAGS e Registrador de Entrada) são tri-states para evitar colisão de dados. Num instante qualquer considerado apenas um destes dispositivos funciona como fonte para o barramento; os outros, ou recebem dados, ou ficam em alta impedância. Os sinais de controle deterninam a fonte da vez. O Registrador de Entrada também pode operar na entrada de dados em tempo de execução, associado à tecla Enter. Além das operações (e instruções) lógicas e aritméticas, o sistema pode executar instruções de transferência (carga e armazenamento). Registradores de trabalho podem ser implementados na RAM, usando modo de endereçamento indireto (variável de memória). Alguns recursos não foram contemplados no projeto: a pilha do programa e seu respectivo apontador, as funções de teste, comparação e desvio e a fonte de alimentação. Eles foram relacionados no capítulo de conclusão como sugestões para futuros trabalhos. O sistema usa um bloco de dois displays de sete segmentos para indicar o conteúdo do barramento de dados em hexadecimal. O registrador (buffer) de saída é opcional. PROJETO DE UM PROCESSADOR MODULAR PARA FINS DIDÁTICOS CAPÍTULO VI IMPLEMENTAÇÕES E TESTES Neste capítulo são abordados os aspectos práticos do projeto do processador digital para fins estudantis. Será demonstrado o desenvolvimento da ULA de oito bits, os barramentos de dados e instruções, uma interface para a saída de dados, um banco de registradores que auxiliarão no controle e processamento dos dados, uma unidade de entrada (chave de dados) e, por último, uma estrutura para apoiar todos os componente citados anteriormente. 6.1 Desenvolvimento da ULA de oito bits O primeiro questionamento no projeto foi o desenvolvimento de uma ULA oito bits, a partir de duas de quatro bits (74ls181), com as mesmas instruções originais. A integração entre as duas ULAs, foi feita utilizando o CI 74182 (Carry Look-Ahead). O funcionamento deste é baseado em uma geração e propagação de um carry instantaneamente, ou seja, sempre que for feita a soma binária entre dois ou mais bits 1. Os bits de entrada dos operandos da ULA são inseridos através de duas vias de dados de oito bits: um dado vindo do acumulador (ACC = registrador A) ou do registrador auxiliar (registrador temporário). O resultado da operação lógica ou aritmética, de acordo com as linhas de seleção, pode ser enviado a um registrador de saída, ou ao ACC, neste caso para atender a algumas instruções que necessitam de várias operações aritméticas ou lógicas sobre o mesmo valor de entrada. A Figura 6.1 mostra o circuito que integra as duas ULAs de quatro bits utilizando um carry look ahead, já que a função deste é efetuar uma operação aritmética obtendo o bit de carry diretamente a partir dos bits de entrada, sem precisar dos bits de saída de cada ULA, necessitando apenas dos pinos P e G, os carrys do CI 74181 [FARCHILD I]. As linhas de dados foram omitidas para não sobrecarregar a figura e fixar a atenção no que é de interesse imediato a integração das ULAs de 4 bits. 36 Figura 6.1 - Circuito de Expansão de duas ULAs de 4 bits para uma ULA d e 8 bits A ULA em questão possui 48 instruções, sendo 32 aritméticas e 16 lógicas. Considerando a aplicação no trabalho proposto, foram utilizadas 7 lógicas e 4 aritméticas, conforme a Tabela 6.1. Tabela 6. 1 - Instruções Utilizadas na ULA Instruções Lógicas (M = 1) Instruções Aritméticas (M = 0) Cn = X Cn = 0 Cn = 1 S3 S2 S1 S0 Operação S3 S2 S1 S0 Operação S3 S2 S1 S0 Operação 0 0 0 0 Not A 0 0 0 0 Inc A 1 0 0 1 A plus B 0 1 0 1 Not B 0 1 1 0 A minus B 1 1 1 1 A dec B 0 1 1 0 A xor B -------- --------- --------- ---------- 1 0 1 0 B -------- --------- --------- ---------- 1 0 1 1 A and B -------- --------- --------- ---------- 1 1 1 0 A or B -------- --------- --------- ---------- 1 1 1 1 A -------- --------- --------- --------- Os componentes utilizados para a montagem de um protótipo a nível de teste do circuito mostrado na Figura 6.1 foram: Cn+x 74LS181 74LS181 ULA 1 ULA 0 74LS182 Carry Look- Ahead Cn G G P P Cn G0 G1 P0 P1 Cn 13 12 15 15 17 17 Co 16 7 7 4 3 2 1 C0 37 • Um matriz de contatos (Protoboard) • Fios finos • Uma fonte de energia de 5 volts • Dip Switches (pequenas chaves seletoras) • 22 Resistores de 220Ω • 2 CIs 74LS181 (ULA de 4 bits) • 1 CI 74 LS182 (Carry Look-Ahead) • 9 LEDs A Figura 6.2 mostra como ficou o protótipo de testes da ULA de oito bits após ter sido montada e feitas as simulações necessárias para o funcionamento correto desta.
Compartilhar