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

 
 
> Евклидово расстояние на 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:19
Сообщение #2


Местный
***

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



Последний multadd multadd_m(..,.A(D),.B(D),.C(P),.P(P)); ? И где Р это мой аккумулятор?
Go to the top of the page
 
+Quote Post
Maverick
сообщение Feb 18 2016, 11:33
Сообщение #3


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(count_enable @ Feb 18 2016, 13:19) *

Код
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.numeric_std.all;

entity half_dsp_block is  
  generic (WIDTH: integer := 18);
  port (
        clock       : in  std_logic;
        areset    : in  std_logic;
        clock_ena : in  std_logic;
        a0        : in  std_logic_vector(WIDTH-1 downto 0);
        b0        : in  std_logic_vector(WIDTH-1 downto 0);
        a1        : in  std_logic_vector(WIDTH-1 downto 0);
        b1        : in  std_logic_vector(WIDTH-1 downto 0);
        a2        : in  std_logic_vector(WIDTH-1 downto 0);
        b2        : in  std_logic_vector(WIDTH-1 downto 0);
        a3        : in  std_logic_vector(WIDTH-1 downto 0);
        b3        : in  std_logic_vector(WIDTH-1 downto 0);
        w         : out std_logic_vector(2*WIDTH+1 downto 0));
end half_dsp_block;

architecture rtl of half_dsp_block is

  signal a0_reg : signed(WIDTH-1 downto 0);
  signal b0_reg : signed(WIDTH-1 downto 0);
  signal a1_reg : signed(WIDTH-1 downto 0);
  signal b1_reg : signed(WIDTH-1 downto 0);
  signal a2_reg : signed(WIDTH-1 downto 0);
  signal b2_reg : signed(WIDTH-1 downto 0);
  signal a3_reg : signed(WIDTH-1 downto 0);
  signal b3_reg : signed(WIDTH-1 downto 0);
  signal p0     : signed(2*WIDTH downto 0);
  signal p1     : signed(2*WIDTH downto 0);
  signal w_sig  : signed(2*WIDTH+1 downto 0);

begin

  process (clock, areset)
  begin
      if (areset = '1') then          -- asynchronous reset
        a0_reg <= (others => '0');
          b0_reg <= (others => '0');
          a1_reg <= (others => '0');
          b1_reg <= (others => '0');
          a2_reg <= (others => '0');
          b2_reg <= (others => '0');
          a3_reg <= (others => '0');
          b3_reg <= (others => '0');
          p0     <= (others => '0');
          p1     <= (others => '0');
          w_sig  <= (others => '0');
    elsif clock'event and clock = '1' and clock_ena = '1'then  -- rising clock edge
        a0_reg <= signed(a0);
        b0_reg <= signed(b0);
        a1_reg <= signed(a0_reg);
        b1_reg <= signed(b1);
        a2_reg <= signed(a1_reg);
        b2_reg <= signed(b2);
        a3_reg <= signed(a2_reg);
        b3_reg <= signed(b3);
        --must follow the following order to be recognized to use shift register input
        p0        <= resize((a1_reg*b1_reg),p0'length) + resize((a0_reg*b0_reg),p0'length);
        p1        <= resize((a3_reg*b3_reg),p1'length) + resize((a2_reg*b2_reg),p1'length);
        w_sig  <= resize(p0,w_sig'length) + resize(p1,w_sig'length);
    end if;
  end process;

  w <= std_logic_vector(w_sig);

end rtl;

Вы можете аналогичным способом поступить - для альтеры работало...


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
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
- - blackfin   Цитата(count_enable @ Feb 18 2016, 15:13)...   Feb 18 2016, 11:41
- - count_enable   Спасибо большое. Уже "увидел" как оно бу...   Feb 18 2016, 11:49
|- - blackfin   Цитата(count_enable @ Feb 18 2016, 15:49)...   Feb 18 2016, 12:21
||- - Fat Robot   есть приближенная оценка модуля вектора для двумер...   Feb 18 2016, 15:55
|- - blackfin   Цитата(count_enable @ Feb 18 2016, 14:49)...   Feb 22 2016, 10:02
|- - Timmy   Цитата(blackfin @ Feb 22 2016, 13:02) Есл...   Feb 22 2016, 13:06
- - анатолий   Цитата(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 - 00:49
Рейтинг@Mail.ru


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