Vous êtes sur la page 1sur 9

VHDL

Complments
Compl ments
Machines dtats
d tats
Machines dtats

Principe de fonctionnement
 LA machine dtat sapparente un automate ou un grafcet
 Le systme est dans un tat stable ( quivalent dune tape pour le grafcet)
 Il peut voluer vers un autre tat du systme en fonction des entres ( rceptivit
VRAIE)
 A chaque tat correspond une/des sorties actives ( les actions associes aux
tapes)
 La reprsentation graphique est un diagramme
bulle
 Ne pas oublier de faire un tableau ct pour
prciser les sorties en fonction de ltat
Contraintes de fonctionnement
 Une machine dtat a besoin dune horloge
(quartz, astable en externe ou PLL embarque)
 Une transition est active lorsque
 Ltape source est active
 La rceptivit est vrai (quation logique sur les
entres
 Un front dhorloge survient 2
Machines dtats

Les diffrentes types de Finite State


Machine (FSM)
 Machine de Moore
 La sortie ne dpend que de ltat
courant
 Le temps de raction dpend donc de
lhorloge
 Cette machine peut-tre qualifie de
synchrone
 Machine de Mealy
 La sortie ne dpend de ltat courant
mais aussi des entres
 Le temps de raction est plus rapide que
Moore
 Cette machine peut-tre qualifie
dasynchrone
 Inconvnients: la dure minimum dun
tat nait plus garanti => Ltat peut-tre
interprt par un autre systme comme
un tat parasite

3
Machines dtats

Codage des tats


 Cration dun type numr
 Le compilateur affecte automatiquement un entier chaque tat
T YPE etat IS (debut, etat1, etat2);
SIGNAL etat_present : etat;
 Codage la main
 Lutilisateur affecte un entier la main
Ex: dbut vaudra 0,tat1 vaudra 1 et tat 2 vaudra 2
 SIGNAL etat_present : integer range 0 to 2; OU
 SIGNAL etat_present : std_logic_vector(1 down to 0);
Gestion des transitions
 DANS UN PROCESS (car squentiel)
 Instructions CAS/IS bien adapte

4
Machines dtats
library ieee ; use ieee.std_logic_1164.ALL;
entity MAE is
Exemple de codage la main port ( E,RST,HOR : in STD_LOGIC ;
S : out STD_LOGIC );
 Cahier des charges end MAE;
architecture COMPORTEMENT of MAE is
 la sortie S recopie ltat logique prsent sur son signal REG_ETAT : STD_LOGIC_VECTOR(2 downto 0);
process (HOR,RST)
entre E si celle-ci est reste stable aprs 2 coups begin
if RST='0' then REG_ETAT <= "000";
dhorloge successifs. elsif (HORevent and HOR='1') then
case REG_ETAT is
when "000" => S <= '0' ;
if E = '1' then REG_ETAT <= "001";
else REG_ETAT <= "000";
end if ;
when "001" => S <= '0' ;
if E = '1' then REG_ETAT <= "010";
else REG_ETAT <= "000";
end if ;
when "010" => S <= '0' ;
if E = '1' then REG_ETAT <= "011";
La sortie est else REG_ETAT <= "000";
resynchronise car end if ;
incluse dans le when "011" => S <= '1' ;
if E = '1' then REG_ETAT <= "011";
process else REG_ETAT <= "100";
end if ;
when "100" => S <= '1' ;
if E = '1' then REG_ETAT <= "011";
else REG_ETAT <= "101";
end if ;
when "101" => S <= '0' ;
if E = '1' then REG_ETAT <= "011";
else REG_ETAT <= "000";
end if ;
when others => REG_ETAT <= "00"; 5
end case ;end if ;end process ;
end COMPORTEMENT ;
Machines dtats

Exemple 2 de codage la main

Sortie en dehors du
process
Description
COMBINATOIRE

6
Machines dtats
TYPE type_etat IS (debut,add,decal,fin);
SIGNAL etat : type_etat;
Cration dun type tat BEGIN
-- autre process (oprateurs)
 Mthode conseille car plus lisible PROCESS(h,init)
BEGIN
IF (init = 1) THEN
etat <= debut;
ELSE
If (h=1 and hEVENT) THEN
CASE etat IS
WHEN debut =>IF zero THEN etat <= fin;
ELSIF lsb THEN etat <= add;
ELSE etat <= dec;
END IF;
WHEN add => etat <= dec;
WHEN dec => IF zero THEN etat <= fin;
ELSIF lsb THEN etat <= add;
END IF;
WHEN fin => etat <= fin;
Condition =1 WHEN others => etat <=debut;
END CASE;
Ne pas que la condition ne END IF;
sera vrai quau coup END PROCESS ;
lhorloge initialiser <= 1 when (etat = debut) else 0;
additionner <= 1 when(etat = add) else 0;
decaler <= 1when (etat = dec) else 0;

fin_calcul <= 1 WHEN etat = fin ELSE 0;


7
Machines dtats

Ralisation dune temporisation dans une FSM


 Un Etat temporisation Bas sur un compteur
 Ne pas oublier de mettre rinitialiser le compteur
when Etat1 => compt:=0;
if (Madondition) then etat<=Tempo; end if;
When Tempo => cpt:=cpt+1;
If cpt=564 then etat<=Etat2; end if;
When Etat2 = > .

Synchronisation entre Machine dtat


 La sortie de la machine Matre est une entre de la machine esclave
 Notion dchange en poigne de main : HANDSHAKE
 Un Signal de notification et un signal daccus de rception
 Ce protocole dchange est de nature asynchrone
 attention les FSM restent synchrones et nchantillonne le signal sur front dhorloge

8
Applications
 Rception simplifie des priphriques PS/2

Exemple de trame priphrique-> matre

Schma de principe

Exemple de machine dtat simplifie


Extrait des codes octets envoys
9