Jump to content

    
Sign in to follow this  
_sda

Проблема с умножителями в ISE

Recommended Posts

Всего в проекте задействовано около 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%.Может что ещё можно подкрутить?

Share this post


Link to post
Share on other sites
А в режиме SIMD их нельзя использовать? Но это только вручную.

 

А можно немного подробней?Я с ISE ещё не настолько подружился :laughing:

Share this post


Link to post
Share on other sites
А можно немного подробней?Я с ISE ещё не настолько подружился :laughing:

 

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

 

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

Share this post


Link to post
Share on other sites

Если вы используете DSP48 как примитив - ISE его в логику никогда не разложит при любых настройках. Чтобы ISE сам выбирал способ реализации умножителя необходимо описывать умножение в HDL коде.

Share this post


Link to post
Share on other sites
Если вы используете 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;

 

 

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

 

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

 

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

Ясно,спасибо.Аккумулятор здесь ни при чём, мне собственно умножений 16 битных нужно около 800.А умножитель в DSP-48 всего один.

Непонятно почему оставшаяся логика не используется под умножители.

Share this post


Link to post
Share on other sites
Непонятно почему оставшаяся логика не используется под умножители.

Возможо это связано с тем, что ее все равно будет недостаточно. Умножитель 16*16 занимает 280 LUT. Вам их надо 374-288=86, или 24000 LUT. У вас столько нет свободных даже близко, то есть не влезет очевидно даже если в умножителях усекать разрадность результата.

Share this post


Link to post
Share on other sites
на более высокой частоте умножать не получится ?

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

 

Возможо это связано с тем, что ее все равно будет недостаточно. Умножитель 16*16 занимает 280 LUT. Вам их надо 374-288=86, или 24000 LUT. У вас столько нет свободных даже близко, то есть не влезет очевидно даже если в умножителях усекать разрадность результата.

Спасибо!Не сообразил сразу посчитать ресурсоёмкость одного умножителя.

Видно придётся на Альтеру перескакивать :wacko:

В EP3SE50F484C2 весь проект занимает около 50%.

Share this post


Link to post
Share on other sites

Рабочую частоту блока с умножителями огласите. Как правильно заметил Fast - подняв частоту в 2 раза можно уменьшить кол-во умножителей.

Share this post


Link to post
Share on other sites
Рабочую частоту блока с умножителями огласите. Как правильно заметил Fast - подняв частоту в 2 раза можно уменьшить кол-во умножителей.

Частота уже озвучена в предыдущем посте. Этот вариант неприемлем.Реал-тайм.

Share this post


Link to post
Share on other sites
В EP3SE50F484C2 весь проект занимает около 50%.

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

 

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

 

UPD

        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 такую оптимизацию сам сделать не может, а Квартус - может.

Share this post


Link to post
Share on other sites

 

Спасибо!

Невнимательность меня когда нибудь погубит.

Действительно надо глубже поисследовать ситуацию.

 

 

Вы правы, 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%

 

Правда появились минусовые слэки,но это уже другая тема.

Спасибо!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this