100% encontró este documento útil (2 votos)
2K vistas2 páginas

Semáforo VHDL

Este documento describe un circuito para un semáforo de tráfico con cuatro estados. Utiliza un contador de 4 bits para cambiar entre los estados cada cierto número de ciclos de reloj. Cada estado controla los LEDs del semáforo para mostrar las luces verde, amarilla y roja apropiadas para cada dirección del tráfico.

Cargado por

Darwin Vargas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (2 votos)
2K vistas2 páginas

Semáforo VHDL

Este documento describe un circuito para un semáforo de tráfico con cuatro estados. Utiliza un contador de 4 bits para cambiar entre los estados cada cierto número de ciclos de reloj. Cada estado controla los LEDs del semáforo para mostrar las luces verde, amarilla y roja apropiadas para cada dirección del tráfico.

Cargado por

Darwin Vargas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY semaforo IS
PORT (
CLK : IN std_logic;
RST: IN std_logic; --Reset para volver a estado inicial--
sem : OUT std_logic_vector(7 DOWNTO 0));
--Leds de salida--
END semaforo;
ARCHITECTURE CRUCERO OF semaforo IS
type state_type is (s0,s1,s2,s3); -- Estados del semadoro--
signal estado : state_type;
signal cont : std_logic_vector(3 DOWNTO 0);
constant t5: std_logic_vector(3 DOWNTO 0):= "0101";
constant t3: std_logic_vector(3 DOWNTO 0):= "0011";
BEGIN
----
SECUENCIAL: PROCESS(CLK, RST)
BEGIN
IF RST = '1' THEN
estado <= s0;
cont <= "0000";
ELSIF CLK'EVENT AND CLK ='1' THEN
CASE estado IS --Comienzo de secuencia de estados--
WHEN s0 =>
if cont < t5 then
estado <= s0;
cont <= cont+1;
else
estado <= s1;
cont <= "0000";
end if;
WHEN s1 =>
if cont < t3 then
estado <= s1;
cont <= cont+1;
else
estado <= s2;
cont <= "0000";
end if;
WHEN s2 =>
if cont < t3 then
estado<= s2;
cont <= cont+1;
else
estado <= s3;
cont <= "0000";
end if;
WHEN s3 =>
if cont < t5 then
estado <= s3;
cont <= cont+1;
else
estado <= s0;
cont <= "0000";
end if;
WHEN OTHERS =>
estado <= s0;
END CASE;
END IF;
END PROCESS SECUENCIAL;
COMBINACIONAL: PROCESS(estado) -- Comienzonzo de los procesos combinacionales.
BEGIN
CASE estado IS
WHEN s0 => sem <= "11000001"; -- Estado inicial -- Verde y Flecha
activos y Rojo del 2do semaforo
WHEN s1 =>
sem <= "00100001"; -- Rojo del 2do semafoactivo y amarillo
sem(5) <= CLK; -- Parpadeo 1er semaforo
WHEN s2 => sem <= "00011100"; -- Rojo activo del 1er semaforo -- Verde
y Flecha activos del 2do semaforo
WHEN s3 => sem <= "00010010"; -- Rojo activo del 1er semaforo y
amarillo del segundo
sem(1) <= CLK; -- Parpadeo 2do semaforo
WHEN OTHERS => sem <= "11000001"; -- Se reinicia el ciclo
END CASE;
END PROCESS COMBINACIONAL;
END CRUCERO;

También podría gustarte