des00 25 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба Всем доброго. Кто в курсе, проясните мне такой момент. Есть артикс самый толстый, есть проект на 100к логики (75% этого чипа). Проект вылизан в симуляторе, написан без использования примитивов, прекрасно работает в арии, без каких либо манипуляций. Теперь про виваду версия 2016.2, проект не работает. Начинаю разбираться, я первый раз вижу софт, который выкидывает шины данных. Т.е. есть сигнал 80 бит, он из него делает 67 и даже слова не говорит. Или есть интерфейс 8ми битный, он его обрезал до 4-х бит, как будто так и надо. Уже прибито гвоздями порядка 150 сигналов в проекте (keep/don't touch). При этом интерфейсы, о которых идет речь работают на частоте всего 120МГц. Или другой пример, есть два модуля и стыковая логика в топе. Несмотря на режим сборки с сохранением иерархии, часть сигналов стыковой логики оказывается внутри модулей, хотя ему жестко сказано - не трогать. Эта у меня дистриб кривой, лицензия не та или у всех так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба боюсь, что это coding style. вивада понимает SystemVerilog ещё хуже, чем квартус. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба боюсь, что это coding style. вивада понимает SystemVerilog ещё хуже, чем квартус. coding style примитивный. можно посмотреть в моих проектах что выложены. Вот я низачто не поверю, что в подобном коде (то место где он из 80 бит сделал 67) есть логическое обоснование его поведению input logic [79 : 0] idat; //------------------------------------------------------------------------------------------------------ // output stream data mux //------------------------------------------------------------------------------------------------------ logic [79 : 0] dat_buffer; ............... always_ff @(posedge iclk) begin if (iclkena) begin // muxer if (byte_clock) begin if (fas_req) dat_buffer[7 : 0] <= {cSTATIC_PREA, trf_cnt.val[3 : 0]}; else if (sfas_req) dat_buffer[7 : 0] <= trf_cnt.done ? {4'b1000, acm_err, 3'b111} : 8'b1_0000_000; else if (oserv_req) dat_buffer[7 : 0] <= iserv_dat; else if (acm_req) dat_buffer[7 : 0] <= acm; else if (otele_req) dat_buffer[7 : 0] <= itele_dat; else if (dat_req) dat_buffer <= oreq ? idat : (dat_buffer >> 8); // вот тут опачки и часть шины данных потерялась end end end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 3 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба в виваде есть netlist flow, по-моему. то есть synplify. ну это если лицензии, конечно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба что XST, что vivado, очень жестко подходят к оптимизации по ресурсам. кроме как попробовать крутить крутилки, на ум ничего не приходит: keep_equivalent_registers resource_sharing keep_hierarchy shreg_extract ну либо пользовать synplify. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба что XST, что vivado, очень жестко подходят к оптимизации по ресурсам. По сравнению с Qurtus в начале подобные вещи кажутся жестью, но потом привыкаешь. Мало того, что он оптимизирует, он еще и переименовывает сигналы и тусует их по иерархии - вполне нормальна ситуация, когда сигналы из подмодулей в иерархии уровня 2-3 го оказываются в топовом. И атрибуты типа /*synthesis syn_hier="hard"*/; или настройка кипиерархи не особо помогают. Ключевые сигналы приходится по ИЛИ вытягивать на тестовый пин - тогда он их не оптимизирует и названия не меняет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба в виваде есть netlist flow, по-моему. то есть synplify. ну это если лицензии, конечно у меня дошло до того, что я модули завернул в обертки с фиксированными портами и без параметров, поставил Out Of Synthesis на каждую, отдельно каждую отсинтезировал. Проверил глазами схематик. А при сборке все равно части логики, которые есть в схематиках партициях пропадают или перемещаются по чипу. Причем ладно бы логика исчезновения прослеживалась, а то ощущение что все по генератору случайных чисел. keep_equivalent_registers resource_sharing keep_hierarchy shreg_extract Все это уже отключено, ему стоит запрет на шаг влево, шаг вправо, критические сигналы прибиты молотком, и все равно из проекта исчезает часть логики. По сравнению с Qurtus в начале подобные вещи кажутся жестью, но потом привыкаешь. Мало того, что он оптимизирует, он еще и переименовывает сигналы и тусует их по иерархии - вполне нормальна ситуация, когда сигналы из подмодулей в иерархии уровня 2-3 го оказываются в топовом. И атрибуты типа /*synthesis syn_hier="hard"*/; или настройка кипиерархи не особо помогают. Ключевые сигналы приходится по ИЛИ вытягивать на тестовый пин - тогда он их не оптимизирует и названия не меняет. ну т.е. я не один такой. На уме крутиться только одна фраза "Г...но оно и в африке г...но". Купился на 250 баксов выигрыша закупочной цены, по сравнению с арией. Теперь разгребать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Inanity 1 9 августа, 2016 Опубликовано 9 августа, 2016 (изменено) · Жалоба Если у вас выкидывается часть шины, то скорее всего она реально нигде не использована, иначе быть не может. Может этот кусок шины как-то дико в другом месте не очевидным для вас способом мульплексируется. Я, правда, не знаю System Verilog, но не может Vivado генерировать неработающую схему, иначе с ней не реально было бы работать вообще. И никакие настройки синтезатора не должны ломать логику работы схемы (эти настройки влияют только на ресурсы и времянку). Все это уже отключено, ему стоит запрет на шаг влево, шаг вправо, критические сигналы прибиты молотком, и все равно из проекта исчезает часть логики. Что-то я не понимаю, так должно быть включено. Чтобы синтезатор иерархию не ломал включайте keep_hierarchy. Включенный shreg_extract использует FF для регистров (бывает важно для синхронизаторов). Keep_equivalent_registers думаю и так понятно. Resource_sharing оставьте auto (вообще как-то не приходилось менять). Изменено 9 августа, 2016 пользователем Inanity Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба Если у вас выкидывается часть шины, то скорее всего она реально нигде не использована, иначе быть не может. Может этот кусок шины как-то дико в другом месте не очевидным для вас способом мульплексируется. Я, правда, не знаю System Verilog, но не может Vivado генерировать неработающую схему, иначе с ней не реально было бы работать вообще. И никакие настройки синтезатора не должны ломать логику работы схемы (эти настройки влияют только на ресурсы и времянку). Как уже писал в первом сообщении, схема промоделирована и работает в квартусе с полпинка. Урезать она не может, т.к. заполнение шины 80 бит определяется скоростью потока данных и схема работает на полной скорости, когда летят слова по 80 бит на частоте 120МГц. Более того, к данным подшита КРК, которая проверяется до этого модуля и после. До него не валиться, а за ним валиться. И да, синтезатор ломает логику работы. Что-то я не понимаю, так должно быть включено. Чтобы синтезатор иерархию не ломал включайте keep_hierarchy. Включенный shreg_extract использует FF для регистров (бывает важно для синхронизаторов). Keep_equivalent_registers думаю и так понятно. Resource_sharing оставьте auto (вообще как-то не приходилось менять). Я написал что выключены все опции, которые могут заставить синтезатор заниматься самодеятельностью: keep_hierarchy - стоит вручную, в коде, в виде атрибутов на модули. shreg_extract - заменяет FF на SRL, отключено Keep_equivalent_registers - специально сказано, не выкидывай ничего, делай как написано, т.к. есть много одинаковых блочков хлопающих на высокой тактовой и склеивание ресурсов только ухудшит ситуацию. Resource_sharing - тоже сказано - математику не зашаривать т.е. его работа отмапить то что есть, с минимумом мозга и подогнать фанауты под детскую времянку 120/125/250 ЗЫ. поговорил с коллегами хиловодами, они тоже полпроекта прибивают гвоздями. Мягко говоря, я в шоке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба Мягко говоря, я в шоке. дык. подождите, это вам ещё не приходилось в UCF RLOC-и руками вбивать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба подождите, это вам ещё не приходилось в UCF RLOC-и руками вбивать. УГ. На доске в рабочей комнате Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 12 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба Сколько у меня было случаев выбрасывания части шины данных/адреса - всегда или сам был виноват, или логика к этому приводила. Хотя, конечно, до гуру мне далеко, да и на SV я ничего не делал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба Сколько у меня было случаев выбрасывания части шины данных/адреса - всегда или сам был виноват, или логика к этому приводила. Хотя, конечно, до гуру мне далеко, да и на SV я ничего не делал. тут все много интереснее. Для затравки выложу код, который глючит при сборке, на предмет проблем с coding style //------------------------------------------------------------------------------------------------------ // convers 8 bit serv to 2 bit serial stream //------------------------------------------------------------------------------------------------------ logic [3 : 0] serv_val_line; always_ff @(posedge iclk or posedge ireset) begin if (ireset) begin serv_sop <= 1'b0; serv_val_line <= '0; end else if (iclkena) begin serv_sop <= ival & isop; serv_val_line <= ival ? 4'b1111 : (serv_val_line >> 1); end end assign serv_val = serv_val_line[0]; logic [7 : 0] serv_dat_line; always_ff @(posedge iclk) begin if (iclkena) begin serv_dat_line <= ival ? idat : (serv_dat_line >> 2); end end assign serv_dat = serv_dat_line[1 : 0]; //------------------------------------------------------------------------------------------------------ // mux & scramble signal //------------------------------------------------------------------------------------------------------ always_ff @(posedge iclk or posedge ireset) begin if (ireset) framer__ival <= 1'b0; else if (iclkena) framer__ival <= serv_val; end always_ff @(posedge iclk) begin if (iclkena) begin framer__isop <= serv_sop; framer__idat <= serv_dat; end end Прошу всех, проанализировать данный код, на предмет возможных косяков синтеза. ИМХО код прозрачный как слеза младенца. Пришел байт по одиночному стробу - вышло 4 пары одним пакетом. Чуть позже выложу картинку, из чипа скопа Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilya79 0 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба А вам точно нужен асинхронный сброс? Тут в конце https://forums.xilinx.com/t5/7-Series-FPGAs...set/td-p/473746 есть рекомендация по асинхронному сбросу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 августа, 2016 Опубликовано 9 августа, 2016 · Жалоба Ну а теперь, всем кто желает проверить свои телепатические способности. Результат сборки в крутейшей виваде 2016.2, из проекта убрано все, кроме минимально необходимого количества блоков. Проект занимает 15% плиса. Вот и кто вивада после этого ? А вам точно нужен асинхронный сброс? Тут в конце https://forums.xilinx.com/t5/7-Series-FPGAs...set/td-p/473746 есть рекомендация по асинхронному сбросу К делу он не относиться, и на топ левеле вообще отключен. Я все пишу в таком стиле, что бы потом не переписывать код. ЗЫ. я не хочу разводить холивар, заранее извиняюсь, полагаю что бессонная неделя дает мне право сказать: зайлинкс Г...но. Не ожидал я такого. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться