Vous êtes sur la page 1sur 12

Projet VHDL

Casse-briques
DOUMENC Rmi BERHAULT Guillaume

10 janvier 2011

SOMMAIRE

I.

Prsentation du Projet ........................................................................................................ 3 A. B. Cahiers des charges ..................................................................................................... 3 Schma gnral ........................................................................................................... 4 Ecran VGA .................................................................................................................... 4 1. 2. 3. 4. a) b) 5. B. 1. 2. 3. 4. Historique .................................................................................................................... 4 Fonctionnement .......................................................................................................... 4 Gestion de laffichage .................................................................................................. 6 Gestion du dplacement de la balle ............................................................................ 6 Principe de dplacement ......................................................................................... 6 Contact avec un bord .............................................................................................. 7 Gestion du dplacement du curseur ........................................................................... 9 Ecran LCD ................................................................................................................... 10 Historique .................................................................................................................. 10 Fonctionnement ........................................................................................................ 10 Gestion de laffichage ................................................................................................ 10 Gestion du rafrachissement ..................................................................................... 11 Evaluation des performances ........................................................................................ 11 Conclusion ..................................................................................................................... 12

II.

Codage ................................................................................................................................. 4 A.

III. IV.

Doumenc Rmi & Berhault Guillaume

Page 2

Casse-briques / VHDL

I.

Prsentation du Projet

A. Cahiers des charges


Le but du projet est de raliser un jeu de casse brique (sans brique) sur un cran VGA implment sur une FPGA Ecran VGA : Affichage de la raquette et de la balle et ventuellement des briques. Ecran LCD : Affichage dinformations : - Temps de jeu - Nombre de rebonds - Nombre de briques casses (sil y en a) - Prcision (sil y a des briques) Lappui sur le bouton poussoir du bouton rotatif lance la balle lorsquelle est fige au milieu de lcran (dbut de jeu, ou balle perdue) Le bouton rotatif gre le dplacement de la raquette. Un interrupteur dclenche la pause. Trois interrupteurs permettent de slectionner la difficult (3niveaux de difficult) Un bouton poussoir permet de changer laffichage des informations sur lcran LCD. Un bouton poussoir dclenche un reset. Raquette : Grer le dplacement de la raquette et son immobilisation lors dun contact avec les bords. Balle : Grer les dplacements et les rebonds de la balle. Lorsque la balle est perdue (contact avec le bas de lcran) la balle est repositionne au milieu de lcran et est immobile.

Doumenc Rmi & Berhault Guillaume

Page 3

Casse-briques / VHDL

B. Schma gnral
clock50_in reset

Filter_anti_bounce
clock50_in reset button_line rotation

Cursor_state_machine
clock50_in reset rotation sens strobe

VGA_module
clock50_in reset push_button sens strobe switch_pause level_in red_out green_out blue_out hs_out vs_out start_out rebond_out

Button_line

Push_button switches

RAM
clock50_in start_in rebond_in adresse switches level_out donnees

embedded_kcpsm3
in_port interrupt interrupt_ack reset clock50_in write_strobe read_strobe out_port port_id

Figure I-1 : Schma bloc gnral de fonctionnement

II.

Codage

A. Ecran VGA
1. Historique Signification de VGA : Video graphics arrays . Ce type dcran t introduit par IBM en 1987. Il rfre aujourdhui un affichage en 640x480 pixels. 2. Fonctionnement En se rfrant la documentation de la carte FPGA SPARTAN-3E nous dcouvrons que la sortie VGA se dcompose en 5 signaux. Trois dentre eux concernent les couleurs primaires et les 2 autres servent effectuer le balayage horizontal et vertical comme pour un cran analogique (voir Figure II-1 : Connectique VGA dune FPGA Spartan-3E ci-aprs).

Doumenc Rmi & Berhault Guillaume

Page 4

Casse-briques / VHDL

Figure II-1 : Connectique VGA dune FPGA Spartan-3E

Les signaux VGA_HSYNC et VGA_VSYNC sont les deux signaux qui vont dfinir le balayage de lcran une frquence de 60Hz. Le premier signal correspond la synchronisation horizontal et le deuxime la synchronistion verticale. Pour comprendre cela il suffit de regarder comment se dplace le faisceau (si lon a un cran LCD il ny a pas de faisceau, mais cest mieux pour comprendre). Le faisceau balayage plus large que lcran et va de gauche droite sans arrt. Il ne revient pas spontanment gauche et sur la ligne du dessous. Pour cela nous utilisons le signal de synchronisation horizontal qui va faire revenir le faisceau au dbut de la ligne suIvante (cf Figure II-2: Exemple de timing dun cran tube cathodique).

Figure II-2: Exemple de timing dun cran tube cathodique

On remarque alors que le retour la ligne suivante se fait lors du passage du signal de synchronisatoin horizontal du niveau haut au niveau bas pendant une certaine dure. Ainsi lorsque un certain nombre de ligne auront t pass le faisceau se situera en bas droite de lcran. Afin de la ramener en haut gauche et de recommencer il faut cette fois untiliser le signal de synchronisation vertical, en le faisant passer dun niveau haut un niveau bas. Le tableau ci-dessous (Figure II-3 : Timing des signaux de synchronisation) nous donne les diffrentes temporisations qui nous permettent savoir quand il est possible dmettre un signal. En effet il nest pas possible dafficher quelque chose sur lcran lorsque le faisceau dpasse de lcran ou lorsquil revient se repositionner en dbut de ligne.

Doumenc Rmi & Berhault Guillaume

Page 5

Casse-briques / VHDL

Figure II-3 : Timing des signaux de synchronisation

Pour synchroniser les signaux nous devons utiliser une horloge dont la priode est de soit une horloge 25MHz. Ainsi chaque front reprsente un pixel. Il suffit ensuite de suivre les valeurs du tableau afin de dfinir la zone dcran dans laquelle il est possible dafficher. 3. Gestion de laffichage Pour pouvoir afficher dans la zone dcran possible, nous utilisons deux compteurs (horizontal_counter et vertical_counter). Ces derniers sont initialiss 0. A chaque coup dhorloge 25MHz le compteur horizontal est incrment de 1. Ce compteur reprsente les clocks du tableau en Figure II-3 : Timing des signaux de synchronisation, pour le horizontal sync . A laide du schma en dessous du tableau prcdent nous voyons quil faut attendre Tpw+Tbp avant dtre dans une zone daffichage. En loccurrence ceci correspond 96+48=144 coups dhorloge ou une valeur de 144 pour le compteur horizontal. Le signal naffiche plus audel de 784 coups dhorloge, ce qui correspond bien 640 pixels affichs. Quant au compteur vertical, il est incrment lorsque le compteur horizontal atteint sa valeur maximale, soit 800. Cette fois, laffichage nest possible quentre des valeurs du compteur vertical comprises entre 31 et 511. Ce qui reprsentent bien une hauteur de 480 pixels. Le schma ci-dessous, nous permet de visualiser ces compteurs.
Figure II-4 : Dfinition de la zone daffichage avec compteurs

4. Gestion du dplacement de la balle a) Principe de dplacement La balle est place au centre lorsque le joueur commence la partie, elle est ensuite lance lorsque le joueur appuie sur le bouton poussoir du bouton rotatif. La balle est paramtre par les coordonnes X_position et Y_position (centre de la balle), et son dplacement par les vecteurs X_slope et Y_slope (vecteurs pentes) voir Figure II-5 : Coordonnes de la balle dans le plan. Le dplacement est grer par lhorloge clock10 cadenc 100 Hz qui permet davoir un dplacement fluide et visible de la balle. La zone affichable de la balle correspond une rsolution de 480x640, ce qui revient, lorsque lon utilise les signaux vertical_counter et horizontal_counter, utiliser, comme expliqu prcdemment, les intervalles :

Doumenc Rmi & Berhault Guillaume

Page 6

Casse-briques / VHDL

144 < horizontal_counter < 784 31 < vertical_counter < 511

Y_position X_slope

Y_slope

44

X_position
Figure II-5 : Coordonnes de la balle dans le plan.

11 84

La balle se dplace dans la zone affichable, c'est--dire lorsque ses coordonnes sont comprises entre les bords verticaux et horizontaux. On utilise galement les deux signaux vertical_counter et horizontal_counter pour reprer la position des bords de la balle et grer son affichage. A chaque front dhorloge de clock10 si la balle est toujours contenue dans la zone affichable ainsi que son futur dplacement lest encore, alors on incrmente sa position avec la valeur des coordonnes de la pente (voir ci-aprs), sinon elle rebondit (voir II-4-b Contact avec un bord). Si elle est juste dplace nous avons : X_position<=X_position+X_slope ; Y_position<=Y_position+Y_slope ; b) Contact avec un bord Le bord est maintenant compos dune bordure supplmentaire de largeur 2 pixels. Elle sert mieux visualiser les zones de contacts. Le contact de la balle avec un bord de la zone affichable est repr lorsque lingalit suivante nest plus vrifie : Bord_Gauche_Affichage + taille_balle < position X < Bord_Droit_Affichage taille_balle On dtermine ensuite quel bord est responsable du contact et on effectue une inversion de coordonne du vecteur directeur afin de renvoyer la balle, tout en conservant langle dincidence.

Doumenc Rmi & Berhault Guillaume

Page 7

Casse-briques / VHDL

Figure II-6 : Reprsentation dun rebond sur le bord droit

Dans lexemple ci-dessus : Lorsque lingalit nest plus vrifie alors cela signifie que lon entre en contact avec le bord droit, on inverse alors la composante en X du vecteur directeur :

De manire gnral, lorsque lon arrive sur les bords gauche et droit on inverse la composante en X de la pente et lorsque lon arrive sur le bord haut ou bas (curseur) on inverse la composante en y.

Doumenc Rmi & Berhault Guillaume

Page 8

Casse-briques / VHDL

5. Gestion du dplacement du curseur Le curseur est gr par le bouton rotatif, son dplacement est fait suivant laxe des X. La rotation du bouton entraine lincrmentation ou la dcrmentation du signal X_cursor_position en fonction du sens de rotation (droite ou gauche). La largeur du curseur est gre par le signal cursor_size, sa hauteur est fixe 10. Bordures Largeur 2

Cursor_size 01 44 11 X_cursor_position
Figure II-7 : Coordonnes du curseur dans le plan.

84

De manire analogue au contact de la balle avec le bord, celui du curseur avec un bord de la zone affichable est repre lorsque lingalit suivante nest plus vrifie :

Figure II-8 : Curseur en bute

Lorsque cest le cas, on arrte lincrmentation ou la dcrmentation de X_cursor_position, selon le bord de contact, ainsi le curseur reste en contact avec le bord jusqu ce que lutilisateur actionne le bouton rotatif dans le sens oppos.

Doumenc Rmi & Berhault Guillaume

Page 9

Casse-briques / VHDL

B. Ecran LCD
1. Historique LCD : Liquid Crystal Display Lcran LCD est principalement utilis depuis la fin des annes 90 en noir et blanc. Son principal avantage est sa faible consommation dnergie. Ceci fait de lui un bon lment de systme embarqu, comme dans un tlphone portable. 2. Fonctionnement Lutilisation de lcran LCD va se faire laide du PicoBlaze de la carte. Le programme de gestion dinitialisation et denvoi des donnes lcran est dj donn. Avant de commencer la partie, lcran fait dfiler un message de bienvenue et invite le joueur dbuter la partie. Ce dernier peut mettre en pause le jeu tout instant en activant un interrupteur. Trois autres interrupteurs servent choisir le niveau de difficult du jeu. 3. Gestion de laffichage Nous utilisons une ram dans laquelle nous commenons par stocker des messages prdfinis qui changeront en fonction des choix de lutilisateur. Il y a le message de bienvenue, laffichage de la pause lorsque le jeu est en pause et enfin il y a le temps de jeu, le niveau et le nombre de rebonds qui saffichent sur lcran en mme temps. Le joueur dbute la partie en appuyant sur le bouton poussoir du bouton rotatif. Lcran affiche alors le temps de jeu, le niveau courant ainsi que le nombre de rebonds de la balle. Le temps de jeu stend de 000s 999s. Chacun des trois chiffres est cod par une variable en BCD. Ensuite cette dernire valeur est concatne avec la valeur 3 afin dobtenir le code hexadcimal de la table ASCII du chiffre en question. Voir lexemple ci-aprs :

Figure II-9 : Table ASCII

Exemple pour 5s :

Doumenc Rmi & Berhault Guillaume

Page 10

Casse-briques / VHDL

4. Gestion du rafrachissement Pour pouvoir afficher le changement dheure nous devons commencer par crer une horloge cadence la seconde. Ainsi nous pouvons donner le temps de jeu en secondes. Laffichage de lcran reste fixe et ne se rafrachi que lors dun changement dtat, cest--dire lorsque un la configuration des switches changent par exemple. Pour pouvoir rafrchir laffichage nous gardons en mmoire le code qui a t demand et nous le ractivons rgulirement, plus dune fois par seconde, afin de voir le temps scouler.

III.

Evaluation des performances

Afin dvaluer les performances de notre systme nous pouvons tudier les diffrents rapports de synthse que Xilinx nous donne. Device Utilization Summary Used 295

Logic Utilization Total Number Slice Registers Number used as Flip Flops Number used as Latches Number of 4 input LUTs Logic Distribution Number of occupied Slices

Available 9,312

Utilization 3%

294 1 706
499

9,312 4,656 499 499 9,312

7% 10% 100% 0% 9%

Number of Slices containing only related logic Number of Slices containing unrelated logic Total Number 4 input LUTs Number used as logic Number used as a route-thru Number used for Dual Port RAMs Number used for 32x1 RAMs Number of bonded IOBs IOB Flip Flops IOB Latches Number of Block RAMs Number of GCLKs Total equivalent gate count for design Additional JTAG gate count for IOBs

499
0

914
706 140

16 52 27 5 7
1 3 82,004 1,296

232

11%

20 24

5% 12%

Nous voyons alors le nombre de Slice utilis ainsi que la quantit de mmoire rserve lxcution de notre programme. Nous pouvons maintenant nous intresser aux donnes fournies sur les horloges afin de savoir quelle vitesse notre programme peut sxcuter.

Doumenc Rmi & Berhault Guillaume

Page 11

Casse-briques / VHDL

Clock Report Clock Net U2/clock25 U2/clock10 write_strobe r1/clock1 Resource Locked Fanout Net Skew(ns) Max Delay(ns) 147 17 36 8 11 0.067 0.023 0.042 0.089 0.110 0.185 0.158 0.163 1.857 2.302 clock50_in_BUFGP BUFGMUX_X1Y11 No BUFGMUX_X1Y10 No BUFGMUX_X1Y0 Local Local No

Sachant que la priode minimale est de 20ns, cest--dire lhorloge 50MHz, nous pouvons voir que le circuit peut fonctionner 50MHz sans problme apparent.

IV.

Conclusion

Ce projet nous a permis dexploiter un cran VGA ainsi quun afficheur LCD au travers du VHDL, laide dun FPGA, SPARTAN-3E de chez Xilinx. Le rsultat est conforme au cahier des charges tabli.

Doumenc Rmi & Berhault Guillaume

Page 12

Casse-briques / VHDL