реклама на сайте
подробности

 
 
> Евклидово расстояние на Xilinx DSP48
count_enable
сообщение Feb 18 2016, 09:18
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Вот такую задачку сейчас обдумываю. Надо считать евклидово расстояние, координаты точек передаются парами последовательно: А(0) В(0), А(1) В(1), А(2) В(2). Евклидово расстояние это sqrt(sum((А-B )^2)). Корень посчитаю кордиком, сумму аккумулятором, а вот как быть с квадратом разницы? Возможно ли это сделать на одном DSP48 блоке за вменяемое количество циклов? Подскажите где прочитать об этом. Все числа с фикс. точкой.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
count_enable
сообщение Feb 18 2016, 11:49
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Спасибо большое. Уже "увидел" как оно будет работать. Сейчас пообедаю и буду смотреть что об этом синтезатор скажет.

Думаю тема будет полезна не только мне одному, задача широко распространена.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Feb 22 2016, 10:02
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(count_enable @ Feb 18 2016, 14:49) *
Спасибо большое. Уже "увидел" как оно будет работать.

Это прекрасно! Тем более, что мне заставить xbip_multadd работать в режиме аккумулятора и без warnings так и не удалось. wink.gif

Для коротких векторов A и B синтезируется без ошибок xbip_dsp48_macro для единственной операции: (A+D)*B+P.

Если вектора A и B длиннее 18 бит, то придется, вероятно, использовать mult_gen_0 в режиме умножителя и суммировать результаты умножения во внешнем аккумуляторе.

Для xbip_dsp48_macro код получился вот такой:
Код
module acc
(
    clk,
    nrst,
    A0,A1,A2,B0,B1,B2,
    T,valid,R
);

input         clk;
input         nrst;

input signed [16:0] A0,A1,A2;
input signed [16:0] B0,B1,B2;
input         [1:0] T;
input               valid;
output       [36:0] R;

wire signed [16:0] SA = (T == 0) ? A0 : (T == 1) ? A1 : (T == 2) ? A2 : 0;
wire signed [16:0] SB = (T == 0) ? B0 : (T == 1) ? B1 : (T == 2) ? B2 : 0;

reg signed [17:0] D;

always @(posedge clk)
begin
  D <= SA - SB;
end

wire [36:0] P;

dsp48mac dsp48mac_m(.clk(clk),.a(D),.b(D),.d(0),.p(P));

reg  [36:0] R;

always @(posedge clk or negedge nrst)
begin
  if (nrst == 0)
  begin
    R <= 0;
  end
  else
  if (valid)
  begin
    R <= P;
  end
end

endmodule
Go to the top of the page
 
+Quote Post
Timmy
сообщение Feb 22 2016, 13:06
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(blackfin @ Feb 22 2016, 13:02) *
Если вектора A и B длиннее 18 бит, то придется, вероятно, использовать mult_gen_0 в режиме умножителя и суммировать результаты умножения во внешнем аккумуляторе.

Можно также аккумулировать в DSP48 частичные произведения, а результаты потом складывать внешним сумматором.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- count_enable   Евклидово расстояние на Xilinx DSP48   Feb 18 2016, 09:18
- - Maverick   Цитата(count_enable @ Feb 18 2016, 11:18)...   Feb 18 2016, 09:31
- - blackfin   Цитата(count_enable @ Feb 18 2016, 13:18)...   Feb 18 2016, 09:37
|- - Maverick   нашел тему   Feb 18 2016, 09:40
- - count_enable   Цитата(blackfin @ Feb 18 2016, 13:37) Так...   Feb 18 2016, 10:18
|- - blackfin   Цитата(count_enable @ Feb 18 2016, 14:18)...   Feb 18 2016, 10:35
|- - count_enable   Цитата(blackfin @ Feb 18 2016, 14:35) Ну,...   Feb 18 2016, 11:13
|- - Maverick   Вам привели описание для этого случая...   Feb 18 2016, 11:16
- - count_enable   Последний multadd multadd_m(..,.A(D),.B(D),.C(P),....   Feb 18 2016, 11:19
|- - Maverick   Цитата(count_enable @ Feb 18 2016, 13:19)...   Feb 18 2016, 11:33
- - blackfin   Цитата(count_enable @ Feb 18 2016, 15:13)...   Feb 18 2016, 11:41
|- - blackfin   Цитата(count_enable @ Feb 18 2016, 15:49)...   Feb 18 2016, 12:21
||- - Fat Robot   есть приближенная оценка модуля вектора для двумер...   Feb 18 2016, 15:55
- - анатолий   Цитата(count_enable @ Feb 18 2016, 11:18)...   Mar 6 2016, 08:53


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 12:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01384 секунд с 7
ELECTRONIX ©2004-2016