Beruflich Dokumente
Kultur Dokumente
Introduction au VHDL
Prambule :
1. Introduction
Un circuit logique programmable (CPLD ou FPGA) ne doit pas tre confondu avec un
micro-contrleur. Le micro-contrleur est une structure logique complique, fige, qui excute des
instructions ranges dans une ROM ou une RAM, les unes aprs les autres. L'utilisateur, via des
langages de haut niveau (C, ADA, Pascal, JAVA...) ou de bas niveau (Assembleur), ne fait rien
d'autre que remplir la ROM d'instructions lmentaires que le processeur excute une une.
Notons enfin, qu' un micro-contrleur est une structure logique. Il est donc ce titre,
possible de matrialiser un tel circuit dans un circuit programmable...
Voici de manire trs simpliste, une comparaison entre un flot de conception pour un circuit
programmable et celui corrspondant un processeur :
Le langage VHDL peut avoir d'autres vocations que celle de raliser un circuit. On peut
d'ailleurs distinguer deux types de descriptions VHDL :
Un fichier VHDL est constitu de deux parties. La premire est la description des
entres et sorties de la fonction ralise ( Entity ). Son rle est de dfinir le nom, la direction, le
type et la taille des connexions d'entres et de sortie.
Exemple :
Ici, on trouve 3 entres binaires et une
sortie de type bus 4 fils. Le type utilis
est std_logic, ou std_logic_vector (pour
un bus). Il peut prendre plusieurs tats
(autre que 0 ou 1) :
Valeurs d'un std_logic :
L'architecture, seconde partie du fichier VHDL dcrit le
'U' Uninitialized
fonctionnement du circuit : 'X' Forcing Unknown
'1' Forcing 1
'0' Forcing 0
'Z' High impedance
'W' Weak Unknown
'H' Weak 1
'L' Weak 0
'-' - Don't care
Une architecture doit tre vue, pense comme un circuit logique. Tout comme un circuit
peut se dcomposer en sous-circuits, une architecture qui dcrit une logique complique peut tre
dcompose en plusieurs parties. En VHDL, ces divers sous-circuits sont dcrits par des process
(processus).
La notion de processus est centrale en VHDL. Du point de vue langage, un processus est
un bloc qui contient une suite d'instructions squentielles (au sens algorithme) qui a une dure
d'excution nulle (la notion d'excution n'a pas de sens en VHDL) qui est en sommeil la plupart du
temps, qui se rveille sur vnement particulier. Un processus active des sorties (selon l'algorithme
dcrit). Celles-ci sont mises jour lorsque le processus retombe en sommeil, c'est dire la fin de
son traitement. A l'intrieur d'un processus, un signal ne change donc pas d'tat.
Du point de vue circuit, une architecture dotes de plusieurs process peut se schmatiser comme de
la manire suivante :
Process()
End Process;
C<=A AND B;
End arch;
Dans cet exemple, F1, F2 et F4 sont des blocs logiques lourds ncessitant une
description comportementale, on utilise donc 3 processus. Par contre F3 est une fonction triviale,
parfaitement dfinissable.
avec les oprateurs logiques de base (pas besoin de processus explicite). Notons tout de mme, qu'il
s'agit bien d'un processus (implicite).
Ces 4 ensembles sont dits concurrents car le droulement de chacun deux est indpendant. L'ordre
dans lequel on crit les divers process est donc sans importance.
Ds que H ou RAZ voluent, la sortie du process Q_int est value instantanment. Pour
le lecteur, cette instantanit est discutable, puisqu'il faut lire l'ensemble du process (a prend du
temps !) pour valuer, en fin de process, la valeur de Q_int.
Ds que le process est actif, il faut imaginer qu'une photo est prise de l'ensemble des
signaux d'entre du process, y compris Q_int (entre-sortie). La nouvelle valeur de Q_int sera celle
qui correspond la dernire affectation.
Q_int = Q_int+1;
Q_int = Q_int+1;
Q_int = Q_int+1;
Avec au dpart Q_int = 2, alors quand le process retombe en sommeil (se termine), Q_int vaut 3 et
pas 5 ! En effet, en cours de process, Qint est fig. Les premires lignes sont donc oublies au
profit de la dernire qui prend effet lorsque le process se rendort (si en cours de route, Q_int n'a pas
t une fois encore retouche...)..
La structure if then else de l'horloge est dpourvue de else. Cela produit un effet mmoire. En effet,
du point de vue du signal H, Q_int est affect UNIQUEMENT lorsqu'il y a front montant. En
dehors de cet vnement, rien n'est spcifi dans le process. Q_int demeure inchang. On appelle
cela l'effet mmoire par omission. Ici c'est voulu, mais parfois, lorsqu'on dbute, cet oubli
involontaire lors de la description d'un circuit logique combinatoire est catastrophique, puisqu'il
cre une bascule qui n'a rien faire l !
NB: Comme toutes les bascules RS, il n'y a pas d' tat interdit
contrairement l'ide reue. Simplement, il existe en effet une combinaison
qui peut paratre un peu stupide, savoir positionner simultanment R et S
1.
Toute bascule est Set prioritaire ou Reset prioritaire (l'une des entres
l'emporte sur l'autre). Ainsi, lorsque le cas se prsente la sortie prend la
valeur '1' ou '0'.
Dans l'exemple, c'est le Set qui a la priorit . En effet, si les deux signaux
sont '1', le process se rveille, la structure if-elsif est value, et c'est la
premire condition vraie qui l'emporte, l'exclusion des autres (par
dfinition de la structure if, elsif...).
reset
Copie de D Forage
set, malgr
reset
4.6 Une bascule D, avec set et reset synchrone
Chronogrammes :
Forage
reset
tat reset Copie de D set, malgr
indtermin reset
Le test d'un design VHDL se fait par un fichier que l'on appelle testbench (banc d'essais), lui-mme
crit en VHDL. Voici par exemple, celui qui a permis l'obtention des chronogrammes prcdents
(bascule D avec Set et Reset) :
Inclusion du composant
tester (UUT : Unit Under
Test)
On remarque que le coeur du test est crit avec une syntaxe non synthtisable puisque ces tests n'ont
justement pas pour vocation de donner un circuit logique.
NB: Aprs l'instruction after, le temps qui est donn est absolu, c'est dire qu'il s'agit de dates
rfrences par rapport l'origine 0.
NB: Les signaux internes de test sont initialiss 0. Ce n'est pas une obligation sauf pour l'horloge.
En effet, celle-ci est dcrite par une rtroaction sur elle-mme, ce qui ncessite une valeur de
dmarrage.
On peut aussi rdiger les stimuli en utilisant un process qui se rveille des instants particuliers. En
effet, nous avons vu que la liste de sensibilit dtermine les signaux susceptibles de rveiller un
process. Une autre possibilit est de garder une liste vide, mais d'utiliser la place l'instruction wait.
Voici pour exemple, un extrait du test du compteur possdant une entre de remise zro et une
entre qui prcise le sens de comptage, vu au chapitre 2.
NB: Les valeurs de temps donnes dans les intructions wait for, sont relatives. Cela veut dire, dans
cet exemple, que le signal RAZ passera 0, la date 220 + 10 = 230ns.
Nous allons maintenant prsenter un dernier test, un peu plus volu, qui sert pour tester le
dcodeur d'adresses prsent au paragraphe 4.1.
Il s'agit de raliser un test o TOUTES les adresses possibles sont values. Ceci se fait bien
entendu par un compteur 16 bits que l'on ralise dans le testbench suivant :
Compteur 16 bits
Le bus Ad du dcodeur d'adresses est reli Q_int (sortie du compteur). Ceci est ralis dans le bloc
PORT MAP.
Les initialisations de Q_int et H sont obligatoires ici. Sans a, le compteur ne peut jamais dmarrer.
Auteur :
Thierry ROCACHER