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

Отправлено Виноградов Алексей 25 июля 2002 г. 20:28

Задача такая. На входе есть сигнал - ноль или единица. Если этот сигнал меняется на противоположный, должен загореться диодик. Он должен погаснуть, если после этого перепада сигнал больше не менял состояние в течение некоторого времени. Он не должен гаснуть, если сигнал хоть раз меняет свое состояние в течение этого некоторого времени. Я решил эту задачу с помощью ЦА:


SUBDESIGN alarm
(
clk, clear, inpt : INPUT;
alarm_led : OUTPUT;

)
variable
ss : machine with states (s0, s1, s2);
counter [7..0] : dff;
BEGIN

ss.clk = clk;
ss.reset = !clear;
counter [].clk = clk;
counter [].clrn = clear;

case ss is

%Проверяем, что было сначала - ноль или один%
when s0 =>
%Диод зажигается ноликом !!!%
alarm_led = vcc;
counter [].d = 0;
if inpt == 0 then ss = s1; else ss = s2; end if;

%Сначала был ноль%
when s1 =>
if inpt == 1 then alarm_led=gnd;
counter [].d = counter [].q + 1;
else counter [].d = 0;
end if;
if counter [].q == 250 then ss = s0; end if;

%Сначала была единичка%
when s2 =>
if inpt == 0 then alarm_led=gnd;
counter [].d = counter [].q + 1;
else counter [].d = 0;
end if;
if counter [].q == 250 then ss = s0; end if;

end case;

END;

Хуже другое. При симуляции выясняется, что диод ... загорается с первым тактовым импульсом, переводящим ЦА в S1 или в S2 и больше не гаснет. Никогда !!! Но ведь все вроде правильно. Видать, в машину вселился бес.
Помогиииите

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

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

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

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


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

E-mail: info@telesys.ru