attaboy 0 July 19, 2021 Posted July 19, 2021 (edited) · Report post Необходимо собрать проект (Xilinx, Vivado), содержащий несколько одинаковых ядер Aurora, отличающихся друг от друга только расположением на кристалле. В GUI я сгенерировал одно ядро с необходимыми мне параметрами. Далее проект собирается "специально обученным" скриптом, которому указывается *.xci ядра Aurora. В топовом модуле проекта с помощью generate инстанциируется n ядер Aurora. Соответственно скрипт генерирует n ядер на основании указанного *.xci. В общем такой подход работает, но в случае с Aurora возникает проблема. При генерации ядра в GUI нужно указывать его расположение, и в ядре появляются констрейны на квадрант кристалла. Причем эти констрейны иерархические, например: set_property LOC GTHE3_CHANNEL_X1Y6 [get_cells -hier -filter {NAME =~ *gen_channel_container[25].gen_gthe3_channel_inst[2].GTHE3_CHANNEL_PRIM_INST}] И эти констрейны только для чтения, то есть я не могу их просто взять и отредактировать. Так как констрейны иерархические, все ядра, сгенерированные скриптом, будут располагаться в одной части кристалла, что неправильно. Как вариант я думаю сделать нужные мне констрейны и приложить их после вышеуказанных. Но это выглядит как-то топорно, Вивадо наверняка будет ругаться. Генерировать n файлов *.xci тоже не хочется. Кто-нибудь сталкивался с подобной проблемой? Какие могут быть варианты обхода/изменения автоматически созданных констрейнов? Edited July 19, 2021 by attaboy Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 99 July 19, 2021 Posted July 19, 2021 · Report post Приветствую! Для Aurora корки как бы пишут что "The 'xilinx.com:ip:aurora_64b66b:12.0' core does not support module reference." То есть как бы нельзя одну корку множить через generate. Могут быть сюрпризы связанные с множеством инстансов на это не рассчитанных модулей (в частности MGT). IMHO поэтому правильнее будет генерить скриптом нужную корку/корки с заданными привязками. Ну или пытаться исключить файл констрейнов корки из процесса P&R или полностью : set_property IS_ENABLED false [get_files "aurora_core_name_gt.xdc"] или только из процесса implementation : set_property USED_IN_IMPLEMENTATION false [get_files "aurora_core_name_gt.xdc"] И заменяя констрейны из этого файла на свои, с абсолютными путями в дизайне, или привязав свой новый файл констрейнов так же как и оригинальный к нужному CELL/REF Удачи! Rob. Quote Share this post Link to post Share on other sites More sharing options...
attaboy 0 July 20, 2021 Posted July 20, 2021 · Report post 12 hours ago, RobFPGA said: IMHO поэтому правильнее будет генерить скриптом нужную корку/корки с заданными привязками. А можно пример скрипта для генерации корки? Quote Share this post Link to post Share on other sites More sharing options...
attaboy 0 July 20, 2021 Posted July 20, 2021 · Report post 13 hours ago, RobFPGA said: Для Aurora корки как бы пишут что "The 'xilinx.com:ip:aurora_64b66b:12.0' core does not support module reference." Здесь тоже есть несколько вопросов: - Где об этом упоминается? В PG074 я такого утверждения не нашел. - Не совсем понятно, что имеется в виду под "module reference". Одна корка все равно вставляется в дизайн как модуль, с помощью шаблона *.veo. В чем принципиальная разница между одним модулем и их набором, сгенерированным с помощью generate? Quote Share this post Link to post Share on other sites More sharing options...
RobFPGA 99 July 20, 2021 Posted July 20, 2021 · Report post Приветствую! 3 hours ago, attaboy said: А можно пример скрипта для генерации корки? Можно: write_ip_tcl -force -show_defaults [get_ips "aurora_core_name.xci"] script_name.tcl 3 hours ago, attaboy said: Где об этом упоминается? В PG074 я такого утверждения не нашел. Попробуйте для корки в property напрямую изменить свойство CONFIG.C_GT_LOC_1 {1} с 1 на X. Увидите это сообщение от самой корки. Наверное имеется ввиду что множество инстансов ссылаются на один модуль. Когда у вас внутри такого модуля/корки есть некий уникальный ресурс/констрейн/привязка к пинам,... то естественно что множить такой модуль через generate нельзя. Может быть что это просто перестраховка разработчиков корки чтобы не страдать проверяя все возможные комбинации параметров (или чтобы было что сделать в след. версии ). Но это надо проверять самому. Удачи! Rob. Quote Share this post Link to post Share on other sites More sharing options...
alexadmin 2 July 20, 2021 Posted July 20, 2021 · Report post Можно сбросить констрейн через вызов reset_property, вписав его в скрипт, который будет выполняться на стадии Implementation Quote Share this post Link to post Share on other sites More sharing options...