2.4) Verilog - VGA
La carte vidéo génère un signal VGA 640 x 480 60Hz.
Elle est composée de 2 parties :

Elle est composée de 2 parties :
1) Partie graphique, 256 couleurs.
La palette est fixe : sur les 8 bits j’alloue 2 bits à chacune des 3 couleurs (R, V, B), et 2 bits pour la luminosité.
La palette vient alimenter 3 convertisseurs numériques/analogiques 4 bits fait avec des composants discrets.
La palette est fixe : sur les 8 bits j’alloue 2 bits à chacune des 3 couleurs (R, V, B), et 2 bits pour la luminosité.
La palette vient alimenter 3 convertisseurs numériques/analogiques 4 bits fait avec des composants discrets.
La
mémoire vidéo est partagée avec le CPU, comprise dans la RAM 2Mo. On
alloue 50% du temps à la carte vidéo, et 50% du temps au CPU. La
vitesse d’exécution du CPU est donc fortement réduite.
Je gère un double buffer vidéo : on peut dessiner une image pendant qu’une autre est affichée. Sur ordre du logiciel, le basculement d’une image à l’autre se fait entre 2 balayages d’écran. Cela permet d’obtenir des mouvements fluides et sans « rayures » dans les animations. Il n’y a aucune accélération hardware graphique (gestion de sprites ou autre), tous les graphiques sont générés par logiciel.
2) Partie texte :
80 colonnes x 30 lignes, en surimpression par rapport au graphique. Avoir une sortie texte, c’est très pratique pour débugger un ordinateur, et commencer à coder les premiers programmes. Je ne regrette pas d’avoir codé ça.
Je gère un double buffer vidéo : on peut dessiner une image pendant qu’une autre est affichée. Sur ordre du logiciel, le basculement d’une image à l’autre se fait entre 2 balayages d’écran. Cela permet d’obtenir des mouvements fluides et sans « rayures » dans les animations. Il n’y a aucune accélération hardware graphique (gestion de sprites ou autre), tous les graphiques sont générés par logiciel.
2) Partie texte :
80 colonnes x 30 lignes, en surimpression par rapport au graphique. Avoir une sortie texte, c’est très pratique pour débugger un ordinateur, et commencer à coder les premiers programmes. Je ne regrette pas d’avoir codé ça.
Les 3 parties (cœur, VGA
graphique, et VGA texte) doivent
être parfaitement synchronisées entre elles. Vu le peu d’expérience en
FPGA que
j’ai, j’ai eu beaucoup de mal à coder cette synchronisation.
Voici la gestion d’adresse de la partie VGA.