[an error occurred while processing this directive]
Собстно, вот... Хотя Pashka, сидящий в метре от меня, предложил свой вариант.
(«Телесистемы»: Конференция 'Программируемые логические схемы и их применение')
миниатюрный аудио-видеорекордер mAVR

Отправлено andrew_b 26 июля 2002 г. 11:13
В ответ на: Я могу написать на VHDL, Вам это поможет. отправлено andrew_b 26 июля 2002 г. 10:22

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: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru