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

Synthèse d’un jeu vidéo en VHDL

Embed Size (px)

DESCRIPTION

Synthèse d’un jeu vidéo en 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., - PowerPoint PPT Presentation

Citation preview

Page 1: Synthèse d’un jeu vidéo en VHDL

ESEO - TP I2 – Synthèse VHDL

Synthèse d’un jeu vidéo

en VHDL

Page 2: 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 :

Page 3: Synthèse d’un jeu vidéo en VHDL

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

Page 4: Synthèse d’un jeu vidéo en VHDL

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.

Page 5: Synthèse d’un jeu vidéo en VHDL

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.

Page 6: Synthèse d’un jeu vidéo en VHDL

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

Page 7: Synthèse d’un jeu vidéo en VHDL

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

Page 8: Synthèse d’un jeu vidéo en VHDL

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)

Page 9: Synthèse d’un jeu vidéo en VHDL

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 :

Page 10: Synthèse d’un jeu vidéo en VHDL

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.

Page 11: Synthèse d’un jeu vidéo en VHDL

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;

...

Page 12: Synthèse d’un jeu vidéo en VHDL

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

Page 13: Synthèse d’un jeu vidéo en VHDL

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

Page 14: Synthèse d’un jeu vidéo en VHDL

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.

Page 15: Synthèse d’un jeu vidéo en VHDL

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

Page 16: Synthèse d’un jeu vidéo en VHDL

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);

Page 17: Synthèse d’un jeu vidéo en VHDL

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

Page 18: Synthèse d’un jeu vidéo en VHDL

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;

Page 19: Synthèse d’un jeu vidéo en VHDL

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

Page 20: Synthèse d’un jeu vidéo en VHDL

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

Page 21: Synthèse d’un jeu vidéo en VHDL

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

Page 22: Synthèse d’un jeu vidéo en VHDL

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

Page 23: Synthèse d’un jeu vidéo en VHDL

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.

Page 24: Synthèse d’un jeu vidéo en VHDL

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.

Page 25: Synthèse d’un jeu vidéo en VHDL

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).