Мегафункции ПЛИС
Детектор фронтов
Описание:
На выходе формирует одиночный импульс по положительному или отрицательному перепаду входного сигнала (задаётся параметром EDGE_DETECT).
Временная диаграмма входных и выходных сигналов прилагается (в формате симулятора пакета Quartus II).
Параметры:
EDGE_DETECT - тип детектируемого фронта входного сигнала("RISING" - по переднему фронту, "FALLING" - по заднему фронту)
USE_OUT_REGISTER - использование регистра на выходе ("YES" - использовать регистр, "NO" - не использовать регистр)
Входные порты:
clk - вход тактовых импульсов
reset - асинхронный вход сброса
in_pulse - входной сигнал
Выходные порты:
out_pulse - выходной импульс
Исходный текст
TITLE "EDGE DETECTOR";
PARAMETERS
(
EDGE_DETECT = "RISING", --EDGE: RISING/FALLING
USE_OUT_REGISTER = "NO" --USE OUTPUT REGISTER
);
OPTIONS ALTERA_INTERNAL_OPTION = "{-to EDGEDET} STATE_MACHINE_PROCESSING=MINIMAL_BITS";
SUBDESIGN edgedetect
(
clk : INPUT; --SYSTEM CLOCK
reset : INPUT; --SYSTEM RESET
in_pulse : INPUT; --INPUT PULSE
out_pulse : OUTPUT; --OUTPUT PULSE
)
VARIABLE
EDGEDET : MACHINE WITH STATES (_ED_WAIT,_ED_PLS,_ED_END);
IF (USE_OUT_REGISTER == "YES") GENERATE
ed_ff : DFF;
END GENERATE;
in_pls : NODE;
BEGIN
IF (EDGE_DETECT == "RISING") GENERATE
in_pls = in_pulse;
ELSE GENERATE
in_pls = !in_pulse;
END GENERATE;
EDGEDET.clk = clk;
EDGEDET.reset = reset;
CASE EDGEDET IS
WHEN _ED_WAIT => --wait
IF in_pls THEN
EDGEDET = _ED_PLS;
ELSE
EDGEDET = _ED_WAIT;
END IF;
WHEN _ED_PLS => --output pulse
EDGEDET = _ED_END;
WHEN _ED_END => --end of output pulse
IF in_pls THEN
EDGEDET = _ED_END;
ELSE
EDGEDET = _ED_WAIT;
END IF;
END CASE;
IF (USE_OUT_REGISTER == "YES") GENERATE
ed_ff.clk = clk;
ed_ff.d = (EDGEDET == _ED_PLS);
out_pulse = ed_ff.q;
ELSE GENERATE
out_pulse = (EDGEDET == _ED_PLS);
END GENERATE;
END;
Скачать исходники можно здесь (архив RAR, 2Кб).
При любом полном или частичном воспроизведении, копировании и распространении материалов сайта - активная ссылка на ресурс www.radiotract.ru обязательна.
Комментарии