
Приложение 7. Описание на AHDL устройства для защиты от "дребезга"
TITLE "Protection from failure of contacts";
CONSTANT
time_hold = 80000-1;
SUBDESIGN defense
(
key, clk : INPUT;
out : OUTPUT;
)
VARIABLE
ss : MACHINE WITH STATES (idle0, start, fixed);
hold[16..0] : DFF;
latch_in : DFF;
BEGIN
DEFAULTS
hold[].d = 0;
latch_in.d = GND;
END DEFAULTS;
hold[].prn = VCC;
hold[].clk = clk;
hold[].d = hold[].q + 1;
latch_in.prn = VCC;
latch_in.clk = !key;
latch_in.d = VCC;
ss.(clk, reset) = (clk, GND);
CASE ss IS
WHEN idle0 =>
hold[].clrn = !key and latch_in.q;
latch_in.clrn = VCC;
out = GND;
IF (latch_in.q) THEN
ss = start;
END IF;
WHEN start =>
hold[].clrn = !key;
latch_in.clrn = VCC;
out = GND;
IF (hold[] == time_hold) THEN
ss = fixed;
END IF;
WHEN fixed =>
hold[].clrn = GND;
latch_in.clrn = GND;
out = VCC;
ss = idle0;
END CASE;
END;