Перейти к содержанию
    

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в режиме SIMD их нельзя использовать? Но это только вручную.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если вы используете 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 всего один.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на более высокой частоте умножать не получится ?

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

 

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Спасибо!

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

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

 

 

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

 

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

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...