Document fait avec Nvu Document made with Nvu




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: