ESEO - TP I2 – Synthèse VHDL
Synthèse d’un jeu vidéo
en VHDL
ESEO - TP I2 – Synthèse VHDL
Structure de principe d’un jeu vidéo
Une unité d’affichage (DISPLAY) : c’est elle qui va produire les signauxde contrôle (synchros horizontale et verticale) et les signaux vidéocorrespondant aux objets gérés par le noyau. L’aspect de ces objets(forme, couleur, etc.) est fonction des spécifications du jeu.
Un noyau (CORE) chargé de gérer les caractéristiques primairesdes objets animés à incruster dans l’image : positions, amplitudes, etc.,ceci en fonction des règles comportementales du jeu.C’est ce noyau qui reçoit les commandes externes du jeu.
De façon simplifiée, un jeu vidéo est constitué de :
ESEO - TP I2 – Synthèse VHDL
Signauxvidéo
(Synchro,RVB)
Schéma structurel d’un jeu vidéo
CORE
Gestion desobjets du jeu
DISPLAY
Mise enforme des
objets du jeu
caractéristiquesprimaires
des objets du jeu
Commandesexternes
Spécificationscomportementales
Spécificationsd’aspect
Spécificationsstandard vidéo
ESEO - TP I2 – Synthèse VHDL
Un standard vidéo simple : le système VGA
(nom donné à l’interface : Video Graphics Adapter)
De façon simplifiée, un écran VGA (LCD ou cathodique) est piloté par 5 signaux :
2 signaux logiques de synchronisation :
synchronisation horizontale : signale le début d’une nouvelle ligne
Une image VGA est formée d’une trame de 480 lignes balayées de hauten bas, à raison de 60 trames par seconde. Chaque ligne comprend 640 pixels et est balayée de gauche à droite.
synchronisation verticale : signale le début d’une nouvelle trame
3 signaux analogiques vidéo (rouge, vert, bleu) d’amplitude maximale1 volt sur charge de 75 ohms.
ESEO - TP I2 – Synthèse VHDL
Le contrôleur vidéo VGA
A l’aide de deux compteurs X et Y, le contrôleur vidéo VGA sert à adresser en continu un espace 525 x 800 dans lequel se trouve inclus l’espace vidéo 480 x 640 comme le montre la figure suivante :
X
Y
0639 640 799
479480
524
Blanking
Espace vidéo
En dehors de l’espace vidéo les signaux vidéo (RVB) doivent être à 0.Le contrôleur vidéo VGA délivre un signal « blanking » destiné à bloquerles signaux RVB dans cet espace.
ESEO - TP I2 – Synthèse VHDL
Timing de la synchronisation
Le contrôleur VGA délivre les signaux de synchronisation horizontale et verticaleen fonction des valeurs des compteurs X et Y selon le timing suivant :
493 494
495 524 0 479 480
493 494
16.67 ms (60 Hz)
Vidéo
495 524 0
Retour (pas de vidéo)
659 755
756 799 0 639 640
659 755
31.75 µs (31.5 KHz)
Vidéo
756 799 0
Retour (pas de vidéo)
Synchro horizontale (fonction de X) :
Synchro verticale (fonction de Y) :
La fréquence d’adressage X sera de (800/31.75) = 25.196 MHz, soit environ 25 MHz
ESEO - TP I2 – Synthèse VHDL
Structure du contrôleur VGA
Le contrôleur VGA est composé de 2 compteurs X et Y dont les valeursfournissent par décodage les signaux de synchronisation et de blanking.
Compteur X % 800
Compteur Y % 525
E
CLK(25MHz)
VSYNC
DécodeurHSYNC
DécodeurBLANK
HSYNC
BLANK
DécodeurVSYNC
XY
Sauf pour les besoins d’une simulation, une remise à zéro asynchrone des compteurs X et Y n ’est passouhaitable en raison du décrochement momentané de la synchronisation au niveau de l’écran utilisé.
X = 799
ESEO - TP I2 – Synthèse VHDL
Génération de l’image d’un objet simple
Supposons que le noyau fournisse simplement les coordonneés XP et YPd’un objet qui doit être affiché sous l ’aspect d’un carré blanc de 10 pixels decôté, sur fond vert, avec le coin supérieur gauche calé sur (XP,YP). Le module DISPLAY aura la structure suivante :
GEN_RVB
P_RVB
BLANK
RVB3GEN_CARRE
P_VCVC
X Y
XP
YP
VSYNC
HSYNC
CTRL_VGA
CLK(25MHz)
ESEO - TP I2 – Synthèse VHDL
Process de génération de l’image d’un objet simple
Process de génération du signal VC validant la zone du carré :
P_VC : process (X,Y,XP,YP)begin
if X>=XP and X<XP+10 and Y>=YP and Y<YP+10 thenVC <= ‘1’;
else VC <= ‘0’;end if;
end process P_VC;
P_RVB : process (CLK)begin if CLK’event and CLK = ‘1’ then
if BLANK = ‘1’ then RVB <= “000”;elsif VC = ‘1’ then RVB <= “111”;else RVB <= “010”;end if;
end if;end process P_RVB;
Process de génération des signaux vidéo RVB :
ESEO - TP I2 – Synthèse VHDL
Génération de l’image d’un objet complexe (sprite)
L’objet à afficher ne se résume plus à une forme géométrique simple. Il s’inscrit cependant dans une matrice de L lignes de K pixels. Sa position est celledu coin supérieur gauche (XS, YS).
XS
YS
Le contenu de la matrice décrit l’objet (sprite) à afficher. On lui associe un tableaude L vecteurs de K bits pour un objet monochrome ou L vecteurs de K entiers pourun objet multicolore.
Autant que possible ce tableau est implémenté à l’aide d’un bloc RAM du FPGA cible si ce dernier endispose. Ceci est inféré automatiquement par la plupart des synthétiseurs.
ESEO - TP I2 – Synthèse VHDL
Process de description d’un sprite monochrome
P_SPRITE : process (AD_SPRITE)begin
case AD_SPRITE iswhen 0 => SPRITE <= "0111110";when 1 => SPRITE <= "1000001";when 2 => SPRITE <= "1010101";when 3 => SPRITE <= "1000001";when 4 => SPRITE <= "1001001";when 5 => SPRITE <= "1001001";when 6 => SPRITE <= "1000001";when 7 => SPRITE <= "1011101";when 8 => SPRITE <= "1000001";when 9 => SPRITE <= "0111110";
end case;end process P_SPRITE;
signal SPRITE : bit_vector (0 to 6);signal AD_SPRITE : integer range 0 to 9;
...
ESEO - TP I2 – Synthèse VHDL
Process de génération de l’image d’un sprite monochrome
Process de génération du signal VS validant les pixels du sprite :
P_VS : process (X,Y,XS,YS,SPRITE)begin
if X>=XS and X<XS+7 and Y>=YS and Y<YS+10 thenVS <= SPRITE(X-XS);
else VS <= '0';end if;
end process P_VS;
P_RVB : process (CLK)begin if CLK’event and CLK = '1' then
if BLANK = '1' then RVB <= "000";elsif VS = '1' then RVB <= "111";else RVB <= "010";end if;
end if;end process P_RVB;
Process de génération des signaux vidéo RVB :
AD_SPRITE <= Y-YS; -- adresse de la ligne du sprite
ESEO - TP I2 – Synthèse VHDL
Spécifications fonctionnelles
Le jeu vidéo à réaliser est un jeu de squash à un joueur, avec une balle et une raquette virtuelles qui se déplaceront dans le champ d’un écranVGA.Le jeu consistera simplement à renvoyer la balle vers le fond du court enla touchant avec la raquette dont la position dépend du joueur.Un score affiché sur l’écran s’incrémentera à chaque balle renvoyée. Lorsque le score atteint 15, la partie en cours est gagnée et sera arrêtéejusqu’ à la relance d’une nouvelle partie. La partie s’arrête aussi lorsquele joueur a raté une balle…
Thème du TPThème du TP
ESEO - TP I2 – Synthèse VHDL
Implémentation
Le jeu sera implémenté à l’aide d’une carte munie d’un FPGA Spartan3de 200 000 portes et équipée entre autres d’un port de sortie VGA et de4 boutons poussoirs BTN0 à BTN3. On adoptera les spécifications techniques suivantes :
Ecran VGA 480 lignes de 640 pixels, 60 trames/sec, couleurs 1 bit.(On aura donc 8 couleurs possibles : noir, blanc, rouge, vert, bleu, jaune, cyan, magenta.)
Balle : carré blanc 16x16 animé selon une trajectoire à +/- 45 degrésavec rebonds sur le fond et les côtés du court.
Raquette : rectangle rouge (largeur 16, hauteur 64) mobile verticalement à l’abscisse X= 512. Ses mouvements sont contrôlés par deux boutons poussoirs (BTN0 => DOWN, BTN1 => UP).
Court : vert, mur à gauche de l’écran, joueur à droite.
ESEO - TP I2 – Synthèse VHDL
Implémentation (suite)
Règles comportementales : lorsque la balle rencontre la raquette il y arebond et le score est incrémenté. Sinon la balle continue vers la droiteet la partie est arrêtée (GAME_OVER) jusqu’au redémarrage d’une nouvelle partie par le bouton NEW_GAME (BTN2). Lorsque le score atteint 15, le joueur a gagné (WIN) et la partie s’arrête également.
Affichage du score (0 à 15) en jaune, sur le haut de l’écran. Il sera fait appel à un component VHDL existant pour générer les chiffres à partirde la valeur du score.
En outre :
Réinitialisation asynchrone par BTN3 (RAZ)
Oscillateur à quartz externe 50 MHz
ESEO - TP I2 – Synthèse VHDL
Vue externe
HSYNC
VSYNC
RVB3
UP
DOWN
NEW_GAME
RAZ
QUARTZ
SQUASH
Types :
Toutes les entrées : std_logic;
Sorties HSYNC, VSYNC : std_logic;
Sortie RVB : std_logic_vector (0 to 2);
ESEO - TP I2 – Synthèse VHDL
Analyse du noyau
Balle : deux compteurs/décompteurs (0 – 639 et 0 - 479) produisant les coordonnées XB et YB. Ils s’incrémentent ou se décrémentent à un rythme imposé par le même temporisateur TIMER (mais plus lentement que la raquette ! ). Ces deux compteurs auront besoinen interne de deux drapeaux SENS_X et SENS_Y à gérer sur lesvaleurs extrêmes de XB et YB ou sur contact avec la raquette.
Raquette : compteur/décompteur (0 – 479) produisant l’ordonnée YR.Activé par les boutons UP et DOWN, il s’incrémente ou se décrémenteà un rythme imposé par un temporisateur TIMER.
Un petit séquenceur gérera le départ du jeu et son arrêt.
Score : compteur SCORE (0-15) s’incrémentant à chaque rebond dela balle sur la raquette. Chaque rebond produit une impulsion COUP.Remis à zéro à chaque départ de nouvelle partie.
On peut procéder par objet à gérer : raquette, balle, score
ESEO - TP I2 – Synthèse VHDL
Schéma structurel du niveau supérieur
HSYNC
VSYNC
RVB
UP
DOWN
NEW_GAME
RAZ
QUARTZ
SQUASH
YR
XB
YB
SCORE
PREDIVP_CLK
CLK
CORE DISPLAY
Types signaux internes : CLK : std_logic;XB : integer range 0 to 639;YR, YB : integer range 0 to 479;SCORE : integer range 0 to 15;
ESEO - TP I2 – Synthèse VHDL
Schéma structurel du component CORE
Le signal RAZ s’applique à tous les process synchrones.
SEQUENCEUR
P_ETAT
SEQUENCEUR
P_ETAT
NEW_GAME
ETAT
TEMPO P_TIMER
TEMPO P_TIMER
TIMER
SCORE CTRL_SCORE
P_SCORE
CTRL_SCORE
P_SCORE
CTRL_RAQ
P_YR
CTRL_RAQ
P_YRDOWN
UPYR
CTRL_BALL
P_XB P_YB
CTRL_BALL
P_XB P_YB
XBYB
La même horloge CLK de 25 MHz est appliquée à tous les process synchrones.
COUP
GEN_COUP
GEN_COUP
COUP
TEST_CONTACT
TEST_CONTACT
YR
XB
YB
CONTACT
CONTACT
XB
SCORE
ESEO - TP I2 – Synthèse VHDL
Séquencement de CORE
3 4
0
1
2
NEW_GAME = 1
SCORE=15XB=639
CS_SCORE
CS_YB
CS_XB
NEW_GAME = 1
EN_XB EN_YB
GAME_OVER WIN
Les signaux WIN et GAME_OVER peuvent être utilisés de diverses façons :changement de couleurs, accélération du jeu, etc.
NEW_GAME = 0
ESEO - TP I2 – Synthèse VHDL
Schéma structurel du component DISPLAY
GEN_RAQ
P_VR
GEN_RAQ
P_VR
GEN_BALL
P_VB
GEN_BALL
P_VB
YR
XBYB
CTRL_VGA
VIDEO_SCORE
GEN_RVB
P_RVB
GEN_RVB
P_RVB
SCORE
RVB
3
HSYNCVSYNC
BLANK
VS
VB
VR
X,Y
Y
VIDEO_SCORE est un componentgénérateur de caractères pourl’affichage du score.
X
ESEO - TP I2 – Synthèse VHDL
Développement
Le projet comportera 6 fichiers (*.VHD) dont voici l’arborescence :
Niveau supérieur : SQUASH.VHD
Niveau supérieur : SQUASH.VHD
Affichage chiffres :GEN_CHIFFRES.VHD
Affichage chiffres :GEN_CHIFFRES.VHD
VIDEO_SCORE est un component à importer.GEN_CHIFFRE est importé par VIDEO_SCORE.
Noyau : CORE.VHD
Noyau : CORE.VHD
Vidéo :DISPLAY.VHD
Vidéo :DISPLAY.VHD
Contrôleur VGA : CTRL_VGA.VHD
Contrôleur VGA : CTRL_VGA.VHD
Affichage du score :VIDEO_SCORE.VHD
Affichage du score :VIDEO_SCORE.VHD
ESEO - TP I2 – Synthèse VHDL
Étapes du développement (1)
Réalisation du component CTRL_VGA : codage et simulation.
Architecture de CORE : initialiser les signaux transmis à DISPLAY.(XB = 320, YB = 240, YR = 240, SCORE = 0 par exemple)
Codage des entity CORE et DISPLAY (entity seule), puis codagedu niveau supérieur SQUASH (entity et architecture).
Architecture de DISPLAY : instancier CTRL_VGA et VIDEO_SCOREet coder les process P_VR, P_VB et P_RVB. Synthétiser et testerle système sur écran VGA. A ce stade, la balle, la raquette et le scoredoivent apparaître (immobiles) conformément aux spécifications.
ESEO - TP I2 – Synthèse VHDL
Étapes du développement (2)
Architecture de CORE : codage et test progressifs
Gestion de la balle (XB,YB) avec ralentissement par TIMER.Mouvement libre avec rebonds sur les bords du champ ou sur laraquette (rebond provoqué par le signal CONTACT) . Tester.
Gestion de raquette (YR) sous contrôle de UP et DOWN avec ralentissement par TIMER. Tester.
Gestion du score : production d’un signal impulsionnel COUP quidoit apparaître à chaque entrée en contact avec la raquette. Ce signaldoit servir à incrémenter SCORE. Tester.
ESEO - TP I2 – Synthèse VHDL
Étapes du développement (3)
Architecture de CORE : codage et test progressifs (suite)
Mise sous contrôle de la balle et du score par ETAT. Test final.
Codage du séquenceur (signal ETAT)
Étude de la mise en forme circulaire de la balle (sprite circulaire).