Jump to content

    
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

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.