La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Synthèse d’un jeu vidéo

Présentations similaires


Présentation au sujet: "Synthèse d’un jeu vidéo"— Transcription de la présentation:

1 Synthèse d’un jeu vidéo
en VHDL Groupe ESEO - TP I2 – Synthèse VHDL 2007

2 Groupe ESEO - TP I2 – Synthèse VHDL 2007
Structure de principe d’un jeu vidéo De façon simplifiée, un jeu vidéo est constitué de : Un coeur (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 coeur 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. Groupe ESEO - TP I2 – Synthèse VHDL 2007

3 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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 Groupe ESEO - TP I2 – Synthèse VHDL 2007

4 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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. Groupe ESEO - TP I2 – Synthèse VHDL 2007

5 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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. Groupe ESEO - TP I2 – Synthèse VHDL 2007

6 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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) Groupe ESEO - TP I2 – Synthèse VHDL 2007

7 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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é. Groupe ESEO - TP I2 – Synthèse VHDL 2007

8 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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 Groupe ESEO - TP I2 – Synthèse VHDL 2007

9 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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; Groupe ESEO - TP I2 – Synthèse VHDL 2007

10 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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. Groupe ESEO - TP I2 – Synthèse VHDL 2007

11 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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; Groupe ESEO - TP I2 – Synthèse VHDL 2007

12 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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; Groupe ESEO - TP I2 – Synthèse VHDL 2007

13 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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… Groupe ESEO - TP I2 – Synthèse VHDL 2007

14 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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). Groupe ESEO - TP I2 – Synthèse VHDL 2007

15 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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) Groupe ESEO - TP I2 – Synthèse VHDL 2007

16 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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); Contrainte : ce système sera décrit de façon schématique au niveau supérieur. Groupe ESEO - TP I2 – Synthèse VHDL 2007

17 Groupe ESEO - TP I2 – Synthèse VHDL 2007
Analyse du coeur 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. Groupe ESEO - TP I2 – Synthèse VHDL 2007

18 Groupe ESEO - TP I2 – Synthèse VHDL 2007
Schéma structurel du niveau supérieur SQUASH YR UP XB HSYNC DOWN CORE DISPLAY YB NEW_GAME VSYNC SCORE RVB CLK RAZ PREDIV QUARTZ Signaux internes : CLK : std_logic; XB : integer range 0 to 639; YR, YB : integer range 0 to 479; SCORE : integer range 0 to 15; Groupe ESEO - TP I2 – Synthèse VHDL 2007

19 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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. Groupe ESEO - TP I2 – Synthèse VHDL 2007

20 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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. Groupe ESEO - TP I2 – Synthèse VHDL 2007

21 Groupe ESEO - TP I2 – Synthèse VHDL 2007
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. Groupe ESEO - TP I2 – Synthèse VHDL 2007

22 Groupe ESEO - TP I2 – Synthèse VHDL 2007
Développement Le projet comportera 7 fichiers dont voici l’arborescence : Niveau supérieur : SQUASH.SCH Coeur : CORE.VHD Vidéo : DISPLAY.VHD gen25MHz : PREDIV.VHD Contrôleur VGA : CTRL_VGA.VHD Affichage du score : VIDEO_SCORE.VHD Le niveau supérieur sera construit en schématique. Affichage chiffres : GEN_CHIFFRES.VHD VIDEO_SCORE est un component à importer. GEN_CHIFFRE est importé par VIDEO_SCORE. Groupe ESEO - TP I2 – Synthèse VHDL 2007

23 Groupe ESEO - TP I2 – Synthèse VHDL 2007
Étapes du développement (1) Création d’un projet SQUASH, vide. Le FPGA cible est le XC3S200, boîtier FT256, grade 5. On y ajoutera au fur et à mesure de leur création les objets qui suivent. Réalisation du component CTRL_VGA : codage et simulation. La simulation utilise le process « launch Modelsim ». Régler auparavant la résolution de la simulation à 10ns dans les propriétés de ce process : simulation properties level advanced simulation resolution : 10ns (et non 1ps, trop long) Groupe ESEO - TP I2 – Synthèse VHDL 2007

24 Groupe ESEO - TP I2 – Synthèse VHDL 2007
Étapes du développement (2) Réalisation du component PREDIV et génération de son symbole Codage des entités CORE et DISPLAY (entity avec architecture vide) et génération de leurs symboles Groupe ESEO - TP I2 – Synthèse VHDL 2007

25 Groupe ESEO - TP I2 – Synthèse VHDL 2007
Étapes du développement (3) Saisie schématique du niveau supérieur. (Menu FILE -> New , option SCHEMATIC) Symboles précédemment créés I/O marker (à renommer) Groupe ESEO - TP I2 – Synthèse VHDL 2007

26 Groupe ESEO - TP I2 – Synthèse VHDL 2007
Étapes du développement (4) Assignation des signaux aux broches du FPGA. Cette opération peut se faire dans le cadre des propriétés de chaque port du schéma (bouton droit, object properties) : on ajoute un nouvel attribut loc que l’on value par le numéro de la broche appropriée. On peut plus simplement ici importer un fichier de contraintes squash.ucf, à ajouter au projet. Il reste à ce stade à construire les architectures de CORE et DISPLAY. Groupe ESEO - TP I2 – Synthèse VHDL 2007

27 Groupe ESEO - TP I2 – Synthèse VHDL 2007
Étapes du développement (5) Test statique 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. Groupe ESEO - TP I2 – Synthèse VHDL 2007

28 Groupe ESEO - TP I2 – Synthèse VHDL 2007
Étapes du développement (6) 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. Groupe ESEO - TP I2 – Synthèse VHDL 2007

29 Groupe ESEO - TP I2 – Synthèse VHDL 2007
Étapes du développement (7) 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). Groupe ESEO - TP I2 – Synthèse VHDL 2007

30 Groupe ESEO - TP I2 – Synthèse VHDL 2007
Conclusion Avez-vous appris un peu plus de choses ? Aller voir le fichier produit par le process  "View HDL Functional Model" Groupe ESEO - TP I2 – Synthèse VHDL 2007


Télécharger ppt "Synthèse d’un jeu vidéo"

Présentations similaires


Annonces Google