OparinVD 0 Posted September 11, 2020 · Report post Доброго дня! Вопрос, как я понял, довольно частый, но ответа я так и не нашел. Суть простая: в блок-дизайне я создаю компонент, который будет вставлен на топ-левел в виде нескольких копий, у каждой копии будет свой порядковый номер. Этот номер должен распространиться на нижестоящие компоненты в блок-дизайне, чтобы они знали, в канале с каким номером они работают. Вивадо вроде как при упаковке ip-core находит все топ-левел генерики и отображает их как настраиваемые параметры. Всё было бы хорошо, если бы у меня был текстовый топ-левел, а вот в блок-дизайне я нигде не найду как поместить такой генерик. Пока вижу единственный выход - это взять vhd-файл который отображает структуру блок-дизайна и вручную добавить в него топ-левел генерик и спортмапить его на все нижестоящие компоненты. Но это же дикий головняк! При любом телодвижении этот файл перезапишется - и начинай сначала... Как этим правильно пользоваться? Может философия Xilinx шагнула уже далеко вперед, и по их концепции это уже не требуется, а я не так всё понимаю? Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted September 11, 2020 · Report post Приветствую! 1 hour ago, OparinVD said: Суть простая: в блок-дизайне я создаю компонент, который будет вставлен на топ-левел в виде нескольких копий, у каждой копии будет свой порядковый номер. Этот номер должен распространиться на нижестоящие компоненты в блок-дизайне, чтобы они знали, в канале с каким номером они работают. Вивадо вроде как при упаковке ip-core находит все топ-левел генерики и отображает их как настраиваемые параметры. Всё было бы хорошо, если бы у меня был текстовый топ-левел, а вот в блок-дизайне я нигде не найду как поместить такой генерик. Пока вижу единственный выход - это взять vhd-файл который отображает структуру блок-дизайна и вручную добавить в него топ-левел генерик и спортмапить его на все нижестоящие компоненты. Но это же дикий головняк! При любом телодвижении этот файл перезапишется - и начинай сначала... Как этим правильно пользоваться? Может философия Xilinx шагнула уже далеко вперед, и по их концепции это уже не требуется, а я не так всё понимаю? Концепция BD в Vivado не предусматривает пока возможность задавать parameter/generic для BD. Это статически компилируемая единица. Вручную модифицировать обертку от BD смысла нет, проще уж сразу собрать аналог BD в RTL из IP корок. Для некоторых случаев можно "просовывать" внутрь BD параметры-константы через обычные порты. Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites
warrior-2001 0 Posted September 11, 2020 · Report post А блоки-идентификаторы добавить нельзя? И из их параметров брать нужные настраиваемые параметры. Может ревизия какая-то существует при генерации верхнего уровня в BD? Вопрос волнует и меня, у Интела я изголялся, а тут тоже пока не знаю. Quote Ответить с цитированием Share this post Link to post Share on other sites
OparinVD 0 Posted September 11, 2020 · Report post Спасибо! Очень жаль, что вариантов нет... Вручную портмапить тоже удовольствие сомнительное. Всё-таки у блок-дизайна есть несомненно вкусные плюшки, типа соединения сразу целыми интерфейсами, автоматической настройки параметров стандартных корок и т.д. Но какая религия запретила им сделать генерики для блок-дизайна - не пойму :) 8 minutes ago, warrior-2001 said: А блоки-идентификаторы добавить нельзя? И из их параметров брать нужные настраиваемые параметры. Может что-то можно из этого получить... но наверх через блок-дизайн не выкинуть... Придется действительно сигналами заводить, это, конечно, не так изящно как, например (for i... generate), но сработает Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted September 11, 2020 · Report post Приветствую! 9 minutes ago, OparinVD said: ... Но какая религия запретила им сделать генерики для блок-дизайна - не пойму :) IMHO основная концепция - пере-использование скомпилированных модулей в виде нетлистов из кэша. Ну и не забывайте что модули на BD это скрипты на TCL которые выполняется в моменты добавления/конфигурации/валидации BD. И привязать изменение RTL параметров при синтезе к перезапуску TCL скриптов наверно не просто. Поэтому в Xilinx и не стали заморачиватся. Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites
OparinVD 0 Posted September 11, 2020 (edited) · Report post Да, но... Скомпилированные модули должны иметь настраиваемые параметры, а BD это один из возможных вариантов при упаковке user-IP. Но получается, что я не могу создать свой настраиваемый IP на основе BD, мне остается только текстовый портмап, только хардкор! Ну или сторонние инструменты, но я пользовался только ActiveHDL, а там возникают другие проблемы... upd : опять же работу в Xilinx проделали действительно серьезную. Несмотря на то, что BD это TCL, он вполне себе умеет рыться в генериках накиданных в него компонентов и автоматически дает им нужные значения, если, например, ширина данных в цепочке конвейера разнится от компонента к компоненту... На фоне всего, что BD умеет отсутствие возможности выкинуть параметр наверх выглядит как умышленное решение, а не как увиливание от заморочек (imho :) ) Edited September 11, 2020 by OparinVD Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted September 11, 2020 · Report post Приветствую! 22 minutes ago, OparinVD said: а BD это один из возможных вариантов при упаковке user-IP. Но получается, что я не могу создать свой настраиваемый IP на основе BD Почему же не можете? - Можете! НО конфигурируйте ваши BD через TCL скрипт при создании/модификации вашего IP. Либо создаете BD внутри IP динамически, скриптом с заданием нужных параметров для блоков на BD. В Vivado многие модули для BD так именно и создаются - тот же AXI interconnect например. Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites
OparinVD 0 Posted September 11, 2020 · Report post Честно говоря, я TCL не особо-то умею применять... Я всегда брал generic и на его основе в тексте, где надо вставлял конструкции, которые влияют на варианты синтеза, типа if ... generate и т.д. Наверно, поэтому мне сложно мозг переключить на философию xilinx. А где почитать про "конфигурируйте ваши BD через TCL скрипт "? Quote Ответить с цитированием Share this post Link to post Share on other sites
RobFPGA 0 Posted September 11, 2020 · Report post Приветствую! 33 minutes ago, OparinVD said: Честно говоря, я TCL не особо-то умею применять... Я всегда брал generic и на его основе в тексте, где надо вставлял конструкции, которые влияют на варианты синтеза, типа if ... generate и т.д. Наверно, поэтому мне сложно мозг переключить на философию xilinx. А где почитать про "конфигурируйте ваши BD через TCL скрипт "? Увы - чтобы продуктивно с Vivado работать TCL придется подучить и применять его иногда даже чаще чем RTL писать А читать для начала как минимум "Tcl Command Reference Guide (UG835)" и "Creating and Packaging Custom IP (UG1118)". Только тут к сожалению только базовые вещи дают. Навряд ли найдете готовый рецепт "как добавить перчика параметр в ваш BD" Все остальное надо пробовать готовить самому. Как пример смотря как это сделано в готовых корках. Удачи! Rob. Quote Ответить с цитированием Share this post Link to post Share on other sites