C.Les instructions du mode séquentiel
1.Définition d'un process
Un process est une partie de la description d'un circuit dans laquelle les instructions sont exécutées séquentiellement. L'exécution d'un process est déclenché par un ou des changements d'états de signaux logiques. Le nom de ces signaux est défini dans la liste de sensibilité lors de la déclaration du process.
[nom_du_process :] Process ( liste_de_sensibilite )
Begin
… instruction_du_process … ;
End process; Le nom du process est facultatif.
2.Règle de fonctionnement d'un process a)L'exécution d'un process
L'exécution d'un process a lieu à chaque changement d'état d'un signal de la liste de sensibilité
L'instruction du process s'exécute séquentiellement
Les changements d'état des signaux par les instructions du process sont prises en compte à la fin du process
2 process d'une architecture ayant la même liste de sensibilité vont être exécutés en même temps
Exemple : Process (C,D)
Begin
A <= 2 ;
B <= A + C ;
A <= D + 1 ;
E <= A * 2 ;
End process; A = 1 A <= D + 1 ;
B = 1 B <= A + C ;
C = 1
D = 1
E = 1 E <= A * 2 ; On commence en mettant D à 2
On trouve les résultats suivants :
A = 3 B = 2 E = 2 Remarque : Les valeurs ne sont affectées qu'après la fin du process
b)Les principales structures du mode séquentiel
A l'intérieur d'un process, on peut utiliser des "if" et/ou des "case". L'exécution est alors séquentielle.
De même on peut utiliser des boucles pour contrôler l'exécution. Les "for" sont à bornes fixes, alors que les "while" ne le sont pas.
iLe fonctionnement du "If"
Syntaxe : If condition then instructions ;
Elsif condition then instructions ;
Else instructions ;
End if ;
Exemple du démultiplexeur 1 vers 4
SEL
| S
| 00
| S1
| 01
| S2
| 10
| S3
| 11
| S4
| SEL E (1 bit) S1 (1bit)
S2
S3
S5 Enable
Library ieee;
USE iee.std_logic_1134.all
Entity demultiplex is
Port ( SEL : in std_logic_vector (1 downto 0);
E : in std_logic
Enable : in std_logic;
S1,S2,S3,S4 : out std_logic;);
End demultiplex; Architecture desc_demultiplex of demultiplex is
Begin
Process (SEL, ENABLE, E) --liste de sensibilité
Begin
If SEL ="00" and ENABLE = '0' then S1 <= E ;
Elsif SEL ="01" and ENABLE = '0' then S2 <= E ;
Elsif SEL ="10" and ENABLE = '0' then S3 <= E ;
Elsif SEL ="11" and ENABLE = '0' then S4 <= E ;
Else S1<='Z', S2<='Z', S3<='Z', S4<='Z' ;
End if;
End process ;
End desc_demultiplex ;
iiLe fonctionnement du "Case"
Syntaxe : Case signal de selcteion is
When valeur_de_selection => instruction;
When valeur_de_selection => instruction;
…
Whenothers => instruction;
End case; Même exercice avec case : Library ieee;
USE iee.std_logic_1134.all
Entity demultiplex is
Port ( SEL : in std_logic_vector (1 downto 0);
E : in std_logic
Enable : in std_logic;
S1,S2,S3,S4 : out std_logic;);
End demultiplex; Architecture desc_demultiplex of demultiplex is
Begin
Process (SEL, ENABLE, E) --liste de sensibilité
Begin
If ENABLE = '0' then
Case SEL is
When "00" => S1 >= E ;
When "01" => S2 >= E ;
When "10" => S3 >= E ;
Whenothers S4 >= E ;
End case
Else S1<='Z', S2<='Z', S3<='Z', S4<='Z' ;
End if ;
End process ;
End desc_demultiplex ;
iiiLe fonctionnement du "for"
Syntaxe : FOR parametre IN intervalle (Ex : 0 to 5) LOOP
instruction;
End LOOP; Exemple de codage de données : Le cahier des charges est le suivant :
s0 = a0
Pour i > 0 si = ai . ai-1 + ai . ai-1 ENTITY codage IS
a : IN std_logic_vector (3 downto 0) ;
s : OUT std_logic_vector (3 downto 0) ;
END codage
Architecture archi of codage is
Begin
Process
Begin
s(0) <= a(0);
FOR I IN 1 to 3 LOOP
s(i)<=(a(i) AND a(i-1)) OR ((NOT a(i) AND NOT a(I-1));
END LOOP;
END process ;
END archi;
ivLe fonctionnement du "wait"
Il est possible de définir un process sans liste de dépendance. Chaque process est toujours exécuté au moins une fois, au début.
En ajoutant des énoncés "wait", il devient possible d'indiquer que le process sera réveillé à un certain endroit, selon une certaine condition :
Wait for time
Wait on signal
Wait until condition
Chapitre VILe VHDL
|