Мегафункции ПЛИС
Вычисление среднего арифметического двух чисел
Параметры:DATA_WIDTH - разрядность шины данных
Входные порты:
clk - вход тактовых импульсов
in_a - входная шина данных 1 разрядностью DATA_WIDTH бит
in_a_valid - строб входной шины данных 1
in_b - входная шина данных 2 разрядностью DATA_WIDTH бит
in_b_valid - строб входной шины данных 2
last_data_valid - самый последний сигнал из in_a_valid и in_b_valid
Выходные порты:
out - выходная шина данных разрядностью DATA_WIDTH бит
out_valid - строб выходной шины данных
Порт last_data_valid внешне соединяется с наиболее задержанным из сигналов in_a_valid и in_b_valid (для случая когда in_a_valid и in_b_valid сдвинуты друг относительно друга).
Исходный текст
TITLE "ARITHMETIC MEAN";Скачать исходники можно здесь (архив RAR, 1Кб).--Вычисление среднего арифметического двух чисел
PARAMETERS
(
DATA_WIDTH = 8 --Data Bus Width
);SUBDESIGN arith_mean
(
clk : INPUT; --Data Clock
in_a[DATA_WIDTH-1..0] : INPUT; --Input A
in_a_valid : INPUT; --Valid Input A
in_b[DATA_WIDTH-1..0] : INPUT; --Input B
in_b_valid : INPUT; --Valid Input B
last_data_valid : INPUT; --Самый последний сигнал из in_a_valid и in_b_valid
out[DATA_WIDTH-1..0] : OUTPUT; --Output
out_valid : OUTPUT; --Valid Output
)VARIABLE
in_a_rg[DATA_WIDTH-1..0]: DFFE;
in_b_rg[DATA_WIDTH-1..0]: DFFE;
result[DATA_WIDTH..0] : NODE;
out_rg[DATA_WIDTH-1..0] : DFF;
valid1_ff : DFF;
valid2_ff : DFF;BEGIN
in_a_rg[].clk = clk;
in_a_rg[].d = in_a[];
in_a_rg[].ena = in_a_valid;in_b_rg[].clk = clk;
in_b_rg[].d = in_b[];
in_b_rg[].ena = in_b_valid;result[] = (GND,in_a_rg[])+(GND,in_b_rg[]);
out_rg[].clk = clk;
out_rg[].d = result[DATA_WIDTH..1];
out[] = out_rg[].q;
valid1_ff.clk = clk;
valid1_ff.d = last_data_valid;
valid2_ff.clk = clk;
valid2_ff.d = valid1_ff.q;
out_valid = valid2_ff.q;
END;
При любом полном или частичном воспроизведении, копировании и распространении материалов сайта - активная ссылка на ресурс www.radiotract.ru обязательна.
Комментарии