Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с умножителями в ISE
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
_Anatoliy
Всего в проекте задействовано около 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%.Может что ещё можно подкрутить?
disel
А в режиме SIMD их нельзя использовать? Но это только вручную.
_Anatoliy
Цитата(disel @ Jan 19 2011, 11:08) *
А в режиме SIMD их нельзя использовать? Но это только вручную.


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


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

Подробно в уг193 написано.
DmitryR
Если вы используете DSP48 как примитив - ISE его в логику никогда не разложит при любых настройках. Чтобы ISE сам выбирал способ реализации умножителя необходимо описывать умножение в HDL коде.
_Anatoliy
Цитата(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 всего один.
Непонятно почему оставшаяся логика не используется под умножители.
Fast
на более высокой частоте умножать не получится ?
DmitryR
Цитата(_Anatoliy @ Jan 19 2011, 13:22) *
Непонятно почему оставшаяся логика не используется под умножители.

Возможо это связано с тем, что ее все равно будет недостаточно. Умножитель 16*16 занимает 280 LUT. Вам их надо 374-288=86, или 24000 LUT. У вас столько нет свободных даже близко, то есть не влезет очевидно даже если в умножителях усекать разрадность результата.
_Anatoliy
Цитата(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%.
vetal
Рабочую частоту блока с умножителями огласите. Как правильно заметил Fast - подняв частоту в 2 раза можно уменьшить кол-во умножителей.
_Anatoliy
Цитата(vetal @ Jan 19 2011, 13:57) *
Рабочую частоту блока с умножителями огласите. Как правильно заметил Fast - подняв частоту в 2 раза можно уменьшить кол-во умножителей.

Частота уже озвучена в предыдущем посте. Этот вариант неприемлем.Реал-тайм.
DmitryR
Цитата(_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 такую оптимизацию сам сделать не может, а Квартус - может.
_Anatoliy
Цитата(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%


Правда появились минусовые слэки,но это уже другая тема.
Спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.