Мегафункции ПЛИС
Параметризуемая синхронная линия задержки (сдвиговый регистр). Версия 2
Параметры:DWIDTH - разрядность сдвигового регистра (бит)
NUM_HALF_CLK - число 1/2 тактов задержки
Входные порты:
clk - вход тактовых импульсов
in_data - входная шина данных разрядностью DWIDTH бит
Выходные порты:
out_data - выходная шина данных разрядностью DWIDTH бит
Исходный текст
TITLE "DELAY LINE";
PARAMETERS
(
DWIDTH = 10, --Разрядность шины данных
NUM_HALF_CLK= 3 --Задержка в половинах тактов clk
);
CONSTANT NUMWORDS = FLOOR(NUM_HALF_CLK DIV 2);
CONSTANT DEL_HALF = NUM_HALF_CLK MOD 2;
SUBDESIGN dline_v2
(
clk : INPUT;
in_data[DWIDTH-1..0] : INPUT;
out_data[DWIDTH-1..0] : OUTPUT;
)
VARIABLE
IF NUMWORDS > 0 GENERATE
dw[NUMWORDS-1..0][DWIDTH-1..0] : DFF;
END GENERATE;
IF DEL_HALF > 0 GENERATE
del_hw[DWIDTH-1..0] : DFF;
END GENERATE;
out_data_int[DWIDTH-1..0] : NODE;
BEGIN
IF NUMWORDS > 0 GENERATE
dw[][].clk = clk;
dw[0][].d = in_data[];
IF NUMWORDS > 1 GENERATE
dw[NUMWORDS-1..1][].d = dw[NUMWORDS-2..0][].q;
END GENERATE;
out_data_int[] = dw[NUMWORDS-1][].q;
ELSE GENERATE
out_data_int[] = in_data[];
END GENERATE;
IF DEL_HALF > 0 GENERATE
del_hw[].clk = !clk;
del_hw[].d = out_data_int[];
out_data[] = del_hw[].q;
ELSE GENERATE
out_data[] = out_data_int[];
END GENERATE;
END;
Скачать исходники можно здесь (архив RAR, 1Кб).
При любом полном или частичном воспроизведении, копировании и распространении материалов сайта - активная ссылка на ресурс www.radiotract.ru обязательна.
Комментарии