Радиотехнический сайт RADIOTRACT

Радиотехника и электроника для разработчиков и радиолюбителей

Информация

 

 

Справочные данные на радиоэлектронные компоненты, приборы, средства связи и измерений. Радиотехническая литература.

Общая

Микроконтроллеры

ПЛИС

Измерения

Радиостанции

Библиотека

Справочники

Доска объявлений

Объявления о покупке и продаже радиокомпонентов. Спрос и предложение на различные радиодетали и приборы.

Куплю

Продам

Магазин

Программы

Полезные программы для радиолюбителей и разработчиков радиоэлектроники.

Радиотехника

Интернет

Калькуляторы

Другие

Мы в соцсетях

  

Мегафункции ПЛИС

Детектор фронтов

Описание:
На выходе формирует одиночный импульс по положительному или отрицательному перепаду входного сигнала (задаётся параметром 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 обязательна.


Комментарии

comments powered by Disqus