Chapitre 4 - Free

51
Chapitre 4 Logique séquentielle en VHDL Olivier Romain Professeur des Universités [email protected] http://olivieromain.free.fr

Transcript of Chapitre 4 - Free

Page 1: Chapitre 4 - Free

Chapitre 4

Logique séquentielle en

VHDL

Olivier Romain Professeur des Universités

[email protected]

http://olivieromain.free.fr

Page 2: Chapitre 4 - Free

Plan du chapitre 4

• Logique séquentielle

• Asynchronisme / Synchronisme

• Les Lachs et les Bascules

• Les Registres

• Les Piles

• Les Compteurs

• Conclusion

Page 3: Chapitre 4 - Free

Logique Séquentielle ?

Rappels

Page 4: Chapitre 4 - Free

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))

Page 5: Chapitre 4 - Free

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

Page 6: Chapitre 4 - Free

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

Page 7: Chapitre 4 - Free

Asynchronisme

Synchronisme

Page 8: Chapitre 4 - Free

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

Page 9: Chapitre 4 - Free

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

Page 10: Chapitre 4 - Free

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

Page 11: Chapitre 4 - Free

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é

Page 12: Chapitre 4 - Free

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;

Page 13: Chapitre 4 - Free

Les Bascules

Page 14: Chapitre 4 - Free

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

Page 15: Chapitre 4 - Free

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

Page 16: Chapitre 4 - Free

Bascule D

• Circuits TTL

74LS74, 74LS174, 74LS175,

74LS378, 74LS273, …

• Circuits CMOS

CD4013, CD40174, CD40175

Page 17: Chapitre 4 - Free

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;

Page 18: Chapitre 4 - Free

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

Page 19: Chapitre 4 - Free

Contraintes temporelles

• Exemple de caractéristiques temporelles d’une Flip

Flop

Page 20: Chapitre 4 - Free

Les registres

Page 21: Chapitre 4 - Free

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

Page 22: Chapitre 4 - Free

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

Page 23: Chapitre 4 - Free

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

Page 24: Chapitre 4 - Free

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

Page 25: Chapitre 4 - Free

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↑

Page 26: Chapitre 4 - Free

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

Page 27: Chapitre 4 - Free

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)

Page 28: Chapitre 4 - Free

Registre à décalage

• Circuits TTL

74LS91, 74LS95, 74LS164,

74LS166, 74LS194, …

• Circuits CMOS

4014, 4015, 40194, 4031,

4034, 4035, 4094, 4517

Page 29: Chapitre 4 - Free

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

Page 30: Chapitre 4 - Free

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

Page 31: Chapitre 4 - Free

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

Page 32: Chapitre 4 - Free

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

Page 33: Chapitre 4 - Free

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

Page 34: Chapitre 4 - Free

Exemples d’utilisation

des registres

Page 35: Chapitre 4 - Free

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

Page 36: Chapitre 4 - Free

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

Page 37: Chapitre 4 - Free

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

Page 38: Chapitre 4 - Free

• 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

Page 39: Chapitre 4 - Free

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

Page 40: Chapitre 4 - Free

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

Page 41: Chapitre 4 - Free

Les compteurs

0, 1, 2, 3, …

Page 42: Chapitre 4 - Free

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

Page 43: Chapitre 4 - Free

• 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

Page 44: Chapitre 4 - Free

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

Page 45: Chapitre 4 - Free

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;

Page 46: Chapitre 4 - Free

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

Page 47: Chapitre 4 - Free

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

Page 48: Chapitre 4 - Free

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

Page 49: Chapitre 4 - Free

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

Page 50: Chapitre 4 - Free

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;

Page 51: Chapitre 4 - Free

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…