Vous êtes sur la page 1sur 16

Unité : CSN – SysLog2

Description en VHDL
d'éléments mémoires

Etienne Messerli
octobre 2019

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p1

Description d’éléments mémoires

 Pas de déclaration explicite en VHDL


 Description doit indiquer au synthétiseur que
le signal correspond à un élément mémoire !
Dès lors:
▪ utilisez les descriptions standards
▪ pas de fantaisies !!!!!
▪ les synthétiseurs refusent les boucles asynchrones,
sauf s’ils reconnaissent un élément mémoire
(bascule)

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p2


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

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p3

Avertissement

Avec le langage VHDL :


 Il est possible d’obtenir un élément
mémoire lorsque vous ne le voulez pas !

INVERSEMENT

 Il est possible de ne pas avoir d'élément


mémoire lorsque vous le voulez !

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p4


Description d ’un flip-flop
Library IEEE;
use IEEE.Std_Logic_1164.all;
D D Q Q
entity Flip_Flop is
port (D : in Std_Logic; CLK
Clock : in Std_Logic;
Q : out Std_Logic);
end Flip_Flop;
architecture Comport of Flip_Flop is
begin
process(Clock)
begin
if Rising_Edge(Clock) then
Q <= D;
end if;
end process;
end Comport;
E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p5

Synthèse du flip-flop
 Cette description se synthétise parfaitement
sur tous les synthétiseurs actuels
 Deux informations confirment la notion de flip-
flop :
▪ le processus ne réagit que sur l'horloge CLK
▪ la condition du test spécifie clairement une
action dynamique (Rising_Edge)

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p6


Synthèse DFF avec Leonardo
 Vue RTL

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p7

Description d’un latch


Library IEEE;
use IEEE.Std_Logic_1164.all;
D D Q Q
entity Latch is
port (D : in Std_Logic; G G
G : in Std_Logic;
Q : out Std_Logic);
end Latch;
architecture Comport of Latch is
begin
process(G, D)
begin
if G = '1' then
Q <= D;
end if;
end process;
end Comport;
E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p8
Synthèse du latch
 Cette description se synthétise parfaitement sur
tous les synthétiseurs actuels
 Deux informations confirment la notion de latch :
▪ le processus réagit sur les deux signaux G et D
▪ la condition du test spécifie clairement une action
sur un niveau, soit "="

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p9

Synthèse latch avec Leonardo


 Vue RTL

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 10


Type de bascule ?
Library IEEE;
use IEEE.Std_Logic_1164.all;
D Q
?
entity Bascule is
port (D : in Std_Logic; Com
Com : in Std_Logic;
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;
E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 11

Synthèse de cette bascule


 Cette description est ambiguë.
 Deux informations se contredissent :
▪ le processus se déclenche uniquement sur Com
=> action dynamique => flip-flop

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


=> action sur un niveau => latch

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 12


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 : ...................

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 13

Résultat de la simulation (ModelSim)

Le comportement correspond bien a celui d'un


flip-flop D

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 14


Synthèse avec Léonardo

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


E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 15

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
E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 16
Synthèse avec Synplify

Com

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

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 17

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

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 18


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

Pour chaque exercice:


 Etablir la description synthétisable
 Compiler et synthétiser la description avec Quartus
II, puis vérifier le matériel obtenu (vue RTL), soit:
▪ un seul élément mémoire et des connections
cohérentes
 Vérifier le fonctionnement:
▪ soit à l'aide du tb automatique fourni
▪ soit à l'aide d'une simulation manuelle avec la
console REDS_Console.tcl.
• utiliser le fichier console_sim.vhd

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 19

Exercice 1 : latch_en
 Etablir la description VHDL du latch D suivant :

D 1D Q

G G1
ar
Reset

Quel est le type d'action des signaux suivants :


- G, Reset
E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 20
Exercice 2 : dff_ar
 Etablir la description VHDL du flip-flop D suivant :

D 1D Q

Horloge C1
nQ
ar
Reset

Quel est le type d'action des signaux suivants :


- Horloge, Reset
E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 21

Exercice 3 : dff_en
 Concevoir le schéma logique, puis établir la description
VHDL du flip-flop D avec enable décrit ci-dessous.
▪ Ce flip-flop est souvent nommé DFFE

Table des transitions


synchrones : D 1D Q

En D Q+ Horloge C1
0 x Q
En EN ar
1 0 0
1 1 1 nReset
E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 22
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 ar
1 not Q
Reset

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 23

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
ar
1 0 1
Reset
1 1 not Q
E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 24
Exercice 6 : flipflop_RS
 Concevoir le schéma logique, puis établir la
description VHDL du flip-flop RS suivant :

Table des transitions


synchrones :
R 1R Q
RS Q+
0 0 Q Horloge C1
0 1 1 S 1S Q
ar
1 0 0
Reset
1 1 '-'
E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 25

dia laissé vide volontairement

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 26


Etat initial d'une bascule
 A l'instant 0 ns :
Tous les signaux sont à l'état 'U'
 Une initialisation est indispensable
 Comment forcer l'état initial d'une bascule en
VHDL ?

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 27

Proposition I
Library IEEE;
use IEEE.Std_Logic_1164.all;
entity Flip_Flop is
port (D : in Std_Logic;
Clock : in Std_Logic;
Q : out Std_Logic := '0' );
end Flip_Flop;
architecture Comport of Flip_Flop is
begin
process(Clock)
begin
if Rising_Edge(Clock) then
Q <= D;
end if;
end process;
end Comport;
E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 28
Proposition II
Library IEEE;
use IEEE.Std_Logic_1164.all;
entity Flip_Flop is
port (D : in Std_Logic;
Clock : in Std_Logic;
Reset : in Std_Logic;
Q : out Std_Logic);
end Flip_Flop;
architecture Comport of Flip_Flop is
begin
process(Clock, Reset)
begin
if Reset = '1' then
Q <= '0';
elsif Rising_Edge(Clock) then
Q <= D;
end if;
end process;
end
E. Messerli (HES-SO Comport;
/ HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 29

Conclusion initialisation bascule


 Proposition I
▪ fonctionne en simulation VHDL
▪ ne sera pas synthétisé : "soft"
 Proposition II
▪ fonctionne en simulation VHDL
▪ sera correctement synthétisé : "hard"
▪ fonctionne en simulation après synthèse

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 30


Flip-flop avec actions asynchrones
La norme IEEE-1076.6 "Standard for VHDL Register
Transfer Level (RTL) Synthesis" définit le sous-ensemble
utilisable en synthèse.
 Voici la syntaxe de l'instruction process pour un flip-
flop avec action asynchrone

process(Clock, Action_Asynchrone)
begin
if Action_Asynchrone = '1' then
Q <= Etat_Initial;
elsif Rising_Edge(Clock) then
Q <= D;
end if;
end process;

E. Messerli (HES-SO / HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 31

Flip-flop avec reset asynchrone


Library IEEE;
use IEEE.Std_Logic_1164.all;
entity Flip_Flop is
port (D : in Std_Logic;
Clock : in Std_Logic;
Reset : in Std_Logic;
Q : out Std_Logic);
end Flip_Flop;
architecture Comport of Flip_Flop is
begin
process(Clock, Reset)
begin
if Reset = '1' then
Q <= '0';
elsif Rising_Edge(Clock) then
Q <= D;
end if;
end process;
end
E. Messerli (HES-SO Comport;
/ HEIG-VD / REDS), 2019 Eléments mémoires en VHDL, p 32

Vous aimerez peut-être aussi