Console de games em FPGA baseado em Nios II, com launcher residente em flash NOR, jogos carregados a partir de cartão SD, entrada por teclado PS/2 e suporte a controle via UART/Bluetooth.
English version: README.en.md
O projeto foi desenvolvido para a família Intel/Altera Cyclone III usando Quartus II 13.0 SP1 e Nios II EDS 13.0 SP1. O hardware integra CPU Nios II, SDRAM, interface PS/2, UART, SPI para SD card, controlador de flash paralela e saída para matriz de LED.
Ao energizar a placa:
- a FPGA carrega o hardware
- o Nios II inicia um bootloader mínimo em memória on-chip
- esse bootloader lê o
launchergravado na flash NOR - o
launchersobe em SDRAM - o
launchermonta FAT32 no cartão SD - os jogos
.gmodsão listados no menu - o jogo selecionado é carregado para SDRAM e executado
- Boot autônomo do sistema sem depender de
nios2-download launcherpersistido em flash paralela- Jogos armazenados no SD em formato
.gmod - Navegacão por teclado PS/2
- Controle alternativo via UART para módulo Bluetooth/controller serial
- Renderização em matriz LED HUB75
- Uso de SDRAM para execução do launcher e dos jogos
- Infraestrutura para atualizar launcher, boot e jogos separadamente
Pac-Man rodando na matriz LED com a placa em primeiro plano:
Launcher em execução com seleção de jogos no SD e controle Bluetooth via UART:
O hardware principal está em hardware/ e usa como topo o arquivo hardware/Hardware.vhd.
Blocos relevantes presentes no projeto:
- Nios II Qsys gerado em
hardware/NiosII_ps2/ - PS/2 via
ps2_avalon_interface.vhd - UART para recepção de comandos seriais/Bluetooth
- SPI SD card para leitura dos jogos no SD
- Flash NOR paralela para armazenamento do launcher
- SDRAM como memória principal de execução
- Matriz LED controlada por
led_matrix_avalon.vhd
Projeto Quartus:
- arquivo de projeto:
hardware/DriverVHDL.qpf - constraints e pinagem:
hardware/DriverVHDL.qsf
O software está organizado em três camadas principais:
- flashboot Bootloader mínimo executado a partir da memória on-chip. Carrega o launcher da NOR para SDRAM.
- flashwrite Aplicativo utilitário que grava ou atualiza a imagem do launcher na flash paralela.
- launcher
Menu principal que monta FAT32 no SD, lista os jogos e carrega arquivos
.gmod.
Pastas principais:
software/bsp/: BSP gerado pelo Nios II EDSsoftware/games/flashboot/: bootloadersoftware/games/flashwrite/: gravação da imagem do launcher na NORsoftware/games/launcher/: launcher e módulos de jogosoftware/scripts/: scripts auxiliares de build e programaçãosoftware/workspace/: área de app Nios usada no fluxo de desenvolvimento
Fluxo validado no projeto:
- o Nios II sai do reset na memória on-chip
- o
flashbooté executado - a flash NOR é estabilizada e colocada em
read array - o header
LNCHdo launcher é validado - o payload do launcher é copiado para SDRAM
gp,speentrysão ajustados- a execução é transferida ao launcher
- o launcher monta o SD FAT32 e lista os jogos
Documentação de apoio:
software/games/flashboot/BOOT_FLOW.mdsoftware/games/flashboot/README.mdsoftware/games/flashwrite/README.md
Os jogos atuais no SD usam arquivos binários .gmod.
Características do formato atual:
- múltiplos segmentos carregáveis
entry_addr,stack_addregp_addrno cabeçalho- carga direta em SDRAM pelo launcher
Definições:
Jogos atualmente presentes no repositório:
- Arkanoid
- Boulder Dash (
gdash) - Pac-Man
- Pong
- River Raid
- Snake
- Space Invaders
- Tetris
Os binários prontos de exemplo estão em:
O launcher aceita entrada por:
- PS/2
- UART
- botões locais mapeados no PIO
No launcher, o mapeamento principal é:
Up/Down: navegar no menuL,Enter,Spaceou equivalente serial: selecionar/carregar
Nos jogos, o código mostra leitura combinada de:
- scan codes de PS/2
- bytes recebidos pela UART
Isso permite usar teclado PS/2 ou um controle Bluetooth que entrega comandos seriais à UART do sistema.
A qualquer momento o sistema aceita os seguintes comandos:
- sw0 na DE0 reset o game
- button2 na DE0 recarrega o launcher. Permite o usuário chamar o launcher para carregar novo game
- Quartus II 13.0 SP1
- Nios II EDS 13.0 SP1
- Windows com acesso ao
Nios_Shell.bat - Cabo USB-Blaster
Caminhos usados nos scripts atuais:
F:\altera\13.0sp1\quartusF:\altera\13.0sp1\nios2eds
Se sua instalação estiver em outro local, ajuste os .bat e .ps1 em software/scripts/ e nas configurações do VS Code em .vscode/settings.json.
Gerar Qsys:
cd software\scripts
.\Generate_Qsys.batSintetizar no Quartus:
cd hardware
quartus_sh --flow compile DriverVHDLGravar FPGA:
cd hardware\output_files
quartus_pgm -m jtag -c USB-Blaster -o "p;DriverVHDL.sof"Regenerar arquivos do BSP:
cd software\bsp
nios2-bsp-generate-files --settings=settings.bsp --bsp-dir=.Compilar BSP:
cd software\scripts
.\compila_BSP.batCompilar e baixar o launcher para desenvolvimento:
cd software\games\launcher\app
.\compila_grava.batpowershell -ExecutionPolicy Bypass -File software\scripts\gerar_launcher_flash_image.ps1Esse script gera:
software/games/launcher/app/launcher_flash.imgsoftware/games/flashwrite/app/launcher_flash_payload.h
Depois de gerar a imagem:
- compile o
flashwrite - execute o
flashwritena placa - ele apaga, grava e verifica a imagem na flash
Documentação:
Sempre que o flashboot mudar:
- compile
software/games/flashboot/app - gere
hardware/onchip_mem.hex - recompile o hardware Quartus para embutir o novo HEX no bitstream
Fluxo detalhado:
Cada jogo externo possui um módulo próprio em:
software/games/launcher/app/<nome>_module/
Normalmente cada módulo contém:
main.cexternal_main.cbuild_external.bat
Exemplo de build de um jogo:
cd software\games\launcher\app\pacman_module
.\build_external.batO .gmod resultante e salvo em:
Documentação:
MEU_CONSOLE_FPGA_DE0_SD/
|- hardware/ -> projeto Quartus e componentes HDL
|- software/
| |- bsp/ -> BSP do Nios II
| |- games/
| | |- flashboot/ -> bootloader em on-chip
| | |- flashwrite/ -> gravação da imagem do launcher na NOR
| | |- launcher/ -> launcher e jogos
| |- scripts/ -> automação de build, flash e geração de imagens
| |- workspace/ -> app/workspace de desenvolvimento
|- .vscode/ -> tasks e botões de ação do VS Code
O repositório inclui configuração para trabalhar com VS Code:
- botões de açao em
.vscode/settings.json - tasks em
.vscode/tasks.json - debug em
.vscode/launch.json
O fluxo foi preparado para chamar o ambiente da Intel/Altera via Nios_Shell.bat.
Pelo estado atual do repositório:
- o hardware Quartus está presente e compilável
- o
flashbootestá integrado ao fluxo de boot - o
launchercarrega imagens.gmoddo SD - a leitura de FAT32 está implementada no próprio launcher
- os jogos já possuem módulos e artefatos
.gmod - o controle por PS/2 e UART está presente no launcher e nos jogos
- O projeto inclui arquivos gerados do Qsys/synthesis que fazem parte do fluxo atual.
- Artefatos pesados de compilação do Quartus e objetos temporários do Nios estão filtrados pelo
.gitignore. - Alguns documentos internos ainda refletem fases anteriores do desenvolvimento; este README descreve o fluxo validado a partir do estado atual do código.
Este projeto usa a licença MIT.

