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