4.2.3.3 UPrincipesU
Le VHDL est un langage à instructions concurrentes, il
faut savoir en profiter lorsqu'on décrit un circuit. La règle
simple est de séparer les parties franchement combinatoires des parties
comportant une horloge.
n Les parties combinatoires seront décrites par des
instructions concurrentes
n Les parties séquentielles seront décrites par
des processus explicites.
4.2.3.4 ULimitation du
langageU
Lors des descriptions VHDL en vue de synthèse, c'est le
style d'écriture et lui seul qui va guider le synthétiseur dans
ses choix d'implantation au niveau circuit. Il est donc nécessaire de
produire des instructions ayant une équivalence non ambiguë au
niveau porte.
Le synthétiseur est un compilateur un peu particulier
susceptible au fil des ans d'améliorer sa capacité à
implanter des fonctions de plus en plus abstraites. Cependant, il reste des
règles de bon sens comme « le retards des opérateurs est
d'ordre technologique » ou bien « un fichier n'est pas un circuit
» etc. En conséquence, les limitations du langage du niveau RTL les
plus courantes sont :
n Un seul WAIT par PROCESS
n Les retards sont ignorés (pas de sens)
n Les initialisations de signaux ou de variables sont
ignorées
n Pas d'équation logique sur une horloge
(conseillé)
n Pas de fichier ni de pointeur
n Restriction sur les boucles (LOOP)
n Restriction sur les attributs de détection de fronts
(EVENT, STABLE)
n Pas de type REAL
n Pas d'attributs BEHAVIOR, STRUCTURE,LAST_EVENT,
LAST_ACTIVE,TRANSACTION
n Pas de mode REGISTER et BUS
Exemple-1:
WAIT UNTIL h'EVENT AND h= `1';
x := 2;
WAIT UNTIL h'EVENT AND h= `1';
Ces trois lignes sont incorrectes. Il faut gérer
soi-même le comptage des fronts d'horloge:
WAIT UNTIL h'EVENT AND h= `1';
IF c = 1 THEN
x := 2;
Exemple-2:
On ne sait pas faire le ''ET'' entre un front et un niveau. Il
s'ensuit que la ligne suivante:
WAIT UNTIL h'EVENT AND h= `1' AND raz = `0';
doit être remplacée par
WAIT UNTIL h'EVENT AND h= `1' ;
IF raz = `0' THEN
Le synthétiseur fera le choix d'un circuit fonctionnant
sur le front montant de h (bascule D) et prenant raz comme niveau
d'entrée de validation.
Exemple-3:
SIGNAL compteur : INTEGER;
produira certainement un compteur 32 bits (l'entier par
défaut). Si ce n'est pas cela qui est voulu, il faut le préciser.
Par exemple pour 7 bits,
SIGNAL compteur : INTEGER RANGE 0 TO 99;
4.2.4 UCircuits combinatoires
Une fonction combinatoire est une fonction dont la valeur est
définie pour toute combinaison des entrées. Elle correspond
toujours à une table de vérité. La fonction peut
être complète (toutes les valeurs de sortie sont imposées
à priori) ou incomplète (certaines sorties peuvent être
définies comme indifféremment 1 ou 0 au grès de la
simplification). Ce dernier état sera noté "-" en VHDL.
Une fonction combinatoire est donc donnée :
n Par une table de vérité
n Par une équation simplifiée ou non
Une fonction combinatoire peut être décrite de
façon séparée
n Par une instruction concurrente (méthode à
privilégier)
n Par un processus avec toutes les entrées en liste de
sensibilité
n Par un tableau de constantes
n Par une fonction qui sera ensuite assignée de
façon concurrente ou séquentielle à un signal.
Il y a aussi un cas très fréquent correspondant
à une équation combinatoire noyée dans une description
comportant des éléments de mémorisation. Dans ce dernier
cas seule, la vigilance est conseillée.
|