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

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

Информация

 

 

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

Общая

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

ПЛИС

Измерения

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

Библиотека

Справочники

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

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

Куплю

Продам

Магазин

Программы

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

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

Интернет

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

Другие

Мы в соцсетях

  

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

Вычисление среднего арифметического двух чисел

Параметры:
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";
            

--Вычисление среднего арифметического двух чисел

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;

Скачать исходники можно здесь (архив RAR, 1Кб).

При любом полном или частичном воспроизведении, копировании и распространении материалов сайта - активная ссылка на ресурс www.radiotract.ru обязательна.


Комментарии

comments powered by Disqus