Vous êtes sur la page 1sur 9

ECOLE NATIONALE POLYTECHNIQUE

1° ANNEE ELN
Modélisation et Synthèse des Circuits Logiques

1° Année Machines d’état


Série d’Exercices
Exercice 1
Rappeler la table de vérité dune bascule D avec reset asynchrone, Dessiner son graphe de transition ,
Décrire en VHDL cette bascule à l’aide d’une machine d’état.
Exercice 2
Rappeler la table de Transition d’une bascule JK avec reset asynchrone, Dessiner son graphe de
transition , Décrire en vhdl cette bascule à l’aide d’une machine d’état à 2 processus.
Exercice 3
Considérer un compteur synchrone modulo 4.
1- Dessiner la boite noire d’un compteur
2-Etablir le code Vhdl en utilisant ses équations de récurrence
3- Dessiner le graphe d’évolution de ce compteur
4-decrire ce compteur a l’aide d’une machine d’etat
Exercice 4
Un système de contrôle d’allumage de Leds
est modélisé par une machine d’états
comportant les 4 états principaux « attente »,
« allume0 », « allume1 » et « allume2 » (ci
contre). Cette machine est pilotée par l’horloge
‘clk_50MHz’. Le signal ‘reset’ met la machine
à l’état de repos « attente
¬.Le signal ‘start‘ provoque le passage, de la
machine, successivement par les états «
allume0 », « allume1 », « allume2 ». Elle
reste dans chacun des états pendant une durée
« tempo/50MHz ¬. L’ordre de transition sur la
Figure est représenté par l’expiration d’un
timer T.
Décrire en VHDL cette machine d’état

Exercice 5.
Décrire en Vhdl la machine d’état du système
d’ouverture d’une porte automatique. La porte
ne s’ouvre que si l’on tape la séquence ‘1’, ‘2’,
‘3’

On donne ci contre le graphe de transition

ENP/ ELN/ 1 Année Modélisation et Synthèse des Circuits Logiques MSCL


Taghi Serie de TD N°5 Page 1
Exercice 6
Donnez la description en VHDL d’un cadenas numérique à cinq chiffres entre 0 et 9. Le cadenas est
doté d’un bouton de validation de l’entrée d’un chiffre, et de quatre bits permettant de spécifier le
chiffre. Une sortie indique si le cadenas doit être verrouillé ou non. Votre code doit être suffisamment
général pour qu’on puisse facilement changer la combinaison en modifiant une seule ligne du code.
Donner un diagramme d’états et un modèle VHDL pour ce circuit. Vérifiez son fonctionnement par
simulation
Exercice 7
Ecrire l’architecture d’une machine -Représenter le Graphe d’état
à état avec un reset synchrone qui -Coder la machine d’état en VHDL
décrit un diviseur de fréquence par
2. On considère que la fréquence
d’horloge est beaucoup plus élevée
que la fréquence du signal d’entrée
D.

Exercice 8
Etablir le code VHDL du circuit décrit par le
graphe d’état ci contre

Exercice 9 Séquenceur
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 asynchrone R AZ définit l’état initial du
système. - Décrire en Vhdl ce circuit
1.Compléter le chronogramme ci-contre
en fonction du comportement décrit
précédemment.

2. Représenter ce comportement à l’aide


d’une machine à état.

3. Décrire cette machine à état en VHDL

ENP/ ELN/ 1 Année Modélisation et Synthèse des Circuits Logiques MSCL


Taghi Serie de TD N°5 Page 2
Exercice 10
Considérez le modèle VHDL suivant. Donnez case etat is
le diagramme d’états correspondant. when S1 => if x = "00" then etat <= S3;
library IEEE; use IEEE.std_logic_1164.all; elsif x = "01" then etat <= S2; end if;
entity controleQ5 is when S2 | S3 => if x = "10" then etat <= S4;
port ( reset, CLK : in STD_LOGIC; elsif x = "11" then etat <= S1; end if;
x : in STD_LOGIC_VECTOR(1 downto 0); when S4 => etat <= S1;
sortie : out STD_LOGIC ); end case; end if;
end controleQ5; end process;
architecture arch of controleQ5 is process(x, etat)
type type_etat is (S1, S2, S3, S4); signal etat : begin case etat is
type_etat := S1; when S1 | S4 => sortie <= '1';
begin process(CLK, reset) is begin when S2 | S3 => if x = "10" then sortie <=
if (reset = '0') then etat <= S1; '0'; else sortie <= '1'; end if;
elsif (rising_edge(CLK)) then end case;
end process;
end arch;
Exercice 10
Considérez le modèle VHDL suivant. Donnez le diagramme d’états correspondant.
library IEEE; use IEEE.std_logic_1164.all;
entity controleQ5 is
port ( reset, CLK : in STD_LOGIC;
x : in STD_LOGIC_VECTOR(1 downto 0);
sortie : out STD_LOGIC );
end controleQ5;
architecture arch of controleQ5 is
type type_etat is (S1, S2, S3, S4); signal etat : type_etat := S1;
begin process(CLK, reset) is begin
if (reset = '0') then etat <= S1;
elsif (rising_edge(CLK)) then
case etat is
when S1 => if x = "00" then etat <= S3;
elsif x = "01" then etat <= S2; end if; when S2 | S3 => if x = "10" then etat <=
S4; elsif x = "11" then etat <= S1; end if;
when S4 => etat <= S1;
end case; end if;
end process;
process(x, etat)
begin case etat is
when S1 | S4 => sortie <= '1';
when S2 | S3 => if x = "10" then sortie <= '0'; else sortie <= '1'; end if;
end case;
end process;
end arch;

ENP/ ELN/ 1 Année Modélisation et Synthèse des Circuits Logiques MSCL


Taghi Serie de TD N°5 Page 3
Exercice 11
On souhaite réaliser un circuit ci-contre générant une
succession d’impulsions de rapport cyclique ajustable à la sortie
PWM.
La période du signal de sortie PWM est égale à cinq fois celle
de l’horloge clk.
Le rapport cyclique de PWM est contrôlé par les entrées P0 et
P1. La figure ci-après décrit l’évolution de la sortie PWM en
fonction des entrées P0 et P1

Établir le graphe d’état de la FSM modélisant ce circuit


Ecrire le code VHDL correspondant
Faire la simulation sous Modelsim.
Exercice 12
Le circuit ci-contre reçoit sur son entrée LN, en
série, des séquences binaires constituées de 2 bits
de données D0 et D1, un bit Start toujours égale à
‘1’, et bit Stop toujours égale à’ 0
(chronogramme ci-après).
Ce circuit renvoie les deux bits de données sur
les sorties Q0 et Q1. Il teste le bit Stop, s’il est
correct (égale’0’), la sortie OK est mise à ‘1’ et
reste ainsi jusqu’à l’arrivée de la prochaine
séquence. Si le bit reçu Stop est erroné (‘1’),
seule la sortie ERR sera mise à ‘1’ pendant une
période d’horloge puis devient égale à ‘0’ jusqu’à
l’arrivée de la prochaine séquence.

- Etablir le graphe de la FSM modélisant ce circuit


- Ecrire le code Vhdl correspondant
- Faire la simulation sous ModelSim

ENP/ ELN/ 1 Année Modélisation et Synthèse des Circuits Logiques MSCL


Taghi Serie de TD N°5 Page 4
Solutions
Exercice 1
CODE VHDL
entity bascule_D is
TDV Port ( D : in std_logic;
CLK : in std_logic;
RESET : in std_logic;
Q : out std_logic);
end bascule_D;
architecture version_3 of bascule_D is
type bulle is (etat0, etat1); -- définition de l’ensemble
des états
Graphe d’évolution signal etat : bulle ;
begin
process (CLK, RESET) begin
if RESET = '1' then -- remise à zéro asynchrone, actif
état haut
etat <= etat0; -- on choisit de mettre la sortie Q à 0
lors d’ l’initialisation. La --
machine est donc dans l’état 0.
elsif ( clk’event and clk = ‘1’) then case
etat is when etat0 => if D = ‘1’ then
etat <= etat1 else -- cas où D = 0
etat <= etat0 end if ;
when etat1 => if D = ‘1’ then etat <= etat1
else -- cas où D = 0 etat <= etat0
end if ; end case ; end if;
end process;
-- Cablâge des sorties
Q <= ‘1’ when etat = etat1 else
‘0’ ; End version_3 ;
Exercice 2
entity fsm_JK is
Port ( CLK : in std_logic;
J : in std_logic;
Table de transition K : in std_logic;
Q : out std_logic);
end fsm_JK;
architecture V1 of fsm_JK is
Graphe d’évolution type state is (etat0, etat1); signal Current_state, next_state:state;
process (CLK, RESET) begin
if RESET = '1' then
Current_state <= etat0; ..
elsif ( clk’event and clk = ‘1’) then
Current_state<= next_state. End if;
End process;
Prcess(Current_state,J,K)
Case Current_state is
When e0 => if J='1' then next_state<=e1;
else next_state<=e0; end if;
When e1 => if K='1' then <= next_state<=e0;
else next_state<=e1; end if;
end prcess;
Q<=’1’ when Current-state=e1; else ‘0’,End V1;

ENP/ ELN/ 1 Année Modélisation et Synthèse des Circuits Logiques MSCL


Taghi Serie de TD N°5 Page 5
Exercice 3
1- boite noire d’un compteur 4-decrire ce compteur a l’aide d’une machine
d’etat
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity cmpt is
port (
clk,reset : in std_logic;
q : out std_logic_vector(1 downto 0));
2- code Vhdl end cmpt;
Entity cmpt is architecture fsm of cmpt is
Port ( clk: in bit; signal current_state, next_state : integer range 3
q0, q1: out bit); downto 0;
end cmpt; begin
Architecture acmpt of cmpt is process (clk, reset) begin
begin if reset = '1' then
process (clk) current_state <= 0;
Variable t0, t1 : bit; elsif ( clk'event and clk = '1') then
Begin -- ou cmpt:process (clk) current_state<= next_state; end if;
if (clk'event and clk='1') then end process;
--ici commence equations recurrence process(current_state)begin
t0 := not t0; case current_state is
t1 := t0 xor t1; when 0 => next_state<=1;
end if; when 1 => next_state<=2;
q0 <= t0; when 2 => next_state<=3;
q1 <= t1; when 3 => next_state<=0;
end process; end case;
end acmpt end process;
3- graphe d’évolution de ce compteur q<= std_logic_vector(to_unsigned(current_state,2));
end fsm;

Exercice 4

ENP/ ELN/ 1 Année Modélisation et Synthèse des Circuits Logiques MSCL


Taghi Serie de TD N°5 Page 6
Entity fsm_leds is When Attente=> if start=’1’ then etat<=Allume0;
Port(clk, init,start : IN std_logic ; else etat<=Attente; end if;
T: IN std_logic ; When Allume0 => if start=’0’ then etat <=Attente;
L1,L2,L0: OUT std_logic); elsif T=’0’ then etat <=Allume1; else
End Entity; etat<=Allume0 ;end if ;
Architecture fsm of fsm_led is When Allume1 => if T=’0’ then etat <=Allume2;
Type states is (Attente, Allume0,Allume1, else etat<=Allume1;end if ;
Allume2); When Allume2 => if T=’0’ then etat <=Attente; else
Signal etat : states etat<=Allume1;end if ;
Begin End case;
Process(clk, reset) End if;
Begin End process;
If reset=’1’ then etat <=Attente; L0<=’1’ when Etat=Allume0 else ‘0’;
Elsif rising_edge(clk) then L1<=’1’ when Etat=Allume1 else ‘0’;
Case etat is L2<=’1’ when Etat=Allume2 else ‘0’;
End architecture;

Exercice 5.

Entity fsm_Lock is When E0=> if Entree=’001’ then etat<=E1;


Port(clk, init, : IN std_logic ; else etat<=E0; end if;
Entree: IN std_logic_vector(2 downto 0) ; When E1 => if Entree=’010’ then etat<=E2;
P: OUT std_logic); else etat<=E0; end if;
End Entity; When E2 => if Entree=’011’ then etat<=E3;
Architecture fsm of fsm_Lock is else etat<=E0; end if;
Type states is (E0, E1,E2, E3); When E3 => etat<=E0;
Signal etat : states End case;
Begin End if;
Process(clk, reset) End process;
Begin P<=’1’ when Etat=E3 else ‘0’;
If reset=’1’ then etat <=E0; End architecture;
Elsif rising_edge(clk) then
Case etat is

ENP/ ELN/ 1 Année Modélisation et Synthèse des Circuits Logiques MSCL


Taghi Serie de TD N°5 Page 7
Exercice 6

Library ieee ;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;
Entity fsm_Cadenas is
Port(clk, reset,INo : IN std_logic ;
INd : IN std_logic_vector(3 downto 0) ;
Dv: OUT std_logic);
End Entity;
Architecture fsm of fsm_Cadenas is
Type states is (Attente,Ld1,Ld2,Ld3, Ld4, Ld5, CVr, CDVr);
type NumericCodeType is array (4 downto 0) of Integer range 0 to 9;
type vect is array(4 downto 0) of std_logic_vector(3 downto 0) ;
constant EntryCode : NumericCodeType := (2,6,0,4,8);
signal code: vect ;
Signal etat : states;
signal CP: std_logic;
Begin
Process(clk, reset)
Begin
If reset='1' then etat <=Attente;
elsif rising_edge(clk) then
Case etat is
When Attente =>
for i in 0 to 4 loop
Code(i)<=std_logic_vector(to_unsigned(Entrycode(i),4));
End loop;
if INo='1' then etat<=Ld1;
else etat<=Attente; end if;
When Ld1 => if CP='1' then etat<= CVr;
elsif INo='1' then etat<=Ld2;
Code<= "0000"&code(4 downto 1) ;
else etat<=Ld1; end if;
When Ld2 => if CP='0' then etat<= CVr;
elsif INo='1' then etat<=Ld3;
Code<= "0000"&code(4 downto 1) ;
else etat<=Ld2; end if;
When Ld3 => if CP='0' then etat<= CVr;
elsif INo='1' then etat<=Ld4;
Code<= "0000"&code(4 downto 1) ;
else etat<=Ld3; end if;
When Ld4 => if CP='0' then etat<= CVr;

ENP/ ELN/ 1 Année Modélisation et Synthèse des Circuits Logiques MSCL


Taghi Serie de TD N°5 Page 8
elsif INo='1' then etat<=Ld5;
Code<= "0000"&code(4 downto 1) ;
else etat<=Ld4; end if;
When Ld5 => if CP='0' then etat<= CVr;
else etat<=CDVr; end if;
When CVr =>Dv<='0'; etat<=attente;
When CDVr =>Dv<='1'; etat<=attente;
End case;
End if;
End process;
CP<='1' when INd=Code(0) else '0';
End architecture;

Exercice7

Exercice8
library IEEE; when S2 => etat <=S4;
use ieee.std_logic_1164.all; When S3 => etat<=S5;
Entity fsm_MS is When S4=> if x='0' then etat<=S5;
Port(clk,x, reset: IN std_logic ; else etat<=S6; end if;
z: OUT std_logic); When S5=> etat<=S0;
End Entity; When S6=> etat<=S0;
Architecture fsm of fsm_MS is End case;
Type states is (S0, S1,S2, S3, S4,S5,S6); End if;
Signal etat : states; End process;
Begin Process(x,etat) --Bloc de sortie
Process(clk, reset) Begin
Begin case etat is
If reset='1'then etat<=S0; when S0|S1|S4|S6 => z<=not(x);
Elsif rising_edge(clk) then when others => z<=x;
Case etat is end case;
When S0=> if x='0'then etat<=S1; end process;
else etat<=S2; end if; End architecture;
When S1=> if x='0' then etat<=S3;
else etat<=S4; end if;

ENP/ ELN/ 1 Année Modélisation et Synthèse des Circuits Logiques MSCL


Taghi Serie de TD N°5 Page 9

Vous aimerez peut-être aussi