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

|
Подскажите пожалуйсто, может кто уже сталкивался. Как можно выполнить каскадирование умножителей в ПЛИС семейства Spartan-3. Там есть блоки умножителей MULT18X18, MULT18X18SIO, последний собственно и предназаначен для выполнеия каскадирования. но что куда заводить не понятно. Нужно выполнять перемножение чисел большей разрядности чем 18 бит.
|
|
|
|
|
 |
Ответов
|
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, 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, 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 генератор применить. может конечно....  , и следует применять, там где это оправдано Успехов
|
|
|
|
Сообщений в этой теме
omen Каскадирование умножителей в ПЛИС (Spartan-3) Dec 9 2008, 23:09 ClockworkOrange Цитата(Apast @ Dec 10 2008, 05:00) А восп... Dec 10 2008, 08:25  Костян Цитата(ClockworkOrange @ Dec 10 2008, 06... Dec 10 2008, 08:31   andrew_b Цитата(0xFF @ Dec 10 2008, 14:29) Вот тол... Dec 10 2008, 11:08    Kedin Цитата(andrew_b @ Dec 10 2008, 16:08) Умн... Dec 10 2008, 12:14 Boris_TS Цитата(omen @ Dec 10 2008, 03:09) Подскаж... Dec 10 2008, 08:24 omen Спасибо за ответы.
ЦитатаЕсть такой документ: XAP... Dec 10 2008, 10:56 Boris_TS Цитата(omen @ Dec 10 2008, 14:56) Спасибо... Dec 10 2008, 14:03 0xFF Цитата(andrew_b @ Dec 10 2008, 15:08) Умн... Dec 10 2008, 12:41 Singer Цитата(0xFF @ Dec 10 2008, 15:41) неправи... Dec 10 2008, 14:00
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|