Hardware síntetizável em VHDL de uma arquitetura de computador MIPS de 32 bits (RISC), com Datapath modular, Unidade Lógica e Aritmética (ULA), Banco de Registradores, Multiplicador Matricial em Hardware, Memória de Instruções (ROM) e Memória de Dados (RAM).
Trabalho desenvolvido na disciplina de Sistemas Digitais Avançados (SDA) — Engenharia de Computação, Universidade Federal de Pelotas (UFPel).
- Visão Geral da Arquitetura
- Diagrama de Blocos do Datapath
- Formato das Instruções MIPS
- Estrutura dos Componentes
- Síntese e Simulação
- Autor
- Licença
O projeto consiste na descrição completa em hardware (VHDL) do fluxo de dados (Datapath) e memória de um processador baseado na arquitetura MIPS de 32 bits. O sistema foi desenvolvido visando a síntese lógica em FPGAs da família Intel/Altera (Quartus Prime) e simulação funcional via ModelSim/GHDL.
- Fluxo de Dados Modular: Separação clara entre Datapath, Banco de Registradores, Unidade Funcional (ULA) e Memórias.
- Multiplicador Matricial em Hardware: Unidade dedicada de multiplicação de 16/32 bits implementada via matrizes de somadores em hardware (
mult/matricial.vhd). - Memória de Instruções (ROM) e Dados (RAM): Barramentos de endereço de 8/32 bits com suporte a leitura e escrita síncrona/assíncrona.
- Banco de Registradores 32-bits: Suporte a leitura simultânea de 2 registradores e escrita com sinal de habilitação.
flowchart TD
subgraph IF["Fase de Busca (Fetch)"]
PC[Program Counter - PC.vhd] --> ROM[Memória de Instruções - ROM]
end
subgraph ID["Fase de Decodificação"]
ROM -->|Instruction 32b| DEC[Decodificador / Controle]
DEC -->|rs, rt, rd| RF[Banco de Registradores - 32b]
DEC -->|imm 16b| SE[Extensor de Sinal - SC.vhd]
end
subgraph EX["Fase de Execução"]
RF -->|Bus A| ALU[Unidade Funcional / ULA]
RF -->|Bus B| ALU
SE -->|Imm Ext| ALU
ALU <--> MULT[Multiplicador Matricial Hardware]
end
subgraph MEM["Fase de Memória & Writeback"]
ALU -->|Endereço| RAM[Memória de Dados - RAM 32b]
RAM -->|Dados Lidos| RF
ALU -->|Resultado ULA| RF
end
As instruções de 32 bits processadas pela arquitetura seguem a divisão padrão da literatura MIPS:
| Tipo | 31 .. 26 (6b) | 25 .. 21 (5b) | 20 .. 16 (5b) | 15 .. 11 (5b) | 10 .. 6 (5b) | 5 .. 0 (6b) |
|---|---|---|---|---|---|---|
| Tipo-R | opcode |
rs |
rt |
rd |
shamt |
funct |
| Tipo-I | opcode |
rs |
rt |
immediate [15:0] |
immediate [15:0] |
immediate [15:0] |
| Tipo-J | opcode |
target [25:0] |
target [25:0] |
target [25:0] |
target [25:0] |
target [25:0] |
opcode = instruction[31:26]: Código de operação.rs = instruction[25:21]: Registrador fonte 1.rt = instruction[20:16]: Registrador fonte 2 / destino em Tipo-I.rd = instruction[15:11]: Registrador destino em Tipo-R.immed = instruction[15:0]: Valor imediato de 16 bits.funct = instruction[5:0]: Função específica para instruções do Tipo-R.
mips-processor-vhdl/
├── PC.vhd # Contador de Programa (Program Counter 32-bits)
├── datapath/
│ ├── datapath.vhd # Top-level do Fluxo de Dados (Datapath)
│ ├── functionunit.vhd # Unidade Lógica e Aritmética (ULA) e Shifter
│ ├── registerfile.vhd # Banco de Registradores de 32-bits
│ ├── SC.vhd # Lógica de Controle de Sinal / Extensor de Sinal
│ ├── somadorN.vhd # Somador Genérico N-bits
│ └── somadorN_TB.vhd # Testbench de simulação do Somador N-bits
├── mem_dados/
│ └── mem_dados_32.vhd # Memória RAM de Dados (32-bits)
├── mem_instruc/
│ └── mem_32.vhd # Memória ROM de Instruções (32-bits)
├── mult/
│ ├── matricial.vhd # Multiplicador Matricial em Hardware (16/32-bits)
│ └── soma16b.vhd # Somador de 16-bits para o Bloco Multiplicador
├── mips_top.qpf # Arquivo de Projeto do Intel Quartus Prime
├── mips_top.qsf # Arquivo de Configuração de Pinos e Síntese Quartus
├── README.md
└── LICENSE
- Abra o arquivo de projeto
mips_top.qpfno Intel Quartus Prime Lite/Standard. - Selecione a família de FPGA desejada (ex: Cyclone IV / Cyclone V).
- Clique em Processing -> Start Compilation (
Ctrl + L).
Para compilar e simular os testbenches via GHDL:
# Compilar os componentes do Datapath
ghdl -a datapath/somadorN.vhd datapath/somadorN_TB.vhd
# Gerar a simulação e exportar forma de onda VCD
ghdl -e somadorN_TB
ghdl -r somadorN_TB --vcd=waveform.vcd
# Visualizar ondas no GTKWave
gtkwave waveform.vcdJoão Vitor Kauer Schuck
Engenharia de Computação — Universidade Federal de Pelotas (UFPel)
Distribuído sob a licença MIT.