[an error occurred while processing this directive]
|
Задача такая. На входе есть сигнал - ноль или единица. Если этот сигнал меняется на противоположный, должен загореться диодик. Он должен погаснуть, если после этого перепада сигнал больше не менял состояние в течение некоторого времени. Он не должен гаснуть, если сигнал хоть раз меняет свое состояние в течение этого некоторого времени. Я решил эту задачу с помощью ЦА:
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: info@telesys.ru