[an error occurred while processing this directive]
|
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity Alarm is
port(
Clear : in std_logic;
Clk : in std_logic;
Inpt : in std_logic;
Alarm_Led : out std_logic
);
end Alarm;
architecture arAlarm of Alarm is
type tState is (stInit, stIdle, stWork);
signal State : tState;
signal FixInpt : std_logic;
signal Counter : std_logic_vector(7 downto 0);
begin
process(Clear, Clk)
begin
if (Clear = '1') then
FixInpt <= '0';
Counter <= (others => '0');
Alarm_Led <= '1';
State <= stInit;
elsif (rising_edge(Clk)) then
case State is
when stInit =>
-- первое состояни сигнала
FixInpt <= Inpt;
State <= stIdle;
when stIdle =>
FixInpt <= Inpt;
if (Inpt /= FixInpt) then
-- сигнал поменялся:
-- зажигем светодиод, начинаем отсчет интервала
Counter <= (others => '0');
Alarm_Led <= '0';
State <= stWork;
end if;
when stWork =>
FixInpt <= Inpt;
if (Inpt /= FixInpt) then
-- сигнал поменялся
-- зажигем светодиод, начинаем отсчет интервала сначала
Counter <= (others => '0');
Alarm_Led <= '0';
elsif (Counter < 250) then
-- отсчитываем интервал
Counter <= Counter + '1';
else
-- сигнал не менялся в во время заданного интервала со времени последнего изменения
-- гасим светодиод
Alarm_Led <= '1';
State <= stIdle;
end if;
end case;
end if;
end process;
end arAlarm;
E-mail: info@telesys.ru