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

Transcription

TP3 : Réalisation d`un circuit de contrôle d`écran VGA sur
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
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. Si IMG
est à 0, alors les signaux R, G et B doivent obligatoirement être à 0 aussi.
Question 3
Quelle image doit afficher le composant GeneRGB fourni ?
Question 4 La description du composant GeneSync est un peu plus compliquée. Pour vous
aider à la comprendre, vous pouvez réaliser la synthèse logique du circuit VGA décrit (commande : make synthese TOP=VGA). Le rapport de cette synthèse est indiqué dans le fichier
synthese.log. En utilisant la description VHDL du composant GeneSync et le rapport de synthèse logique, dessinez le circuit correspondant au circuit GeneSync.
Le rapport de synthèse fourni aussi une estimation de la fréquence maximale de fonctionnement
du circuit VGA. Quelle est-elle ?
Le composant GeneSync est en fait 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. Lorsque IMG vaut 1, le canon à
électrons cible un pixel de l’écran, dont les coordonnées sont fournies par les sorties X et Y.
Question 5 En s’aidant de la documentation sur le VGA et du schéma dessiné à la question
précédente, indiquez ce que représente les signaux comptI et comptJ du composant GeneSync ?
Question 6 Simulez le composant VGA sur le banc d’essai vhd/tb_VGA.vhd en utilisant la
commande :
$ make run_simu TOP=VGA
et ajoutez à la simulation les signaux comptx, compty, compti, comptj (en radix unsigned decimal) et img. 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 en noir et blanc de résolution 320x240 (pour
limiter l’espace mémoire nécessaire au stockage de l’image). Comme GeneSync calcule X et Y
pour un affichage de résolution 640x480, il suffit d’utiliser X(9 downto 1) et Y(8 downto 1)
pour afficher l’image à la bonne résolution.
L’image est contenu dans le composant RAM_Video, une mémoire de 4096 mots de 32 bits.
Ses pixels y sont donc stockés par paquets de 32 (1 bit par pixel : noir = 0 et blanc = 1) et
ordonnés en parcourant l’image de gauche à droite et de haut en bas. Ainsi, on obtient l’adresse
du mot contenant le pixel désigné par X et Y en concaténant (& est l’opérateur de concaténation
en VHDL) Y(8 downto 1) et X(9 downto 6) Par exemple, le pixel de coordonnées (X, Y) =
(129, 2) se trouve à l’adresse 0x024.
X(5 downto 1) est utilisé pour sélectionner un pixel dans un mot. Attention, l’ordre des
pixels dans un mot est inversé : le pixel le plus à gauche dans le paquet de 32 bits que constitue
le mot est en position 31, tandis que le pixel de droite est en position 0.
Question 1 Dessinez le circuit correspondant au module GeneRGB pour permettre l’affichage
décrit ci-dessus.
Question 2 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 ? Quelle est l’incidence sur le composant proposé à
la question précédente ?
Question 3 Modifiez le schéma de votre module GeneRGB pour résoudre ce problème et
implantez votre circuit dans le fichier vhd/GeneRGB_bitmap.vhd. Pour décrire un multiplexeur,
vous pouvez utiliser la fonction to_integer, comme suggéré dans ce fichier.
Question 4 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.
Question 5 Programmez le FPGA avec la commande :
$ make run_fpga TOP=VGA_bitmap

Documents pareils