Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LUT6 / LUT5 в новых Ксайлинсах не дали никакого выигрыша в сравнении с LUT4 Латиса
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
yes
удивительно, я рассчитывал на значительное улучшение, раза в полтора...
притом, что стоимость даже спартана-7 с равным числом ЛУТов раза в 3 больше, я уже не говорю про артиксы и цинки

вобщем понятно, что надо проект переделывать, запускать на более высокой частоте и т.п. чтобы были видны преимущества Ксайлинсов, но то что простой код упаковывается одинаково в LUT4 и LUT6/5 - как-то неожиданно...
или проект такой попался?
jojo
Преимущество или не реализовано, или его нет в данном случае.
RobFPGA
Приветствую!
Цитата(yes @ Aug 14 2018, 19:50) *
удивительно, я рассчитывал на значительное улучшение, раза в полтора...
притом, что стоимость даже спартана-7 с равным числом ЛУТов раза в 3 больше, я уже не говорю про артиксы и цинки

вобщем понятно, что надо проект переделывать, запускать на более высокой частоте и т.п. чтобы были видны преимущества Ксайлинсов, но то что простой код упаковывается одинаково в LUT4 и LUT6/5 - как-то неожиданно...
или проект такой попался?
Как раз ничего удивительного - если изначально дизайн делался с расчетом на целевую архитектуру (в первую очередь с ограничением сложности и числа слоев логики между регистрами) то разница будет небольшой.
А вот когда можешь позволить делать что то типа такого
Код
var <= var + arg1 + ( sel1 ? arg2 : arg3) << (arg4[sel2]+arg5[sel3]) - arg6;
и это сразу работает за один такт там где раньше приходилось размазывать по конвейеру на 2-3 такта то тогда начинаешь ленится понимать разницу.

Удачи! Rob.
Tpeck
Цитата(RobFPGA @ Aug 15 2018, 10:43) *
А вот когда можешь позволить делать что то типа такого
Код
var <= var + arg1 + ( sel1 ? arg2 : arg3) << (arg4[sel2]+arg5[sel3]) - arg6;
и это сразу работает за один такт там где раньше приходилось размазывать по конвейеру на 2-3 такта то тогда начинаешь ленится понимать разницу.

и на какой частоте это разводится?
Какая размерность?
yes
дизайн без архитектурной привязки - кусок ниже, то есть если от такого кода не ожидать выигрыша, то от какого тогда?
тут может еще проблема в вивадовском синтезе/мэпере (еще есть проблема, что плохо упаковывает регистры и 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;
RobFPGA
Приветствую!

Цитата(yes @ Aug 15 2018, 14:56) *
дизайн без архитектурной привязки - кусок ниже, то есть если от такого кода не ожидать выигрыша, то от какого тогда?
пример кода, ну там все примерно так описано, 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;
[code]
А счего тут выйгрыш будет? Простой сумматор - занимает LUT/carry/reg на bit. Разницы нет что LUT6 что LUT4.
На взгляд вроде можно profit полчить если в один LUT воткнуть две таблицы (по 16 слов) для sin/cos. Но надо шаманить со способом определения этих таблиц для синтеза.

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