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

LUT6 / LUT5 в новых Ксайлинсах не дали никакого выигрыша в сравнении с LUT4 Латиса

удивительно, я рассчитывал на значительное улучшение, раза в полтора...

притом, что стоимость даже спартана-7 с равным числом ЛУТов раза в 3 больше, я уже не говорю про артиксы и цинки

 

вобщем понятно, что надо проект переделывать, запускать на более высокой частоте и т.п. чтобы были видны преимущества Ксайлинсов, но то что простой код упаковывается одинаково в LUT4 и LUT6/5 - как-то неожиданно...

или проект такой попался?

 

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


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

Приветствую!

удивительно, я рассчитывал на значительное улучшение, раза в полтора...

притом, что стоимость даже спартана-7 с равным числом ЛУТов раза в 3 больше, я уже не говорю про артиксы и цинки

 

вобщем понятно, что надо проект переделывать, запускать на более высокой частоте и т.п. чтобы были видны преимущества Ксайлинсов, но то что простой код упаковывается одинаково в LUT4 и LUT6/5 - как-то неожиданно...

или проект такой попался?

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

А вот когда можешь позволить делать что то типа такого

var <= var + arg1 + ( sel1 ? arg2 : arg3) << (arg4[sel2]+arg5[sel3]) - arg6;

и это сразу работает за один такт там где раньше приходилось размазывать по конвейеру на 2-3 такта то тогда начинаешь ленится понимать разницу.

 

Удачи! Rob.

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


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

А вот когда можешь позволить делать что то типа такого

var <= var + arg1 + ( sel1 ? arg2 : arg3) << (arg4[sel2]+arg5[sel3]) - arg6;

и это сразу работает за один такт там где раньше приходилось размазывать по конвейеру на 2-3 такта то тогда начинаешь ленится понимать разницу.

и на какой частоте это разводится?

Какая размерность?

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


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

дизайн без архитектурной привязки - кусок ниже, то есть если от такого кода не ожидать выигрыша, то от какого тогда?

тут может еще проблема в вивадовском синтезе/мэпере (еще есть проблема, что плохо упаковывает регистры и LUT-ы - то есть больше 75% занятости синтеза не мапируется) - то есть проблема не в качестве ПЛИС, а в качестве тулзов - я вроде попробовал различные стратегии, которые выбираются в сетингах - без разницы

 

констрейны (тактовая 50МГц, и I/O - заданы в обоих случаях и удовлетворяются)

 

для латтиса - девайс работает, то есть ничего синтез не выбрасывает

 

по результатам синтеза симплифай для латтиса хочет

ORCALUT4: 29449

 

для ксайлинса

+----------+-------+---------------------+

| Ref Name | Used | Functional Category |

+----------+-------+---------------------+

| FDRE | 57093 | Flop & Latch |

| LUT2 | 22509 | LUT |

| LUT3 | 9386 | LUT |

| CARRY4 | 8155 | CarryLogic |

| LUT6 | 6419 | LUT |

| FDSE | 3366 | Flop & Latch |

| LUT4 | 2800 | LUT |

| LUT1 | 2690 | LUT |

| LUT5 | 1181 | LUT |

| FDCE | 64 | Flop & Latch |

| IBUF | 12 | IO |

| OBUF | 9 | IO |

| OBUFT | 7 | IO |

| SRL16E | 2 | Distributed Memory |

| BUFG | 1 | Clock |

+----------+-------+---------------------+

 

пример кода, ну там все примерно так описано, DSP ни там ни там не использовались

 

reg [23:0] phase;

wire [23:0] accum_out = phase + carr_nco_freq;

// assign carr_phase_out = phase[23:16];

 

sine_map_16 sine_map_16_0(.phase(phase[23:20]), .cos(lo_q), .sin(lo_i) );

 

always @(posedge clk)

if (clear)

phase <= 24'b0;

else

phase <= accum_out;

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


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

Приветствую!

 

дизайн без архитектурной привязки - кусок ниже, то есть если от такого кода не ожидать выигрыша, то от какого тогда?

пример кода, ну там все примерно так описано, DSP ни там ни там не использовались

[/code]

reg [23:0] phase;

wire [23:0] accum_out = phase + carr_nco_freq;

// assign carr_phase_out = phase[23:16];

 

sine_map_16 sine_map_16_0(.phase(phase[23:20]), .cos(lo_q), .sin(lo_i) );

 

always @(posedge clk)

if (clear)

phase <= 24'b0;

else

phase <= accum_out;

А счего тут выйгрыш будет?  Простой сумматор  - занимает LUT/carry/reg на bit. Разницы нет что LUT6 что LUT4.

На взгляд вроде можно profit полчить если в один LUT воткнуть две таблицы (по 16 слов) для sin/cos. Но надо шаманить со способом определения этих таблиц для синтеза.

 

Удачи! Rob.

 

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


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

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

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

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

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

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

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

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

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

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