Interface VGA
Version 1.0 du 23 Mars 2003
Ecrit par jpb.forth
Chronogrammes
Définition des commandes
Initialisation
CNA et adaptations VGA
Introduction
Ces spécifications décrivent une interface
VGA 480 lignes de 640 points destinée à être
intégré dans le FPGA contenant le coeur FORTH en utilisant les 3/4 d'une mémoire
vive statique additionnelle de 512 KiloOctets et un convertisseur
numérique vers analogique 8 bits économique permettan
d'afficher 256 couleurs simultannément.
Un seul registre (16 bits) est destiné à être
logés dans la zone d'extension du coeur FORTH. Ce registre
donne accès à une pile de commande de l'interface
VGA qui devient ainsi un périphérique interne de
ce processeur.
Voici le schéma synoptique de l'interface VGA:
Chronogrammes
L'horloge 25 MégaHertz du processeur
est utilisée comme unité de temps d'un point. La
trame VGA est à renouvelée à une fréquence
de 60 Hertz et découpée en 525 lignes. La fréquence
ligne est ainsi de 31,5 KiloHertz.
Un calcul simple permet de déterminer
le nombre total de cycles d'horloge par ligne à 25 Mhz
soient 25000000/31500 = 794 (après arrondi).
Les différents chronogrammes
peuvent être définis de la manière suivante:
Les signaux de synchronisation ligne et trame sont négatifs
(0 pendant la durée de l'impulsion).
Définition des commandes
La mémoire de 512 KiloOctets
est définie comme un écran de 512 lignes de 768
points. Seule une partie (480 lignes de 640 points) est affichée.
L'ensemble des registres est accessible
par transmission de commandes dans une pile de type premier entré/premier
sorti de 16 bits de large visible comme un seul registre depuis
le processeur. L'interface VGA agit alors comme un processeur
exécutant les commandes présentes dans la pile.
Voici le format de ce registre:
Bus de données
D15
|
D14
|
D13
|
D12
|
D11
|
D10
|
D9
|
D8
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
Accès en écriture
c15
|
c14
|
c13
|
c12
|
c11
|
c10
|
c9
|
c8
|
c7
|
c6
|
c5
|
c4
|
c3
|
c2
|
c1
|
c0
|
Les bits c15 à c0 correspondent à
la commande.
Accès en lecture
C
|
L
|
0
|
0
|
0
|
0
|
0
|
0
|
p7
|
p6
|
p5
|
p4
|
p3
|
p2
|
p1
|
p0
|
Le bit C indique lorsqu'il est à 1 que la
pile de commande est saturée.
Le bit L indique lorsqu'il est à 1 que le
point p7 à p0 est valide (pile de lecture).
Les commandes sont décrites
dans le tableau suivant:
Commande |
Description |
00iiinnnpppppppp |
Exécution de nnn fois l'écriture
du point pppppppp à l'emplacement pointé par (X,Y)
qui est à chaque fois modifié selon le mode de
post incrémentation iii |
01iii001******** |
Exécution de la lecture du point à
l'emplacement pointé par (X,Y) qui est à chaque
fois modifié selon le mode de post incrémentation
iii |
100000xxxxxxxxxx |
Chargement du registre d'abscisse avec la
valeur xxxxxxxxxx |
100010xxxxxxxxxx |
Addition de la valeur xxxxxxxxxx au registre
d'abscisse |
1100000yyyyyyyyy |
Chargement du registre d'ordonnée avec
la valeur yyyyyyyyy |
1100100yyyyyyyyy |
Addition de la valeur yyyyyyyyy au registre
d'ordonnée |
Voici la définition des différents codes utilisés
dans le tableau des commandes:
Code |
Valeur |
Description |
iii |
0 |
(X,Y) --> (X+1,Y) |
|
1 |
(X,Y) --> (X+1,Y+1) |
|
2 |
(X,Y) --> (X,Y+1) |
|
3 |
(X,Y) --> (X-1,Y+1) |
|
4 |
(X,Y) --> (X-1,Y) |
|
5 |
(X,Y) --> (X-1,Y-1) |
|
6 |
(X,Y) --> (X,Y-1) |
|
7 |
(X,Y) --> (X+1,Y-1) |
nnn |
0 à 7 |
nombre d'itérations de l'action (0
correspond à 8 itérations) |
pppppppp |
0 à 255 |
Code de la couleur d'un pixel:
- p7 correspond à R3
- p6 correspond à R2
- p5 correspond à V3
- p4 correspond à V2
- p3 correspond à B3
- p2 correspond à B2
- p1 correspond à G1
- p0 correspond à G0
|
xxxxxxxxxx |
0 à 1023 |
Codage de la valeur de l'abcisse |
yyyyyyyyy |
0 à 511 |
Codage de la valeur de l'ordonnée |
Les registres X et Y permettent de pointer un pixel (un
octet) de l'image totale (mémoire vive). X varie de 0 à
767 (colonne) et Y varie de 0 à 511 (ligne).
Les 8 autres registres permettent d'accéder au pixel
pointé par (X,Y) avec le choix du pixel adjacent (pos
incrémentation ou post décrémentation de
X ou de Y) pour l'accès suivant. Ceci est encore une aide
au logiciel pour les différentes routines graphiques.
R3, R2 correspondent aux 2 poids forts de la couleur rouge.
V3, V2 correspondent aux 2 poids forts de la couleur verte.
B3, B2 correspondent aux 2 poids forts de la couleur bleue.
G1,G0 correspondent aux 2 poids faibles des 3 couleurs.
Initialisation
Lorsque le signal RESET est appliqué à l'interface,
les registres X et Y sont mis à zéro.
CNA et adaptations VGA
Voici le schéma du triple convertisseur numérique
vers analogique (CNA) pour les 3 couleurs rouge, verte et bleue
ainsi que les autres adaptations nécessaires au pilotage
du moniteur VGA:
Les valeurs des résistances de convertion sont calculées
en considérant que le 74LVT574 est alimenté avec
une tension de 3,3 Volts et une résistance de charge de
75 Ohms sur chacune des entrées rouge, verte et bleue du
moniteur VGA. Chaque couleur peut ainsi avoir 16 nuances correspondantes
aux tensions du tableau suivant:
R3/V3/B3 |
R2/V2/B2 |
G1 |
G0 |
Tension de sortie en Volts |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0,051 |
0 |
0 |
1 |
0 |
0,101 |
0 |
0 |
1 |
1 |
0,152 |
0 |
1 |
0 |
0 |
0,203 |
0 |
1 |
0 |
1 |
0,253 |
0 |
1 |
1 |
0 |
0,304 |
0 |
1 |
1 |
1 |
0,36 |
1 |
0 |
0 |
0 |
0,41 |
1 |
0 |
0
|
1
|
0,46
|
1 |
0 |
1
|
0
|
0,51
|
1 |
0 |
1
|
1
|
0,56
|
1 |
1 |
0
|
0
|
0,61
|
1 |
1 |
0
|
1
|
0,66
|
1 |
1 |
1
|
0
|
0,71
|
1 |
1 |
1
|
1
|
0,76
|
Ceci correspond bien à 16 nuances par teinte mais
comme les 2 bits de poids faibles (G1 et G0) sont communs aux
3 couleurs, on obtient donc seulement 256 teintes différentes
au maximum (4R*4V*4B*4G). Ce dispositif demeure par contre très
économique et facilement réalisable.
Un nombre de nuances beaucoup plus important peut être
émulé par tramage comme le montre l'exemple suivant: