Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Synthèse d’un jeu vidéo
en VHDL ESEO - TP I2 – Synthèse VHDL
2
ESEO - TP I2 – Synthèse VHDL
Structure de principe d’un jeu vidéo De façon simplifiée, un jeu vidéo est constitué de : Un noyau (CORE) chargé de gérer les caractéristiques primaires des 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. Une unité d’affichage (DISPLAY) : c’est elle qui va produire les signaux de contrôle (synchros horizontale et verticale) et les signaux vidéo correspondant aux objets gérés par le noyau. L’aspect de ces objets (forme, couleur, etc.) est fonction des spécifications du jeu. ESEO - TP I2 – Synthèse VHDL
3
ESEO - TP I2 – Synthèse VHDL
Schéma structurel d’un jeu vidéo Spécifications standard vidéo caractéristiques primaires des objets du jeu CORE Gestion des objets du jeu DISPLAY Mise en forme des objets du jeu Signaux vidéo (Synchro, RVB) Commandes externes Spécifications comportementales Spécifications d’aspect ESEO - TP I2 – Synthèse VHDL
4
ESEO - TP I2 – Synthèse VHDL
Un standard vidéo simple : le système VGA (nom donné à l’interface : Video Graphics Adapter) Une image VGA est formée d’une trame de 480 lignes balayées de haut en bas, à raison de 60 trames par seconde. Chaque ligne comprend 640 pixels et est balayée de gauche à droite. 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 synchronisation verticale : signale le début d’une nouvelle trame 3 signaux analogiques vidéo (rouge, vert, bleu) d’amplitude maximale 1 volt sur charge de 75 ohms. ESEO - TP I2 – Synthèse VHDL
5
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 : 799 X Espace vidéo 479 480 524 Blanking Y 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é à bloquer les signaux RVB dans cet espace. ESEO - TP I2 – Synthèse VHDL
6
ESEO - TP I2 – Synthèse VHDL
Timing de la synchronisation Le contrôleur VGA délivre les signaux de synchronisation horizontale et verticale en fonction des valeurs des compteurs X et Y selon le timing suivant : Synchro horizontale (fonction de X) : 659 755 756 799 639 640 31.75 µs (31.5 KHz) Vidéo Retour (pas de vidéo) La fréquence d’adressage X sera de (800/31.75) = MHz, soit environ 25 MHz Synchro verticale (fonction de Y) : 493 494 495 524 479 480 16.67 ms (60 Hz) Vidéo Retour (pas de vidéo) ESEO - TP I2 – Synthèse VHDL
7
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 valeurs fournissent par décodage les signaux de synchronisation et de blanking. VSYNC Décodeur HSYNC BLANK X Y X = 799 Compteur Y % 525 E CLK (25MHz) Compteur X % 800 Sauf pour les besoins d’une simulation, une remise à zéro asynchrone des compteurs X et Y n ’est pas souhaitable en raison du décrochement momentané de la synchronisation au niveau de l’écran utilisé. ESEO - TP I2 – Synthèse VHDL
8
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 YP d’un objet qui doit être affiché sous l ’aspect d’un carré blanc de 10 pixels de côté, sur fond vert, avec le coin supérieur gauche calé sur (XP,YP). Le module DISPLAY aura la structure suivante : VSYNC HSYNC CTRL_VGA CLK (25MHz) GEN_RVB P_RVB BLANK RVB 3 GEN_CARRE P_VC VC X Y XP YP ESEO - TP I2 – Synthèse VHDL
9
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 then VC <= ‘1’; else VC <= ‘0’; end if; end process P_VC; Process de génération des signaux vidéo RVB : 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 process P_RVB; ESEO - TP I2 – Synthèse VHDL
10
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 celle du coin supérieur gauche (XS, YS). XS YS Le contenu de la matrice décrit l’objet (sprite) à afficher. On lui associe un tableau de L vecteurs de K bits pour un objet monochrome ou L vecteurs de K entiers pour un objet multicolore. Autant que possible ce tableau est implémenté à l’aide d’un bloc RAM du FPGA cible si ce dernier en dispose. Ceci est inféré automatiquement par la plupart des synthétiseurs. ESEO - TP I2 – Synthèse VHDL
11
ESEO - TP I2 – Synthèse VHDL
Process de description d’un sprite monochrome signal SPRITE : bit_vector (0 to 6); signal AD_SPRITE : integer range 0 to 9; ... P_SPRITE : process (AD_SPRITE) begin case AD_SPRITE is when 0 => SPRITE <= " "; when 1 => SPRITE <= " "; when 2 => SPRITE <= " "; when 3 => SPRITE <= " "; when 4 => SPRITE <= " "; when 5 => SPRITE <= " "; when 6 => SPRITE <= " "; when 7 => SPRITE <= " "; when 8 => SPRITE <= " "; when 9 => SPRITE <= " "; end case; end process P_SPRITE; ESEO - TP I2 – Synthèse VHDL
12
ESEO - TP I2 – Synthèse VHDL
Process de génération de l’image d’un sprite monochrome AD_SPRITE <= Y-YS; -- adresse de la ligne du sprite 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 then VS <= SPRITE(X-XS); else VS <= '0'; end if; end process P_VS; Process de génération des signaux vidéo RVB : 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 process P_RVB; ESEO - TP I2 – Synthèse VHDL
13
ESEO - TP I2 – Synthèse VHDL
Thème du TP 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 écran VGA. Le jeu consistera simplement à renvoyer la balle vers le fond du court en la 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ée jusqu’ à la relance d’une nouvelle partie. La partie s’arrête aussi lorsque le joueur a raté une balle… ESEO - TP I2 – Synthèse VHDL
14
ESEO - TP I2 – Synthèse VHDL
Implémentation Le jeu sera implémenté à l’aide d’une carte munie d’un FPGA Spartan3 de portes et équipée entre autres d’un port de sortie VGA et de 4 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.) Court : vert, mur à gauche de l’écran, joueur à droite. Balle : carré blanc 16x16 animé selon une trajectoire à +/- 45 degrés avec 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). ESEO - TP I2 – Synthèse VHDL
15
ESEO - TP I2 – Synthèse VHDL
Implémentation (suite) 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 à partir de la valeur du score. Règles comportementales : lorsque la balle rencontre la raquette il y a rebond et le score est incrémenté. Sinon la balle continue vers la droite et 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. En outre : Oscillateur à quartz externe 50 MHz Réinitialisation asynchrone par BTN3 (RAZ) ESEO - TP I2 – Synthèse VHDL
16
ESEO - TP I2 – Synthèse VHDL
Vue externe UP HSYNC DOWN NEW_GAME SQUASH VSYNC 3 RAZ RVB QUARTZ 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
17
ESEO - TP I2 – Synthèse VHDL
Analyse du noyau On peut procéder par objet à gérer : raquette, balle, score 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. Balle : deux compteurs/décompteurs (0 – 639 et ) 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 besoin en interne de deux drapeaux SENS_X et SENS_Y à gérer sur les valeurs extrêmes de XB et YB ou sur contact avec la raquette. Score : compteur SCORE (0-15) s’incrémentant à chaque rebond de la balle sur la raquette. Chaque rebond produit une impulsion COUP. Remis à zéro à chaque départ de nouvelle partie. Un petit séquenceur gérera le départ du jeu et son arrêt. ESEO - TP I2 – Synthèse VHDL
18
ESEO - TP I2 – Synthèse VHDL
Schéma structurel du niveau supérieur SQUASH YR UP XB HSYNC DOWN CORE DISPLAY YB NEW_GAME VSYNC SCORE RVB CLK RAZ PREDIV P_CLK QUARTZ 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
19
ESEO - TP I2 – Synthèse VHDL
Schéma structurel du component CORE CTRL_RAQ P_YR DOWN UP YR TEST_CONTACT YR XB YB CONTACT TEMPO P_TIMER TIMER CTRL_BALL P_XB P_YB XB YB SEQUENCEUR P_ETAT NEW_GAME ETAT COUP GEN_COUP XB SCORE SCORE CTRL_SCORE P_SCORE La même horloge CLK de 25 MHz est appliquée à tous les process synchrones. Le signal RAZ s’applique à tous les process synchrones. ESEO - TP I2 – Synthèse VHDL
20
ESEO - TP I2 – Synthèse VHDL
Séquencement de CORE CS_YB NEW_GAME = 1 1 CS_SCORE CS_XB NEW_GAME = 0 2 EN_XB EN_YB XB=639 SCORE=15 3 GAME_OVER 4 WIN NEW_GAME = 1 Les signaux WIN et GAME_OVER peuvent être utilisés de diverses façons : changement de couleurs, accélération du jeu, etc. ESEO - TP I2 – Synthèse VHDL
21
ESEO - TP I2 – Synthèse VHDL
Schéma structurel du component DISPLAY X,Y X GEN_RAQ P_VR VR CTRL_VGA Y HSYNC VSYNC YR BLANK GEN_BALL P_VB VB GEN_RVB P_RVB XB 3 YB RVB VS VIDEO_SCORE SCORE VIDEO_SCORE est un component générateur de caractères pour l’affichage du score. ESEO - TP I2 – Synthèse VHDL
22
ESEO - TP I2 – Synthèse VHDL
Développement Le projet comportera 6 fichiers (*.VHD) dont voici l’arborescence : Niveau supérieur : SQUASH.VHD Noyau : CORE.VHD Vidéo : DISPLAY.VHD Contrôleur VGA : CTRL_VGA.VHD Affichage du score : VIDEO_SCORE.VHD Affichage chiffres : GEN_CHIFFRES.VHD VIDEO_SCORE est un component à importer. GEN_CHIFFRE est importé par VIDEO_SCORE. ESEO - TP I2 – Synthèse VHDL
23
ESEO - TP I2 – Synthèse VHDL
Étapes du développement (1) Réalisation du component CTRL_VGA : codage et simulation. Codage des entity CORE et DISPLAY (entity seule), puis codage du niveau supérieur SQUASH (entity et architecture). Architecture de CORE : initialiser les signaux transmis à DISPLAY. (XB = 320, YB = 240, YR = 240, SCORE = 0 par exemple) Architecture de DISPLAY : instancier CTRL_VGA et VIDEO_SCORE et coder les process P_VR, P_VB et P_RVB. Synthétiser et tester le système sur écran VGA. A ce stade, la balle, la raquette et le score doivent apparaître (immobiles) conformément aux spécifications. ESEO - TP I2 – Synthèse VHDL
24
ESEO - TP I2 – Synthèse VHDL
Étapes du développement (2) Architecture de CORE : codage et test progressifs Gestion de raquette (YR) sous contrôle de UP et DOWN avec ralentissement par TIMER. Tester. Gestion de la balle (XB,YB) avec ralentissement par TIMER. Mouvement libre avec rebonds sur les bords du champ ou sur la raquette (rebond provoqué par le signal CONTACT) . Tester. Gestion du score : production d’un signal impulsionnel COUP qui doit apparaître à chaque entrée en contact avec la raquette. Ce signal doit servir à incrémenter SCORE. Tester. ESEO - TP I2 – Synthèse VHDL
25
ESEO - TP I2 – Synthèse VHDL
Étapes du développement (3) Architecture de CORE : codage et test progressifs (suite) Codage du séquenceur (signal ETAT) Mise sous contrôle de la balle et du score par ETAT. Test final. Étude de la mise en forme circulaire de la balle (sprite circulaire). ESEO - TP I2 – Synthèse VHDL
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.