Chapitre 4 - Free
Transcript of Chapitre 4 - Free
Chapitre 4
Logique séquentielle en
VHDL
Olivier Romain Professeur des Universités
http://olivieromain.free.fr
Plan du chapitre 4
• Logique séquentielle
• Asynchronisme / Synchronisme
• Les Lachs et les Bascules
• Les Registres
• Les Piles
• Les Compteurs
• Conclusion
Logique Séquentielle ?
Rappels
temps t
x
z
temps t
x
z
Combinatoire et séquentiel
• Combinatoire
Les sorties dépendent des
entrées uniquement à l’instant
t. Pas de mémorisation
z(t) = F(x(t))
• Séquentiel
Les sorties dépendent de la
séquence des entrées du
temps 0 au temps t.
Il y a mémorisation.
z(t) = F(x(0,t))
Combinatoire et séquentiel
• Combinatoire
De manière idéale, les sorties
sont définies au moment de
l’application de la nouvelle
combinaison des entrées
Valeur instantanée
De manière réelle, les sorties sont
définies avec un retard
(temps de propagation, Δt)
• Séquentiel
Circuit combinatoire rebouclé
Les sorties dépendent de la
combinaison des entrées et de
l’état des variables internes (reflet
de l’état antérieur des sorties)
Logique
combinatoire
Entrée
e(t)
Sortie
z(t)
Elément
Mémorisant
(variable interne y)
Logique
combinatoire
Horloge
Entrée
e(t)
Sortie
z(t)
Δt
Logique séquentielle
• Définition
Un circuit électronique est dit séquentiel si ses sorties sont déterminées
non seulement par la combinaison de ses variables d’entrées, mais
aussi par la séquence des combinaisons précédentes de ses entrées et
de l’état initial du système
• Conséquences
Un système séquentiel est un système combinatoire des variables (en-1,
…, ei, …, e0, yp-1, …,yi, …, y0)
Les variables internes (yp-1, …,yi, …, y0) indiquent l’état présent du
systèmes
Les entrées et les variables internent préparent l’état futur du système
Asynchronisme
Synchronisme
Circuits séquentiels
asynchrones et synchrones
• Asynchrones :
Evolution spontanée des
sorties en fonction des entrées
Succession d’état transitoire
avant l’apparition de l’état
stable
• Synchrones :
les entrées sont prises en
compte et les sorties évaluées
à des instants discrets définis
par exemple un signal
d’horloge
horloge
Circuits séquentiels
asynchrones et synchrones
• Le synchronisme des sorties peut être donné de trois manière différentes
Sur niveau : la ou les sorties n’évolueront que si le signal de synchronisation présente un niveau qui le rend actif
Synchronisation à l’état haut
Synchronisation à l’état bas
Sur front du signal de synchronisation
Front montant (passage de l’état bas à l’état haut)
Front descendant (passage de l’état haut à l’état bas)
Sur Impulsion : deux fronts
Front montant pour les entrées
Front descendant pour les sorties
Circuits séquentiels
asynchrones et synchrones
e
z
clk tps tps
e
z
• Asynchrone • Synchrone
Prise en compte des valeurs
du signal d’entrée / front de
l’horloge
Prise en compte des valeurs
du signal d’entrée à chaque
instant
T : Période TB
TH
TFFréquence
T
TcycliqueRapport
TTT
H
BH
1
1
=
<=
+=
t1 t2 t3 tps
Front montant Front descendant
Horloge
• Signal périodique
• Entre 2 tops d’horloge, il n’y a pas de changement
d’états
temps discrétisé
Horloge
• Dans un processus
utilisation wait
wait until clk’event and
clk=‘1’;
wait until clk’event and
clk=‘0’;
Process
Begin
wait until clk’event and clk=‘1’;
end process;
• Utilisation du type std_logic et de la fonction
rising_edge
falling_edge
Process(clk)
begin
if falling_edge(clk) then
end if;
end process;
Process(clk)
begin
if rising_edge(clk) then
end if;
end process;
Les Bascules
D
CLK
Q D
CLK
Q
CLK
D
Q
CLK
D
Q
Bascule D
• Echantillonnage des entrées sur front d’horloge
• Comportement indépendant de la largeur du signal
d’horloge CLK
S
CLK
Q
R Q’
D S
CLK
Q
R Q’
D
Bascule D
• Table de vérité
• Expression caractéristique :
Qn+1=Dn
• Logigramme
D Qn+1 Qn+1
0 0 1
1 1 0
Bascule D
• Circuits TTL
74LS74, 74LS174, 74LS175,
74LS378, 74LS273, …
• Circuits CMOS
CD4013, CD40174, CD40175
Bascule D en VHDL
Architecture sequentiel2 of LatchD is
Begin
Process
Begin
Wait until clk=‘1’;
Q <= D;
Q_bar <= not D;
end process;
end sequentiel2;
Architecture sequentiel3 of LatchD is
Begin
Q <= D when clk=‘1’ and clk’event ;
Q_bar <= not D when clk=‘1’ and clk’event ;
end process;
end sequentiel3;
Entity DFF is
port (
D,clk : in std_logic;
Q, Q_bar : out std_logic );
end DFF;
Architecture behav of DFF is
signal Q1, Q1_bar : std_logic;
Begin
Process(clk)
Begin
if (clk=‘1’ and clk’event) then
Q1 <= D;
Q1_bar <= not D;
else
Q1 <= Q1;
Q1_bar <= Q1_bar;
end if;
end process;
end behav;
Contraintes temporelles
• Temps d’établissement (tsu):
temps pendant lequel la donnée doit rester stable avant d’être échantillonnée.
• Temps de maintien (thold):
temps pendant lequel la donnée doit rester stable après l’échantillonnage.
• Temps de propagation (tp):
temps écoulé entre le moment où l’entrée est échantillonnée et le moment où elle est disponible en sortie de la Flip Flop.
D
CLK
Q
th tsu
tp
tw
CLK
D
Q
Contraintes temporelles
• Exemple de caractéristiques temporelles d’une Flip
Flop
Les registres
Registre
n
n
1 1
4 types :
•PIPO : Parallel In-
Parallel Out
•SISO : Serial In - Serial
Out
•SIPO : Serial In -
Parallel Out
•PISO : Parallel In -
Serial Out
Registres
• Ensemble de bascules identiques interconnectées entre-elles, soit
directement, soit par des opérateurs combinatoires
• La fonction du registre dépend de l’interconnexion entre entrées et
sorties
Entrées //
Sortie //
Sortie série Entrée série
Commandes
Registres
• Les registres sont particulièrement utilisées en électronique numérique pour
Stockage temporaire des informations
Transmissions des informations
Conversion série/parallèle
Ligne à retard numérique
…
• 3 familles principales
Registre à décalage
Registre mémoire
Registre de synchronisation
Registre à décalage
• Définition :
Registre capable de transférer des données entre 2 cellules binaires consécutives
Sens du transfert :
bidirectionnel
unidirectionnel (gauche vers droite ou droite vers gauche)
• Caractéristiques d’un registre à décalage complet
1 entrée x de chargement parallèle sur n bits
1 entrée série xR pour le décalage série vers la droite
1 entrée série xL pour la décalage série vers la gauche
1 entrée de contrôle CTRL sur 2 bits pour le chargement parallèle ou le décalage série
1 entrée CLR d’initialisation (a)synchrone
1 sortie z sur n bits
Registre à décalage
• Représentation symbolique
Registre
à décalage clk
xR xL
CLR CTRL
z
x
2
n
n
n-1 n-2 n-3 0
xR xL
clk
CTRL
xn-
1
xn-
2
xn-
3 x0
zn-1 zn-2 zn-3 z0
z0 : sortie série droite
zn-1 : sortie série gauche
Registre à décalage
1 0 1 0
1 0
clk
CTRL
1 0 1 0
0 0 0 0
1 0 1 0
1 0
clk
CTRL
1 0 1 0
1 0 1 0
0 1 0 0
1 0
clk
CTRL
1 0 1 0
0 1 0 0
0 0 1 0
1 0
clk
CTRL
1 0 1 0
0 0 1 0
Clk↑
Clk↑
Clk↑
Clk↑
CTRL C1 C0
NONE 0 0
LEFT 0 1
RIGHT 1 0
LOAD 1 1
D Q
MUX
3 2 1 0
x3
z3
D Q
MUX
3 2 1 0
x2
z2
D Q
MUX
3 2 1 0
x1
z1
D Q
MUX
3 2 1 0
x0
z0
xL
xR
clk
c1 c0
Registre à décalage
• Implémentation d’un registre à décalage sur 4 bits
Registre à décalage
• Registre à décalage et multiplication-division
Décalage vers la droite division /2
Exemple : CTRL=RIGHT, xR=0 et x=1000(8)
z=0100 (4), 0010(2), 0001(1)
Décalage vers la gauche multiplication x2
Exemple : CTRL=LEFT, xL=0 et x=0011 (3)
z=0110(6), 1100(12)
Registre à décalage
• Circuits TTL
74LS91, 74LS95, 74LS164,
74LS166, 74LS194, …
• Circuits CMOS
4014, 4015, 40194, 4031,
4034, 4035, 4094, 4517
Registre en VHDL
• Exemple de registre SISO
Data_out(t)=data_in(t-N)
Ligne à retard numérique
• Le paramètre générique
permet de définir la taille du
registre
Entity SHIFTER_SISO is
Generic (
nb_stage : integer := 32
);
port (
data_in, clk : in std_logic;
data_out : out std_logic );
end SHIFTER_SISO;
Architecture behav of SHIFTER_SISO is
signal registre : std_logic_vector (nb_stage-1 downto 0);
Begin
Process
Begin
wait until clk=‘1’;
registre(0) <= data_in;
data_out <= registre(nb_stage-1);
For i in nb_stage-1 downto 0 loop
registre(i)<=registre(i-1);
end loop;
end process;
end behav;
SISO
Size N
data_in data_in
clk
1 1
Registre en VHDL
Entity SHIFTER_SISO is
Generic (
nb_stage : integer := 32
);
port (
data_in, clk : in std_logic;
data_out : out std_logic );
end SHIFTER_SISO;
Architecture behav2 of SHIFTER_SISO is
signal registre : std_logic_vector (nb_stage-1 downto 0);
Begin
Process
Begin
wait until clk=‘1’;
registre <= registre((nb_stage-1) downto 1) & data_in;
data_out <= registre(nb_stage-1);
end process;
end behav;
• Exemple2 de registre SISO
Data_out(t)=data_in(t-N)
Ligne à retard numérique
• Le décalage est réalisé au moyen de
l’opérateur de concaténation
SISO
Size N
data_in data_in
clk
1 1
1 0 1 0 0 1 0 1
Data_in 1 0 1 0 0 1 0
À l’instant t
À l’instant t+1
Registre en VHDL
• Exemple de registre PISO
Conversion // série
Sérialisation des données
• La commande load permet de
charger le registre
Entity SHIFTER_PISO is
Generic (
nb_stage : integer := 32
);
port (
load, clk : in std_logic;
data_in : in std_logic_vector( nb_stage-1 downto 0);
data_out : out std_logic );
end SHIFTER_PISO;
Architecture behav of SHIFTER_PISO is
signal registre : std_logic_vector (nb_stage-1 downto 0);
Begin
Process
Begin
wait until clk=‘1’;
If (load=‘1’) then registre <= data_in;
data_out <= registre(nb_stage-1);
For i in nb_stage-1 downto 0 loop
registre(i)<=registre(i-1);
end loop;
end process;
end behav;
PISO
Size N
data_in data_in
clk
N 1
load 1
Registre en VHDL
• Exemple de registre SIPO
Conversion série //
Parallelisation des données
Entity SHIFTER_SIPO is
Generic (
nb_stage : integer := 32
);
port (
data_in, clk : in std_logic;
data_out : out std_logic_vector (nb_stage-1 downto 0);
end SHIFTER_SIPO;
Architecture behav of SHIFTER_SIPO is
signal registre : std_logic_vector (nb_stage-1 downto 0);
Begin
Process
Begin
wait until clk=‘1’;
registre(0) <= data_in;
data_out <= registre;
For i in nb_stage-1 downto 0 loop
registre(i)<=registre(i-1);
end loop;
end process;
end behav;
SIPO
Size N
data_in data_in
clk
1 N
Registre en VHDL
• Exemple de registre PIPO
Data_out(t)=data_in(t-1)
Buffer (tampon)
Utiliser pour le pipeline
• Le paramètre générique
permet de définir la taille du
registre
Entity SHIFTER_PIPO is
Generic (
nb_stage : integer := 32
);
port (
clk : in std_logic;
data_in : in std_logic_vector (nb_stage-1 downto 0);
data_out : out std_logic_vector (nb_stage-1 downto 0)
);
end SHIFTER_PIPO;
Architecture behav of SHIFTER_PIPO is
Process
Begin
wait until clk=‘1’;
data_out <data_in;
end process;
end behav;
PIPO
Size N
data_in data_in
clk
N N
Exemples d’utilisation
des registres
Registre mémoire
n
n
clk z
x
LD
CLR
Registre mémoire
• Utilisée dans les ordinateurs
• Le registre comporte :
une entrée x sur n bits
une entrée de contrôle du chargement : LD
une entrée d’initialisation (a)synchrone : CLR
une sortie z sur n bits
D
Q
1 0
xn-1
zn-1
D
Q
1 0
xn-2
zn-2
D
Q
1 0
x0
z0
CLR CLK LD
Registre mémoire
• Implémentation d’un registre n bits
Registre mémoire en VHDL
• Exemple de registre mémoire
Conversion de la donnée en sortie
tant que l’entrée load n’est pas
active
• La commande clear efface le
contenu du registre
• La commande load permet de
charger le registre
Entity Reg_MEM is
Generic (
nb_stage : integer := 32
);
port (
load, clk : in std_logic;
data_in : in std_logic_vector( nb_stage-1 downto 0);
data_out : out std_logic_vector( nb_stage-1 downto 0) );
end Reg_MEM;
Architecture behav of Reg_MEM is
signal registre : std_logic_vector (nb_stage-1 downto 0);
Begin
data_out <= registre;
Process
Begin
wait until clk=‘1’;
If (load=‘1’) then
registre <= data_in
elsif (clear=‘1’) then
registre <= (others=>’0’);
else
registre <= registre;
end if;
end process;
end behav;
MEM
Size N
data_in data_in
clk
N N
load 1
clear 1
• Problème
• Solutions
1. Augmenter la période de Tclk
2. Traitement parallèle
3. Pipeline
regis
tre
regis
tre
ABS LOG
regis
tre
a
b
clk Tpcomb>Tclk
Sortie
indéterminée
Flux de données
arrivant sur a et b,
cadencé à Tclk
a1, b1
a2, b2
a3, b3
….
Registre de synchronisation
regis
tre
regis
tre
ABS LOG
regis
tre
a
b
clk
regis
tre
regis
tre
ABS LOG
regis
tre
a
b
clk
regis
tre
regis
tre
ABS LOG
regis
tre
a
b
clk
Tpcomb<3.Tclk
Registre de synchronisation
• Traitement parallèle
Soit 2.Tclk<Tpcomb<3.Tclk
Le résultat en sortie sera exact
après 3 périodes d’horloges
Duplication du matériel 3 fois
regis
tre
regis
tre
regis
tre
ABS LOG
regis
tre
regis
tre
a
b
clk
Tp+ < Tclk Tpabs < Tclk Tplog < Tclk
Registre de synchronisation
• Pipeline
Soit Tp+ et Tpabs et Tplog, tous < à Tclk
Le résultat en sortie sera disponible après 3 périodes d’horloges
Insertion de registre de synchronisation entre chaque étape de calcul
Au bout de 3 clk (Taille du Pipe) les données traitées sont délivrées.
Les données traitées ont un débit (Troughouput) à Tclk
Les compteurs
0, 1, 2, 3, …
Introduction
• Les compteurs sont des éléments
essentiels de logique séquentielle
• Les compteurs permettent
d’établir une relation d’ordre
dans le séquencement
d’évènements.
• L’élément de base d’un compteur
est comme les registres, la
bascule
• Un compteur est caractérisé par
Le code généré Binaire, BCD, Gray, circulaire, etc.
Son architecture Asynchrone
Synchrone
Sa réversibilité Comptage
Décomptage
Sa programmation Initialisation dans un état particulier
Séquencement particulier
Le nombre d’étages Nombre de Bascule
• Les bascules possèdent toutes des horloges différentes
• Généralement, la sortie d’une bascule sert d’horloge à la suivante
• Principe :
mettre en cascade des diviseurs de fréquence par 2
exemple de réalisation de diviseurs de fréquence/2
• Front montant
• Front descendant
Compteur Asynchrone
T Q 1
clk
J
CLK
Q
K Q
1
1
D Q
Q clk
Q
T Q 1
clk
J
CLK
Q
K Q
1
1
D Q
Q clk
Q
Compteur binaire asynchrone
• Exemple de compteur-décompteur modulo 8
T Q
1
clk Q
T Q
Q
T Q
Q
Q0 Q1 Q2 compteur
décompteur
Q0
Q1
Q2
Q0
Q1
Q2
compteur
décompteur
7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7
Compteur binaire asynchrone en
VHDL
Entity compteur_asynchrone is
port (
clk : in std_logic;
Q : out std_logic_vector (3 downto 0)
);
end compteur_asynchrone;
Architecture behav of compteur_asynchrone is
Signal temp : std_logic_vector (3 downto 0);
component BasculeT is
port (
clk, T : in std_logic;
Q : out std_logic
);
end component;
Q<= temp;
TFF1 : BasculeT port map (clk,’1’,temp(0));
TFF2 : BasculeT port map (temp(0),’1’,temp(1));
TFF3 : BasculeT port map (temp(1),’1’,temp(2));
TFF4 : BasculeT port map (temp(2),’1’,temp(3));
end behav;
Entity BasculeT is
port (
clk, T : in std_logic;
Q : out std_logic );
end BasculeT;
Architecture sequentiel of BasculeT is
signal Q1 : std_logic;
Begin
Q<= Q1;
Process
Wait until clk’event and clk=‘1’;
Begin
if (T=‘1’) then
Q1 <= not Q1;
else
Q1 <= Q1;
end if;
end process;
end sequentiel;
Compteur binaire asynchrone
• Asynchrone : pas la même clk pour toutes les bascules
• Inconvénients
accumulation des temps de propagation
N-1 états transitoires si N bascules
clk
tpFF Q0
tpFF Q1
tpFF Q2
Tmin>N.tpFF
1
1
1
1
1
1
0
1
1
0
0
1
0
0
0
7 7 6 4 0
Compteur binaire asynchrone
Modulo p
• Méthode de synthèse d’un diviseur de fréquence dont le code est
binaire pur et dont la mesure p n’est pas une puissance de 2
nombre de bascule m tel que : 2m-1 < p < 2m
assemblage des bascules comme montrés précédemment
les p états se succèdent dans l ’ordre 0,1,…,p-1. Le 1er état indésirable
p est détecté par une fonction combinatoire Zp
la fonction combinatoire Zp est appliqué à toutes les entrées CLR des
bascules. Le diviseur passe à l’état initial
• Il y a 2m-p états inutiles
Compteur binaire synchrone
• Toutes les bascules possèdent la même horloge
Pas d’état transitoire indésirable en sortie
• Les entrées de chaque bascule sont pré -conditionnées en fonction des états présents du compteur et de sont état futur
Exemple
Soit la séquence du compteur binaire
• Q1Q2 : 0-3-1-2
• Etat présent du compteur 3
• Etat futur du compteur 1
• Quelles doivent être les valeurs des prochaines entrées ? D1 = 1 et D2 =0
• Plusieurs méthodes de synthèse existent dont :
Méthode de Marcus
Fonction de Commutation
Méthode de Marcus
• Exemple
On veut réaliser le compteur
binaire synchrone dont la
séquence de sortie suit l’ordre
suivant :
0 - 3 - 1 - 2
• Synthèse
Table de vérité à
entrées=f°(sortie)
Synthèse de karnaugh
D1= Q1 XNOR Q2
D2= Q2
Logigramme : circuits
Ou programmation VHDL
N Q1 Q2 D1 D2
0 0 0 1 1
3 1 1 1 0
1 1 0 0 1
2 0 1 0 0
D1
CLK
Q1 D2 Q2
Q2
Compteur binaire synchrone en
VHDL
• Utilisation de l’opérateur
d’addition +
• Librairie unsigned
supplémentaire
Définition du Type
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Entity compteur_synchrone is
port (
clk : in std_logic;
Q : out std_logic_vector (3 downto 0)
);
end compteur_synchrone;
Architecture behav of compteur_asynchrone is
Signal temp : std_logic_vector (3 downto 0);
Q<= temp;
Process (clk)
Begin
if (clk’event and clk=‘1’) then
temp <= temp +1;
end if;
End process;
end behav;
Conclusion
• Logique séquentielle / logique combinatoire, décrit des circuits dont les sorties dépendent des entrées et des valeurs antérieures
• L’élément de base est la bascule
• A partir de bascule, on peut réaliser des :
Registres
Compteurs
• La logique séquentielle va plus loin
Notion de machine à états finis ou automates
Machine de Moore, de Mealy, One Hot Encoding, etc…