Victor Grycajuk
2024 · Projeto pessoal

CPU de8 bits

Processador de 8 bits construído do zero, a partir da ULA, para entender arquitetura de computadores por dentro.

Diagrama de blocos da CPU de 8 bits
Projeto pessoal, 2024
Ano
2024
Função
Projeto pessoal
Contexto
Arquitetura de computadores
Stack
Arquitetura · Lógica digital · ULA

Dá para trabalhar a carreira inteira com sistemas embarcados tratando o processador como caixa preta. Este projeto foi o contrário disso: montar uma CPU de 8 bits partindo da unidade lógica e aritmética, para saber o que tem dentro.

A ULA veio primeiro, num repositório separado. É a peça que calcula, e construir só ela já obriga a encarar soma com vai-um, complemento de dois e as flags que o resto da máquina usa para decidir o que fazer em seguida.

A CPU veio depois: registradores, caminho de dados, decodificação de instrução e o ciclo de busca e execução amarrando tudo.

Por que isso importa no resto do portfólio

Quando você escreve firmware sabendo o que acontece entre buscar a instrução e executá-la, decisões que pareciam arbitrárias (por que essa operação custa mais ciclos, por que essa interrupção tem essa latência) passam a ter explicação.

O que tem dentro

Fiz no simulador Digital, seguindo a arquitetura SAP-1. Os blocos se comunicam por um barramento de 8 bits, e quem escreve nele em cada momento é decidido por drivers tri-state. Sem eles, dois componentes escrevem ao mesmo tempo e os sinais entram em curto.

A unidade de controle é um ring counter de quatro flip-flops D em anel, e é ele que dá as quatro fases de cada instrução. O contador de programa carrega o endereço no registrador de endereço, a memória de programa entrega a instrução ao registrador de instrução e o contador incrementa, o campo de endereço da instrução busca o operando na memória de dados, e a ALU executa e guarda o resultado no acumulador.

Cada instrução tem 8 bits, sendo 3 de opcode e 5 de endereço do operando. São oito operações: soma, subtração, multiplicação, divisão, shift para os dois lados, NAND e XOR. Nos shifts o campo de endereço é ignorado e a ALU opera só sobre o acumulador. A memória é separada em duas EEPROMs, 16 posições para programa e 32 para dados.

O programa de exemplo roda uma sequência de soma, multiplicação, shift à esquerda, subtração, shift à direita e divisão, e dá para acompanhar o acumulador e o registrador MQ mudando a cada ciclo. Não tem desvio condicional nem endereçamento indireto. O objetivo era mostrar o caminho mínimo de buscar, decodificar e executar, não construir uma máquina programável.

Modelo 3D

Modelo de demonstração

Registro visual

Próximo projeto ECU V3 - SMD