Jump to content

    
Sign in to follow this  
OparinVD

Как распространить Generic сверху вниз в Block Design в Vivado?

Recommended Posts

Доброго дня!

Вопрос, как я понял, довольно частый, но ответа я так и не нашел.

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

Вивадо вроде как при упаковке ip-core находит все топ-левел генерики и отображает их как настраиваемые параметры. Всё было бы хорошо, если бы у меня был текстовый топ-левел, а вот в блок-дизайне я нигде не найду как поместить такой генерик. 

Пока вижу единственный выход - это взять vhd-файл который отображает структуру блок-дизайна и вручную добавить в него топ-левел генерик и спортмапить его на все нижестоящие компоненты. Но это же дикий головняк! При любом телодвижении этот файл перезапишется - и начинай сначала...

Как этим правильно пользоваться? Может философия Xilinx шагнула уже далеко вперед, и по их концепции это уже не требуется, а я не так всё понимаю?

Share this post


Link to post
Share on other sites

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

1 hour ago, OparinVD said:

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

Вивадо вроде как при упаковке ip-core находит все топ-левел генерики и отображает их как настраиваемые параметры. Всё было бы хорошо, если бы у меня был текстовый топ-левел, а вот в блок-дизайне я нигде не найду как поместить такой генерик. 

Пока вижу единственный выход - это взять vhd-файл который отображает структуру блок-дизайна и вручную добавить в него топ-левел генерик и спортмапить его на все нижестоящие компоненты. Но это же дикий головняк! При любом телодвижении этот файл перезапишется - и начинай сначала...

Как этим правильно пользоваться? Может философия Xilinx шагнула уже далеко вперед, и по их концепции это уже не требуется, а я не так всё понимаю?

Концепция  BD в  Vivado не предусматривает пока возможность задавать parameter/generic для BD. Это статически компилируемая единица. 

Вручную модифицировать   обертку от BD  смысла нет, проще уж сразу собрать аналог BD  в RTL из IP корок.  Для некоторых случаев  можно "просовывать" внутрь BD параметры-константы  через обычные порты.  

 

Удачи! Rob.  

Share this post


Link to post
Share on other sites

А блоки-идентификаторы добавить нельзя? И из их параметров брать нужные настраиваемые параметры. Может ревизия какая-то существует при генерации верхнего уровня в BD?

Вопрос волнует и меня, у Интела я изголялся, а тут тоже пока не знаю.

Share this post


Link to post
Share on other sites

Спасибо! 

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

8 minutes ago, warrior-2001 said:

А блоки-идентификаторы добавить нельзя? И из их параметров брать нужные настраиваемые параметры.

Может что-то можно из этого получить... но наверх через блок-дизайн не выкинуть... 

Придется действительно сигналами заводить, это, конечно, не так изящно как, например (for i... generate), но сработает

Share this post


Link to post
Share on other sites

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

9 minutes ago, OparinVD said:

... Но какая религия запретила им сделать генерики для блок-дизайна - не пойму :)

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

 

Ну и  не забывайте что  модули на BD это скрипты на TCL  которые  выполняется в моменты добавления/конфигурации/валидации BD. И  привязать изменение RTL  параметров при синтезе к перезапуску TCL  скриптов наверно не просто. Поэтому в Xilinx и не стали заморачиватся. :unknw:

 

Удачи! Rob.

Share this post


Link to post
Share on other sites

Да, но... Скомпилированные модули должны иметь настраиваемые параметры, а BD это один из возможных вариантов при упаковке user-IP. Но получается, что я не могу создать свой настраиваемый IP на основе BD, мне остается только текстовый портмап, только хардкор! Ну или сторонние инструменты, но я пользовался только ActiveHDL, а там возникают другие проблемы...

 

upd : опять же работу в Xilinx проделали действительно серьезную. Несмотря на то, что BD это TCL, он вполне себе умеет рыться в генериках накиданных в него компонентов и автоматически дает им нужные значения, если, например, ширина данных в цепочке конвейера разнится от компонента к компоненту... На фоне всего, что BD умеет отсутствие возможности выкинуть параметр наверх выглядит как умышленное решение, а не как увиливание от заморочек (imho :) )

Edited by OparinVD

Share this post


Link to post
Share on other sites

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

22 minutes ago, OparinVD said:

а BD это один из возможных вариантов при упаковке user-IP. Но получается, что я не могу создать свой настраиваемый IP на основе BD

Почему же не можете? - Можете! НО конфигурируйте ваши BD  через  TCL скрипт  при  создании/модификации вашего IP.   Либо создаете BD внутри IP динамически,  скриптом  с заданием  нужных параметров для блоков на BD. 
В Vivado многие модули для BD так именно и создаются - тот же  AXI interconnect например.  

 

Удачи! Rob.

Share this post


Link to post
Share on other sites

Честно говоря, я TCL не особо-то умею применять... Я всегда брал generic и на его основе в тексте, где надо вставлял конструкции, которые влияют на варианты синтеза, типа if ... generate и т.д. Наверно, поэтому мне сложно мозг переключить на философию xilinx. А где почитать про "конфигурируйте ваши BD  через  TCL скрипт "?

 

Share this post


Link to post
Share on other sites

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

33 minutes ago, OparinVD said:

Честно говоря, я TCL не особо-то умею применять... Я всегда брал generic и на его основе в тексте, где надо вставлял конструкции, которые влияют на варианты синтеза, типа if ... generate и т.д. Наверно, поэтому мне сложно мозг переключить на философию xilinx. А где почитать про "конфигурируйте ваши BD  через  TCL скрипт "?

Увы  - чтобы  продуктивно с Vivado работать TCL придется подучить и применять его иногда даже чаще  чем RTL писать :yes3:

А читать для начала как минимум  "Tcl Command Reference Guide (UG835)" и  "Creating and Packaging Custom IP (UG1118)". Только тут к сожалению только базовые  вещи дают.  Навряд ли найдете  готовый рецепт "как добавить перчика параметр в ваш BD"  :wink2:  Все остальное надо пробовать готовить самому. Как пример смотря как это сделано в готовых корках.   

 

Удачи! Rob.

Share this post


Link to post
Share on other sites

Добрый день!

С прошлого раза я несколько улучшил свою "фамильярность" с TCL, пролистал UG1118. Думал, сейчас буду подглядывать в US835 и полечу высоко, но взлететь что-то так и не смог... Не могу найти, через какой механизм идет взаимодействие между топовым BD и моим кастомным IPcore. По этой же причине не могу подсмотреть, как это сделано у других. Например, при валидации я вижу предупреждения, что BD cell не принял параметр от присоединенного ядра. А как его принять, откуда мне Vivado говорит об этом? Где реализовать поведение по переконфигурации своего core? Для определенности первым шагом хочу сделать так, чтобы мой IPcore принимал значение частоты такое как у присоединенного клока в топ-левеле вместо того, которое было вбито при упаковке, а то надоело перепаковывать :)

Share this post


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

Для определенности первым шагом хочу сделать так, чтобы мой IPcore принимал значение частоты такое как у присоединенного клока в топ-левеле вместо того, которое было вбито при упаковке, а то надоело перепаковывать :)

как знакомо...когда с этим разбирался взял за основу BD, в котором AXI Subsystem + 2 AXI UART Lite, эти корки открыты, можно посмотреть сорцы и тикл, но, у меня так и не получилось сделать чтобы мое IP само извлекало значение частоты и назначало параметр. Вроде и RTL написан был одинаково и команды TCL, но не вышел каменный цветок, в итоге плюнул и сделал параметр конфигурации IP. 

Share this post


Link to post
Share on other sites

Я понимаю, что это совсем не ответ на вопрос, но так ли уж нужны собственные ip-core в виваде? Этот ip packager сделан настолько не по людски, что как-то... После того, как появился режим Add RTL module, я забыл о них как о страшном сне.

Share this post


Link to post
Share on other sites

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

6 minutes ago, alexadmin said:

Я понимаю, что это совсем не ответ на вопрос, но так ли уж нужны собственные ip-core в виваде? Этот ip packager сделан настолько не по людски, что как-то... После того, как появился режим Add RTL module, я забыл о них как о страшном сне.

Если  не знать  как использовать то  и молоток  покажется инструментом чужих :wink2:

Add RTL не покрывает  все сценарии использования IP.  А свои IP корки  это очень удобная концепция пере использования кода  особенно в крупных  компаниях.  

 

Удачи! Rob.

Share this post


Link to post
Share on other sites

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

2 hours ago, OparinVD said:

У меня пока всё хуже... Я не могу понять, куда прикручивается тикль и как его запустить на исполнение. Ткните, пожалуйста, носом

Чтобы  проще разбираться в работе TCL в корках  можно вставить хуки на tcl функции и  посмотреть что и когда запускается при работает с корками. Недавно вроде  уже обсуждали  похожую  тему и  я там приводил пример такого хука. 

 

Удачи! Rob.

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