instruction process description vhdl des bascules
TRANSCRIPT
Copyright ©2008 EMI, REDS@HEIG-VD Bascules, p 1
UnitUnitéé dd’’enseignement : Base de systenseignement : Base de systèèmes logiques (BSL)mes logiques (BSL)
Instruction Instruction processprocessDescription VHDL des basculesDescription VHDL des bascules
Etienne Messerli
Mise à jour le 12 décembre 2008
Bascules, p 2Copyright ©2008 EMI, REDS@HEIG-VD
DDééroulement concurrent et sroulement concurrent et sééquentielquentiel
• Dans un langage informatique classique :Les instructions ont un déroulement séquentiel
• Dans un circuit :Toutes les portes fonctionnent simultanément
Tous 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)
Bascules, p 3Copyright ©2008 EMI, REDS@HEIG-VD
Processus concurrents ...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;
C <= A and B;
D <= not C;est identique à
Bascules, p 4Copyright ©2008 EMI, REDS@HEIG-VD
……processus concurrents ...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 ;
process (B,C) begin
A <= B or C ;
end process;
revient au même que :
Bascules, p 5Copyright ©2008 EMI, REDS@HEIG-VD
……processus concurrents ...processus concurrents ...
process (B,C)begin -- ATTENTION :if B=’1’ then -- la structure conditionnelleA <= ’1’; -- if then else ne peut etre
elsif C=’1’ then -- utilisee qu’a l’interieurA <= ’1’; -- d’une declaration de process
else -- (strictement sequentielle)A <= ’0’;
end if;end process;
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 :
Bascules, p 6Copyright ©2008 EMI, REDS@HEIG-VD
……processus concurrentsprocessus 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
Bascules, p 7Copyright ©2008 EMI, REDS@HEIG-VD
L'instruction L'instruction processprocess ……
• Le langage VHDL dispose d'une instruction processdont la syntaxe est :
process (Liste_De_Sensibilité)--zone de déclaration
begin
--Zone pour instructions-- séquentielles ....
end process;
Bascules, p 8Copyright ©2008 EMI, REDS@HEIG-VD
…… instruction instruction processprocess ……
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)
Bascules, p 9Copyright ©2008 EMI, REDS@HEIG-VD
……instruction instruction processprocess ……
• L’exécution des instructions à l’intérieur d’un processest 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)
Bascules, p 10Copyright ©2008 EMI, REDS@HEIG-VD
……instruction instruction processprocess ……
• 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)
Bascules, p 11Copyright ©2008 EMI, REDS@HEIG-VD
Syntaxe de l'instruction processusSyntaxe de l'instruction processus
Elément puissant du langage VHDL
[Label:] process (Liste_De_Sensibilité)-- ↑ Signaux_activant_le_processus
--zone de déclarationbegin
--Zone pour instructions-- séquentielles ....
end process;
Bascules, p 12Copyright ©2008 EMI, REDS@HEIG-VD
Processus : zone de dProcessus : zone de dééclarationclaration
• Déclaration de variables et de constantes
• Pour utilisateurs expérimentés :déclarations de types et de sous-types
déclaration de variables
déclaration de fonctions et de procédures
• Déclaration de signaux ou de composants interditedans un processus
Bascules, p 13Copyright ©2008 EMI, REDS@HEIG-VD
Processus et liste de sensibilitProcessus et liste de sensibilitéé ......
Avec liste de sensibilité :Utilisé pour les descriptions synthétisables
Description utilisée dans le cadre de l'unité BSL
Sans liste de sensibilité :Utilisé pour fichiers de simulation & spécification
Ne sera pas étudié dans le cadre de l'unité BSL
Bascules, p 14Copyright ©2008 EMI, REDS@HEIG-VD
…… processus et liste de sensibilitprocessus et liste de sensibilitéé
• Avec liste de sensibilité :utilisé pour les descriptions synthétisablesprocessus activé uniquement lorsqu'un signal de la liste de sensibilité changeprocessus endormi à la fin (end process)instruction wait interditepermet de décrire :→système combinatoire ou
→éléments mémoires (bascules) ou
→système séquentiel ou
→description avec algorithme
Bascules, p 15Copyright ©2008 EMI, REDS@HEIG-VD
Les instructions sLes instructions sééquentiellesquentielles
Les instructions séquentielles doivent êtreplacées à l'intérieur d'un processus• Affectation ( Y <= A and C; )
le signal Y sera actualisé à la fin du processus
• Affectation de variable ( Var1 := D and X; )la variable sera actualisée immédiatement
• Instruction de test ( if ... then else )
• Instruction de choix ( case ... is when )
Bascules, p 16Copyright ©2008 EMI, REDS@HEIG-VD
Instruction dInstruction d’’affectation d'un signalaffectation d'un signal
Affectation d'un signal :
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
Signal <= Sign_A fonct_logique Sign_B;
Bascules, p 17Copyright ©2008 EMI, REDS@HEIG-VD
Instruction dInstruction d’’affectation d'une variableaffectation d'une variable
• Affectation d'une variable :
• Exemple :
La variable est actualisée immédiatement
L'utilisation des variables est possible seulement à l'intérieur del'instruction process
Variable1 := Var2 fonct_logique Var3;
Temp := Var0 or Var1 or Var3;
Bascules, p 22Copyright ©2008 EMI, REDS@HEIG-VD
Syntaxe de lSyntaxe de l’’instruction conditionnelleinstruction conditionnelle
if Condition1 then
--ZoneInstructions_1
elsif Condition2 then
--ZoneInstructions_2
.....
else
--ZoneInstructions_n
end if;
Bascules, p 23Copyright ©2008 EMI, REDS@HEIG-VD
Syntaxe de lSyntaxe de l’’instruction conditionnelleinstruction conditionnelle
process (Sel, Enable)begin
if Enable = '1' then if Sel = "00" then
Sorties <= "0001";elsif Sel = "01" then
Sorties <= "0010";elsif Sel = "10" then
Sorties <= "0100";else
Sorties <= "1000";end if;
end if;end process;
Démultiplexeur
Exemple avecerreur
Bascules, p 24Copyright ©2008 EMI, REDS@HEIG-VD
Syntaxe de lSyntaxe de l’’instruction conditionnelleinstruction conditionnelle
process (Sel, Enable)begin
Sorties <= "0000"; --valeur par défautif Enable = '1' then
if Sel = "00" thenSorties(0) <= '1';
elsif Sel = "01" thenSorties(1) <= '1';
elsif Sel = "10" thenSorties(2) <= '1';
elseSorties(3) <= '1';
end if;end if;
end process;
Démultiplexeur
Bascules, p 25Copyright ©2008 EMI, REDS@HEIG-VD
Syntaxe de lSyntaxe de l’’instruction de choixinstruction de choix
case Expression is
when Valeur1 => instructions1;
when Valeur2 => instructions2;
...
...
when others => instructionsN;
end case;
Bascules, p 26Copyright ©2008 EMI, REDS@HEIG-VD
Syntaxe de lSyntaxe de l’’instruction de choixinstruction de choix
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;
Exemple de décodeur d'adresse :
Bascules, p 27Copyright ©2008 EMI, REDS@HEIG-VD
Description SLC avec un Description SLC avec un processprocess(SLC : Syst(SLC : Systèème Logique Combinatoire) 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)
IMPORTANTIMPORTANT
Bascules, p 28Copyright ©2008 EMI, REDS@HEIG-VD
Description VHDL des basculesDescription 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
Bascules, p 29Copyright ©2008 EMI, REDS@HEIG-VD
Comportement par dComportement par dééfaut du VHDLfaut 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
Bascules, p 30Copyright ©2008 EMI, REDS@HEIG-VD
Bascule RS asynchrone :Bascule RS asynchrone :
• Symbole CEI :
SSet
Reset
Q
R
Bascules, p 31Copyright ©2008 EMI, REDS@HEIG-VD
Bascule RS asynchrone : Bascule RS asynchrone : entityentity
library IEEE;use IEEE.Std_Logic_1164.all;
entity Bascule_RS_Async isport( 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;
Bascules, p 32Copyright ©2008 EMI, REDS@HEIG-VD
Bascule RS asynchrone : architecture 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 prioritaireQ_o <= '1'; -- mise à '1'
elsif R_i = '1' thenQ_o <= '0'; -- mise à '0'
-- else implicite : maintien par defautend if;
end process;
end Comport;
Bascules, p 33Copyright ©2008 EMI, REDS@HEIG-VD
Bascule RS asynchrone : vue RTLBascule 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 latchet pas R_i ?
Bascules, p 34Copyright ©2008 EMI, REDS@HEIG-VD
…… LATCH D LATCH D ……
• Symbole CEI :
1DD
G
Q
G1
Bascules, p 35Copyright ©2008 EMI, REDS@HEIG-VD
LatchLatch D : D : entityentity
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 ;
Bascules, p 36Copyright ©2008 EMI, REDS@HEIG-VD
LatchLatch D : architectureD : architecture
architecture Comport of D_Latch isbegin
Mem: process(G_i,D_i)begin
if (G_i = '1') thenQ_o <= D_i ;
-- else implicite => maintien par defautend if;
end process ;
end Comport;
Bascules, p 37Copyright ©2008 EMI, REDS@HEIG-VD
LatchLatch D : vue RTLD : vue RTL
Bascules, p 38Copyright ©2008 EMI, REDS@HEIG-VD
... flip... flip--flop D (DFF) flop D (DFF) ……
Table des transitions : Symbole CEI :
1DD
Horloge
Q
C1
D Q+
0 0
1 1
Horloge
D Q+
0 0
1 1
Table des transitionssynchrones (sans l'horloge)
Bascules, p 39Copyright ©2008 EMI, REDS@HEIG-VD
FlipFlip--flop D : flop D : entityentity
library IEEE;use IEEE.Std_Logic_1164.all;
entity DFF isport(Horloge_i : in Std_Logic ;
-- Entree de commandeReset_i : in Std_Logic ;
-- Mise a zero asynchroneD_i : in Std_Logic ;
-- Entree de donneeQ_o : out Std_Logic
-- sortie de la bascule);
end DFF ;
Bascules, p 40Copyright ©2008 EMI, REDS@HEIG-VD
FlipFlip--flop D : architectureflop D : architecture
architecture Comport of DFF isbegin
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 defautend if;
end process ;
end Comport ;
Bascules, p 41Copyright ©2008 EMI, REDS@HEIG-VD
FlipFlip--flop D : vue RTLflop D : vue RTL
Bascules, p 42Copyright ©2008 EMI, REDS@HEIG-VD
Type de bascule ?Type de bascule ?
Library IEEE;use IEEE.Std_Logic_1164.all;
entity Bascule isport (D : in Std_Logic;
Com : in Std_Logic;Q : out Std_Logic);
end Bascule;
architecture Comport of Bascule isbeginprocess(Com)beginif Com = '1' then
Q <= D;end if;
end process;end Comport;
D
Com
Q
?
Bascules, p 43Copyright ©2008 EMI, REDS@HEIG-VD
SynthSynthèèse de cette basculese de cette bascule
• Cette description est ambiguë.
• Deux informations se contredissent :
le processus ne réagit que sur Com => action dynamique => flip-flop
la condition du test spécifie un niveau (=)=> action sur un niveau => latch
Bascules, p 44Copyright ©2008 EMI, REDS@HEIG-VD
Type de bascule ?Type de bascule ?
• Compréhension par le simulateur, inter- prétation stricte de la description VHDL:
une seule réponse : ....................................
• Compréhension par le synthétiseur qui va traduire la description VHDL en logique:
priorité à la liste de sensibilité : ...................
priorité à la condition de test : ...................
Bascules, p 45Copyright ©2008 EMI, REDS@HEIG-VD
RRéésultat de la simulation sultat de la simulation ((ModelSimModelSim))
Le comportement correspond bien a celui d'un flip-flop D
Bascules, p 46Copyright ©2008 EMI, REDS@HEIG-VD
SynthSynthèèse avec Lse avec Lééonardoonardo
Le résultat de la synthèse est un flip-flop
Bascules, p 47Copyright ©2008 EMI, REDS@HEIG-VD
Synthesizing work.bascule.comport
@W:"f:\en_cours\synplify\bascule.vhd":30:2:30:8Incomplete sensitivity list - assumingcompleteness
@W:"f:\en_cours\synplify\bascule.vhd":33:10:33:10Referenced variable d is not in sensitivity list
Post processing for work.bascule.comport
@W:"f:\en_cours\synplify\bascule.vhd":32:4:32:5Latch generated from process for signal q, probably caused by a missing assignment in an if or case stmt
@END
SynthSynthèèse avec se avec SynplifySynplify : : 3 3 WARNINGWARNING
Bascules, p 48Copyright ©2008 EMI, REDS@HEIG-VD
SynthSynthèèse avec se avec SynplifySynplify
Le résultat de la synthèse est un LATCH
Com
Bascules, p 49Copyright ©2008 EMI, REDS@HEIG-VD
Conclusion sur cette descriptionConclusion 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
Bascules, p 50Copyright ©2008 EMI, REDS@HEIG-VD
Exe: Description d'Exe: Description d'ééllééments mments méémoiresmoires
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
Bascules, p 51Copyright ©2008 EMI, REDS@HEIG-VD
Exercice 1 : Exercice 1 : LatchDLatchD
• Etablir la description VHDL du latch D suivant :
Quel est le type d'action des signaux suivants :
- G, Reset
R
Reset
1DD
G
Q
G1
Bascules, p 52Copyright ©2008 EMI, REDS@HEIG-VD
Exercice 2 : Exercice 2 : DFFbDFFb
• Etablir la description VHDL du flip-flop D suivant :
Quel est le type d'action des signaux suivants :
- Horloge, Reset
1DD
Horloge
Q
C1
R
Reset
nQ
Bascules, p 53Copyright ©2008 EMI, REDS@HEIG-VD
Exercice 3 : DFFEExercice 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 transitionssynchrones : 1DD
Horloge
Q
C1
R
Reset
ENEn
En D Q+
0 x Q
1 0 0
1 1 1
Bascules, p 54Copyright ©2008 EMI, REDS@HEIG-VD
Exercice 4 : Exercice 4 : Flipflop_TFlipflop_T
• Concevoir le schéma logique, puis établir la description VHDL du flip-flop T suivant :
1TT
Horloge
Q
C1
R
Reset
Table des transitionssynchrones :
T Q+
0 Q
1 not Q
Bascules, p 55Copyright ©2008 EMI, REDS@HEIG-VD
Exercice 5 : Exercice 5 : Flipflop_JKFlipflop_JK
• Concevoir le schéma logique, puis établir la description VHDL du flip-flop JK suivant :
Table des transitionssynchrones :
1JJ
Horloge
Q
1KK
C1
J K Q+
0 0 Q
0 1 0
1 0 1
1 1 not Q
RReset
Q