Você está na página 1de 3

-- Semforo

vermelho->verde(x=0)
verde->amarelo (x=0 or x=1)
amarelo->amarelo(x=1)
amarelo->vermelho(x=0)
vermelho->amarelo(x=1)

#contador.vhd

library ieee;
use ieee.std_logic_1164.all;

entity semaforo is
port(
--clk: in std_logic;(est comentado pq usando o clk do contador
reset,x: in std_logic;
y: out std_logic_vector (2 downto 0) --seta os leds, onde 100 vermelhor
--010 eh amarelo e 001 eh verde
-- o restante don't care.
);
end semaforo;

architecture fsm of semaforo is


type estados is (A,B,C); --A= vermelho; B=amarelo; C=verde;
signal z:estados;
signal tic_signal, set_signal : std_logic;
signal clk_signal:std_logic;
signal y_aux: std_logic_vector(2downto0); --sada auxiliar de y q/ serve p/ setar
os leds

component contador
port(
clk: in_std_logic;
set: in std_logic;
tic: out std_logic -- avisar quando o contador terminar
);
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 eh o estado incial;
y_aux <= "010";
set_signal <= '1'; --iniciar o contador
elsif (clk_signal 'event and clk_signal ='1') then
if(tic_signal ='1') then -- aconteceu um tick?
--y_aux <= (not y_aux) and "010";
case z is
when A => -- do vermelho p/ verde
if(x ='0')
then z<=C;
set_signal <='1'; comceca a contar
y_aux <= "001"; -- seta o led p/ verde
else z<=B; --PARA DE CONTAR
set_signal <='0'; -- zera o contador e o deixa parado
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 p/ o vermelho
else z<=B; --PARA DE CONTAR
set_signal <= '0'; -- zera o contador e o deixa parado
end if;
when C => -- do verde para o amarelo
if(x='0')
then z<=B;
set_signal <='1'; -- comceca a contar
y_aux <="010"; --seta led para amarelo
else z<=B;
set_signal <= '0'; --sera o contador e o deixa parado
end if;
end case;
end if;
end if;
end process;
y<= y_aux;
end fsm;

---contador

library ieee;
use iee.std_logic_1164.all;

entity contador is
port( clk: in std_logic;
set: in std_logic;
tic: out std_logic);
end entity;
architecture contador of contador is
signal tic_aux:std_logic;
begin
process (clk, set)
variable temp: natural range 0 to 10;
begin
---------------

Você também pode gostar