Ce projet du module NUME2 à l'ENSEIRB-MATMECA consistait à concevoir, décrire en VHDL, simuler et prototyper sur FPGA un système de tirage de Loto : 6 nombres différents tirés aléatoirement entre 1 et 49, avec affichage sur les 4 afficheurs 7 segments de la carte Nexys A7 (FPGA Xilinx Artix-7, XC7A100T).
Principe de fonctionnement
Après un reset (RAZ = 1 puis 0), les afficheurs montrent « -00- » pour les 6 emplacements. Le tirage se fait via un compteur synchrone comptant de 1 à 49 en boucle, qui progresse tant que BOUTON = 1. Quand l'utilisateur relâche le bouton (BOUTON = 0), le compteur se fige et le circuit vérifie si le nombre a déjà été tiré :
- Si le nombre est nouveau → il est mémorisé dans un registre, et LED_OK s'allume
- Si le nombre est déjà sorti → LED_recommence s'allume, l'utilisateur doit retenter
Les 6 nombres sont stockés dans 6 registres, et l'affichage se fait au format « N - XX » (numéro du tirage, tiret de séparation, valeur entre 01 et 49). À la fin des 6 tirages, les LEDs clignotent pour signaler la fin du jeu.
Découpe architecturale
Le design est décomposé en blocs VHDL indépendants, conçus et validés séparément avant assemblage :
Bloc Clock Enable
L'horloge du FPGA tourne à 100 MHz — beaucoup trop rapide pour l'affichage ou l'interaction utilisateur. Trois signaux d'activation (Clock Enable) sont générés par division :
- CEtraitement — fréquence élevée (~25 MHz) pour garantir l'aléa du compteur. Plus le compteur tourne vite, plus le tirage dépend du timing humain de relâchement du bouton.
- CEaffichage — fréquence de quelques kHz pour le multiplexage des 4 afficheurs 7 segments (assez rapide pour être invisible à l'œil, assez lent pour que chaque digit soit lisible).
- CEclignotement — fréquence de quelques Hz pour le clignotement des LEDs en fin de jeu.
Machine à états (FSM)
Le séquencement du jeu est orchestré par une FSM qui gère les transitions entre les phases : attente d'un appui, vérification du nombre, mémorisation, passage au tirage suivant, fin de jeu. C'est le chef d'orchestre de l'ensemble du design.
Bloc Tirage
Contient le compteur 1–49, la logique de vérification (le nombre a-t-il déjà été tiré ?), et les 6 registres de mémorisation. La vérification se fait par comparaison du nombre courant avec le contenu des registres déjà remplis.
Bloc Affichage
Gère le multiplexage des 4 afficheurs 7 segments : un décodeur BCD → 7 segments convertit chaque chiffre en patron de segments, et un compteur de balayage active chaque digit tour à tour au rythme de CEaffichage. L'affichage est organisé en 4 digits : numéro du tirage (1–6), tiret de séparation, dizaines et unités du nombre tiré.
Flot de conception
Le projet s'est déroulé sur 5 séances, suivant le flot classique de conception numérique sur FPGA :
- Séance 1 — Découpe architecturale, description de la FSM et du bloc Clock Enable, validation par simulation
- Séances 2-3 — Description des blocs d'affichage, simulation, premier prototypage partiel sur la carte (validation de l'affichage seul)
- Séance 4 — Description et simulation du bloc Tirage
- Séance 5 — Assemblage final de tous les blocs, synthèse, configuration du FPGA et validation par prototypage du jeu complet
L'environnement utilisé est Xilinx Vivado pour la saisie VHDL, la simulation, la synthèse et l'implémentation. Le fichier de contraintes (.xdc) associe les signaux VHDL aux broches physiques de la carte Nexys A7.