Jump to content

    
Sign in to follow this  
des00

Вопрос по Vivado 2019.1.3 (не умею готовить)

Recommended Posts

Всем доброго.

Прошу объяснить вот такое поведение вивады это баг/фича/норма?

Есть проект, трехчастотный, все 3 частоты в разных, асинхронных группах. Частоты 50,100,50МГц (сам проект гонится до 250). Никакой асинхры, все на синхронизаторах и блоках памяти между доменами. Чип артикс200, проект занимает 99% чипа, интересует только синтез, для оценки ресурса.

Vivado 2016.4 выполняет синтез за 15-20 минут, Vivado 2019.1.3 мурыжит синтез порядка 1 часа. Причем, обе вивады довольно бодро начинают синтез, пробегают до фазы Initializing timing engine и потом 2016.4 довольно быстро все завершает, а 2019.1.3. не понятно чем занимается.

Еще заметил что 2019, после отмены синтеза, создает своего клона (vivado.exe) в системных процессах ОС, который делает дюже долгой следующую сборку. Лечится удалением этого процесса.

Ну не могли же разработчики настолько все так испортить. Может просто я готовить виваду не умею?

Спасибо.

Share this post


Link to post
Share on other sites

Я прямо с 16-той Вивады не начинал, а гд-то на 18-ю с ISE пересел и в общем тоже был удивлён странными поведениями. Есть подозрение, что разрабы прикрутили в синтез инструмент, который частично занимается анализом физического плейсмента. То есть раньше просто в примитивы превращало, а теперь оно ещё анализирует в какие примитивы и как оно потом лучше ляжет в кристалл. Это достаточно распространённая практика (добавлять анализатор физики) не только Хилые таким занимаются. Но опять же это непотверждённые догадки

Share this post


Link to post
Share on other sites
42 minutes ago, Nick_K said:

Я прямо с 16-той Вивады не начинал, а гд-то на 18-ю с ISE пересел и в общем тоже был удивлён странными поведениями. Есть подозрение, что разрабы прикрутили в синтез инструмент, который частично занимается анализом физического плейсмента. То есть раньше просто в примитивы превращало, а теперь оно ещё анализирует в какие примитивы и как оно потом лучше ляжет в кристалл. Это достаточно распространённая практика (добавлять анализатор физики) не только Хилые таким занимаются. Но опять же это непотверждённые догадки

согласился бы с вами, если бы это уменьшало общее время сборки. Взял другой проект, со схожими параметрами частоты/ресурс/производительность. Разность по времени сборки порядка 1 часа не в пользу более современной.

Share this post


Link to post
Share on other sites

Так я же про это и пишу, что новые стали намного умнее и перебирают больше параметров при синтезе. Отсюда возникает увеличение времени сборки. А старая версия работает по более "тупому" принципу: что вижу - то синтезю, без всяких оптимизаций и т.п.

Теоретически если покопаться в настройках, может и можно поотключать всякие мудрые мудрости синтеза. Но у меня что проекта нет объёмного, что особо времени этим заниматься :)

p.s. Может этот AR немного поможет: https://www.xilinx.com/support/answers/62215.html

Share this post


Link to post
Share on other sites

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

Трудно судить  о внутренней кухне  Vviado не  будучи работником оной.

На сколько я разобрался синтез в Vivado состоит как бы из двух этапов  - непосредственно синтез модулей (RTL -> netlist)  и последующий этап оптимизации полученного нетлиста. 

Что бы разобраться что и где тормозит  надо бы  логи смотреть. Или  методом исключения понять какой модуль вызывает такие тормоза.  Потому как тормозит может  даже просто парсинг констрейнов если они неудачно описаны.  

У меня тормоза на этапе синтеза чаще  всего возникали  при нестандартном описании большой памяти или  инициализации ROM  константами  из функций. 

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
2 hours ago, RobFPGA said:

Что бы разобраться что и где тормозит  надо бы  логи смотреть. Или  методом исключения понять какой модуль вызывает такие тормоза.  Потому как тормозит может  даже просто парсинг констрейнов если они неудачно описаны.  

Были бы они, эти логи. А то в консоли надпись Initializing timing engine и все, через полчаса начинают валиться логи продолжения процесса.

2 hours ago, RobFPGA said:

У меня тормоза на этапе синтеза этапе чаще  всего возникали  при .....  инициализации ROM  константами  из функций.

За наводку спасибо, проверим, констант действительного много.

Share this post


Link to post
Share on other sites

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

2 hours ago, des00 said:

За наводку спасибо, проверим, констант действительного много.

Как я понял проблемы с памятью и ROM  происходят потому  как если  память описана по стандартном шаблону  то она  инферится в стандартные блоки памяти еще на этапе первоначального синтеза.  Но если  же нет,  то при синтезе память превращается в толпу регистров с mux-ами  которые уже на этапе оптимизации  Vivado пытается  упаковать как память. Отсюда и тормоза. 

Удачи! Rob.

Share this post


Link to post
Share on other sites

Кстати именно 2016.4 считаю самой приятной (наименее неприятной) из всех вивад, и слез с неё лишь в начале 19 года по печальному поводу: прожект в какой-то момент стал собираться неправильно. Потратил массу времени чтобы удостовериться в том, что это именно ОНО, а не я, и перешёл на последнюю на тот момент. И чип как раз артикс-200 был.

 

Насчёт неправильной остановки синтеза - вот про синтез не помню, а имплементацию остановить действительно невозможно, приходится вручную удалять процессы. Это было всегда и уже очевидно что будет всегда :-))))))

 

Share this post


Link to post
Share on other sites
18 hours ago, Nick_K said:

Так я же про это и пишу, что новые стали намного умнее и перебирают больше параметров при синтезе. Отсюда возникает увеличение времени сборки. А старая версия работает по более "тупому" принципу: что вижу - то синтезю, без всяких оптимизаций и т.п.

ну если он больше делает при синтезе, то при роутинге должен делать меньше) да и особых, выдающихся, результатов по ресурсу/производительности от 2019 ой не видно.

4 hours ago, Dr.Alex said:

Кстати именно 2016.4 считаю самой приятной (наименее неприятной) из всех вивад, и слез с неё лишь в начале 19 года по печальному поводу

аналогично, US в проект пошел, пришлось перелезать. а с 2016.4 я смог подружиться)

11 hours ago, RobFPGA said:

Как я понял проблемы с памятью и ROM  происходят потому  как если  память описана по стандартном шаблону  то она  инферится в стандартные блоки памяти еще на этапе первоначального синтеза.  Но если  же нет,  то при синтезе память превращается в толпу регистров с mux-ами  которые уже на этапе оптимизации  Vivado пытается  упаковать как память. Отсюда и тормоза.

но 2016ый то по другому работает) либо команда у них сменилась, либо подход. ИМХО зря они так, константы и в африке константы)

Share this post


Link to post
Share on other sites
1 hour ago, des00 said:

либо команда у них сменилась, либо подход.

То ли здесь на форуме, то ли где то на семинарах, уж и не помню где, слышал байку, что в ксалинксе две команды. Одна делает четные релизы, другая нечетные :)

Share this post


Link to post
Share on other sites
3 hours ago, des00 said:

но 2016ый то по другому работает) либо команда у них сменилась, либо подход. ИМХО зря они так, константы и в африке константы)

Так дело-то не в том, что константы, а в том (возможно), что 2016.4 сразу признает фрагменты памяти за таковую (с последующим облегчением жизни), а 2019.1 - уже нет. В такую "эволюцию" Vivado как раз можно поверить.

А раскладывание констант по толпе рассеянных регистров - это действительно муторное и долгое занятие, по сравнению с раскладкой всего по нескольким BRAM'ам. Вообще, в части инициализации памяти альтеровцы оказализись куда как гуманнее и клиент-ориентированными, чем хилые.

Share this post


Link to post
Share on other sites
2 часа назад, disel сказал:

То ли здесь на форуме, то ли где то на семинарах, уж и не помню где, слышал байку, что в ксалинксе две команды. Одна делает четные релизы, другая нечетные :)

Это было когда выпускалось по четыре релиза в год. С 2019 в год пекут по два релиза. Одну из команд соптимизировали.

Share this post


Link to post
Share on other sites

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

45 minutes ago, Raven said:

А раскладывание констант по толпе рассеянных регистров - это действительно муторное и долгое занятие, по сравнению с раскладкой всего по нескольким BRAM'ам. Вообще, в части инициализации памяти альтеровцы оказализись куда как гуманнее и клиент-ориентированными, чем хилые.

Вопрос не в раскладке  констант,  а в том как эта раскладка реализована в коде

Например можно  инитить    память  через readmem*    и проблем при синтезе не должно быть.   А можно и так сделать:

(* rom_style = "block" *)
logic [WH_K*2-1:0] mem_sca [0:NPT-1];
(* rom_style = "block" *)
logic [WH_K*2-1:0] mem_scb [0:NPT-1];

for (genvar jj=0; jj<NPT; jj++) begin : g_rom
    assign mem_sca[jj][0     +: WH_K] = Kar(jj);
    assign mem_sca[jj][WH_K  +: WH_K] = Kai(jj);

    assign mem_scb[jj][0     +: WH_K] = Kbr(jj);
    assign mem_scb[jj][WH_K  +: WH_K] = Kbi(jj);
end

и вот тут уже синтез может сначала  сделать набор регистров а потом уж упаковать их как ROM блок памяти. 
Причем работает эта упаковка  для любой логики  которую по факту после синтеза можно упаковать как RAM или ROM, если не лень описывайте хоть 64К слов  памяти  через if ... else :sarcastic_hand:

Удачи! Rob.

Share this post


Link to post
Share on other sites
3 minutes ago, RobFPGA said:

Вопрос не в раскладке  констант,  а в том как эта раскладка реализована в коде

Это подразумевалось.

Но большое увеличение времени компиляции мы получим уже от самого факта нераспознавания синтезатором паттернов в коде в качестве BRAM'ов, с последующей возней с толпой регистров. И если переход Vivado 2016 -> 2019 ведет именно к этому, то IMHO, это и есть причина данного неприятного явления для данного конкретного FPGA проекта ТС.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this