Vous êtes sur la page 1sur 26

Unité d’enseignement : Base de systèmes logiques (BSL)

Instruction process
Description VHDL des bascules

Etienne Messerli
Mise à jour le 12 décembre 2008

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 1

Déroulement concurrent et séquentiel

• Dans un langage informatique classique :


9Les instructions ont un déroulement séquentiel
• Dans un circuit :
9Toutes les portes fonctionnent simultanément
9Tous les signaux évoluent de manière concurrente
• Le langage VHDL dispose d'instructions concurrentes
pour décrire le comportement des circuits réels
(matériel)

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p2


Processus concurrents ...

• Toutes les portes d’un circuit sous tension fonctionnent


continuellement
→ un programme principal VHDL est constitué d’un
ensemble de processus concurrents
• L’ordre dans lequel les processus apparaissent dans le
listing est indifférent

D <= not C; C <= A and B;


est identique à
C <= A and B; D <= not C;

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p3

…processus concurrents ...

• Des processus simples peuvent être déclarés de façon


implicite, en les décrivant avec une affectation simple,
conditionnelle ou sélectionnée
-- une affectation simple,
-- hors d’une declaration de process
A <= B or C ;

revient au même que : process (B,C) begin


A <= B or C ;
end process;

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p4


…processus concurrents ...
A <= ’1’ when B=’1’ else
’1’ when C=’1’ else ’0’;
-- ATTENTION : l’affectation conditionnelle avec when else
-- ne peut etre utilisee qu’a l’exterieur d’une declaration
-- de process (instruction strictement concurrente)

revient au même que :


process (B,C)
begin -- ATTENTION :
if B=’1’ then -- la structure conditionnelle
A <= ’1’; -- if then else ne peut etre
elsif C=’1’ then -- utilisee qu’a l’interieur
A <= ’1’; -- d’une declaration de process
else -- (strictement sequentielle)
A <= ’0’;
end if;
end process;
Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p5

…processus concurrents

Comme une porte logique, une instruction concurrente


(processus auto déclaré) :
• s’active lorsqu’un des signaux d'entrées (droite de
l'expression) change de valeur,
• et se rendort lorsque la sortie (bit ou vecteur) a atteint
un état stable

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p6


L'instruction process …

• Le langage VHDL dispose d'une instruction process


dont la syntaxe est :

process (Liste_De_Sensibilité)
--zone de déclaration
begin

--Zone pour instructions


-- séquentielles ....

end process;

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p7

… instruction process …

un process
• s’active lorsqu’un des signaux de sa liste de sensibilité
(ses entrées) change de valeur,
• et se rendort lorsque toutes les instructions séquen-
tielles ont été évaluées une fois (end process)

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p8


…instruction process …

• L’exécution des instructions à l’intérieur d’un process


est séquentielle
• Le temps simulé est stoppé durant l’exécution d’un
process, donc
• les affectations des signaux ne prennent effet qu’après
l’endormissement du process (fin de l’exécution de
l’algorithme)

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p9

…instruction process …

• Une description avec un process sert à décrire les


relations entre sorties et entrées sous une forme
informatique: algorithme à exécution séquentielle
• Les descriptions de forme informatique requièrent
souvent l’utilisation de variables (au sens
informatique)

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 10


Syntaxe de l'instruction processus

[Label:] process (Liste_De_Sensibilité)


-- ↑ Signaux_activant_le_processus
--zone de déclaration
begin

--Zone pour instructions


-- séquentielles ....

end process;

Elément puissant du langage VHDL

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 11

Processus : zone de déclaration

• Déclaration de variables et de constantes


• Pour utilisateurs expérimentés :
9déclarations de types et de sous-types
9déclaration de variables
9déclaration de fonctions et de procédures

• Déclaration de signaux ou de composants interdite


dans un processus

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 12


Processus et liste de sensibilité ...

Avec liste de sensibilité :


9Utilisé pour les descriptions synthétisables
9Description utilisée dans le cadre de l'unité BSL

Sans liste de sensibilité :


9Utilisé pour fichiers de simulation & spécification
9Ne sera pas étudié dans le cadre de l'unité BSL

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 13

… processus et liste de sensibilité

• Avec liste de sensibilité :


9utilisé pour les descriptions synthétisables
9processus activé uniquement lorsqu'un signal de la liste de
sensibilité change
9processus endormi à la fin (end process)
9instruction wait interdite
9permet de décrire :
→système combinatoire ou
→éléments mémoires (bascules) ou
→système séquentiel ou
→description avec algorithme

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 14


Les instructions séquentielles

Les instructions séquentielles doivent être


placées à l'intérieur d'un processus
• Affectation ( Y <= A and C; )
9 le signal Y sera actualisé à la fin du processus
• Affectation de variable ( Var1 := D and X; )
9 la variable sera actualisée immédiatement
• Instruction de test ( if ... then else )
• Instruction de choix ( case ... is when )

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 15

Instruction d’affectation d'un signal

Affectation d'un signal :


Signal <= Sign_A fonct_logique Sign_B;

Le signal sera affecté à l'endormissement du processus


(end process ou wait ...)

Remarque :
L'affectation avec condition (..<= ..when..) n'est pas utilisable à l'intérieur
d'un process. Ce n'est pas une instruction séquentielle

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 16


Instruction d’affectation d'une variable

• Affectation d'une variable :


Variable1 := Var2 fonct_logique Var3;

• Exemple :

Temp := Var0 or Var1 or Var3;

La variable est actualisée immédiatement


L'utilisation des variables est possible seulement à l'intérieur de
l'instruction process
Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 17

Syntaxe de l’instruction conditionnelle

if Condition1 then
--ZoneInstructions_1
elsif Condition2 then
--ZoneInstructions_2

.....

else
--ZoneInstructions_n
end if;

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 22


Syntaxe de l’instruction conditionnelle

process (Sel, Enable) Démultiplexeur


begin
if Enable = '1' then
if Sel = "00" then
Sorties <= "0001";
elsif Sel = "01" then Exemple avec
Sorties <= "0010";
elsif Sel = "10" then erreur
Sorties <= "0100";
else
Sorties <= "1000";
end if;
end if;
end process;
Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 23

Syntaxe de l’instruction conditionnelle

process (Sel, Enable) Démultiplexeur


begin
Sorties <= "0000"; --valeur par défaut
if Enable = '1' then
if Sel = "00" then
Sorties(0) <= '1';
elsif Sel = "01" then
Sorties(1) <= '1';
elsif Sel = "10" then
Sorties(2) <= '1';
else
Sorties(3) <= '1';
end if;
end if;
end process;
Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 24
Syntaxe de l’instruction de choix

case Expression is
when Valeur1 => instructions1;
when Valeur2 => instructions2;
...
...
when others => instructionsN;
end case;

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 25

Syntaxe de l’instruction de choix


Exemple de décodeur d'adresse :
process(adresse)
begin
CS_A <= '0'; --Valeur par defaut
CS_B <= '0'; --Valeur par defaut
case Adresse is
when "000"|"001"|"010" => CS_A <= '1';
when "011"|"100" => null;
when "101"|"110"|"111" => CS_B <= '1';
when others => CS_A <= 'X';CS_B <= 'X';
end case;
end process;
Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 26
Description SLC avec un process
IMPORTANT (SLC : Système Logique Combinatoire)

• Toutes les entrées du SLC doivent être dans la liste


de sensibilité.
• Toutes les sorties du SLC doivent être initialisées au
début du processus.
ou
Toutes les sorties du SLC doivent êtres affectées dans toutes les
branches des instructions séquentielles.

• Interdit d'utiliser, dans le process, les sorties générée


par celui-ci ! (Si nécessaire utiliser une variable dans le process)
Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 27

Description VHDL des bascules

• Objectif : le synthétiseur doit reconnaître la bascule


d’après la description
→ utilisez les descriptions standard
→ pas de fantaisies
→ les synthétiseurs refusent les boucles
asynchrones, sauf s’ils reconnaissent une bascule

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 28


Comportement par défaut du VHDL

Lors de l'utilisation d'instructions séquentielles :

Cas non traité ⇒ VHDL maintien l'état du signal

• Cette fonctionnalité servira de base pour écrire les


éléments mémoires
• Cette fonctionnalité sera aussi un piège par l'obtention de
latchs non désirés

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 29

Bascule RS asynchrone :

• Symbole CEI :

Set S Q

Reset R

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 30


Bascule RS asynchrone : entity

library IEEE;
use IEEE.Std_Logic_1164.all;

entity Bascule_RS_Async is
port( S_i : in Std_Logic ;
-- entree de mise a '1'
R_i : in Std_Logic ;
-- entree de mise a '0'
Q_o : out Std_Logic
-- sortie de la bascule
);
end Bascule_RS_Async;

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 31

Bascule RS asynchrone : architecture

architecture Comport of Bascule_RS_Async is


begin
Mem:process(S_i,R_i)
begin
if S_i = '1' then -- Set prioritaire
Q_o <= '1'; -- mise à '1'
elsif R_i = '1' then
Q_o <= '0'; -- mise à '0'
-- else implicite : maintien par defaut
end if;
end process;
end Comport;

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 32


Bascule RS asynchrone : vue RTL

• Pourquoi la synthèse fait-elle apparaître un latch ?


• Pourquoi S_i connecté directement sur l'entrée S du latch
et pas R_i ?
Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 33

… LATCH D …

• Symbole CEI :

D 1D Q

G G1

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 34


Latch D : entity

library IEEE;
use IEEE.Std_Logic_1164.all;

entity D_Latch is
port( D_i : in Std_Logic ;
-- Entree D
G_i : in Std_Logic ;
-- Enable
Q_o : out Std_Logic
-- sortie de la bascule
);
end D_latch ;

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 35

Latch D : architecture

architecture Comport of D_Latch is


begin
Mem: process(G_i,D_i)
begin
if (G_i = '1') then
Q_o <= D_i ;
-- else implicite => maintien par defaut
end if;
end process ;
end Comport;

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 36


Latch D : vue RTL

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 37

... flip-flop D (DFF) …

Table des transitions : Symbole CEI :


Horloge D Q+
0 0 D 1D Q

1 1 Horloge C1

Table des transitions


synchrones (sans l'horloge)
D Q+
0 0
1 1
Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 38
Flip-flop D : entity

library IEEE;
use IEEE.Std_Logic_1164.all;

entity DFF is
port(Horloge_i : in Std_Logic ;
-- Entree de commande
Reset_i : in Std_Logic ;
-- Mise a zero asynchrone
D_i : in Std_Logic ;
-- Entree de donnee
Q_o : out Std_Logic
-- sortie de la bascule
);
end DFF ;

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 39

Flip-flop D : architecture

architecture Comport of DFF is


begin
Mem: process (Reset_i, Horloge_i)
begin
if (Reset_i = '1') then
-- comportement asynchrone prioritaire
Q_o <= '0' ;
elsif Rising_Edge(Horloge_i) then
-- comportement synchrone
Q_o <= D_i ;
-- else implicite => maintien par defaut
end if;
end process ;
end Comport ;

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 40


Flip-flop D : vue RTL

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 41

Type de bascule ?

Library IEEE;
use IEEE.Std_Logic_1164.all;
D Q
entity Bascule is
port (D : in Std_Logic;
Com : in Std_Logic;
Com ?
Q : out Std_Logic);
end Bascule;
architecture Comport of Bascule is
begin
process(Com)
begin
if Com = '1' then
Q <= D;
end if;
end process;
end Comport;
Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 42
Synthèse de cette bascule

• Cette description est ambiguë.


• Deux informations se contredissent :

9le processus ne réagit que sur Com


=> action dynamique => flip-flop

9la condition du test spécifie un niveau (=)


=> action sur un niveau => latch

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 43

Type de bascule ?

• Compréhension par le simulateur, inter- prétation


stricte de la description VHDL:
9une seule réponse : ....................................

• Compréhension par le synthétiseur qui va traduire la


description VHDL en logique:
9priorité à la liste de sensibilité : ...................
9priorité à la condition de test : ...................

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 44


Résultat de la simulation (ModelSim)

Le comportement correspond bien a celui d'un flip-flop D

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 45

Synthèse avec Léonardo

Le résultat de la synthèse est un flip-flop


Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 46
Synthèse avec Synplify : 3 WARNING

Synthesizing work.bascule.comport
@W:"f:\en_cours\synplify\bascule.vhd":30:2:30:8
Incomplete sensitivity list - assuming
completeness
@W:"f:\en_cours\synplify\bascule.vhd":33:10:33:10
Referenced variable d is not in sensitivity list
Post processing for work.bascule.comport
@W:"f:\en_cours\synplify\bascule.vhd":32:4:32:5
Latch generated from process for signal q,
probably caused by a missing assignment in an if
or case stmt
@END

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 47

Synthèse avec Synplify

Com

Le résultat de la synthèse est un LATCH

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 48


Conclusion sur cette description

• Le comportement en simulation peut-être différent du


matériel obtenu
• Matériel obtenu dépend du synthétiseur,
résultat pas identique

Cette description est NON SYNTHETISABLE

Interdit par la norme IEEE 1076.6-1999

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 49

Exe: Description d'éléments mémoires

Pour chaque exercice:


• Etablir la description synthétisable
• Compiler la description, puis
• Synthétiser la description avec Precision et
vérifier le matériel obtenu (vue RTL).
• Simuler avec le fonctionnement avec Top_Sim

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 50


Exercice 1 : LatchD

• Etablir la description VHDL du latch D suivant :

D 1D Q

G G1
R
Reset

Quel est le type d'action des signaux suivants :


- G, Reset
Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 51

Exercice 2 : DFFb

• Etablir la description VHDL du flip-flop D suivant :

D 1D Q

Horloge C1
nQ
R
Reset

Quel est le type d'action des signaux suivants :


- Horloge, Reset
Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 52
Exercice 3 : DFFE

• Concevoir le schéma logique, puis établir la description VHDL


du flip-flop D avec enable suivant :
• Ce flip-flop est souvent nommé DFFE :
Table des transitions
synchrones : D 1D Q

En D Q+ Horloge C1
0 x Q
En EN R
1 0 0
1 1 1 Reset

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 53

Exercice 4 : Flipflop_T

• Concevoir le schéma logique, puis établir la description VHDL


du flip-flop T suivant :

Table des transitions


synchrones : T 1T Q

T Q+ Horloge C1
0 Q R
1 not Q
Reset

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 54


Exercice 5 : Flipflop_JK

• Concevoir le schéma logique, puis établir la description VHDL


du flip-flop JK suivant :

Table des transitions


synchrones :
J 1J Q
J K Q+
0 0 Q Horloge C1
0 1 0 K 1K Q
R
1 0 1
Reset
1 1 not Q

Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 55