Você está na página 1de 2

------------------------------------------------------------------- Title:

Traffic Lights
--- Project:
Traffic Lights - Moore
------------------------------------------------------------------- File:
Traffic Lights - Moore.vhd
--- Author:
Vitor Meneses de Vasconcelos
------------------------------------------------------------------Traffic Lights using The Moore Finite State Machine
------------------------------------------------------------------library ieee;
use ieee.std_logic_1164.all;
entity semaforo is
port
(
--- clk: in std_logic;
reset, x: in std_logic;
y:
out std_logic_vector(2 downto 0) -- Seta os LED
's: 100 Vermelho
--

010 Amarelo

--

001 Verde

-- Others -> Don't Care


);
end semaforo;
architecture moore of semaforo is
type estados is (A, B, C); -- A => Vermelho, B => Amarelo, C => Verde;
signal
signal
signal
signal
ED's;

z : estados;
tic_signal, set_signal: std_logic;
clk_signal: std_logic;
y_aux: std_logic_vector(2 downto 0); -- Saida Auxiliar de Y que seta os L
component contador
port
(
clk: in std_logic;
set: in std_logic;
tic: out std_logic
);
end component;
begin
counter: contador port map
(
clk => clk_signal,
set => set_signal,
tic => tic_signal
);
--<= y_aux = "010";
process(clk_signal, reset, tic_signal)
begin
if(reset = '1') then

z <= B; -- B (Estado INICIAL);


y_aux <= "010";
set_signal <= '1'; -- Inicia Contador;
elsif(clk_signal'event and clk_signal = '1') then
if(tic_signal = '1') then -- Aconteceu um Tic?
-- y_aux <= (not y_aux) and "010";
case z is
when A => -- do vermelho para o verde;
if(x = '0')
then z <= C;
set_signal <=
'1'; -- comeca a contar;
y_aux <= "001"
; -- seta o led para o verde;
else
z <= B; -- para de conta
r
set_signal <= '0'; -- ze
ra o contador e o para;
end if;
when B => -- do amarelo para o vermelho
if(x = '0')
then z <= A;
set_signal <=
'1'; -- comeca a contar;
y_aux <= "100"
; -- seta o led para o vermelho;
else
z <= B; -- para de conta
r;
set_signal <= '0'; -- ze
ra o contador e o para;
end if;
when C => -- do verde para o amarelo
if(x = '0')
then z <= B;
set_signal <=
'1'; -- comeca a contar;
y_aux <= "010"
; -- seta o led para amarelo;
else
z <= B;
set_signal <= '0'; -- ze
ra o contador e o para;
end if;
end case;
end if;
end if;
end process;
y <= y_aux;
end moore;

Você também pode gostar