Создание счетчиков
Счетчики можно определить с помощью D триггеров (DFF и DFFE) и операторов If Then или с помощью функции lpm_counter.
Файл ahdlcnt.tdf, приведенный ниже, реализует 16-битный суммирующий счетчик с загрузкой, который можно сбросить в ноль.
SUBDESIGN ahdlcnt
(
clk, load, ena, clr, d[15..0] : INPUT;
q[15..0] : OUTPUT;
)
VARIABLE
count[15..0] : DFF;
BEGIN
count[].clk = clk;
count[].clrn = !clr;
IF load THEN
count[].d = d[];
ELSIF ena THEN
count[].d = count[].q + 1;
ELSE
count[].d = count[].q;
END IF;
q[] = count[];
END;
В этом файле в разделе Variable
объявляется 16 триггеров с имена count0 по count15. Оператор If Then
определяет значение, которое загружается в триггеры на возрастающем фронте Clock.
Файл lpm_cnt.tdf, приведенный ниже, использует функцию lpm_counter для реализации той же функциональности, что и файл ahdlcnt.tdf.
INCLUDE "lpm_counter.inc";
SUBDESIGN lpm_cnt
(
clk, load, ena, clr, d[15..0] : INPUT;
q[15..0] : OUTPUT;
)
VARIABLE
my_cntr: lpm_counter WITH (LPM_WIDTH=16);
BEGIN
my_cntr.clock = clk;
my_cntr.aload = load;
my_cntr.cnt_en = ena;
my_cntr.aclr = clr;
my_cntr.data[] = d[];
q[] = my_cntr.q[];
END;