Download - Vendedor automático de Tickets
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL
FIEC Laboratorio de Sistemas Digitales
Proyecto #1
Vendedor automático de Tickets
Alumnos Byron Narváez Rivadeneira
Darwin Yupa.
Paralelo: # 8
Profesor: Ing. Marcia Garcés
Fecha de presentación: 22/05/2015
2015 – 1° TÉRMINO
1.- Especificación
Diseñe una máquina controladora de un vendedor automático de Tickets. El sistema se activa cuando se presiona y suelta el botón START, en ese momento se puede vender los tickets para tour, luego el sistema espera a que el usuario indique si quiere uno o dos tickets, tick1 o tick2 respectivamente. A continuación el sistema espera por el ingreso de la tarjeta de crédito que se detecta cuando se recibe la señal de entrada CREDITO, a continuación la máquina debe colocar en salidas binarias de 3 bits el valor de tres dólares por un ticket y de 6 dólares por dos tickets. El sistema seguirá enviando éstas señales hasta que se reciba la señal APROBADO, que indica que se ha cargado el valor requerido a la tarjeta. Luego de esto el usuario debe presionar un botón que corresponda a una de los dos programas del tour: P1, P2. Considere que solo se puede elegir un tour a la vez y que P1 tiene la mayor prioridad. Luego la máquina deberá enviar simultáneamente dos señales. Una que indique de que programa son los tickets a vender (VP1 O VP2) y la segunda indica cuántos tickets se van a entregar (EP1 o EP2). Deben generarse éstas señales hasta que se reciba la señal VENDIDO, luego de lo cual la máquina debe regresar al estado inicial a esperar por otra venta. Realice el diseño e implementación del sistema digital utilizando la tarjeta de desarrollo DE0-Nano con FPGA.
4.- Descripción de Señales Entradas RESETN: Es una señal de entrada controlada por una botonera que permite reiniciar el programa al modo de inicio, la botonera se puede apretar en cualquier estado
START: Es la señal de entrada controlada por una botonera que permite iniciar el proceso, cuando se presione y suelte el botón. Tick1: Es una señal de entrada controlada por una botonera que al ser presionada indica que el usuario especifica que solo desea un ticket. Tick2: Es una señal de entrada controlada por una botonera que al ser presionada indica que el usuario especifica que desea 2 tickets. Crédito: Es una señal de entrada controlada por una botonera que permite ingresar la tarjeta de crédito. Aprobado: Es una señal de entrada controlada por una botonera que permite aprobar el precio que se muestra a pagar. P1: Es una señal de entrada controlada por una botonera que al ser presionada indica que el usuario especifica que desea el primer programa de tour. P2: Es una señal de entrada controlada por una botonera que al ser presionada indica que el usuario especifica que desea el segundo programa de tour. Vendido: Es una señal de entrada controlada por una botonera que realizar la venta.
Salidas Led_start: Esta salida se genera al presionar la botonera START, se enciende un foco led.
PRECIO: Muestra en 3 un banco de leds el precio que se pagara ya sea $3 (011) o $6(110)
RESULTADO: Muestra en un banco de 4 leds en el que se mostrara VP1,VP2,EP1,EP2.
Vp1 y Vp2 indica el program que se elige y Ep1 y Ep2 indican cuantos tickets se compró.
CONSOLA
Tipos de componentes
8 leds de color verde.
8 resistencias de 330 ohm de ¼ de w 9 pulsadores tipo botonera 9 resistencias de 10k
21 cables tipo jumper hembra- macho 1 protoboard BB-4T7D-01
1 FPGA DEO NANO
Descripción VHDL
MSS:
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
USE IEEE.STD_LOGIC_ARITH.all; entity MSS is
port(clockr, resetn, start_ini, credito_ini, aprobado_ini, vendido_ini: in std_logic; tick1_ini, tick2_ini, pro1_ini, pro2_ini: in std_logic;
led_start: out std_logic; result_ini: out std_logic_vector(3 downto 0); precio_ini: out std_logic_vector(2 downto 0));
end MSS;
Architecture comportamiento of MSS is
component CLOCK_DIV PORT
( CLOCK_50MHz :IN STD_LOGIC; CLOCK_1MHz :OUT STD_LOGIC; CLOCK_100KHz :OUT STD_LOGIC;
CLOCK_10KHz :OUT STD_LOGIC; CLOCK_1KHz :OUT STD_LOGIC;
CLOCK_100Hz :OUT STD_LOGIC; CLOCK_10Hz :OUT STD_LOGIC; CLOCK_1Hz :OUT STD_LOGIC);
end component;
component Mux_4a1 port( S: in std_logic_vector(1 downto 0); --Es la señal que proviene del controlador despues de seleccionar # de tickets y pulsar CREDITO
Y: out std_logic_vector(2 downto 0) );
end component; component Mux_8a1
port( S: in std_logic_vector(2 downto 0); --Es la señal que proviene del controlador despues de seleccionar # de tickets y pulsar CREDITO
Y: out std_logic_vector(3 downto 0) ); end component;
component decoder_2a4 port( I1: in std_logic;
I2: in std_logic; O: out std_logic_vector(3 downto 0)
); end component;
type estado is(Ta, Tb, Tc, Td, Te, Tf, Tg, Th, Ti,Tj,Tk,Tl,Tm,Tn,Tp,Tq, Tr, Ts, Tt);
signal y: estado; signal M: std_logic_vector(1 downto 0);
signal N: std_logic_vector(2 downto 0); signal T: std_logic_vector(3 downto 0);
signal P: std_logic_vector(3 downto 0); signal f1m, f100k, f10k, f1k, f100, f10, f1 : std_logic;
begin mss_transiciones: process(resetn,f1)
begin if resetn='1' then y<=Ta; elsif (f1'event and f1='1') then
case y is
when Ta => if start_ini='1' then y<=Tr; else y<=Ta; end if; when Tr => if start_ini='0' then y<=Tb; else y<=Tr; end if; when Tb => if T(1)='1' then y<=Tc; elsif T(2)='1' then y<=Th; elsif T(3)='1' then
y<=Tm; else y<=Tb; end if; when Tc => if credito_ini='1' then y<=Td; else y<=Tc; end if;
when Td => if aprobado_ini='1' then y<=Te; else y<=Td; end if; when Te => if P(1)='1' then y<=Tf; elsif P(2)='1' then
y<=Ts; elsif P(3)='1' then y<=Tp; else y<=Te; end if; when Ts => if P(1)='1' then y<=Tf; else y<=Tg; end if;
when Tf => if vendido_ini='1' then y<=Ta; else y<=Tf; end if; when Tg => if vendido_ini='1' then y<=Ta; else y<=Tg;
end if; when Th => if credito_ini='1' then y<=Ti; else y<=Th; end if;
when Ti => if aprobado_ini='1' then y<=Tj; else y<=Ti; end if; when Tj => if P(1)='1' then y<=Tk; elsif P(2)='1' then y<=Tt; elsif P(3)='1' then y<=Tq; else y<=Tj; end if;
when Tt => if P(1)='1' then y<=Tk; else y<=Tl; end if; when Tk => if vendido_ini='1' then y<=Ta; else y<=Tk; end if;
when Tl => if vendido_ini='1' then y<=Ta; else y<=Tl; end if;
when Tm => if credito_ini='1' then y<=Tn; else y<=Tm; end if;
when Tn => if aprobado_ini='1' then y<=Te; else y<=Tn; end if;
when Tp => if vendido_ini='1' then y<=Ta; else y<=Tp; end if; when Tq => if vendido_ini='1' then y<=Ta; else y<=Tq;
end if;
end case; end if; end process;
mss_salidas: process(y)
begin M<="00"; N<="000"; led_start<='0'; case y is
when Ta =>
when Tr => when Tb => led_start<='1'; when Tc =>
when Td => M<="01"; when Te =>
when Ts => when Tf => N<="010"; when Tg => N<="100";
when Th => when Ti => M<="10";
when Tj => when Tt => when Tk => N<="011";
when Tl => N<="101"; when Tm =>
when Tn => M<="11"; when Tp => N<="110"; when Tq => N<="111";
end case; end process;
relojdiv: CLOCK_DIV port map (clockr,f1m,f100k,f10k,f1k,f100,f10,f1);
decoderT: decoder_2a4 port map (tick1_ini,tick2_ini,T); decoderP: decoder_2a4 port map (pro1_ini,pro2_ini,P);
muxP: Mux_4a1 port map (M,precio_ini); muxF: Mux_8a1 port map (N,result_ini);
end comportamiento;
DECODER 2 A 4
------------------------------------------------- -- Proyecto1_Laboratorio de sistemas digitales
--Codigo vhdl de un multiplexor 4:1 -- Saúl Yupa
-- Byron Narváez -------------------------------------------------
library ieee; use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; -------------------------------------------------
entity decoder_2a4 is
port( I1: in std_logic; I2: in std_logic; O: out std_logic_vector(3 downto 0)
); end decoder_2a4;
-------------------------------------------------
Architecture Behaviour of decoder_2a4 is Begin
O <= "0001" when (I2='0' and I1='0') else "0010" when (I2='0' and I1='1') else "0100" when (I2='1' and I1='0') else
"1000" when (I2='1' and I1='1') else Unaffected;
End Behaviour;
MUX 4 A 1
library ieee; use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; -------------------------------------------------
entity Mux_4a1 is
port( S: in std_logic_vector(1 downto 0); --Es la señal que proviene del controlador despues de seleccionar # de tickets y pulsar CREDITO
Y: out std_logic_vector(2 downto 0) );
end Mux_4a1; -------------------------------------------------
architecture behv1 of Mux_4a1 is
begin process(S) begin
case S is
when "00" => Y <= "000";-- Muestra 0000 when "01" => Y <= "011";-- Muestra 0011 when "10" => Y <= "110";-- Muestra 0101
when "11" => Y <= "011";-- Muestra 0011 end case;
end process; end behv1;
MUX 8 A1
------------------------------------------------- -- Proyecto1_Laboratorio de sistemas digitales
--Codigo vhdl de un multiplexor 4:1 -- Saúl Yupa
-- Byron Narváez -------------------------------------------------
library ieee; use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; -------------------------------------------------
entity Mux_8a1 is port( S: in std_logic_vector(2 downto 0); --Es la señal que proviene del controlador
despues de seleccionar # de tickets y pulsar CREDITO Y: out std_logic_vector(3 downto 0) );
end Mux_8a1;
-------------------------------------------------
architecture behv1 of Mux_8a1 is begin
process(S) begin
case S is when "000" => Y <= "0000";-- Muestra 0000
when "001" => Y <= "0000";-- Muestra 0000 when "010" => Y <= "1010";-- Muestra 1010 when "011" => Y <= "1001";-- Muestra 1001
when "100" => Y <= "0110";-- Muestra 0110 when "101" => Y <= "0101";-- Muestra 0101
when "110" => Y <= "1010";-- Muestra 1010 when "111" => Y <= "1001";-- Muestra 1001 end case;
end process;
end behv1;
Reporte sobre aprovechamiento: