7 Comentários

PROCESSADORES PROGRAMÁVEIS – como projetar um processador em VERILOG – Arquitetura – parte 1

processador em VERILOG processadores em verilog Processadores programáveis
Este post faz parte da série Processadores programáveis. Leia também os outros posts da série:

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.

PROJETO DE UM PROCESSADOR – NÍVEIS DE ABSTRAÇÃO

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.

pic1
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*.

ARQUITETURA PROPOSTA

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;

fig1

                              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): 

FIG2

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

tabela

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.

PRÓXIMA PUBLICAÇÃO

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.

Referências

[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.

Outros artigos da série

PROCESSADORES PROGRAMÁVEIS - como projetar um processador em VERILOG - Organização - parte 2 >>
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Hardware » Sistemas Digitais » PROCESSADORES PROGRAMÁVEIS - como projetar um processador em VERILOG - Arquitetura - parte 1
Comentários:
Notificações
Notificar
guest
7 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Matheus Souza
Mathes Souza
02/03/2015 01:31

Muito boa a iniciativa principalmente para quem ta começando como eu. Parabéns e obrigado!

Denis Silva
Dênis Araújo da Silva
23/02/2015 10:35

Olá Rodrigo,

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.

Parabéns pelo artigo !

Rodrigo Vinicius Mendonca Pere
Rodrigo Vinicius Mendonca Pere
Reply to  Dênis Araújo da Silva
24/02/2015 16:52

Olá Dênis,
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.

Haroldo Amaral
Haroldo Amaral
18/02/2015 22:47

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?

Rodrigo Vinicius Mendonca Pere
Rodrigo Vinicius Mendonca Pere
Reply to  Haroldo Amaral
19/02/2015 07:21

Bom dia Harold, muito bem reparado. Realmente está invertido. Estou consertando imediatamente. Obrigado pelos comentários e pela contribuição.

trackback
16/04/2015 15:53

[…] PROCESSADORES PROGRAMÁVEIS - como projetar um processador em VERILOG - Arquitetura - parte 1 […]

trackback
27/02/2015 02:38

[…] - como projetar um processador em VERILOG - Arquitetura - parte 1 publicado anteriormente.  Clique para acessa-lo [0]. Assim sendo, o presente artigo tem o intuito de discutir aspectos da organização de um […]

Talvez você goste:

Séries



Outros da Série

Menu

WEBINAR
 
NVIDIA JETSON – A Inteligência Artificial na palma de sua mão

Data: 08/07 às 14:00h Apoio: Arrow | NVIDIA
 
INSCREVA-SE AGORA »



 
close-link

WEBINAR
 
Redes Mesh para Monitoramento
e Controle de Sensores

Data: 15/07 às 14:00h Apoio: Artimar| Microchip| Tecsus
 
INSCREVA-SE AGORA »



 
close-link