yes 5 14 августа, 2018 Опубликовано 14 августа, 2018 · Жалоба удивительно, я рассчитывал на значительное улучшение, раза в полтора... притом, что стоимость даже спартана-7 с равным числом ЛУТов раза в 3 больше, я уже не говорю про артиксы и цинки вобщем понятно, что надо проект переделывать, запускать на более высокой частоте и т.п. чтобы были видны преимущества Ксайлинсов, но то что простой код упаковывается одинаково в LUT4 и LUT6/5 - как-то неожиданно... или проект такой попался? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jojo 0 14 августа, 2018 Опубликовано 14 августа, 2018 · Жалоба Преимущество или не реализовано, или его нет в данном случае. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 15 августа, 2018 Опубликовано 15 августа, 2018 · Жалоба Приветствую! удивительно, я рассчитывал на значительное улучшение, раза в полтора... притом, что стоимость даже спартана-7 с равным числом ЛУТов раза в 3 больше, я уже не говорю про артиксы и цинки вобщем понятно, что надо проект переделывать, запускать на более высокой частоте и т.п. чтобы были видны преимущества Ксайлинсов, но то что простой код упаковывается одинаково в LUT4 и LUT6/5 - как-то неожиданно... или проект такой попался? Как раз ничего удивительного - если изначально дизайн делался с расчетом на целевую архитектуру (в первую очередь с ограничением сложности и числа слоев логики между регистрами) то разница будет небольшой. А вот когда можешь позволить делать что то типа такого var <= var + arg1 + ( sel1 ? arg2 : arg3) << (arg4[sel2]+arg5[sel3]) - arg6; и это сразу работает за один такт там где раньше приходилось размазывать по конвейеру на 2-3 такта то тогда начинаешь ленится понимать разницу. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tpeck 0 15 августа, 2018 Опубликовано 15 августа, 2018 · Жалоба А вот когда можешь позволить делать что то типа такого var <= var + arg1 + ( sel1 ? arg2 : arg3) << (arg4[sel2]+arg5[sel3]) - arg6; и это сразу работает за один такт там где раньше приходилось размазывать по конвейеру на 2-3 такта то тогда начинаешь ленится понимать разницу. и на какой частоте это разводится? Какая размерность? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 15 августа, 2018 Опубликовано 15 августа, 2018 · Жалоба дизайн без архитектурной привязки - кусок ниже, то есть если от такого кода не ожидать выигрыша, то от какого тогда? тут может еще проблема в вивадовском синтезе/мэпере (еще есть проблема, что плохо упаковывает регистры и 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 27 15 августа, 2018 Опубликовано 15 августа, 2018 · Жалоба Приветствую! дизайн без архитектурной привязки - кусок ниже, то есть если от такого кода не ожидать выигрыша, то от какого тогда? пример кода, ну там все примерно так описано, 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться