Articles

Réalisation d'une carte vidéo

1. Présentation générale

La réalisation d'une carte vidéo élémentaire constitue l'objectif final de ce projet.

Compte tenu des caractéristiques des DE1 et DE2, l'affichage se limitera à une résolution de 640 points par 480 points en 256 couleurs à la fréquence image de 60 Hz, ce qui correspond à l'antique norme VGA. Le passage à des résolutions supérieures reste envisageable au cas par cas. Le 800x600 en 256 couleurs est également possible. Aller au delà nécessiterait soit d'abaisser le nombre de couleurs accessibles à 16, la mémoire statique utilisable ayant une capacité de 512ko seulement (800 x 600 en 256 couleurs \(\Rightarrow\) 480 000 octets pour stocker l'image), soit d'utiliser la mémoire SDRAM présente sur la carte, approche plus complexe car nécessitant l'utilisation d'un contrôleur de mémoire adapté à ce type de mémoire dynamique.

Cette carte vidéo sera complétée par un processeur Altera NIOS II, également implanté dans le FPGA, pour constituer une plateforme de jeux simples.

2. Le signal vidéo VGA

Comme ils sont présents en grande quantité, tous les pixels visibles sur un écran ne peuvent pas être envoyés en même temps.

Qu'il utilise une connectique VGA, HDMI, Display Port ou autre, l'écran reçoit les informations définissant chacun de ses pixels séquentiellement sur le principe d'un balayage remontant au principe des premiers tubes cathodiques.

Le pixel (0,0) se trouve en haut à gauche de l'écran. C'est le premier à être envoyé à l'écran. Ensuite, les autres pixels de la ligne 0 suivent. La première ligne étant constituée, la carte vidéo envoie une impulsion de synchronisation dit horizontale (HSYNCH) pour informer l'écran que le prochain pixel envoyé sera le premier par la gauche de la ligne suivante. On balaye ainsi l'ensemble de l'écran, de gauche à droite puis de haut en bas. La carte vidéo utilise un second signal de synchronisation qualifié de vertical (VSYNCH) pour indiquer le début de l'envoi d'une nouvelle image. L'écran attend ainsi à nouveau le pixel (0,0). Le procédé se répète à raison de \(F_V\) images par seconde.

Pour des raisons historiques, il y a un délai entre l'envoi du dernier pixel d'une ligne et celui placé au début de la ligne suivante. C'est dans ce laps de temps qu'est généré l'impulsion de synchronisation horizontale sur le signal HSYNCH. Pour cette raison, on parle de pixels visibles (zone de vidéo active) sur une ligne et de pixels invisibles sur une ligne.

De la même façon, il existe un délai entre l'envoi du dernier pixel de la dernière ligne et celui du premier pixel de la première ligne (premier pixel de l'image suivante). Durant ce délai, un pulse négatif (comprendre à 0) est envoyé sur le signal de synchronisation verticale pour synchroniser l'écran. Il y a donc une zone de vidéo active (les lignes effectivement visibles sur l'écran) et une zone de vidéo inactive correspondant au timing nécessaire à la synchronisation.

La figure ci-dessous résume cela en présentant les signaux de synchronisation et le résultat à l'écran en distinguant zone des pixels visibles et le reste de l'image associée aux seuls signaux de synchronisation.

Signaux de synchronisation VGA

 La norme VGA 640x480 pixels à 60Hz impose une fréquence d'horloge pour les pixels de 25,175 MHz (cela signifie qu'un pixel a une durée de 1/25175000 s).

La figure ci-dessous donne les différentes durées en nombre de pixels pour la définition d'une ligne, donc du signal HSYNCH, et des durées en nombre de lignes pour la définition du signal VSYNCH.

Signaux HSYNCH et VSYNCH 

Les DE1 et DE2 ne disposent pas d'une telle fréquence mais d'une fréquence de 50 MHz qui, divisée par 2, nous fournira un signal à 25 MHz (donc assez proche des 25.175 MHz de la norme VGA). En conservant les 800 pixels sur une ligne de la norme VGA, on aboutira à une fréquence image de 59.52 Hz qui ne posera pas de problème avec les moniteurs modernes. La génération d'une image totalement blanche permettra à l'écran de s'ajuster parfaitement à la définition de nos signaux en utilisant la fonction Auto Adjust qui équipe la plupart des écrans.