I.5. Les instructions du langage
I.5.1. Les instructions concurrentes
Les instructions qui décrivent une architecture sont des
processus indépendants, qui communiquent entre eux par les signaux.
Les principales instructions concurrentes sont : + les
affectations concurrentes des signaux, + les « processus >
+ les instructions « generate >
1) Affectations concurrentes de signaux
a) Affectation simple
L'instruction concurrente la plus élémentaire, du
point de vue syntaxique, est l'affectation d'une valeur a un signal.
Le symbole réservé a l'affectation a un signal est
«<= », par exemple un simple opérateur « OU »
s'écrit de la manière suivante :
S <= E1 OR E2 ;
Dans notre exemple : multiplexeur 2 voies vers 1 :
S<= (not (sel) and
a) or (sel and
b);
b) Affectation conditionnelle du type »WHEN
condition ELSE »
Cette instruction permet d'affecter un signal a une expression
(expression = signal, équation ou valeur) pour certaines conditions
(conditions sur les signaux de type IN ou INOUT).
S <= Source_1 when
condition_1 else Source_2 when
condition_2 else ...
`0' when others;
|
Exemple (multiplexeur):
S<= a when (sel='0') else
b when (sel='1')else
`0' when others;
c) Affectation sélective de type « WHITH
signal SELECT » :
Cette instruction est semblable à la
précédente avec en plus une précision préalable du
signal sur lequel vont se porter les conditions.
Syntaxe
With expression select
Cible <= source_1 when
valeur_1
Source_2 when valeur_2 ..., ...
source_n when others ;
A partir de l'exemple du multiplexeur: With sel
select:
S<=a when `0',
b when `1',
`0'when others;
2) Processus
L'instruction concurrente de base en VHDL est le processus
(process). Tout modèle VHDL peut se décrire de manière
équivalente comme un ensemble de processus communiquant par
l'intermédiaire de signaux. Un processus encapsule une séquence
d'instructions exécutées dans un ordre donné.
L'exécution des instructions d'un processus est conditionnée par
des événements (event) sur des signaux.
Nom : process (liste de
sensibilité) Partie déclarative : variables
begin
Corps du processus. Instructions séquentielles
End process [Non] ;
|
Notons que la déclaration d'un process débute
par le mot clé «process», suivie d'une liste de noms de
signaux. Cette liste est appelée «liste de
sensibilité», elle contient le nom des signaux, Cette liste peut
être remplacée par une instruction « wait » dans le
corps du processus.
Lorsqu'il y a plusieurs processus dans la même
architecture, il est utile de leur donner un nom
. L'instruction wait
Cette instruction indique au processus que son
déroulement doit être suspendu dans l'attente d'un
événement sur un signal (un signal change de valeur), et tant
qu'une condition n'est pas réalisée.
Sa syntaxe générale est :
wait [on liste_de_signaux ] [until
condition ] ;
La liste des signaux dont l'instruction attend le changement
de valeur joue exactement le même rôle que la liste de
sensibilité du processus, mais l'instruction wait ne peut pas être
utilisée en même temps qu'une liste de sensibilité. La
tendance, pour les évolutions futures du langage, semble être
à la suppression des listes de sensibilités, pour n'utiliser que
les instructions d'attente.
L'instruction concurrente generate permet de dupliquer des
instructions concurrentes de manière itérative ou
conditionnelle.
Syntaxe
Nom : for variable
in debut to fin generate
Instructions concurrentes End generate [Nom]
;
ou
Nom : if condition
generate
Instructions concurrentes End generate
[Nom] ;
|
|