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

 
 
 
Reply to this topicStart new topic
> Проблема с умножителями в ISE
_Anatoliy
сообщение Jan 19 2011, 08:58
Сообщение #1


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Всего в проекте задействовано около 800 умножителей dsp48,ясно что в 5vsx50 такого количества нет и развести в лоб нет возможности. Поэтому синтезатору указываю в опции Use DSP block режим auto.Становится немного легче,но не совсем.
Код
Selected Device : 5vsx50tff665-3


Slice Logic Utilization:
Number of Slice Registers:           21418  out of  32640    65%  
Number of Slice LUTs:                26010  out of  32640    79%  
    Number used as Logic:             25921  out of  32640    79%  
    Number used as Memory:               89  out of  12480     0%  
       Number used as SRL:               89

Slice Logic Distribution:
Number of LUT Flip Flop pairs used:  32349
   Number with an unused Flip Flop:   10931  out of  32349    33%  
   Number with an unused LUT:          6339  out of  32349    19%  
   Number of fully used LUT-FF pairs: 15079  out of  32349    46%  
   Number of unique control sets:         4

IO Utilization:
Number of IOs:                         130
Number of bonded IOBs:                 130  out of    360    36%  

Specific Feature Utilization:
Number of BUFG/BUFGCTRLs:                2  out of     32     6%  
Number of DSP48Es:                     374  out of    288   129% (*)

Запас по ресурсам вроде бы есть , а дефицит DSP48 29%.Может что ещё можно подкрутить?
Go to the top of the page
 
+Quote Post
disel
сообщение Jan 19 2011, 09:08
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410



А в режиме SIMD их нельзя использовать? Но это только вручную.
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Jan 19 2011, 09:24
Сообщение #3


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(disel @ Jan 19 2011, 11:08) *
А в режиме SIMD их нельзя использовать? Но это только вручную.


А можно немного подробней?Я с ISE ещё не настолько подружился laughing.gif
Go to the top of the page
 
+Quote Post
disel
сообщение Jan 19 2011, 09:32
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410



Цитата(_Anatoliy @ Jan 19 2011, 12:24) *
А можно немного подробней?Я с ISE ещё не настолько подружился laughing.gif


Да ИСЕ тут не причем. Это особенность dsp48 в виртекс5-6. SIMD - Single Instruction, Multiple Data. 48- битный аккумулятор\сумматор может использоваться как два 24-битных, или как четыре 12-битных.

Подробно в уг193 написано.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Jan 19 2011, 09:37
Сообщение #5


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

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Если вы используете DSP48 как примитив - ISE его в логику никогда не разложит при любых настройках. Чтобы ISE сам выбирал способ реализации умножителя необходимо описывать умножение в HDL коде.
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Jan 19 2011, 10:22
Сообщение #6


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(DmitryR @ Jan 19 2011, 11:37) *
Если вы используете DSP48 как примитив - ISE его в логику никогда не разложит при любых настройках. Чтобы ISE сам выбирал способ реализации умножителя необходимо описывать умножение в HDL коде.

Как же я смогу использовать DSP48 как примитив при таком их количестве?
В HDL коде множу.
Код
        for i in 0 to 15 loop
            SumA1(i) <= SigTapA(2*i+1) * CoeffHilb(i) - SigTapA(63-2*i) * CoeffHilb(i);
            SumB1(i) <= SigTapB(2*i+1) * CoeffHilb(i) - SigTapB(63-2*i) * CoeffHilb(i);
            SumC1(i) <= SigTapC(2*i+1) * CoeffHilb(i) - SigTapC(63-2*i) * CoeffHilb(i);
            SumD1(i) <= SigTapD(2*i+1) * CoeffHilb(i) - SigTapD(63-2*i) * CoeffHilb(i);
        end loop;



Или вы о другом?

Цитата(disel @ Jan 19 2011, 11:32) *
Да ИСЕ тут не причем. Это особенность dsp48 в виртекс5-6. SIMD - Single Instruction, Multiple Data. 48- битный аккумулятор\сумматор может использоваться как два 24-битных, или как четыре 12-битных.

Подробно в уг193 написано.

Ясно,спасибо.Аккумулятор здесь ни при чём, мне собственно умножений 16 битных нужно около 800.А умножитель в DSP-48 всего один.
Непонятно почему оставшаяся логика не используется под умножители.
Go to the top of the page
 
+Quote Post
Fast
сообщение Jan 19 2011, 11:19
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839



на более высокой частоте умножать не получится ?
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Jan 19 2011, 11:22
Сообщение #8


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

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(_Anatoliy @ Jan 19 2011, 13:22) *
Непонятно почему оставшаяся логика не используется под умножители.

Возможо это связано с тем, что ее все равно будет недостаточно. Умножитель 16*16 занимает 280 LUT. Вам их надо 374-288=86, или 24000 LUT. У вас столько нет свободных даже близко, то есть не влезет очевидно даже если в умножителях усекать разрадность результата.
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Jan 19 2011, 11:39
Сообщение #9


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(Fast @ Jan 19 2011, 13:19) *
на более высокой частоте умножать не получится ?

А зачем?У меня и так частота тактов 300МГц.

Цитата(DmitryR @ Jan 19 2011, 13:22) *
Возможо это связано с тем, что ее все равно будет недостаточно. Умножитель 16*16 занимает 280 LUT. Вам их надо 374-288=86, или 24000 LUT. У вас столько нет свободных даже близко, то есть не влезет очевидно даже если в умножителях усекать разрадность результата.

Спасибо!Не сообразил сразу посчитать ресурсоёмкость одного умножителя.
Видно придётся на Альтеру перескакивать wacko.gif
В EP3SE50F484C2 весь проект занимает около 50%.
Go to the top of the page
 
+Quote Post
vetal
сообщение Jan 19 2011, 11:57
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Рабочую частоту блока с умножителями огласите. Как правильно заметил Fast - подняв частоту в 2 раза можно уменьшить кол-во умножителей.
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Jan 19 2011, 12:04
Сообщение #11


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(vetal @ Jan 19 2011, 13:57) *
Рабочую частоту блока с умножителями огласите. Как правильно заметил Fast - подняв частоту в 2 раза можно уменьшить кол-во умножителей.

Частота уже озвучена в предыдущем посте. Этот вариант неприемлем.Реал-тайм.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Jan 19 2011, 12:34
Сообщение #12


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

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(_Anatoliy @ Jan 19 2011, 14:39) *
В EP3SE50F484C2 весь проект занимает около 50%.

Вам надо быть очень внимательным и приложить все усилия, что бы понять, почему один и тот же код настолько по-разному реализуется на разных архитектурах. Также предлагаю проанализировать an306, в котором сказано, что в сравнимый по емкости EP2S60 помещается 325 умножителей на логике. То есть в EP3SE50 800 умножителей не должны лечь вообще.

Вероятнее всего у вас Квартус при компиляции выкидывает более половины логики, и судя по расчетам ISE тоже что-то выкидывает (у вас из 800 умножителей в DSP48 легли 374, а оставшиеся 426 заняли 26000 LUT, то есть 61 LUT на умножитель, что мне видится нереальным).

UPD
Цитата(_Anatoliy @ Jan 19 2011, 13:22) *
Код
        for i in 0 to 15 loop
            SumA1(i) <= SigTapA(2*i+1) * CoeffHilb(i) - SigTapA(63-2*i) * CoeffHilb(i);
            SumB1(i) <= SigTapB(2*i+1) * CoeffHilb(i) - SigTapB(63-2*i) * CoeffHilb(i);
            SumC1(i) <= SigTapC(2*i+1) * CoeffHilb(i) - SigTapC(63-2*i) * CoeffHilb(i);
            SumD1(i) <= SigTapD(2*i+1) * CoeffHilb(i) - SigTapD(63-2*i) * CoeffHilb(i);
        end loop;

Если это записать как
Код
        for i in 0 to 15 loop
            SumA1(i) <= (SigTapA(2*i+1) - SigTapA(63-2*i)) * CoeffHilb(i);
            SumB1(i) <= (SigTapB(2*i+1) - SigTapB(63-2*i)) * CoeffHilb(i);
            SumC1(i) <= (SigTapC(2*i+1) - SigTapC(63-2*i)) * CoeffHilb(i);
            SumD1(i) <= (SigTapD(2*i+1) - SigTapD(63-2*i)) * CoeffHilb(i);
        end loop;

то возможно что-то изменится. Например выяснится, что ISE такую оптимизацию сам сделать не может, а Квартус - может.
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Jan 19 2011, 13:12
Сообщение #13


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(DmitryR @ Jan 19 2011, 14:34) *


Спасибо!
Невнимательность меня когда нибудь погубит.
Действительно надо глубже поисследовать ситуацию.

Цитата(DmitryR @ Jan 19 2011, 13:22) *


Вы правы, xst не умеет делать такие финты(или с опциями нужно ещё поколдовать).
Вот результат:
Код
Selected Device : 5vsx50tff665-3


Slice Logic Utilization:
Number of Slice Registers:           20640  out of  32640    63%  
Number of Slice LUTs:                22107  out of  32640    67%  
    Number used as Logic:             22018  out of  32640    67%  
    Number used as Memory:               89  out of  12480     0%  
       Number used as SRL:               89

Slice Logic Distribution:
Number of LUT Flip Flop pairs used:  29928
   Number with an unused Flip Flop:    9288  out of  29928    31%  
   Number with an unused LUT:          7821  out of  29928    26%  
   Number of fully used LUT-FF pairs: 12819  out of  29928    42%  
   Number of unique control sets:         4

IO Utilization:
Number of IOs:                         130
Number of bonded IOBs:                 130  out of    360    36%  

Specific Feature Utilization:
Number of BUFG/BUFGCTRLs:                2  out of     32     6%  
Number of DSP48Es:                     162  out of    288    56%


Правда появились минусовые слэки,но это уже другая тема.
Спасибо!
Go to the top of the page
 
+Quote Post

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

 


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


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