Cours FSM
Cours FSM
Cours FSM
&
VHDL
Plan
Introduction
Structure d’une FSM
Représentation d’une FSM
Machines de Moore et de Mealy
Description VHDL des FSM
2
Introduction
3
Introduction
Une FSM est un circuit séquentiel dont les sorties dépendent d’un
état et éventuellement des entrées.
4
Structure d’une FSM
5
Structure d’une FSM
Un premier bloc combinatoire qui calcule l’état futur en fonction de l’état
présent et des entrées du système.
Un registre d’état cadencé par une entrée spéciale qui est l’horloge du
système, met à jour l’état du système. Il mémorise l’état actuel du système
en l’actualisant à des instants précis.
6
Représentation d’une FSM
Une FSM est décrite par un diagramme à état.
Chaque état contient un certains nombre d’informations
(état,sorties,entrées)
7
Représentation d’une FSM
On associe à chaque valeur possible du registre d’état, une case sous
forme d’un cercle.
L’évolution du système est représentée par des flèches représentant les
transitions.
Pour qu’une transition soit activée il faut que les trois conditions
suivantes soient vérifiées :
8
Machine de Moore
Pour les machines de Moore les sorties évoluent après l’activation
de la transition.
9
Machine de Mealy
Pour les machines de Mealy les sorties évoluent après l’évolution des
entrées.
Une machine de Mealy est donc asynchrone.
prise en compte immédiate d’un changement en entrée.
un temps de réponse réduit d’un cycle par rapport à son équivalent de
Moore
10
Description VHDL des FSM
Exemple:
11
Description VHDL des FSM
library ieee;
use ieee.std_logic_1164.all;
ENTITY FSM IS
PORT ( clk,rst,E :IN STD_LOGIC;
S0, S1 :OUT STD_LOGIC
);
END FSM;
12
Description VHDL des FSM
ARCHITECTURE diagramme OF FSM IS
TYPE etat_3 IS (Etat0,Etat1,Etat2);
SIGNAL etat,etat_suiv :etat_3 := Etat0;
BEGIN
--Process synchrone:
PROCESS(clk,rst)
BEGIN
if rst = '1' THEN etat <= Etat0;
elsif rising_edge(clk) THEN
etat <= etat_suiv ;
end if;
END PROCESS;
13
Description VHDL des FSM
--LE PROCESS ASYNCHRONE :
process (etat, E)
BEGIN
CASE etat IS
WHEN Etat0 => if E=‘0' then etat_suiv <= Etat1;
else etat_suiv <= Etat0;
end if;
WHEN Etat1 => if E=‘0' then etat_suiv <= Etat2;
else etat_suiv <= Etat0;
end if;
WHEN Etat2 => if E=‘1' then etat_suiv <= Etat0;
else etat_suiv <= Etat2;
end if;
WHEN others => etat_suiv <= Etat0;
END CASE;
end process ;
14
Description VHDL des FSM
------------ Moore output logic----------------
---
process (etat)
BEGIN
CASE etat IS
WHEN Etat0 => S0 <= ‘1'; S1<= '0';
END CASE;
END process ;
end diagramme ;
15
Description VHDL des FSM
Exemple de simulation:
TESTBENCH:
LIBRARY ieee ;
LIBRARY work;
USE ieee.std_logic_1164.all ;
Use work.all;
ENTITY FSM_tb IS
END ;
16
Description VHDL des FSM
COMPONENT FSM
PORT (
clk, rst, E : in std_logic ;
S0, S1 : out std_logic
);
END COMPONENT ;
17
Description VHDL des FSM
BEGIN
DUT : FSM PORT MAP (clk, rst, E, S0, S1);
clk_p: process
begin
horl<='0'; wait for 20 ns;
horl<='1'; wait for 20 ns;
end process clk_p;
END arch_tb;
18
Exercice d’application
HOR
RAZ
fct S
On désire réaliser une fonction dont 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.
L’entrée RAZ a été rajoutée afin que l’état initial du système soit défini. De
façon plus générale, un système séquentiel doit toujours être initialisé, de
plus cette initialisation doit être asynchrone.
19
Diagramme à état:
20
Description VHDL: utilisation d’un seul process
21