Sie sind auf Seite 1von 12

LA DESCRIPTION DETAT

Utilise pour dcrire des systmes squentiels quelconques ( state machine).

I) PRINCIPE :
La description du systme se fait par un nombre fini dtats. Ci-dessous la reprsentation
schmatique dun systme 4 tats (M0 M3), 2 sorties (S1 et S2), 2 entres X et Y, sans
oublier lentre dhorloge qui fait avancer le processus, et celle de remise zro qui permet de
linitialiser :
M0
Y= 1

S1= 0
S2 = 0

M1
S1 = 1
S2 = 0

M3

dnomination de ltat

X= 0
M0

S1 = 0
S2 = 1

M2
S1 = 1
S2 = 1

S1 = 0
S2 = 0
condition
Y=1
de la
transition
conditionnelle

Etat des sorties

transition inconditionnelle

Ltat initial est M0. Les 2 sorties sont 0. Au coup dhorloge on passe inconditionnellement
ltat M1 sauf si la condition Y=1 a t vrifie, ce qui mne ltat M3 ou si X=0 a t
valid ce qui mne M2.
De M3 on revient au coup dhorloge M0. De M1 on passe M2, et de M2 on passe M 3...
Dans chaque tat on dfinit les niveaux des sorties.

II)

ECRITURE EN LANGAGE V.H.D.L. :

On va traduire et essayer lexemple ci-dessus. En langage VHDL une des mthodes


conseille dcriture des machines dtat est :
* une ENTITE
* une ARCHITECTURE de description dtat avec 2 PROCESS :
Un process asynchrone et un process synchrone.

Pour des prcisions sur les rgles dcriture dune machine dtat 2 process voir
lANNEXE I.

II-A ) DEFINITION DE LENTITE :


---Machine dtat exercice 1 ------PILLET jl 19/08/97
P.P.------- machine1.VHD--------- dclaration des librairies -library ieee;
use ieee.std_logic_1164.all;
library SYNTH ;
use SYNTH.vhdlsynth.all ;
----- Dfinition de l'entit---ENTITY machine1 IS
PORT (RAZ, horl :IN STD_LOGIC; -- Ne pas oublier remise 0 et horloge !
X, Y :IN STD_LOGIC;
S1, S2 :OUT STD_LOGIC);
END machine1;

II-B ) DEFINITION DE LARCHITECTURE :


*LE PROCESS SYNCHRONE :

------ Dfinir L'architecture de description d'tat ----------------ARCHITECTURE diagramme OF machine1 IS


TYPE etat_4 IS (M0, M1, M2, M3);
--dfinir une liste des tats...
SIGNAL etat,etat_suiv :etat_4 := M0; --et 2 signaux: tats courant et
-suivant, contenant la valeur dun tat de la liste (initialise M0) .
BEGIN
definir_etat:PROCESS( raz, horl) -- "definir_etat":label optionnel
BEGIN
If raz = '1' THEN
etat <= M0;
--Le PACKAGE std_logic_1164
ELSIF rising_edge(horl) THEN
--en permet lutilisation.
etat <= etat_suiv ;
END IF;
--Mise jour de la variable
END PROCESS definir_etat;
dtat par lhorloge.

II-C ) DEFINITION DES ETATS DES SORTIES :


*LE PROCESS ASYNCHRONE :
------------ Dfinir les tats des sorties------------------sorties : process (etat, x, y)
BEGIN
CASE etat IS

--Le PROCESS doit contenir une...


structure de CAS unique dpendant
de la variable dtat.

WHEN M0 => S1 <= '0'; S2<= '0';


IF Y='1' then etat_suiv <= M3;
elsif X='0' then etat_suiv <= M2;
ELSE etat_suiv <= M1;
END IF;
--Le signal de ltat suivant nest
attribu que dans la structure CASE

PILLET JL TSEL

2/12

28/05/15

WHEN
WHEN
WHEN
END CASE;
END process sorties
END diagramme ;

M1 => S1 <= '1'; S2<= '0';etat_suiv <= M2;


M2 => S1 <= '1'; S2<= '1';etat_suiv <= M3;
M3 => S1 <= '0'; S2<= '1';etat_suiv <= M0;
;
-- ne pas oublier de terminer larchitecture !

Lors de la compilation de ce fichier, slectionner les


librairies :
IEEE.lib, SYNTH.lib et SYNOPSYS.lib

III)

SIMULATION :

Dfinir les entres :


horl : priode 200ns
Raz
0ns =1
et 150ns =0
x
0ns =1 , 950ns =0
et
Y
0ns =0
et
1550ns =1
Simuler pendant 2.5us

1200ns =1

On obtient :

PILLET JL TSEL

3/12

28/05/15

On vrifie bien les diffrents cycles de fonctionnement du systme squentiel.

GESTION dun CARREFOUR


Dans un premier temps, pour illustrer la mthode, on simplifie le problme
lextrme :
Au croisement de 2 routes, on place des feux tricolores :
AXE 2
F2

F1

R1 feu rouge de laxe 1


O1 feu orange ---------V1 feu vert ----------R2 , O2, V2 idem pour
laxe 2

AXE 1
F1

F2

HYPOTHESES de fonctionnement :
On dfinira les temps de fonctionnement des feux en fonction de la priode de lhorloge de
base. Pour la simulation T de lhorloge fera 1 s. Dans la ralit il suffira de connecter au
circuit une horloge de 1 seconde par exemple.
V1 dure 8 s, V2 dure 5s, et les feux oranges 1s.
On dcrit donc le fonctionnement global comme suit :
Laxe 1 vient de passer au vert (V1=1, R1 et O1=0 ; V2 et O2=0, R2=1). 8 s plus tard il passe
au orange (O1=1, R2=1). On laisse par scurit les 2 feux au rouge pendant une seconde (R1
et R2=1). 10 secondes se sont coules lorsquon ouvre le passage laxe 2 (V2 et R1=1). Le
cycle complet dure donc 17s.
Linitialisation doit placer le systme en tat de scurit, soit R1 et R2=1 pendant une
seconde. On libre ensuite laxe 1.
Il ny a pas dentre (appel piton...) dans cet exemple trs simplifi.
DIAGRAMME :
Les dnominations des tats sont choisies simples se souvenir
INIT
R1=R2=1
V1=V2=0
O1=O2=0

V11
R1=0
V1=1

V12
R1=0
V1=1

V13
R1=0
V1=1

V14
R1=0
V1=1

V15
R1=0
V1=1

V16
R1=0
V1=1
V17
R1=0
V1=1

OR2
V2=0
O2=1
V25
R2=0
V2=1

PILLET JL TSEL

Par simplification ne sont mises que les sorties qui changent


Idem dans le programme, dans la dfinition des tats des sorties
V18
R1=0
V1=1
V24
R2=0
V2=1

V23
R2=0
V2=1

V22
R2=0
V2=1

4/12

V21
R2=0
V2=1

SEC
R1=1
O1=0

OR1
V1=0
O1=1

28/05/15

EXEMPLE DE FICHIER VHDL :


-- FEUX_1.vhd------------- Pillet jl 25/8/97 B. de C.-------------- Essai gestion carrefour simplifie -------------------------------------------------library ieee;
use IEEE.std_logic_1164.all;
library synth ;
use synth.VHDLSYNTH.all ;
----- Dfinition de l'entit----------------ENTITY feux_1 IS
PORT (RAZ, horl :in std_logic; -- Ne pas oublier remise 0 et horloge !
V1, V2, R1, R2, O1, O2 :out std_logic);
END feux_1;
------ Dfinir L'architecture de description d'tat ----------------ARCHITECTURE diagramme OF feux_1 IS
TYPE etat_17 IS (INIT, V11, V12, V13, V14, V15, V16, V17, V18, OR1,
SEC, V21, V22, V23, V24, V25, OR2);
SIGNAL etat, nextetat :etat_17 ; --2 signaux :etats courant et suivant
Attribute ENCODING_STYLE of sorties: label is ONE_HOT;
BEGIN
definir_etat: PROCESS( raz, horl) -- "definir_etat" :label optionnel
BEGIN
If raz = '1' THEN
etat <= INIT;
ELSIF rising_edge(horl) THEN
etat <= nextetat;
END IF;
END PROCESS definir_etat;
------------ Dfinir les tats des sorties------------------sorties : process (etat)
BEGIN
CASE etat IS
WHEN INIT => R1<='1';R2<='1';V1 <='0';V2<='0';O1<='0'; O2<='0';
nextetat <= V11;
WHEN V11 => R1<='0';V1<='1';
nextetat <= V12;
WHEN V12 =>R1<='0';V1<='1';
nextetat <= V13;
WHEN V13 => R1<='0';V1<='1'; nextetat <= V14;
WHEN V14 => R1<='0';V1<='1'; nextetat <= V15;
WHEN V15 =>R1<='0';V1<='1';
nextetat <= V16;
WHEN V16 => R1<='0';V1<='1'; nextetat <= V17;
WHEN V17 => R1<='0';V1<='1'; nextetat <= V18;
WHEN V18 => R1<='0';V1<='1'; nextetat <= OR1;
WHEN OR1 => V1<='0';O1<= '1'; nextetat <= SEC;
WHEN SEC => R1<='1'; O1 <='0';nextetat <= V21;
WHEN V21 => R2<='0'; V2<='1';nextetat <= V22
WHEN V22 => R2<='0'; V2<='1'; nextetat <= V23;
WHEN V23 => R2<='0'; V2<='1'; nextetat <= V24;
WHEN V24 => R2<='0'; V2<='1'; nextetat <= V25;
WHEN V25 => R2<='0'; V2<='1'; nextetat <= OR2;
WHEN OR2 => V2<='0' ;O2<='1'; nextetat <= INIT;
END CASE;
END process sorties ;

PILLET JL TSEL

5/12

28/05/15

END diagramme;

REGLAGE DU TEST BENCH :


horl demi priode de 0.5us
raz
0=1 0.75us =0
simuler 20us

RESULTAT DE SIMULATION :

PILLET JL TSEL

6/12

28/05/15

ENTREES SYNCHRONES & ASYNCHRONES


I) ENTREES SYNCHRONES (MOORE machine) :
Sur lexemple prcdent du carrefour, on rajoute un appel piton (AP1) uniquement sur la
voie 1. De faon ne pas trop interrompre le trafic, lappel nest pris en compte qu partir de
ltat V15.
INIT
R1=R2=1
V1=V2=0
O1=O2=0

V11
R1=0
V1=1

V12
R1=0
V1=1

V13
R1=0
V1=1

V14
R1=0
V1=1

V15
R1=0
V1=1

V16
R1=0
V1=1
AP1
V17
R1=0
V1=1

AP1=1
OR2
V2=0
O2=1
V25
R2=0
V2=1

AP1
V18
R1=0
V1=1
V24
R2=0
V2=1

V23
R2=0
V2=1

V22
R2=0
V2=1

V21
R2=0
V2=1

SEC
R1=1
O1=0

OR1
V1=0
O1=1

Les seules modifications apporter se situent dans le process asynchrone (Le type dcriture
de fichier en 2 process, prcdemment choisi, ne tolre pas dans le process synchrone dautre
mise jour de la variable dtat que par lhorloge et optionnellement par le reset):
WHEN V14 => R1<='0';V1<='1'; nextetat <= V15;
WHEN V15 =>R1<='0';V1<='1';
IF AP1='1'then nextetat <= OR1;
-- INTERRUPTION !
ELSE nextetat <= V16;
-- NORMAL
end if;
WHEN V16 => R1<='0';V1<='1';
IF AP1='1'then nextetat <= OR1;
ELSE nextetat <= V17;
end if;
WHEN V17 => R1<='0';V1<='1';
IF AP1='1'then nextetat <= OR1;
ELSE nextetat <= V18;
end if;
WHEN V18 => R1<='0';V1<='1'; nextetat <= OR1;
WHEN OR1 => V1<='0';O1<= '1'; nextetat <= SEC;

Rglage du TestBench :
horl demi priode de 0.5us
raz
0=1
0.75us=0
AP1
0=0
5.75us=1 8us=0
Simuler 20us

PILLET JL TSEL

7/12

12us=1

28/05/15

APPEL PIETON pendant V15

SIMULATION :

Le signal AP1 passe 1 pendant V15. Il est donc pris en compte sur le front montant de V16,
qui branche OR1. Le reste du fonctionnement ne change pas.
On est en fonctionnement synchrone car les entres ne sont prises en compte que sur les fronts
dhorloge (ici front montant de V16). On peut vouloir aussi que les sorties soient affectes par
les entres immdiatement (en tenant compte des temps de propagation !) entres
asynchrones.

II)

ENTREES ASYNCHRONES (MEALY machine) :


Laffectation asynchrone de ltat des sorties, se fait dans le process ASYNCHRONE .
A partir de lexemple prcdent, si on veut que lappel soit pris en compte instantanment :
------------ Dfinir les tats des sorties------------------sorties : process (etat, AP1) --ne pas oublier AP1 !!

...
WHEN V14 => R1<='0';V1<='1'; nextetat <= V15;
WHEN V15 =>R1<='0';V1<='1';
IF AP1='1'then V1<='0'; O1<='1';nextetat <= OR1;
ELSE nextetat <= V16;
end if;
WHEN V16 => R1<='0';V1<='1';
IF AP1='1'then V1<='0'; O1<='1';nextetat <= OR1;
ELSE nextetat <= V17;
end if;
WHEN V17 => R1<='0';V1<='1';
IF AP1='1'then V1<='0'; O1<='1';nextetat <= OR1;
PILLET JL TSEL

8/12

28/05/15

ELSE nextetat <= V18;


end if;
WHEN V18 => R1<='0';V1<='1'; nextetat <= OR1;
WHEN OR1 => V1<='0';O1<= '1'; nextetat <= SEC;
WHEN SEC => R1<='1'; O1 <='0';nextetat <= V21;

Ce qui donne la simulation suivante, partir dun TestBench identique celui prcdemment
employ :

Les sorties O1 & V1 sont affectes immdiatement aprs lappel AP1. Ltat OR1 vient
ensuite avec videmment les mmes tats des sorties O1 et V1.

PILLET JL TSEL

9/12

28/05/15

ANNEXE I
MACHINE DETAT A 2 PROCESS
Dans une machine dtat 2 process :
Le 1er process (process SYNCHRONE) met jour la variable dtat en cours ( signal :
etat), en la remplaant par le contenu dun autre signal appel : etat_suiv . Ceci se fait
chaque front dhorloge.
Ce 1er Process gre aussi la remise zro (entre : RAZ).

Lautre process (process ASYNCHRONE) met jour le signal etat-suiv en lui attribuant la
valeur dun tat de la liste (M0, M1), en fonction de conditions sur les entres ou de
lordre prvu des tats.
Il attribue aussi les niveaux des sorties.
1ER PROCESS (PROCESS SYNCHRONE) :
Il est appel aussi current state process .
Il met jour la variable dtat et doit possder une condition IF sur un front dhorloge. Il peut
possder une RAZ (optionnel). Il assigne (sans condition) la valeur de ltat suivant (next
state variable) la variable dtat courante sur un front. Le RAZ si elle existe, assigne une
valeur statique la variable dtat courante.
Ce process ne peut mettre jour aucun autre signal (sortie par exemple) ou variable !
2me PROCESS (PROCESS ASYNCHRONE) :
Il est appel aussi next state process .
Ne pas oublier de mettre dans sa liste de sensibilit les diffrents signaux (entres) qui seront
pris en compte dans les tats :
exemple : PROCESS ( etat, x, y, AP1)
Ce process est la partie combinatoire de la machine dtat et ne doit pas contenir de front
dhorloge.
Son architecture doit tre une simple structure de CAS. Lexpression teste dans les cas doit
tre la variable dtat courante.
Les variables dtat courant et next state doivent tre du mme type (entier, std_logic vector,
std_logic...).
Ce 2me process peut seulement assigner des valeurs la next state variable (etat_suiv), mais
ne peut pas lire ses valeurs.
Les variables dtat courant et next state ne peuvent pas tre un port de lentit laquelle
larchitecture appartient et aucune partie du corps de larchitecture ne peuvent lire ou crire
leurs valeurs sauf les 2 process.
SI on synthtise avec un fichier source VHDL crit sans suivre ces rgles, La synthse du
code sera faite mais pas en temps que state machine.

PILLET JL TSEL

10/12

28/05/15

ANNEXE II
STRUCTURES DE BASE DU LANGAGE VHDL
Sont regroupes dans cette annexe les descriptions utilises et rfrences dans le cours.

1)Entity :
An Entity is a primary library unit.
Syntax :
entity entity_name is

port (port_list);

end entity_name;

2)Architecture :
An Architecture is a secondary design unit.
Syntax :
architecture arch_name of entity_name is
declarations des signaux internes
begin
concurrent statements
end arch_name;

REMARQUES :
LENTITE est une boite noire vue de lEXTERIEUR ( composant avec ses
entres/sorties qui sont des PORTS).
BUS DADRESSES

SORTIES
/DRAM, /ROM1, /IO ...

DECODEUR

LARCHITECTURE est la structure interne de la boite (avec ses signaux internes relis ou
pas aux sorties de lentit).
&
SIGNAUX
EXTERNES :
PORT DE
LENTITE

S1

SIGNAUX

S2
>1

S3
S4
S5

&

SIGNAUX
EXTERNES :
PORT DE
LENTITE

INTERNES
&

On dclare des signaux internes si on a besoin de liaisons lintrieur du composant.


Il y a 3 classes dobjets :
Les constantes : valeurs fixes aprs initialisation (voir Constant declaration).
Les variables : modifiables aprs affectation ( voir Variable declaration).
Les Signaux : spcifiques la description du matriel (fils, bus...). Un signal a un
pass, un futur et une valeur courante ( voir Signal declaration).

PILLET JL TSEL

11/12

28/05/15

LES TYPES de SIGNAUX :


Ils sont gnralement dclars sous forme de bits ou de bus.
*Les dclarations de PORT :
syntaxe : PORT(nom_des_signaux : direction type ; )
La norme standard (2me colonne) ne permet pas quun signal soit aliment par plusieurs
sources. Ce qui pose problme pour utiliser la haute impdance et connecter plusieurs buffers
ensemble. La norme IEEE 1164 pallie ceci avec le type std_logic(que lon emploiera de
prfrence).
Direction
Type standard (sans dclaration) Type (resolved) norme IEEE.1164
IN
BIT
Std_logic
OUT *
BIT
Std_logic
IN
BIT_VECTOR (x downto y) **
Std_logic_vector (x downto y )**
OUT *
BIT_VECTOR (x downto y) **
Std_logic_vector (x downto y )**
INOUT ***
BIT ou BIT_VECTOR ( )
Std_logic ou std_logic_vector( )
BUFFER ****
BIT ou BIT_VECTOR ( )
Std_logic ou std_logic_vector( )
* le signal nest pas utilisable simultanment lintrieur du composant.
** les 2 sens sont utilisables : (15 downto 0) mais aussi (0 to 15).
*** signaux bidirectionnels.
**** signal en sortie . Signal utilisable lintrieur du composant.

*Les dclarations de signaux :


Ils ne sont dclars que dans une ARCHITECTURE. Les types sont aussi ceux du tableau
prcdent. Mais ils nont pas de direction.
syntaxe : signal signal_name : type; ou
signal signal_name : type := initial_value;
AFFECTATIONS :
A:=B
affectation de B la variable A.
A <= B
affectation de signal ; cre un lien dfinitif entre A et B.
INCREMENTATION et DECREMENTATION :
I := I+1 ; C := C-1 ;

PILLET JL TSEL

12/12

28/05/15

Das könnte Ihnen auch gefallen