You are on page 1of 7

PROBLEMA LAVADORA AUTOMATICA

EL CODIGO UTILIZADO PARA LA IMPLEMENTACION DE LA LAVADORA


AUTOMATICA FUE EL SIGUIENTE:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.all;

entity LAV_AUT is
Port ( clk : in STD_LOGIC;
rst : in STD_LOGIC;
c : in STD_LOGIC;
l : in STD_LOGIC;
w : in STD_LOGIC;
estados_bits : out STD_LOGIC_VECTOR ( 4 downto 0) );
end LAV_AUT;

architecture Behavioral of LAV_AUT is

-- DEFINIENDO VARIABLES

type estado is (inicio,llenado,lavado1,lavado2,centrifugado);


signal ep:estado;
signal clk_1Hz_s: STD_LOGIC;

-- 1 segundos count 50000000

signal t: integer range 0 to 15;

begin

process(clk,rst)
variable T: integer range 0 to 50000000;
begin
if rst='1' then

clk_1Hz_s<='1';
elsif (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,rst)
begin
if rst='1' then
ep <= inicio;
elsif (rising_edge (clk_1Hz_s) and c='1' and l='1') then
case ep is
when inicio=>
ep <=llenado;

when llenado=>
t <=t+1;
if t=5 then
ep<=lavado1;
t <=0;
else
ep<=llenado;
end if;

when lavado1 =>

t <=t+1;
if t=5 AND w='1' then
ep<=lavado2;
t <=0;
elsif t=5 and w='0' then
ep<=centrifugado;
t<=0;
else
ep<=lavado1;
end if;

when lavado2 =>


t <=t+1;
if t=6 then
ep<=centrifugado;
t <=0;
else
ep<=lavado2;
end if;

when centrifugado =>


t <=t+1;
if t=6 then
ep<=inicio;
t <=0;
else
ep<=centrifugado;
end if;

when others=>
ep<= inicio;

end case;
end if;

end process;

-- VALORES PARA LOS ESTADOS


Process(ep)
Begin
case ep is
when inicio =>
estados_bits <="00001";
when llenado =>
estados_bits <="00010";
when lavado1 =>
estados_bits <="00100";
when lavado2 =>
estados_bits <="01000";
when centrifugado =>
estados_bits <="10000";
when others =>
estados_bits <="11111";

end case ;
end process;

end Behavioral;

TENIENDO EN CUENTA LA LOGICA DE ESTADOS:

-- VALORES PARA LOS ESTADOS


Process(ep)
Begin
case ep is
when inicio =>
estados_bits <="00001";
when llenado =>
estados_bits <="00010";
when lavado1 =>
estados_bits <="00100";
when lavado2 =>
estados_bits <="01000";
when centrifugado =>
estados_bits <="10000";
when others =>
estados_bits <="11111";
end case ;
end process;

SIGUIENDO ESA LOGICA SE OBTUVO EL SIGUIENTE DIAGRAMA DE


SIMULACION EN BASE AL STIMULUS PROCESS:
-- Stimulus process
stim_proc: process
begin
-- hold reset state for 100 ns.
wait for 5 ns;
rst <= '1'; c <= '0'; l <= '0'; w <= '0';
wait for 20 ns;
rst <= '0'; c <= '0'; l <= '0'; w <= '0';
wait for 20 ns;
rst <= '0'; c <= '1'; l <= '0'; w <= '0';
wait for 20 ns;
rst <= '0'; c <= '1'; l <= '1'; w <= '0';
wait for 100 ns;
rst <= '1'; c <= '0'; l <= '0'; w <= '0';
wait;

end process;

NOTA: EL CODIGO FUE CORREGIDO PARA PODER REALIZAR UNA


CORRECTA SIMULACION LAS CUALES NO VARIARON LA ESENCIA DE LA
PROGRAMACION.

PODEMOS NOTAR QUE EL PROGRAMA SIGUE LA LOGICA PLANTEADA


CORRECTAMENTE.
SI rst=1 EL PROGRAMA MANTENDRA EL ESTADO INICIO =00001
AL REALIZAR UN CAMBIO EN EL VALOR DE c EL ESTADO INICIO SE
MANTIENE DEBIDO A QUE AUN FALTA LA CONDICION l=1 LUEGO DE ESTO
EMPEZARA LAS SECUENCIAS DE LLENADO POSTERIORMENTE LA
CONDICION DE LAVADO1 LUEGO LA CONDICION DE CENTRIFUGADO
DEBIDO A QUE LA CONDICION w=0 POR ULTIMO VOLVERA A LA POSICION
INICIO LUEGO DEL TIEMPO ESTIMADO EN ESTA POSICION.

SIMULACION AL CAMBIAR LA CONDICION DE w=1:

COMO PODEMOS VER EN ESTE CASO LA SECUENCIA SERA INICIO A


LLENADO LUEGO LAVADO1 DESPUES LAVADO2 SIGUIENDO
CENTRIFUGADO Y PARA TERMINAR REGRESA A LA CONDICION INICIO.

You might also like