Sie sind auf Seite 1von 4

library ieee;

USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ENTITY tragamonedas IS
PORT(
clk : IN std_logic;
m : IN std_logic;
test : inout std_logic;
estado : out std_logic_vector(2 downto 0);
moneda: in std_logic_vector(2 downto 0);
--entrada de mecanismo de m
onedas
ipdto: in std_logic_vector(2 downto 0);
--Seleccion de Producto
pdto: out std_logic_vector (2 downto 0);
-- Entrega de producto
cmbo: out std_logic_vector(2 downto 0));
-- Entrega de Cambio
END tragamonedas;
ARCHITECTURE circuito OF tragamonedas IS
TYPE estados IS (S1, S2, S3, S4, S5);
SIGNAL state : estados;
CONSTANT max: INTEGER := 30000000;
SIGNAL count: INTEGER RANGE 0 TO max;
SIGNAL sumatoria: INTEGER RANGE 0 TO 100;
SIGNAL diferencia: INTEGER RANGE 0 TO 100;
BEGIN
PROCESS (clk,m,ipdto)
BEGIN
--IF (start = '0') then
-state <= S1;
if (clk'event and clk = '1') then
IF (count < max) THEN
count <= count + 1;
ELSE
count <= 0;
test <= not test;
case state is
when S1 =>
pdto <= "000";
cmbo <= "000";

--Apagamos productos
--Apagamos salidas de cambio

estado <= "001";

--Salida del estado y monitoreo

del estado
state <= S1;

if m = '0' then
case moneda is

-- acumlamos mon

edas
when "110" =>
sumatoria <=
when "101" =>
sumatoria <=
when "100" =>
sumatoria <=
when "011" =>
sumatoria <=
when others
sumatoria <=
end case;
end if;

Sumatoria +1;
Sumatoria +2;
Sumatoria +5;
Sumatoria +10;
=>
Sumatoria +0;

case ipdto is
when "011" =>
if (sumatoria > 6) then
state <= S4;
else
state <= S1;
end if;
when "101" =>
if (sumatoria > 4) then
state <= S3;
else
state <= S1;
end if;
when "110" =>
if (sumatoria > 2)then
state <= S2;
else
state <= S1;
end if;
when others =>
state <= S1;
end case;
when S2 => estado <= "010";
o del estado

-- ha mas de 5 pesos

--hay mas de 4 pesos

-- hay mas de 2 pesos

--Salida del estado y monitore

state <= S2;


pdto <= "001"; --Entregamos producto 1
cmbo <= "000"; --Apagamos salidas de cambio
diferencia <= sumatoria - 3;
state <= S5;
when S3 => estado <= "011";
del estado

--Salida del estado y monitoreo

state <= S3;


pdto <= "010"; --Entregamos producto 2
cmbo <= "000"; --Apagamos salidas de cam
bio

diferencia <= sumatoria - 5;


state <= S5;
when S4 => estado <= "100"; --Salida del estado y monitoreo de
l estado
state <= S4;
pdto <= "100"; --Entregamos producto 3
cmbo <= "000"; --Apagamos salidas de cambio
diferencia <= sumatoria - 7;
state <= S5;
when S5 => estado <= "101"; --Salida del estado y monitoreo del estado
state <= S5;
case diferencia is
when 1 =>
pdto <= "000"; --Apagamos productos
cmbo <= "001"; --damos cambio de 1 peso
sumatoria<=0;
diferencia<=0;
state <= S1;
when 2 =>
pdto <= "000"; --Apagamos productos
cmbo <= "010"; --damos cambio de 2 pesos
sumatoria<=0;
diferencia<=0;
state <= S1;
when 3 =>
pdto <= "000"; --Apagamos productos
cmbo <= "011"; --damos cambio de 3 pesos
sumatoria<=0;
diferencia<=0;
state <= S1;
when 5 =>
pdto <= "000"; --Apagamos productos
cmbo <= "100"; --damos cambio de 5 pesos
state <= S1;
sumatoria<=0;
diferencia<=0;
when 7 =>
pdto <= "000"; --Apagamos productos
cmbo <= "110"; --damos cambio de 7 pesos
sumatoria<=0;
diferencia<=0;
state <= S1;
when others =>
sumatoria<=0;
diferencia<=0;
state <= S1;
end case;
END CASE;

END IF;
END IF;
END PROCESS;
END circuito;

Das könnte Ihnen auch gefallen