# Autres langages > Autres langages > VHDL >  [Dbutante] VGA sur la carte Spartan-3

## foufouta

Bonjour  tous

Je suis dbutante en programmation en VHDL. Actuellement, je travaille sur la carte Spartan-3. J'ai trouv cet exemple de code sur le net :

http://www.derepas.com/fabrice/hard/

Pour l'exemple de "squares", je n'ai pas compris cette partie :


```

```

ou, plus prcisment, je n'ai pas compris l'utilit de " horizontal-counter" et "vertical_counter".

Je me demande si quelqu'un peut m'expliquer ce code.

Merci d'avance

----------


## yannoo95170

C'est peut-tre un peu tard comme dbut de rponse mais vu que je viens tout juste de commencer la dev FPGA, de plus avec un SPARTAN 3 moi aussi (un carte de dev Spartan-3E XC3S500E-PQG208 avec un cran LCD de 4.3 pouces intgr) et qu'il faut bien que je commence par quelque chose,  la gestion d'un buffer graphique est typiquement le genre de truc que je voudrais y grer => donc a tombe bien  ::lol:: 

Au tout dbut, il y a ce test qui doit grer l'affichage en 25/50 Hz et/ou la prise en compte si c'est une ligne paire ou impaire pour le tramage  ou qqchose du style 


```

```


Dans la seconde partie, cel  consiste  ne prendre en compte que la partie qui sera rellement affiche


```

```

784 - 144 = 640 
519 - 39 = 480

Ca permet donc n'envoyer un signal video que lorsque le spot video est bien dans la "fentre" affichable de l'cran (soit ici 640x480)

En passant, on voit qu'il y 144 cycles en dbut de ligne o il ne faut pas envoyer de signal video 
(a doit tre le temps que met le spot lumineux pour passer de la fin d'une ligne au dbut d'une autre ou qqchose comme a)

On y voit de la mme faon qu'il doit y avoir 39 cycles de plus quand le spot lumineux repasse de la dernire ligne  la premire ligne pour commencer la gnration d'une nouvelle trame
(a me parait court mais vu qu'il y a les 144 cycles en plus pour revenir du dernier pixel d'une ligne au premier de la ligne suivante et que le spot remonte en diagonale du dernier pixel de la dernire ligne au premier pixel de la premire ligne, a doit srement faire ces 144+35 cycles)


Quand on est bien dans le zone affichable, on envoie au spot lumineux les valeurs des composantes primaires Rouge, Vert et Bleu du pixel  afficher


```

```

Sinon on n'envoie aucune couleur (cf. composantes primaires Rouge, vert et Bleu  zro) au spot lumineux qui affiche le pixel sur l'cran 
(cf. c'est du noir donc on ne risque pas de voir le faiseau lumineux passer du dernier pixel au premier pixel d'une ligne ou de l'image)


```

```

Cette partie doit assez srement grer la synchronisation horizontale :


```

```

(cf. a envoie un 0 sur la patte hs_out quand on est sur la synchro horizontale [qui dure 97 cycles  premire vue], et sinon un 1 le reste du temps)

Et celle-ci la synchro verticale :


```

```

(cf. a envoie un 0 sur la patte vs_out, quand on est sur la synchro horizontale [qui dure sur 3 lignes  premire vue], et sinon un 1 le reste du temps)

Cette partie gre l'incrmentation d'un pixel  droite pour l'affichage de chaque pixel successif d'une mme ligne, de la remise  0 de l'indice du pixel quand on est arriv  la fin de la ligne afin que la prochaine occurence pointe bien sur le premier de la ligne suivante + incrmentation du compteur de ligne pour que la prochaine occurence pointe bien sur la ligne suivante (qui commencera 144 cycle aprs car il faut que le faisceau lumineux ai le temps de repasser de la fin au dbut de ligne, mais a c'est dj gr dans la seconde partie explique plus haut) :


```

```

Et enfin, celle ci permet de rinitialiser le compteur de ligne quand on est arriv  la dernire, afin de pouvoir commencer l'affichage d'une nouvelle trame


```

```

J'y ai peut-tre fait quelques petites erreurs d'interprtations, mais ne pense pas tre trs loin de la ralit

----------

