PROJETO DE UM PROCESSADOR – NÍVEIS DE ABSTRAÇÃO
Prezado leitor, a série de artigos a seguir visa contribuir um pouco no ensino de conceitos básicos de programação e arquitetura de computadores. Iremos navegar através da análise de uma arquitetura de um processador multi-ciclo, de 16 bits, com um set de 24 instruções e orientado a acumulador. Além disso iremos discutir sua organização, aspectos da implementação em VERILOG, como simular utilizando MODELSIM, síntese lógica em FPGA e detalhes de uma síntese física em tecnologia .6um. Convido amigo leitor a acompanhar essa série de artigos, sugerindo novos caminhos, criticando e a ajudando a construir um pensamento sobre o assunto.
Em termos gerais um processador pode ser descrito em diferentes níveis de entendimento ou comumente chamado nível de abstração, neste artigo iremos trabalhar o (i) nível arquitetural e o (ii) nível organizacional de um processador. Devemos considerar que o nível mais abstrato, ou seja, com menos detalhes, deve interagir diretamente com o usuário, através de uma interface específica. Esse nível de abstração está ligado à arquitetura do processador e chamamos de nível arquitetural do processador ou somente arquitetura do processador. Portanto, a arquitetura são os meios utilizados pelo programador para acessar certos atributos do processador, tais como o registro de controle (control) da interface UART do processador NIOS II da Altera ou o Program Status Register (PSR) do processador ARM – M0.
Já o nível menos abstrato está ligado diretamente ao projetista de hardware. Agora estamos falando da organização do processador, ou seja, em como a arquitetura citada anteriormente está sendo implementada no processador. A figura 1 ilustra mais detalhes dessa organização no processador ARM7. Estes detalhes são extremamente importantes para entender como o processador foi desenvolvido e pensado pelo projetista de hardware. Agora estamos falando de detalhes dos sistemas, tais como se reset é ou não síncrono ou assíncrono, qual a frequência de relógio (clock) utilizada ou mesmo qual o padrão dos barramentos que vão interligar o processador com outros periféricos.
Figura 1: ARM 7 – Organização do Processador ARM7
Extrapolando um pouco sobre o assunto, é importante salientar que cientistas da IBM vêm mudando alguns paradigmas da computação através do processador TrueNorth. O link e são excelentes fontes para o leitor entender melhor esse processador sem relógio, neuromórfico e de baixo consumo (agradeço ao Don Antônio pela dica).
Assim, tendo em mente o que foi exposto, vamos passar a trabalhar a seguir em uma proposta de uma arquitetura e na organização de um processador baseado em uma estrutura Harvard e em uma arquitetura não puramente RISC*.
A arquitetura proposta para esse artigo foi inspirada em grande parte no projeto do processador BIP (Basic Instruction-set Processor) com ajuda do ambiente de desenvolvimento Bipide (fica a dica de um bom começo para quem pretende iniciar o desenvolvimento ou ensinar sobre processadores programáveis), que por sua vez foi utilizado no desenvolvimento do processador CHARRUA do programa CI-Brasil 2014.
Dessa forma, no intuito de abranger ao máximo diversos conceitos, fica definido os seguintes requisitos da nossa arquitetura:
Arquitetura orientada a acumulador;
Palavra de dados de 16bits;
Palavra de instrução de 16bits (Figura 2):
o Bit 15 até 11 – opcode ou código de operação;
o Bit 10 até 0 – operando;
Figura 2: Palavra de Instrução
Tipo de dados Inteiro com sinal e número negativos representados em complemento de dois;
Comunicação com uma memória de instrução de 16bit por 1024 posições**
Comunicação com uma memória de dados de 16bits por 2024 posições
Multi-ciclo com três estágios, sendo eles: (i) busca, (ii) decodificação e (iii) execução;
Além disso, devemos considerar detalhes de como as operações (e.g. subtração, adição, load, store, etc) interagem com os operandos, ou seja, o modo de endereçamento das instruções. No presente artigo iremos detalhar somente dois modos de operação: (i) modo direto e (ii) modo imediato. Uma dica interessante é comparar os modos de endereçamento de processadores como o Intel 8086 e processadores da família ARM para perceber que mesmo passando 30 anos entre as famílias alguns conceitos permanecem os mesmos.
Ainda referente à arquitetura vamos propor os seguintes registradores (Tabela 1):
Tabela 1: Registradores do Processador
Os registradores da Tabela 1 permitem o registro do endereço da instrução corrente (PC), o status da operação da Unidade Central de Processamento (CPU) e por fim o registro do resultado da operação realizada na ULA. Ainda sobre o registrador de STATUS, ele possui duas flags: a flag de ZERO, que indica se a operação resultou em zero ou não e a flag de operação NEGATIVA que indica se o resultado da operação foi um número negativo ou não. Uma explicação mais detalhada sobre a coluna interface da tabela 1 e o que é controle e caminho de dados será feita na continuação deste artigo no site – Organização – parte 2 (nada impede que o leitor mais curioso dê uma olhada na página 127 e 440 de [9]).
Considerando que a nossa palavra de instrução possui um opcode com cinco bits de tamanho, concluímos que podemos gerar até 32 operações (e.g. 32 operações correspondem às possíveis operações que o processador pode executar; onde n = 5 é a quantidade de bits do opcode). Sendo essas operações ainda divididas em cinco classes, (i) controle, (ii) transferência, (iii) artimética, (iv) desvio condicional e incondicional, (v) lógica. A tabela 2 especifica em mais detalhes a arquitetura do conjunto de instruções ou comumente chamado de ISA utilizado no nosso projeto (fica a dica ao leitor mais atento em dar uma olhada na IBM ISA do POWERPC) .
Tabela 2: Opcode, intruções e as classes do processador
Cada instrução possui um mnemônico que corresponde a uma instrução específica, ou seja, 01110 corresponde à instrução JMP. Posteriormente essa tabela será usada como referência para codificação do processador.
A próxima publicação (Organização – Parte 2) dará continuidade a este artigo. Iremos elaborar mais a ideia da organização do processador programável proposto. Sempre lembrando que esse exemplo é puramente didático e tem o intuito de explicar de forma simples conceitos básicos para formação de um conhecimento crítico sobre processadores embarcados. Este artigo não tem a pretensão de resumir ou esgotar o conhecimento sobre o assunto. Nesse sentido, convido o leitor a acompanhar a próxima publicação criticando, explorando e sugerindo sobre o assunto. Por fim gostaria de agradecer à pessoa do Prof.Cesar Zeferino sempre disposto a me ajudar, todos os instrutores e amigos do CI-Brasil 2014/Campinas pela paciência e claro aos editores do Embarcados pela oportunidade.
* Tendo em vista que algumas operações utilizam o acumulador e outras a memória, segundo [11] devemos levar em conta que o processador BIP (projeto base desse artigo) não se caracteriza como um processador RISC puro. Contudo outras características RISC marcantes são preponderantes, o set de instrução simples e reduzido, o formato das instruções, os modos de endereçamento, entre outras características.
** O protocolo de comunicação utilizado entre o processador e as memórias que será descrito com mais detalhes posteriormente.
*** Essa classe de operação também é conhecida como Acesso à Memória ou Armazenamento.
[1] http://www.altera.com/literature/ug/ug_embedded_ip.pdf
[2] http://en.wikipedia.org/wiki/ARM7
[3] http://www.research.ibm.com/articles/brain-chip.shtml
[4]http://www.extremetech.com/extreme/187612-ibm-cracks-open-a-new-era-of-computing-with-brain-like-chip-4096-cores-1-million-neurons-5-4-billion-transistors
[5] http://en.wikipedia.org/wiki/Harvard_architecture
[6] http://bipide.com.br/
[7] http://www.ci-brasil.gov.br/index.php/en/
[8] http://en.wikipedia.org/wiki/Addressing_mode
[9] Sistemas Digitais – Projeto, Otimização e Hdls – Frank Vahid, ed.Artmed, 2008.
[10] http://www.ibm.com/developerworks/systems/library/es-archguide-v2.html
[11] MORANDI, Diana;PEREIRA, Maicon Carlos; RAABE, André Luis Alice; ZEFERINO, Cesar Albenes. Um processador básico para o ensino de conceitos de Arquitetura e Organização de Computadores. Hífen, Uruguaiana, v.30,p. 73-80, 2006.
PROCESSADORES PROGRAMÁVEIS – como projetar um processador em VERILOG – Organização – parte 2 >>
HDL, Intermediário
Home » Hardware » Sistemas Digitais » PROCESSADORES PROGRAMÁVEIS – como projetar um processador em VERILOG – Arquitetura – parte 1
Mathes Souza
Muito boa a iniciativa principalmente para quem ta começando como eu. Parabéns e obrigado!
Achei muito interessante o artigo, para mim é muito importante de ter o conhecimento de estruturas de processadores e como desenvolvê-las, desenvolvi uma versão do 8086 semelhante a abordagem que você tomou no artigo, gostaria de compartilhar o link do git do projeto que foi desenvolvido, https://github.com/macaufreitas/micro-risc, única diferença é que os códigos se encontram em VHDL. Tentamos desenvolver um projeto de simples compreensão, portanto todos os códigos estão bem comentados e separados em projetos hierárquicos. Fique livre para user o material! O trabalho final pode ser encontrado em https://github.com/macaufreitas/micro-risc/blob/master/Latex/TFG-Latex-Final/Principal_ABNT.pdf.
Reply to Dênis Araújo da Silva
agradeço o seu cometário e parabéns pela iniciativa de divulgar a sua implementação, todo conhecimento deve ser transmitido. Estarei olhando o que você produziu e quem sabe posteriormente não atacamos em comunidade outros projetos. Sugiro que você entre em contato com os administradores do site e divulgue o seu trabalho, eles são pessoas muito acessíveis e existe espaço para todos.
Muito interessante o artigo Rodrigo. Gosto muito dos microcontroladores e processadores, será interessante conhecer o projeto e funcionamento mais a fundo de um processador.
Só uma dúvida, pode ser erro meu ao tentar entender os dois último acrônimos da tabela de instruções. SRL esta relacionado a ACC <> operando, e SLL ao contrário também?
Bom dia Harold, muito bem reparado. Realmente está invertido. Estou consertando imediatamente. Obrigado pelos comentários e pela contribuição.