Académique Documents
Professionnel Documents
Culture Documents
Código: 20142517H
Solución:
1.- Se puede erogar dos gaseosas: “Coca” o “Inca”. Que se deben seleccionar por medio de dos
botones.
2.- Se tiene la posibilidad de devolver el dinero al presionar un botón siempre y cuando no se esté
erogando ya una gaseosa y ya se haya introducido cierta cantidad de dinero.
4.- Si pasa un tiempo sin hacer alguna interacción regresará al inicio o devolverá el dinero si ya se
introdujo cierta cantidad y luego regresará al inicio.
Nota: Al terminar el proceso se deben poner todas las entradas en 0 (abajo) para empezar de
nuevo.
Las 4 entradas (switch) y 8 salidas (LED) disponibles físicamente son las siguientes:
Por la limitación de la tarjeta de solo tener 4 bits de entrada se usarán dos entradas de dos bits
cada una.
Se tendrán dos salidas y una extra que indique el estado en el que se encuentra la máquina. De las
8 disponibles solo se usarán 6.
Se usó esta distribución para los LED con el motivo de que sea fácilmente identificable el estado
actual de la máquina.
Diagrama de estados para la máquina Moore:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity Gas_mod is
end Gas_mod;
signal ep:estados;
signal clk_1Hz_S:std_logic;
begin
process(clk)
begin
if (rising_edge(clk)) then
t:=t+1;
if (t<=1) then
clk_1Hz_s<='1';
elsif (t<50000000) then
clk_1Hz_s<='0';
else
t:=0;
end if;
end if;
end process;
process(clk_1Hz_s,selec,qant)
begin
if (rising_edge(clk_1Hz_s)) then
case ep is
when inicio=>
if (qant/="00") then
ep<=sel;
ti<=0;
ep<=coca;
ti<=0;
ep<=inca;
ti<=0;
end if;
when sel=>
ti<=ti+1;
if (selec="01") then
ep<=coca;
ti<=0;
ti<=0;
ep<=vuelt;
ti<=0;
end if;
when coca=>
ti<=ti+1;
if (selec="10") then
ep<=inca;
ti<=0;
ep<=inicio;
ti<=0;
ep<=ecoca;
ti<=0;
ep<=vuelt;
ti<=0;
end if;
when inca=>
ti<=ti+1;
if (selec="01") then
ep<=coca;
ti<=0;
ep<=inicio;
ti<=0;
elsif (qant="10" or qant="11") then
ep<=einca;
ti<=0;
ep<=vuelt;
ti<=0;
end if;
when ecoca=>
ti<=ti+1;
ep<=vuelt;
ti<=0;
ep<=inicio;
ti<=0;
end if;
when einca=>
ti<=ti+1;
ep<=vuelt;
ti<=0;
ep<=inicio;
ti<=0;
end if;
when vuelt=>
ti<=ti+1;
if (ti=2) then
ep<=inicio;
ti<=0;
end if;
end case;
end if;
end process;
process(ep)
begin
case ep is
when inicio=>
est<="000";
vuelto<='0';
desp<="00";
when sel=>
est<="010";
vuelto<='0';
desp<="00";
when coca=>
est<="001";
vuelto<='0';
desp<="00";
when inca=>
est<="100";
vuelto<='0';
desp<="00";
when ecoca=>
est<="011";
vuelto<='0';
desp<="01";
when einca=>
est<="110";
vuelto<='0';
desp<="10";
when vuelt=>
est<="101";
vuelto<='1';
desp<="00";
end case;
end process;
end Behavioral;
Resultados: