3MMCEP VGA

De Ensiwiki
Révision de 24 janvier 2012 à 07:40 par Viardots (discussion | contributions) (Affichage basique)

Aller à : navigation, rechercher

Laptop.png  Première Année  Puce.png  Matériel 

Le but de ce TP d'introduction est d'apprendre le petit sous-ensemble du langage VHDL qu'on va utiliser pendant le projet d'architecture, et de se familiariser avec la programmation de la carte FPGA.

Préparation

Pour bien aborder le TP et comprendre ce que vous allez faire, il faut que vous arriviez en séance en ayant lu la documentation décrivant le fonctionnement d'une carte VGA.

Une fois que vous avez lu la documentation, lisez l'exercice "Affichage basique" ci-dessous et essayer de prévoir ce qui sera affiché une fois le circuit implanté.

On fournit des sources dont vous aurez besoin dans ce Projet, téléchargez les et décompressez le fichier .zip dans le répertoire de votre projet.

Affichage basique

Soit le schéma ci-dessous, décrivant la structure du circuit que l'on va implanter.

Le composant GeneSync est un bloc qui génère les signaux HSYNC et VSYNC conformément à la norme VGA (pour une résolution de 640x480 pixels). Le signal IMG est à 1 uniquement lorsque le canon à électrons est dans une zone visible de l'image. Si IMG est à 0, alors les signaux R, G et B doivent obligatoirement être à 0 aussi. Les signaux X et Y désignent les coordonnées du pixel de couleurs R, G et B à l'instant considéré.

Question 1

Créer un projet ISE puis implanter le composant GeneRGB correspondant au schéma ci-dessus. Vous devez donc construire le circuit qui calcule les valeurs des signaux R, G et B en fonction de la position (X, Y) du pixel ainsi que du signal de contrôle IMG.

Question 2

Créer le composant VGAex1 qui interconnecte les composants GeneSync et GeneRGB comme dans le schéma précédent.

Question 3

Simuler le comportement du circuit en créant un TestBench.

Question 4

Créer un fichier de contraintes pour associer les entrées et sorties du circuit aux pattes du FPGA (les numéros de pattes sont indiqués entre parenthèses sur le schéma).

Question 5

Programmer la carte, connecter le câble VGA à l'écran et vérifier que l'affichage correspond bien à ce que vous aviez prévu.

Générateur de mire VGA

On souhaite maintenant construire un circuit capable d'afficher la mire ci-dessous (noter bien les différences avec la version précédente).

VGAex2.jpg

Cette mire affiche une bande rouge de 32 pixels de large, puis une bande bleue de 32px, puis une bande verte de 32px, puis une bande noire de 32px, etc.

Question 1

Modifier (après l'avoir sauvegardé) le schéma GeneRGB pour obtenir cette mire.

Question 2

Vérifier en simulation que le circuit se comporte comme prévu.

Question 3

Implanter le circuit sur la carte FPGA.

Affichage d'une image bitmap

Dans cet exercice, on va afficher à l'écran une image bitmap, c'est à dire une image décrite sous la forme d'un tableau dont chaque case correspond à la couleur du point de coordonnées correspondantes.

Le circuit que l'on veut réaliser est décrit dans le schéma ci-dessous.

VGAex3.png

L'image que l'on va utiliser est une image en noir et blanc de résolution 320x240px (on ne peut pas stocker une image de plus grande taille à cause de la capacité limitée de la mémoire morte utilisée). Comme GeneSync calcule X et Y pour un affichage de résolution 640x480px, il suffit d'utiliser X(9..1) et Y(8..1) pour afficher l'image à la bonne résolution.

La mémoire utilisée travaille avec des mots de 16 bits : cela signifie qu'on trouve les 16 premiers pixels de l'image à l'adresse 0, les 16 suivants à l'adresse 1, etc. On calcule donc l'adresse de la case mémoire contenant le pixel voulu en utilisant la formule ad = Y(8..1) & X(9..5) (où & est l'opérateur de concaténation). Par exemple, le pixel de coordonnées (X, Y) = (129, 2) se trouve à l'adresse 0x0048 (c'est à dire 0000001001000 en binaire).

Comme chaque mot contient 16 pixels, on va utiliser un simple multiplexeur 16 entrées vers 1 sortie pour extraire le bit voulu. L'entrée de données du multiplexeur sera donc le mot lu en mémoire et l'entrée de sélection X(4..1). Les signaux R, G et B seront alors égaux à la sortie du multiplexeur si IMG vaut 1, et 0 sinon.

Question 1

Modifier (après l'avoir sauvegardé) le fichier GeneRGB pour implanter l'affichage voulu, et créer un composant VGAandROM réalisant les interconnexions avec GeneSync.

Question 2

Tester le circuit sur la carte FPGA. Que remarquez-vous ? Corriger ce petit défaut d'affichage (induit par l'utilisation d'une mémoire synchrone), par exemple en ajoutant un registre 4 bits pour introduire un retard d'un cycle dans la sélection du pixel.