← Retour au portfolio

Pong sur FPGA avec raquette IA

Jeu de Pong entièrement implémenté en VHDL sur une carte Basys3, sans processeur ni système d'exploitation : génération vidéo VGA, physique de la balle, détection de collisions et raquette adverse pilotée par IA, le tout traité en logique synchrone à 108 MHz. Projet réalisé en binôme avec Steeve Mbock.

PDF Rapport complet7 pages · architecture VHDL, logique de jeu, résultats Télécharger →

Pourquoi le FPGA

À la différence d'un microprocesseur qui exécute des instructions séquentielles, un FPGA (Field-Programmable Gate Array) permet de définir directement le matériel : on configure des blocs logiques et leurs interconnexions pour créer son propre circuit, parallélisable par nature. Ce projet illustre la faisabilité d'un jeu vidéo interactif entièrement matériel, sans aucun processeur embarqué.

Architecture VHDL

Le design s'organise en quatre processus synchrones : génération de l'horloge, commande du joueur, dynamique de la balle (physique, IA, collisions), et affichage. Trois IP cores Xilinx sont instanciés : un générateur d'horloge pixel à 108 MHz, un décodeur PS/2 pour la souris, et l'incrustation du curseur sur la trame VGA.

-- Détection de collision, raquette gauche (IA)
if (ball_dx < 0) and
   (next_x <= rect_x + RECT_W) and
   (next_x + BALL_SIZE >= rect_x) and
   (next_y + BALL_SIZE >= rect_y) and
   (next_y <= rect_y + RECT_H) then
    next_x := rect_x + RECT_W;
    ball_dx <= -ball_dx;
end if;

Logique de jeu

Terrain 1280×1024 @ 60 Hz, deux raquettes de 15×100 px et une balle de 16×16 px. La raquette du joueur se déplace à 6 px/trame via les boutons de la carte (≈ 360 px/s), synchronisée sur le signal de trame. La raquette adverse suit la balle verticalement à 5 px/trame, volontairement plus lente que la balle (8 px/trame en horizontal) pour laisser une chance au joueur. Les rebonds inversent la composante verticale sur les bords, et les collisions avec les raquettes inversent la composante horizontale avec correction de position pour éviter les chevauchements.

Résultats et limites

FonctionnalitéÉtat
Génération VGA 1280×1024 @ 60 HzImplémentée, stable
Balle mobile, rebonds, réinitialisationImplémentée
Raquette joueur + raquette IAImplémentées
Détection de collisions avec correctionImplémentée
Curseur souris PS/2, ligne médianeImplémentés
Affichage du scoreConstantes déclarées, logique non finalisée

Axes d'amélioration identifiés : finaliser l'incrémentation du score, borner explicitement la raquette joueur pour éviter tout dépassement d'écran, introduire une légère imprécision aléatoire dans l'IA pour un jeu moins prévisible, et ajouter des effets sonores via la sortie audio de la carte. Les principaux défis relevés ont été la synchronisation VGA, la gestion du pipeline de retard et une détection de collisions cohérente sur les deux raquettes.

← Retour au portfolio