2A-VHDL Projet Casse Briques
2A-VHDL Projet Casse Briques
2A-VHDL Projet Casse Briques
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.
Page 2
Casse-briques / VHDL
I.
Prsentation du Projet
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
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).
Page 4
Casse-briques / VHDL
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).
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.
Page 5
Casse-briques / VHDL
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 :
Page 6
Casse-briques / VHDL
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.
Page 7
Casse-briques / VHDL
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.
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 :
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.
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 :
Exemple pour 5s :
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.
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
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.
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.
Page 12
Casse-briques / VHDL