Skip to content

SartMorgs/uPD

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Tabela de Conteúdo


Sobre o Projeto

O μPD surgiu como uma ferramenta para ajudar no ensino de Arquitetura de Computadores, sendo um processador monociclo cujo pode ter todas as suas instruções simuladas visualmente através de um software de simulação. O projeto foi expandido para uma IDE onde era possível gerar um programa no assemvbly do μPD, compilar e executar, além de gerar o binário do programa desenvolvido. Também foi acrescentado uma ferramenta de geração do "esqueleto" do seu código VHDL (o qual ele foi desenvolvido) para uso em um kit educacional de FPGA.

Intuito

O objetivo sempre foi contribuir com o aprendizado dos alunos, englobando em um mesmo processador a possibilidade de aprendizado de várias áreas da computação em conjunto.

Equipe

Quem projetou a arquitetura do processador, bem como boa parte do código em VHDL foi o Marcelo Daniel Berejuck. A Morgana Sartor foi quem ajudou no desenvolvimento do código VHDL e testes, e foi uma das programadoras do software de simulação. A Thaynara Mitie foi uma das programadoras do software e responsável por seus testes de funcionamento.


Sobre o Processador

O μPD utiliza uma arquitetura baseada na arquitetura RISC (Reduced Instruction-Set Computer), o que significa que todas as operações são realizadas com o uso dos registradores. A arquitetura RISC é muitas vezes chamada de “arquitetura Load/Store”. O processador μPD possui um Banco de Registradores com quatro registradores de uso geral (R0, R1, R2 e R3) que podem ser utilizados pelo usuário sem nenhuma restrição.

O procesador μPD é dividido em dois caminhos lógicos, denominados de Caminho de Controle e Caminho de Dados. O caminho de controle é responsável por ler as instruções de máquina armazenadas em uma memória do tipo ROM (Read Only Memory), externa ao processador, e controlar o fluxo de execução das tarefas no caminho de dados. Seus principais componentes internos são a unidade de CONTROLE e uma memória tipo LIFO (Last in, First Out), usada para salvar os registradores quando é executada uma chamada de subrotina (instrução CALL e RET).

Logo
Arquitetura do processador

O caminho de dados é composto de um Banco de registradores (com quatro registradores), uma Unidade Lógica e Aritmética (ULA), uma memória tipo RAM (Random Access Memory), além de registradores que fazem interface com pinos de I/O (pinos da porta de entrada e saída de dados do processador). É possível conectar na porta I/O diversos dispositivos, que são comandados pelos sinais de endereços da porta I/O. Assim, é possível conectar até 512 dispositivos diferentes nesta porta.

A memória RAM interna tem capacidade para armazenar até 0,5 KWords ou 1KByte. Esse também é o tamanho máximo que um programa poder ter e ser armazenado na memória ROM. O processador μPD permite o uso de até seis (06) interrupções externas, programáveis. A interrupção de maior prioridade é a INT(0) e a de menor, INT(5). A cada interrupção gerada, o processador faz uma CALL para um endereço específico na memória ROM

Formato de Instrução

As instruções do processador possuem seis tipos de formatos, conforme mostra a Figura abaixo. Operações que envolvem três registradores utilizam o formato mostrado na Figura (a), operações que envolvem apenas um registrador destino e outro de entrada estão representadas na Figura (b), operações apenas com os dois registradores de entrada estão na Figura (c), e as operações apenas com registrador de destino estão representadas na Figura (d). Também existem operações que não envolvem registradores, elas estão representadas nas figuras (e) e (f). Abaixo estão descritas as instruções.

Logo
Formato de Instrução

Mnemônico Opcode (binário) Opcode (hexadecimal) Descrição
NOP 00000 00 “No operation”. Processador gasta um ciclo de relógio se fazernenhuma operação.
LDI 00001 01 Carrega valor imediato contido na instrução (bits de 0 a 8) em umdeterminado Registrador (RDST).
ADD 00010 02 Soma o conteúdo de dois registradores e armazena o resultado emum terceiro registrador.
SUB 00011 03 Subtrai o conteúdo de dois registradores e armazena o resultado emum terceiro registrador.
OUT 00100 04 Escreve o valor contido em um registrador (R0, R1, R2 ou R3) nos pinos de I/O.
IN 00101 05 Lê o valor contido na porta de I/O em um dos registradores (R0, R1, R2 ou R3).
JI 00110 06 Salto (jump) incondicional. Salta para o endereço contido na instrução (bits de 0 a 8).
LD 00111 07 Carrega conteúdo armazenado na memória RAM (endereço nos bits 0 a 8) em um dos registradores (R0, R1, R2 ou R3).
STO 01000 08 Armazena conteúdo de um registrador (R0, R1, R2 ou R3) em uma posição de memória RAM (endereço nos bits 0 a 8).
JZ 01001 09 Salto condicional (jump) se o conteúdo de um registrador (R0, R1, R2 ou R3) for igual a 0 (zero).
JE 01010 0A Salto condicional (jump) se o conteúdo de um registrador (R0, R1, R2 ou R3) for igual a 1 (um). Usar CMP antes.
AND 01011 0B Executa E lógico entre o conteúdo de dois registradores, armazenando o resultado em um terceiro registrador.
OR 01100 0C Executa OU lógico entre o conteúdo de dois registradores, armazenando o resultado em um terceiro registrador.
XOR 01101 0D Executa OU EXCLUSIVO lógico entre o conteúdo de dois registradores, armazenando o resultado em um terceiro registrador.
NOT 01110 0E Executa NÃO lógico no conteúdo de um registrador, armazenando o resultado em um segundo registrador.
CALL 01111 0F Chamada de subrotina (função). Endereço de salto está na instrução (bits de 0 a 8).
RETI 10000 10 Retorno de interrupção. Volta par o ponto onde estava sendoexecutado o programa antes da ocorrência da interrupção.
SETR 10001 11 Configura registradores internos do processador. No momento existeapenas o INT, que habilita interrupções externas.
STOP 10010 12 Para a execução do programa por tempo indeterminado.
RET 10011 13 Retorno de subrotina (função). Retorna para o endereço de onde foi chamada a última subrotina (CALL).
CMP 10100 14 Compara o conteúdo armazenado em dois registradores quaisquer (R0, R1, R2 ou R3).

Como foi Desenvolvido

A primeira versão do μPD foi implementada em desktop app, onde cada componente interno do processador foi representado como uma classe no software. A linguagem usada para o desenvolvimento foi C# e foi desenvolvido um tradutor com alguns tratamentos de erros para a transformação do Assembly em binário do μPD.


Sobre o Software

O software possui 3 visões diferentes, que estão expostas em abas.

  • Editor: Onde o usuário pode desenvolver o código
  • Execução por texto: Onde o usuário consegue acompanhar o funcionamento linha a linha do seu código
  • Execução por blocos: Onde o usuário consegue acompanhar o fluxo dos dados em cada componente do processador.

Logo
Editor de código

Logo
Execução por texto

Logo
Execução por bloco

Tiveram seu funcionamento interno exposto de forma visual os seguintes componentes:

  • Banco de Registradores
  • Memória RAM
  • In/Out
  • Interrupções

Também há o recurso que possibilita visualizar e gerar o esqueleto do código VHDL dos componentes

Logo
Esqueleto de código VHDL de um componente


Como Usar

Para utilizar o aplicativo basta baixar o arquivo compactado neste link, extraí-lo para uma pasta e instalá-lo clicando duas vezes em "setup.exe"


Como Contribuir

Para contribuir com este projeto você pode dar um fork, clonar no seu PC, fazer testes, procurar bugs, criar novas funcionalidades e etc. As formas para contribuir são muitas: encontrar bugs no código e na documentação, acrescentar issues, resolver issues (se existirem), deixar uma sugestão (issue) ou traduzi-lo para outro idioma. Sinta-se à vontade para entrar em contato com os desenvolvedores para conversar, sugerir algo ou apontar algum problema.


Roadmap de Melhorias

A partir desta primeira versão do software educacional pretende-se torná-lo uma webapp e disponibilizá-la no como uma imagem docker, de forma que qualquer pessoa possa facilmente fazer uso da mesma apenas baixando e abrindo em seu browser. Também há uma necessidade de aprimoramento do tradutor para um compilador de fato, possibilitando a visualização de métricas de desempenho e fornecendo erros mais claros e objetivos ao usuário.

About

No description, website, or topics provided.

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors