|
Каскадирование умножителей в ПЛИС (Spartan-3) |
|
|
|
Dec 9 2008, 23:09
|
Группа: Участник
Сообщений: 12
Регистрация: 6-10-08
Пользователь №: 40 731

|
Подскажите пожалуйсто, может кто уже сталкивался. Как можно выполнить каскадирование умножителей в ПЛИС семейства Spartan-3. Там есть блоки умножителей MULT18X18, MULT18X18SIO, последний собственно и предназаначен для выполнеия каскадирования. но что куда заводить не понятно. Нужно выполнять перемножение чисел большей разрядности чем 18 бит.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 16)
|
Dec 10 2008, 02:00
|
Местный
  
Группа: Свой
Сообщений: 224
Регистрация: 22-06-04
Из: Новосибирск
Пользователь №: 87

|
Цитата(omen @ Dec 10 2008, 03:09)  Подскажите пожалуйсто, может кто уже сталкивался. Как можно выполнить каскадирование умножителей в ПЛИС семейства Spartan-3. Там есть блоки умножителей MULT18X18, MULT18X18SIO, последний собственно и предназаначен для выполнеия каскадирования. но что куда заводить не понятно. Нужно выполнять перемножение чисел большей разрядности чем 18 бит. А воспользоваться Xilinx CORE GEN не хотите? Он сам все правильно сгенерит для заданной разряднояти.
|
|
|
|
|
Dec 10 2008, 08:24
|
Злополезный
   
Группа: Свой
Сообщений: 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 у Вас останутся вопросы, уточните этот термин.
|
|
|
|
|
Dec 10 2008, 08:25
|

Местный
  
Группа: Свой
Сообщений: 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 мегабайт )
Кол-во скачиваний: 673page 45: 35 x 35 Multiplier Model
--------------------
Чтoбы yзнaть, кaкaя дopoгa впepeди, cпpocи тex, ктo пo нeй вoзвpaщaeтcя ©
|
|
|
|
|
Dec 10 2008, 10:29
|
Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 9-01-06
Пользователь №: 12 984

|
Цитата(andrew_b @ Dec 10 2008, 14:09)  Я щетаю, что Кореген тут лишнее звено. Синтезатор сам способен собрать большой умножитель из более мелких. Вот только при умножении со знаком могут возникнуть проблемы В приложении умножение на Spartan 3 со знаком, запаздывание если не ошибаюсь 4 такта, закоментированные блоки умножения для 3е серии. для них запаздывание на 5 тактов, из-за регистровых выходов Удачи
Прикрепленные файлы
mult.txt ( 5.71 килобайт )
Кол-во скачиваний: 99
|
|
|
|
|
Dec 10 2008, 10:56
|
Группа: Участник
Сообщений: 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.  о вот нашел как загрузить (((
Эскизы прикрепленных изображений
|
|
|
|
|
Dec 10 2008, 12:14
|
Участник

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

|
Цитата(andrew_b @ Dec 10 2008, 16:08)  Умножитель не знает ничего про знак. Он умножает двоичные числа и не занимается их интерпретацией. Извините что вклиниваюсь, но вообще то MULT18X18 - это знаковый 18X18 аппаратный умножитель
|
|
|
|
|
Dec 10 2008, 12:41
|
Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 9-01-06
Пользователь №: 12 984

|
Цитата(andrew_b @ Dec 10 2008, 15:08)  Умножитель не знает ничего про знак. Он умножает двоичные числа и не занимается их интерпретацией. неправильное утверждение, всё он знает Цитата(Kedin @ Dec 10 2008, 16:14)  Извините что вклиниваюсь, но вообще то MULT18X18 - это знаковый 18X18 аппаратный умножитель правильно
|
|
|
|
|
Dec 10 2008, 14:00
|
Участник

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

|
Цитата(0xFF @ Dec 10 2008, 15:41)  неправильное утверждение, всё он знает правильно Просто умножитель 18x18 состоит из беззнакового умножителя 17x17 (который умножает модули входных значений) и логики формирования знака результата на основании знаков множимых. Все это я так понимаю, объединено внутри слайса DSP48 (или mult18x18). Поэтому с точки зрения пользователя умножение знаковое, но внутри умножителя оно конечно беззнаковое + логика знака.
|
|
|
|
|
Dec 10 2008, 14:03
|
Злополезный
   
Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188

|
Цитата(omen @ Dec 10 2008, 14:56)  Спасибо за доку, просто я почему то нашел только xapp467_vhdl, а там только примеры на vhdl, описалова нету. У Xilinx некоторое время назад слегка изменилась система поиска (на мой взгляд из плохой стала просто отвратительной), и для того, чтобы найти какой-либо XAPP, необходимо приписывать в конце расширение файла (.pdf). Т.е. поиск необходимо проводить было не XAPP467 (в таком случае будет найдено то, что на него ссылается), а XAPP467.PDF.
|
|
|
|
|
Dec 10 2008, 14:33
|
Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Dec 10 2008, 15:21
|
Частый гость
 
Группа: Свой
Сообщений: 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 уважением
|
|
|
|
|
Dec 10 2008, 15:54
|
Гуру
     
Группа: Свой
Сообщений: 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 генератор применить.
|
|
|
|
|
Dec 11 2008, 11:18
|
Частый гость
 
Группа: Свой
Сообщений: 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 генератор применить. может конечно....  , и следует применять, там где это оправдано Успехов
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|