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

|
Подскажите пожалуйсто, может кто уже сталкивался. Как можно выполнить каскадирование умножителей в ПЛИС семейства Spartan-3. Там есть блоки умножителей MULT18X18, MULT18X18SIO, последний собственно и предназаначен для выполнеия каскадирования. но что куда заводить не понятно. Нужно выполнять перемножение чисел большей разрядности чем 18 бит.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
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 уважением
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|