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

 
 
> умножение с накоплением за один такт (MAC), как работает?
kamil_yaminov
сообщение Oct 1 2008, 03:57
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 395
Регистрация: 15-02-08
Из: Новосибирск
Пользователь №: 35 064



Поделитесь пожалуйста ссылкой на нормальное описание алгоритма быстрого умножения с накоплением, которое применяется в DSP-процессорах (MAC блоки). Из того, что я нарыл в тырнете, понял только что используются какие-то хитрые комбинационные схемы вкупе с таблицами. Зараннее спасибо.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 20)
DRUID3
сообщение Oct 1 2008, 07:34
Сообщение #2


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



05.gif ну алгоритмы быстрого умножения, видимо, на одной полке с алгоритмами быстрого сложения... biggrin.gif

А, если серьезно, то опишите для чего Вам это понадобилось, какие стоят задачи? Алгоритмы умножения с накоплением(давайте угадаю 8x8 бит? smile.gif ) поддерживаются в DSP аппаратно - баааааальшой аккум ну и однотактное перемножение, причем актуально это для fix - собственно потому то эти процессоры и DSP - из-за аппаратных всяких фич.

Или же нужна VHDL версия всего этого безобразия для реализации в FPGA или заказухе?


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
kamil_yaminov
сообщение Oct 1 2008, 08:10
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 395
Регистрация: 15-02-08
Из: Новосибирск
Пользователь №: 35 064



да просто интересно стало, ведь пользуюсь-пользуюсь, а как работает не знаю. Недавно хвастал перед товарищем достижениями современных ДСП, а он и спроси, а как, мол, за такт перемножение с накоплением делается, такого, мол, быть не может, ну я в ступор сразу и ушел. Может я сначала вопрос не так сформулировал, а интересует именно то что реализованно аппаратно внутри ДСП.

Сообщение отредактировал kamil yaminov - Oct 1 2008, 08:16
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 1 2008, 08:14
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(kamil yaminov @ Oct 1 2008, 12:10) *
а как, мол, за такт перемножение с накоплением делается, такого, мол, быть не может

а почему бы и нет?
такт - это как минимум передний и задний фронт. А если применить разные задержки - получаем большое количество подтактов.
Кстати говоря, умножение - чисто комбинационная задача, так что вообще никаких проблем не вижу.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
tocha
сообщение Oct 1 2008, 08:38
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 92
Регистрация: 16-05-05
Из: Kiev
Пользователь №: 5 080



А слово "pipeline" слышали?
Go to the top of the page
 
+Quote Post
kamil_yaminov
сообщение Oct 1 2008, 08:57
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 395
Регистрация: 15-02-08
Из: Новосибирск
Пользователь №: 35 064



Про конвейер слышал и даже пользовался им, но мне не кажется, что внутри МАСа стоит конвейер, если не прав, то поправте.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 1 2008, 09:25
Сообщение #7


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Прикрепленное изображение
Прикрепленное изображение

Вот, например, бегло порывшись в яндексе...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
tocha
сообщение Oct 1 2008, 09:45
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 92
Регистрация: 16-05-05
Из: Kiev
Пользователь №: 5 080



Цитата(kamil yaminov @ Oct 1 2008, 11:57) *
Про конвейер слышал и даже пользовался им, но мне не кажется, что внутри МАСа стоит конвейер, если не прав, то поправте.

А как по-другому? За один такт МАК никак не сделать, значит - последовательная схема. Походу ваш товарищ прав. Вся сила в конвеере.
Go to the top of the page
 
+Quote Post
kamil_yaminov
сообщение Oct 1 2008, 10:11
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 395
Регистрация: 15-02-08
Из: Новосибирск
Пользователь №: 35 064



Да, действительно, перемножение с накоплением за один такт наверное никак не сделать, тогда - конвейер.

PS. В гугл надо забивать не умножение, а перемножение, тогда, оказывается, много чего полезного можно найти ).
Go to the top of the page
 
+Quote Post
yes
сообщение Oct 1 2008, 12:24
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



Цитата(tocha @ Oct 1 2008, 13:45) *
А как по-другому? За один такт МАК никак не сделать, значит - последовательная схема. Походу ваш товарищ прав. Вся сила в конвеере.


интересно, что в МАС-е нужен результат предыдущей операции - ну то есть для прибавления i-го слагаемого нужно иметь i-1 результат - то есть сконвееризировать большой сумматор аккумулятора не получится (допустима задержка только 1 такт)

вобщем решения есть (и наверно, не одно) - интересно, найдете ли их гуглем (мне было бы интересно посмотреть)
Go to the top of the page
 
+Quote Post
Михаил_K
сообщение Oct 1 2008, 12:33
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481



Цитата(tocha @ Oct 1 2008, 13:45) *
А как по-другому? За один такт МАК никак не сделать, значит - последовательная схема. Походу ваш товарищ прав. Вся сила в конвеере.


За один такт все делается. Вопрос лишь в быстродействии (или в максимальной тактовой частоте).
Вам правильно сказали, умножение, как и сложение - это лишь комбинационная логика.
Кстати, для накопления действительно нужно иметь результат предыдущего сложения, но это значит что суммирование должно быть за один такт, и совсем не значит что умножение должно быть за один такт.
Go to the top of the page
 
+Quote Post
tocha
сообщение Oct 1 2008, 13:03
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 92
Регистрация: 16-05-05
Из: Kiev
Пользователь №: 5 080



Цитата(yes @ Oct 1 2008, 15:24) *
интересно, что в МАС-е нужен результат предыдущей операции - ну то есть для прибавления i-го слагаемого нужно иметь i-1 результат - то есть сконвееризировать большой сумматор аккумулятора не получится (допустима задержка только 1 такт)

вобщем решения есть (и наверно, не одно) - интересно, найдете ли их гуглем (мне было бы интересно посмотреть)

Не понял, решение чего? Если того, как сделать мак за один такт, то приведите здесь, если не сложно.
ЗЫ. По поводу гугла, если вам интересно, то и ищите сами.


Цитата(Михаил_K @ Oct 1 2008, 15:33) *
За один такт все делается. Вопрос лишь в быстродействии (или в максимальной тактовой частоте).
Вам правильно сказали, умножение, как и сложение - это лишь комбинационная логика.
Кстати, для накопления действительно нужно иметь результат предыдущего сложения, но это значит что суммирование должно быть за один такт, и совсем не значит что умножение должно быть за один такт.

Я не говорю, что умножение и сложение - некомбинацинная логика, и не говорю, что умножение должно быть за один такт. Я говорю, что один МАК за один такт не делается.
Если можете, покажите, если не сложно, как за один такт сделать следующую операцию a = a + b*c.
Go to the top of the page
 
+Quote Post
Михаил_K
сообщение Oct 1 2008, 13:07
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481



Цитата(tocha @ Oct 1 2008, 17:03) *
Не понял, решение чего? Если того, как сделать мак за один такт, то приведите здесь, если не сложно.
ЗЫ. По поводу гугла, если вам интересно, то и ищите сами.
Я не говорю, что умножение и сложение - некомбинацинная логика, и не говорю, что умножение должно быть за один такт. Я говорю, что один МАК за один такт не делается.
Если можете, покажите, если не сложно, как за один такт сделать следующую операцию a = a + b*c.


Элементарно. Вам в каком виде показать, на VHDL подойдет?
Go to the top of the page
 
+Quote Post
tocha
сообщение Oct 1 2008, 13:11
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 92
Регистрация: 16-05-05
Из: Kiev
Пользователь №: 5 080



Цитата(Михаил_K @ Oct 1 2008, 16:07) *
Элементарно. Вам в каком виде показать, на VHDL подойдет?

в любом, vhdl подойдёт
Go to the top of the page
 
+Quote Post
Михаил_K
сообщение Oct 1 2008, 14:34
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481



Цитата(tocha @ Oct 1 2008, 17:11) *
в любом, vhdl подойдёт


library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity primer is
port(
CLK : in STD_LOGIC;
Reset : in STD_LOGIC;
B : in STD_LOGIC_VECTOR(11 downto 0);
C : in STD_LOGIC_VECTOR(11 downto 0);
Q : out STD_LOGIC_VECTOR(47 downto 0)
);
end primer;


architecture primer of primer is

signal A : std_logic_vector (47 downto 0);
signal p : std_logic_vector (23 downto 0);




begin

p<=signed( B ) * signed( C );

process (CLK)

begin
if (CLK'Event and CLK = '1') then
if (Reset = '1') then
A<=(others =>'0');
else
A<= A+SXT(p,48);
end if;
end if;
end process;

Q<=A;



end primer;
Go to the top of the page
 
+Quote Post
tocha
сообщение Oct 1 2008, 16:48
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 92
Регистрация: 16-05-05
Из: Kiev
Пользователь №: 5 080



Цитата(Михаил_K @ Oct 1 2008, 17:34) *
[font=Fixedsys]library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity primer is
...



Вы обещали:
a = a+b*c,
а описали:
Ai = Ai-1 + Bi*Ci,
то есть конвеер, который даст осмысленный результат минимум после второго такта.

Я так понял, вопрос был: как реализовать a = a+b*c за один такт. Может был неправ.
Go to the top of the page
 
+Quote Post
Михаил_K
сообщение Oct 2 2008, 05:44
Сообщение #17


Знающий
****

Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481



Цитата(tocha @ Oct 1 2008, 20:48) *
Вы обещали:
a = a+b*c,
а описали:
Ai = Ai-1 + Bi*Ci,
то есть конвеер, который даст осмысленный результат минимум после второго такта.

Я так понял, вопрос был: как реализовать a = a+b*c за один такт. Может был неправ.


Ai = Ai-1 + Bi*Ci,
- Это именно то что нужно. Именно эту операцию выполняет DSP. И даст результат на следующем такте. Вы же вдумайтесь сами, как может быть Ai = Ai+b*c. Для этого обязательным условием должно быть b*c = 0.
Go to the top of the page
 
+Quote Post
kamil_yaminov
сообщение Oct 2 2008, 06:23
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 395
Регистрация: 15-02-08
Из: Новосибирск
Пользователь №: 35 064



Дейстаительно получается один такт! Тое есть все сводится к тому как быстро сложить и быстро умножить, а это как я понимаю - комбинационные схемы работают.

Дейстаительно получается один такт! Тое есть все сводится к тому как быстро сложить и быстро умножить, а это как я понимаю - комбинационные схемы работают.
Go to the top of the page
 
+Quote Post
yes
сообщение Oct 3 2008, 09:48
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



мой вопрос был про то, что если нет в архитектуре DSP блоков (не положили в FPGA: например, Spartan3 или проектируете ASIC)
а сумматор на 48 разрядов не успевает по времянке за 1 такт, то есть его надо разбить регистрами на несколько ступеней
но при этом хочется потоковые вычисления выполнять за 1 такт : то есть для вычисления суммы из 1000 слагаемых потратить 1000 с небольшим тактов

умножитель порезать не вопрос - так как в нем может быть сколько угодно ступеней корвеера (ну или пусть это Spartan3, где есть умножители), а накопление как сделать?

btw: мне искать вобщем-то не надо, я знаю, да и хитрого там ничего нет, но если кто-то начинает разбираться с такими вещами - может будет полезно понять
Go to the top of the page
 
+Quote Post
Singer
сообщение Oct 10 2008, 13:26
Сообщение #20


Участник
*

Группа: Свой
Сообщений: 52
Регистрация: 13-11-07
Пользователь №: 32 296



Нет никакой проблемы сделать за такт - только толку от этого мало, поскольку такт получается очень длинный smile.gif Поэтому как правило дробят конвеером для получения большей частоты и пропускной способности.
Go to the top of the page
 
+Quote Post
Builder
сообщение Oct 13 2008, 07:13
Сообщение #21


iBuilder©
****

Группа: Свой
Сообщений: 519
Регистрация: 14-07-04
Из: Минск
Пользователь №: 322



Цитата(Singer @ Oct 10 2008, 16:26) *
Нет никакой проблемы сделать за такт - только толку от этого мало, поскольку такт получается очень длинный smile.gif Поэтому как правило дробят конвеером для получения большей частоты и пропускной способности.

Длинные - понятие не инженерное.
Про такты - разработчики проца сами решают что им выгоднее, за такт или не за такт. Вон, AD и в плавучке в серии Shark делает такое за так и жужит. А кто-то другой разобьёт эту операцию на стадии.
Обсуждать-то что? Сказано, операция - чисто комбинационная, значит в принципе реализуется за такт, даже для плавающей точки.
Если вопросы остались - поднимать доки по реальзации мат операций в двоичных кодах, для сомневающихся..
По моему весь разговор какой-то пустой получается, в темах про FPGA это вопрос для новичка.
Go to the top of the page
 
+Quote Post

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

 


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


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