Telechargé par laz_chikhi

VHDL machine etat

publicité
VHDL
Compléments
Compl ments
Machines d’états
d tats
Machines d’états
Principe de fonctionnement
LA machine d’état s’apparente à un automate ou un grafcet
Le système est dans un état stable ( équivalent d’une étape pour le grafcet)
Il peut évoluer vers un autre état du système en fonction des entrées ( réceptivité
VRAIE)
A chaque état correspond une/des sorties actives ( les actions associées aux
étapes)
La représentation graphique est un diagramme à
bulle
Ne pas oublier de faire un tableau à côté pour
préciser les sorties en fonction de l’état
Contraintes de fonctionnement
Une machine d’état a besoin d’une horloge
(quartz, astable en externe ou PLL embarquée)
Une transition est activée lorsque
L’étape source est active
La réceptivité est vrai (équation logique sur les
entrées
Un front d’horloge survient
2
Machines d’états
Les différentes types de Finite State
Machine (FSM)
Machine de Moore
La sortie ne dépend que de l’état
courant
Le temps de réaction dépend donc de
l’horloge
Cette machine peut-être qualifiée de
synchrone
Machine de Mealy
La sortie ne dépend de l’état courant
mais aussi des entrées
Le temps de réaction est plus rapide que
Moore
Cette machine peut-être qualifiée
d’asynchrone
Inconvénients: la durée minimum d’un
état n’ait plus garanti => L’état peut-être
interprété par un autre système comme
un état parasite
3
Machines d’états
Codage des états
Création d’un type énuméré
Le compilateur affecte automatiquement un entier à chaque état
•
•
T YPE etat IS (debut, etat1, etat2);
SIGNAL etat_present : etat;
Codage à la main
L’utilisateur affecte un entier « à la main »
•
Ex: début 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 séquentiel)
Instructions CAS/IS bien adaptée
4
Machines d’états
Exemple de codage à la main
Cahier des charges
la sortie S recopie l’état logique présent sur son
entrée E si celle-ci est restée stable après 2 coups
d’horloge successifs.
La sortie est
resynchronisée car
incluse dans le
process
library ieee ; use ieee.std_logic_1164.ALL;
entity MAE is
port ( E,RST,HOR : in STD_LOGIC ;
S : out STD_LOGIC );
end MAE;
architecture COMPORTEMENT of MAE is
signal REG_ETAT : STD_LOGIC_VECTOR(2 downto 0);
process (HOR,RST)
begin
if RST='0' then REG_ETAT <= "000";
elsif (HOR’event 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";
else REG_ETAT <= "000";
end if ;
when "011" => S <= '1' ;
if E = '1' then REG_ETAT <= "011";
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 ;
5
when others => REG_ETAT <= "00";
end case ;end if ;end process ;
end COMPORTEMENT ;
Machines d’états
Exemple 2 de codage à la main
Sortie en dehors du
process
Description
COMBINATOIRE
6
Machines d’états
Création d’un type état
Méthode conseillée car plus lisible
Condition =1
Ne pas que la condition ne
sera vrai qu’au coup
l’horloge
TYPE type_etat IS (debut,add,decal,fin);
SIGNAL etat : type_etat;
BEGIN
-- autre process (opérateurs)
PROCESS(h,init)
BEGIN
IF (init = ’1’) THEN
etat <= debut;
ELSE
If (h=‘1’ and h’EVENT) 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;
WHEN others => etat <=debut;
END CASE;
END IF;
END PROCESS ;
initialiser <= ‘1’ when (etat = debut) else ‘0’;
additionner <= ‘1’ when(etat = add) else ‘0’;
decaler <= ‘1’when (etat = dec) else ‘0’;
fin_calcul <= ’1’ WHEN etat = fin ELSE ’0’;
7
Machines d’états
Réalisation d’une temporisation dans une FSM
Un Etat temporisation Basé sur un compteur
Ne pas oublier de mettre réinitialiser 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 d’état
La sortie de la machine Maître est une entrée de la machine esclave
Notion d’échange « en poignée de main »: HANDSHAKE
Un Signal de notification et un signal d’accusé de réception
Ce protocole d’échange est de nature asynchrone
attention les FSM restent synchrones et n’échantillonne le signal sur front d’horloge
8
Applications
Réception simplifiée des périphériques PS/2
Exemple de trame périphérique-> maître
Schéma de principe
Exemple de machine d’état simplifiée
Extrait des codes octets envoyés
9
Téléchargement