TP3 : Réalisation d`un circuit de contrôle d`écran VGA sur FPGA

Transcription

TP3 : Réalisation d`un circuit de contrôle d`écran VGA sur FPGA
TP3 : Réalisation d’un circuit de contrôle d’écran VGA sur
FPGA
Travail Préparatoire : Lire la documentation décrivant le fonctionnement d’une carte VGA
(DocVGAXilinx.pdf).
Objectifs du TP :
— Analyser des descriptions de circuits numériques en VHDL
— Concevoir un circuit à base de mémoires
— Approfondir les connaissances en VHDL(manipulation de vecteurs,arithmétique,processus
séquentiel,tableaux, affectation concurrente conditionnelle)
Ex. 1 : Analyse de description de circuit
Dans cet exercice, on vous demande de comprendre, simuler et vérifier sur carte FPGA, le
fonctionnement du module VGA décrit par les fichiers VGA.vhd, GeneRGB.vhd et Genesync.vhd.
Question 1 A partir du fichier VGA.vhd, dessinez le circuit correspondant au composant VGA.
Représentez y les noms de signaux, les entrées-sorties et les noms et types des composants
instanciés.
Question 2
Même exercice pour le composant GeneRGB.
Le composant GeneRGB génère le contenu de l’image à afficher. Pour un pixel donné par ces
coordonnées X et Y, le composant y associe une couleur par une représentation RGB.
Question 3
Quelle image doit afficher le composant GeneRGB fourni ?
Le composant GeneSync est le bloc qui génère les signaux de synchronisations horizontale
(HSYNC) et verticale (VSYNC) conformément à la norme VGA pour une résolution de 640x480
pixels. Comme la norme VGA a été originalement conçue pour des écrans cathotiques, il est utile
de connaître les instants où le canon à électrons balaye une zone visible de l’écran. La sortie
IMG du composant GeneSync donne cette information. Si IMG vaut 1, le canon à électrons cible
un pixel de l’écran, dont les coordonnées sont fournies par les sorties X et Y. Sinon, les signaux
R, G et B doivent obligatoirement être à 0.
Question 4 Lisez la description du composant GeneSync et comprenez-la en vous aidant des
commentaires, de la figure ci-dessous et de la documentation VGA.
Question 5 Lancez la synthèse logique de votre circuit VGA (commande : make synthese
TOP=VGA) et analysez le rapport de la synthèse. Est-il cohérent avec le schéma précédent ? A
quelle fréquence maximale de fonctionnement est estimé ce circuit VGA ?
Question 6 Simulez le composant VGA sur le banc d’essai vhd/tb_VGA.vhd en utilisant la
commande :
$ make run_simu TOP=VGA
Par défaut, le simulateur n’affiche que les signaux externes au composant simulé. Il est évidemment possible d’observer les signaux internes. Pour en ajouter, il faut développer la hiérarchie
du banc d’essai (ici, tb_VGA -> uut) dans l’onglet Instances and Processes. On voit ainsi apparaître la structure du circuit. L’ajout de signaux se fait par glissé-déposé entre la hiérarchie et
le chronogramme.
Ajoutez à la simulation les signaux comptx, compty, compti, comptj (affichés en entier non
signé) et img. Pour changer la représentation d’un signal, il suffit de cliquer-droit sur ce dernier,
de choisir le menu radix et de sélectionner le type adéquat (unsigned decimal par exemple). Pour
s’y retrouver dans les signaux de votre simulation, le menu contextuel des signaux permet de les
renommer, d’en changer la couleur, d’ajouter des séparateurs (divider).
Vérifiez sur une simulation de 20ms que le chronogramme obtenu est conforme à l’analyse
réalisée dans les questions précédentes.
Question 7 Après avoir branché la carte FPGA et l’écran VGA, programmez le FPGA en
tapant la commande :
$ make run_fpga TOP=VGA
On souhaite maintenant construire un circuit capable d’afficher une mire alternant des bandes
verticales de 32 pixels de large en suivant l’ordre de couleur suivant : rouge, bleu, vert, noir,
rouge, etc.
Question 8 Pour obtenir cette mire, il faut créer un nouveau composant GeneRGB. Décrivez
cette mire dans le fichier vhd/geneRGB_mire.vhd. Simulez la avec la commande :
$ make run_simu TOP=VGA_mire
et testez la sur carte avec la commande :
$ make run_fpga TOP=VGA_mire
Ex. 2 : Conception d’un circuit affichant une image bitmap
Dans cet exercice, on va afficher à l’écran une image bitmap, c’est à dire 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.
L’image que l’on va utiliser est une image de résolution 640x480 ayant 6 bits par pixel (pour
limiter l’espace mémoire nécessaire au stockage de l’image).
L’image est contenu dans le composant RAM_Video, une mémoire de 76800 mots de 24 bits.
Chaque mot regroupe donc 4 pixels consécutifs. Un pixel est codé sur 6 bits consécutifs : 2
bits rouge, 2 bits vert et 2 bits bleu. Le bit de poids fort (MSB) correspond au MSB rouge et
le bit de poids faible(LSB) correspond au LSB bleu. Dans le mot, le pixel 0 est sur les 6 bits de
poids fort et le pixel 3 est sur les 6 bits de poids faible.
La mémoire est remplie sans vide en parcourant l’image de gauche à droite et du haut vers
le bas. Ainsi, on obtient l’adresse du mot contenant le pixel désigné par X et Y avec la formule
(X + 640 ∗ Y )/4 = 160 ∗ Y + X/4. X%4 donne la position du pixel dans le mot.
Question 1 Dessinez le circuit correspondant au module GeneRGB pour permettre l’affichage
décrit ci-dessus. Implantez votre circuit dans le fichier vhd/GeneRGB_bitmap.vhd en vous aidant
des conseils fournis dans ce fichier.
Question 2 Implantez le circuit VGA dans le fichier vhd/VGA_bitmap.vhd et simulez-le avec
la commande :
$ make run_simu TOP=VGA_bitmap
Même si l’analyse visuelle de la simulation ne vous apportera pas grand-chose, la simulation
vous permettra de vérifier que vos composants sont corrects.
Attention à bien nommer l’instance du composant mémoire cRAM_VIDEO, car ce nom est
utilisé dans un fichier de configuration VGA_bitmap.bmm
Question 3 Programmez le FPGA avec la commande :
$ make run_fpga TOP=VGA_bitmap
Question 4 Le fichier vhd/tb_RAM.vhd décrit un banc de test simple pour le composant
RAM_VIDEO fourni. Simulez ce composant avec la commande :
$ make run_simu TOP=RAM
Quel est le comportement de cette mémoire ?
Que faudrait-il faire sur le composant décrit dans vhd/GeneRGB_bitmap.vhd ?
Question 5 Pour aller plus loin...
Modifiez le schéma de votre module GeneRGB pour résoudre ce problème et modifiez en conséquence le fichier vhd/GeneRGB_bitmap.vhd.
Question 6 Pour aller plus loin...
Modifiez si besoin le circuit VGA dans le fichier vhd/VGA_bitmap.vhd et programmez le FPGA
avec la commande :
$ make run_fpga TOP=VGA_bitmap

Documents pareils