Vous êtes sur la page 1sur 2

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

entity boisson is
PORT ( clk : IN STD_LOGIC;
un_dirham : IN STD_LOGIC;
deux_dirhams : IN STD_LOGIC;
boisson : OUT STD_LOGIC;
monnaie : OUT STD_LOGIC
);
end boisson;

architecture Behavioral of boisson is

TYPE etats IS (zero, un , deux, trois, quatre, cinq, six);


SIGNAL etat_present : etats;
SIGNAL etat_suivant : etats;
BEGIN
PROCESS (etat_present,un_dirham, deux_dirhams)
BEGIN
CASE etat_present IS
WHEN zero =>
boisson <= '0';
monnaie <= '0';
IF un_dirham = '1' THEN
etat_suivant <= un;
ELSIF deux_dirhams = '1' THEN
etat_suivant <= deux;
ELSE
etat_suivant <= zero;
END IF;
WHEN un =>
boisson <= '0';
monnaie <= '0';
IF un_dirham = '1' THEN
etat_suivant <= deux;
ELSIF deux_dirhams = '1' THEN
etat_suivant <= trois;
ELSE
etat_suivant <= un;
END IF;
WHEN deux =>
boisson <= '0';
monnaie <= '0';
IF un_dirham = '1' THEN
etat_suivant <= trois;
ELSIF deux_dirhams = '1' THEN
etat_suivant <= quatre;
ELSE
etat_suivant <= deux;
END IF;
WHEN trois =>
boisson <= '0';
monnaie <= '0';
IF un_dirham = '1' THEN
etat_suivant <= quatre;
ELSIF deux_dirhams = '1' THEN
etat_suivant <= cinq;
ELSE
etat_suivant <= trois;
END IF;
WHEN quatre =>
boisson <= '0';
monnaie <= '0';
IF un_dirham = '1' THEN
etat_suivant <= cinq;
ELSIF deux_dirhams = '1' THEN
etat_suivant <= six;
ELSE
etat_suivant <= quatre;
END IF;
WHEN cinq =>
boisson <= '1';
monnaie <= '0';
etat_suivant <= zero;
WHEN six =>
boisson <= '1';
monnaie <= '1';
etat_suivant <= zero;
END CASE;
END PROCESS;
PROCESS (clk)
BEGIN
IF clk'EVENT AND clk = '1' THEN
etat_present <= etat_suivant;
END IF;
END PROCESS;

end Behavioral;

Vous aimerez peut-être aussi