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

 
 
> Каскадирование умножителей в ПЛИС (Spartan-3)
omen
сообщение Dec 9 2008, 23:09
Сообщение #1





Группа: Участник
Сообщений: 12
Регистрация: 6-10-08
Пользователь №: 40 731



Подскажите пожалуйсто, может кто уже сталкивался. Как можно выполнить каскадирование умножителей в ПЛИС семейства Spartan-3. Там есть блоки умножителей MULT18X18, MULT18X18SIO, последний собственно и предназаначен для выполнеия каскадирования. но что куда заводить не понятно. Нужно выполнять перемножение чисел большей разрядности чем 18 бит.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 16)
Apast
сообщение Dec 10 2008, 02:00
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 224
Регистрация: 22-06-04
Из: Новосибирск
Пользователь №: 87



Цитата(omen @ Dec 10 2008, 03:09) *
Подскажите пожалуйсто, может кто уже сталкивался. Как можно выполнить каскадирование умножителей в ПЛИС семейства Spartan-3. Там есть блоки умножителей MULT18X18, MULT18X18SIO, последний собственно и предназаначен для выполнеия каскадирования. но что куда заводить не понятно. Нужно выполнять перемножение чисел большей разрядности чем 18 бит.

А воспользоваться Xilinx CORE GEN не хотите? Он сам все правильно сгенерит для заданной разряднояти.
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Dec 10 2008, 08:24
Сообщение #3


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(omen @ Dec 10 2008, 03:09) *
Подскажите пожалуйста, может кто уже сталкивался. Как можно выполнить каскадирование умножителей в ПЛИС семейства Spartan-3. Там есть блоки умножителей MULT18X18, MULT18X18SIO, последний собственно и предназначен для выполнения каскадирования. но что куда заводить не понятно. Нужно выполнять перемножение чисел большей разрядности чем 18 бит.

Есть такой документ: XAPP467.pdf Using Embedded Multipliers in Spartan-3 FPGAs. Я думаю, что в нём Вы найдете ответы на все интересующие Вас вопросы, связанные с применением умножителей в Spartan-3.

Но мне непонятно что именно Вы имели ввиду под термином "каскадирование умножителей", поэтому, если после прочтения xapp467.pdf у Вас останутся вопросы, уточните этот термин.
Go to the top of the page
 
+Quote Post
ClockworkOrange
сообщение Dec 10 2008, 08:25
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 337
Регистрация: 17-05-07
Пользователь №: 27 784



Цитата(Apast @ Dec 10 2008, 05:00) *
А воспользоваться Xilinx CORE GEN не хотите? Он сам все правильно сгенерит для заданной разряднояти.

так и мозг атрофироваться может.....


Прикрепленный файл  Xilinx_UG073_XtremeDSP_for_Virtex_4_FPGAs_User_Guide.pdf ( 2.55 мегабайт ) Кол-во скачиваний: 673

page 45: 35 x 35 Multiplier Model


--------------------
Чтoбы yзнaть, кaкaя дopoгa впepeди, cпpocи тex, ктo пo нeй вoзвpaщaeтcя ©
Go to the top of the page
 
+Quote Post
Костян
сообщение Dec 10 2008, 08:31
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



Цитата(ClockworkOrange @ Dec 10 2008, 06:25) *
так и мозг атрофироваться может.....

smile.gif
поддерживаю.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Dec 10 2008, 10:09
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Apast @ Dec 10 2008, 06:00) *
А воспользоваться Xilinx CORE GEN не хотите? Он сам все правильно сгенерит для заданной разряднояти.
Я щетаю, что Кореген тут лишнее звено. Синтезатор сам способен собрать большой умножитель из более мелких.
Go to the top of the page
 
+Quote Post
0xFF
сообщение Dec 10 2008, 10:29
Сообщение #7


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

Группа: Свой
Сообщений: 131
Регистрация: 9-01-06
Пользователь №: 12 984



Цитата(andrew_b @ Dec 10 2008, 14:09) *
Я щетаю, что Кореген тут лишнее звено. Синтезатор сам способен собрать большой умножитель из более мелких.

Вот только при умножении со знаком могут возникнуть проблемы

В приложении умножение на Spartan 3 со знаком, запаздывание если не ошибаюсь 4 такта,
закоментированные блоки умножения для 3е серии. для них запаздывание на 5 тактов, из-за регистровых выходов

Удачи
Прикрепленные файлы
Прикрепленный файл  mult.txt ( 5.71 килобайт ) Кол-во скачиваний: 99
 
Go to the top of the page
 
+Quote Post
omen
сообщение Dec 10 2008, 10:56
Сообщение #8





Группа: Участник
Сообщений: 12
Регистрация: 6-10-08
Пользователь №: 40 731



Спасибо за ответы.

Цитата
Есть такой документ: XAPP467.pdf Using Embedded Multipliers in Spartan-3 FPGAs. Я думаю, что в нём Вы найдете ответы на все интересующие Вас вопросы, связанные с применением умножителей в Spartan-3.


Спасибо за доку, просто я почему то нашел только xapp467_vhdl, а там только примеры на vhdl, описалова нету.

Цитата
Я щетаю, что Кореген тут лишнее звено. Синтезатор сам способен собрать большой умножитель из более мелких.


Действительно, собрал небольшой проектик (код ниже)
Код
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity mult is
    Port ( op1 : in  STD_LOGIC_VECTOR (21 downto 0);
           op2 : in  STD_LOGIC_VECTOR (21 downto 0);
           res : out  STD_LOGIC_VECTOR (43 downto 0));
end mult;

architecture Behavioral of mult is

begin
    res <= op1*op2;


end Behavioral;

Вот результат моделирования:
[img]http://c:\modelir.JPG[/img]

Вот результат размещения на кристалле
[img]http://c:\floorplaner.jpg[/img]

Т.е. синтезатор действительно сам сообразил как чего соединить.

ой похоже здесь сначала нада картинку куда-нить залить. ну в общем там на кристалле он использовал 4?? умножителя и собрал какую-то логику сопряжения между ними, а результаты моделирования соотвтетствуют действительности, т.е. он действительно пермножил нормально например 4190000 и 325489 и получил 1363798910000.

wacko.gif о вот нашел как загрузить (((
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Dec 10 2008, 11:08
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(0xFF @ Dec 10 2008, 14:29) *
Вот только при умножении со знаком могут возникнуть проблемы
Умножитель не знает ничего про знак. Он умножает двоичные числа и не занимается их интерпретацией.
Go to the top of the page
 
+Quote Post
Kedin
сообщение Dec 10 2008, 12:14
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 27
Регистрация: 28-05-07
Пользователь №: 28 001



Цитата(andrew_b @ Dec 10 2008, 16:08) *
Умножитель не знает ничего про знак. Он умножает двоичные числа и не занимается их интерпретацией.


Извините что вклиниваюсь, но вообще то MULT18X18 -
это знаковый 18X18 аппаратный умножитель
Go to the top of the page
 
+Quote Post
0xFF
сообщение Dec 10 2008, 12:41
Сообщение #11


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

Группа: Свой
Сообщений: 131
Регистрация: 9-01-06
Пользователь №: 12 984



Цитата(andrew_b @ Dec 10 2008, 15:08) *
Умножитель не знает ничего про знак. Он умножает двоичные числа и не занимается их интерпретацией.


неправильное утверждение, всё он знает

Цитата(Kedin @ Dec 10 2008, 16:14) *
Извините что вклиниваюсь, но вообще то MULT18X18 -
это знаковый 18X18 аппаратный умножитель

правильно
Go to the top of the page
 
+Quote Post
Singer
сообщение Dec 10 2008, 14:00
Сообщение #12


Участник
*

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



Цитата(0xFF @ Dec 10 2008, 15:41) *
неправильное утверждение, всё он знает
правильно

Просто умножитель 18x18 состоит из беззнакового умножителя 17x17 (который умножает модули входных значений) и логики формирования знака результата на основании знаков множимых. Все это я так понимаю, объединено внутри слайса DSP48 (или mult18x18). Поэтому с точки зрения пользователя умножение знаковое, но внутри умножителя оно конечно беззнаковое + логика знака.
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Dec 10 2008, 14:03
Сообщение #13


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(omen @ Dec 10 2008, 14:56) *
Спасибо за доку, просто я почему то нашел только xapp467_vhdl, а там только примеры на vhdl, описалова нету.

У Xilinx некоторое время назад слегка изменилась система поиска (на мой взгляд из плохой стала просто отвратительной), и для того, чтобы найти какой-либо XAPP, необходимо приписывать в конце расширение файла (.pdf). Т.е. поиск необходимо проводить было не XAPP467 (в таком случае будет найдено то, что на него ссылается), а XAPP467.PDF.
Go to the top of the page
 
+Quote Post
sazh
сообщение Dec 10 2008, 14:33
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(0xFF @ Dec 10 2008, 13:29) *
Вот только при умножении со знаком могут возникнуть проблемы

В приложении умножение на Spartan 3 со знаком, запаздывание если не ошибаюсь 4 такта,
закоментированные блоки умножения для 3е серии. для них запаздывание на 5 тактов, из-за регистровых выходов

Удачи


Если Вы утверждаете, что он со знаком, разве можно ему 1'b0 подставлять?
MULT18X18S mult_4 (
.P(mult_resullt_4[35:0]), // 36-bit multiplier output
.A({1'b0,a[16:0]}), // 18-bit multiplier input
.B(b[34:17]), // 18-bit multiplier input
.CE(1), // Clock enable input for the P port
.C(clk), // Clock input
.R(0)

А тут знак mult_resullt_2 взяли и отбросили
teil_op1[69:0] <= {mult_resullt_1[35:0], mult_resullt_2[33:0]};

и где тогда reg signed, wire signed
Go to the top of the page
 
+Quote Post
0xFF
сообщение Dec 10 2008, 15:21
Сообщение #15


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

Группа: Свой
Сообщений: 131
Регистрация: 9-01-06
Пользователь №: 12 984



Цитата(sazh @ Dec 10 2008, 18:33) *
Если Вы утверждаете, что он со знаком, разве можно ему 1'b0 подставлять?
MULT18X18S mult_4 (
.P(mult_resullt_4[35:0]), // 36-bit multiplier output
.A({1'b0,a[16:0]}), // 18-bit multiplier input
.B(b[34:17]), // 18-bit multiplier input
.CE(1), // Clock enable input for the P port
.C(clk), // Clock input
.R(0)

А тут знак mult_resullt_2 взяли и отбросили
teil_op1[69:0] <= {mult_resullt_1[35:0], mult_resullt_2[33:0]};

и где тогда reg signed, wire signed


в приложенном файле реализована схема Xapp467 на стр.6

В примитивах XILINX в случае при умножении со знаком и при использовании операндов с меньшим кол-вом бит чем вход умножителя недостоющие старшие биты необходимо дополнить знаковым битом.

Использование signed не протеворечит выше изложенному, в случае, конечно, если вы не используете Verilog 1995.

C уважением
Go to the top of the page
 
+Quote Post
sazh
сообщение Dec 10 2008, 15:54
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(0xFF @ Dec 10 2008, 18:21) *
в приложенном файле реализована схема Xapp467 на стр.6

В примитивах XILINX в случае при умножении со знаком и при использовании операндов с меньшим кол-вом бит чем вход умножителя недостоющие старшие биты необходимо дополнить знаковым битом.

Использование signed не протеворечит выше изложенному, в случае, конечно, если вы не используете Verilog 1995.

C уважением


.A({1'b0,a[16:0]}), // 18-bit multiplier input
знак - это a[16], им и надо дополнять. Полученный результат signed. знак у него это святое. Вы же дальше разрядностью играете, суммируете, урезаете и т.д. понятие signed всегда присутствует и в параметрах умножителя (потому что разрядность по входам и выходу разная) и при описании сумматоров, если разрядная сетка меняется (Вы все это на откуп синтезатора отдали)
/////////////////////////////////////////////////////
Посмотрел документ. Одни вопросы и непонятки. Рисунок 5. Умножитель 22х16. На одной веточке скромное unsigned.
Чего на чего умножили - не понять. 16 разрядов до 18 надо размножить. как не понятно.
Код умножили на код. Код получили. Куда его потом засунуть. Как объявить.
На 6 рисунке надо полагать обещают на входе signed - на выходе signed.
Значит надо верить. И в лоб делать. (Про знак придется откатить. Анализировать разбивку вектора по макросам - я не математик.) Причем когда текстового описания коснулись в последующих примерах, числа без знака легли на этот макрос.
А когда на пальцах стали объснять
For example,
1111 1100 = -4
× 0000 0100 = +4
1111 0000 = -16
разрядную сетку по входу и выходу сравняли и в столбик умножили.
Кодом манипулируют в данном случае как числами со знаком. А столбик ничего о числах со знаком или без знака не знает.
Остается спросить по синтезатор. Неужели он сам не может оперируя signed или unsigned корректно разложить умножитель по этим макросам, или на худой конец ip генератор применить.
Go to the top of the page
 
+Quote Post
0xFF
сообщение Dec 11 2008, 11:18
Сообщение #17


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

Группа: Свой
Сообщений: 131
Регистрация: 9-01-06
Пользователь №: 12 984



Цитата(sazh @ Dec 10 2008, 19:54) *
.A({1'b0,a[16:0]}), // 18-bit multiplier input
знак - это a[16], им и надо дополнять. Полученный результат signed. знак у него это святое. Вы же дальше разрядностью играете, суммируете, урезаете и т.д. понятие signed всегда присутствует и в параметрах умножителя (потому что разрядность по входам и выходу разная) и при описании сумматоров, если разрядная сетка меняется (Вы все это на откуп синтезатора отдали)


я же вам написал, в приложенном коде реализована схема показаанная на рис.6
, а не на рис.5. И если вы прочитали по диагонали то наверное упустили из виду что это умножитель 35х35. Т.е mult70[69:0] = a[34:0]*b[34:0].

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

module mult_35x35( input [34:0] a, input [34:0] b, output [69:0] mult70);
......
.....
....
endmodule

Цитата(sazh @ Dec 10 2008, 19:54) *
Посмотрел документ. Одни вопросы и непонятки. Рисунок 5. Умножитель 22х16. На одной веточке скромное unsigned.
Чего на чего умножили - не понять. 16 разрядов до 18 надо размножить. как не понятно.
Код умножили на код. Код получили. Куда его потом засунуть. Как объявить.

если принять во внимание, что нижний умножитель легко и протсто реализуем на простой логике, то
вот так экономят на примитивах типа MULT18x18

Цитата(sazh @ Dec 10 2008, 19:54) *
Остается спросить по синтезатор. Неужели он сам не может оперируя signed или unsigned корректно разложить умножитель по этим макросам, или на худой конец ip генератор применить.

может конечно.... smile.gif , и следует применять, там где это оправдано

Успехов
Go to the top of the page
 
+Quote Post

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

 


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


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