/SimpleProcessor8Bits

:shipit: Virtualização de uma CPU 8-bits, no logisim, com instruções Assembly em formato inspirado no MIPS-Assembly.

Primary LanguagePython

Implementação do processador de 8bits (com modificações) apresentado em Step-by-step design and simulation of a simple CPU architecture [1]

Trabalho desenvolvido para a disciplina de Arquitetura e Organização de Computadores sob orientação do Profº M.Sc. Bruno Farias.

Equipe: @allexlima, @pauloigormoraes, @renanbarroncas

Especificações

  1. Endereçamento de 5bits;
  2. Registradores de 8bits;
  3. Memória de 32x24-bits para armazenamento de instruções;
  4. Operações disponíveis (na ULA):
    a) A,
    b) B,
    c) A+1,
    d) B + 1,
    e) A+B,
    f) A-B,
    g) A AND B, e
    h) A OR B
  5. [Extra] Instruções de 24bits (No projeto original, o autor utiliza 16bits);
  6. [Extra] Tradutor em Python: possibilita a escrita de instruções em Assembly em um formato inspirado no MIPS-Assembly para que possam ser convertidas para sequencias em hexadecimal (formato que Logisim exige para armazenar as instruções na memória ROM/RAM que o mesmo disponibiliza); e
  7. [Extra] Introdução de novas instruções.

Organização dos componentes

  1. ALU (Unidade Lógica e Aritmética)
    a) Arquitetura
    alt tag
    b) Chip
    alt tag

  2. Datapath (Caminho de dados)
    a) Arquitetura
    alt tag
    b) Chip
    alt tag

  3. Unidade de Controle
    a) Arquitetura
    alt tag
    b) Chip
    alt tag

  4. Visão principal/final
    alt tag

Requisitos para a simulação

  1. Logisim
  2. Python 2.7.x

Inicialização

  1. Clone este repositório
$ git clone https://github.com/allexlima/SimpleProcessor8Bits
$ cd SimpleProcessor8Bits/
  1. Abra o arquivo Processor.circ com o Logisim.

Criando programinhas em "Assembly"

Como informado, nós desenvolvemos uma espécie de tradudor que converte as instruções do nosso processador (que são escritas em um formato inspirado no MIPS-Assembly) para o formato hexadecimal, para poder ser lido pelo Logisim.

Quais instruções estão disponíveis?

alt tag

Todos os arquivos em assembly (.asm) devem ficar na pasta ./Assembly/, enquanto que os no formato hexadecimal (.hex), os que são gerados pelo tradutor, são criados diretamente na pasta ./Test/

Utilizando o tradutor (exemplos)

Na pasta ./Assembly/ já existem dois exemplos soma.asm e fibonacci.asm.

  1. Abra o arquivo soma.asm, que deve estar como código abaixo:
input .a, 6
inc .a
print .a
inc .a
print .a
input .b, 4
add .a, .b
print .a
  1. Observe que as parcelas da soma encontram-se nas linhas 1 e 6. Altere como queira.
  2. Feche o arquivo e abra o terminal.
  3. Informe o nome do arquivo a ser "traduzido" para hexadecimal, nesse caso soma.asm, para o programa translator.py:
$ python translator.py soma.asm
  1. O programa irá converter e salvar a saída com o mesmo nome (porém extensão diferente) na pasta ./Test/
  2. Com o projeto Processor.circ aberto no Logisim, carregue o arquivo .hexde saída do tradutor na memória RAM e em seguida inicie o clock.
  3. O resultado será exibido nos displays do processador.

Mais detalhes

Na pasta ./Docs/ desse repositório, você pode encontrar os slides que utilizamos nas apresentações do projeto (Apresentação 01 - Resumo do projeto.pdf é um resumo geral do trabalho original enquanto que Apresentação 02 - Trabalho final.pdf são itens referentes ao nosso projeto). Além dos slides, há também a tabela ISA.ods que contém alguns detalhes técnicos importantes.

Você também pode encontrar mais conteúdos legais sobre o tema nas referências [2] e [3].

Dúvidas? Sugestões? Bugs? Entre em contato conosco :)

Referências

  1. Schuurman, D. C. (2013, March). Step-by-step design and simulation of a simple CPU architecture. In Proceeding of the 44th ACM technical symposium on Computer science education (pp. 335-340). ACM. Available in http://dl.acm.org/citation.cfm?id=2445296&dl=ACM&coll=DL&CFID=795199471&CFTOKEN=65361630
  2. TANENBAUM, A. S.Organização e estruturada de computadores. São Paulo: PearsonPrentice Hall, 2013. ISBN 9788581435398.
  3. MONTEIRO, M. A.Introdução à Organização de Computadores. 5. ed. Rio de Janeiro:LTC, 2007. ISBN 9788521615439.