Jump to content
    

Генерация нескольких ядер Aurora

Необходимо собрать проект (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 by attaboy

Share this post


Link to post
Share on other sites

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

 

Для 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.

 

Share this post


Link to post
Share on other sites

12 hours ago, RobFPGA said:

IMHO поэтому правильнее будет  генерить скриптом нужную  корку/корки  с заданными  привязками.

А можно пример скрипта для генерации корки?

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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

3 hours ago, attaboy said:

А можно пример скрипта для генерации корки?

Можно: write_ip_tcl -force -show_defaults  [get_ips "aurora_core_name.xci"] script_name.tcl  :yes3:

3 hours ago, attaboy said:

Где об этом упоминается? В PG074 я такого утверждения не нашел.

Попробуйте для корки в property  напрямую  изменить  свойство  CONFIG.C_GT_LOC_1 {1}  с 1 на X.  Увидите это сообщение от самой корки. 

   

Наверное имеется ввиду что множество инстансов ссылаются на один модуль.  Когда у вас внутри такого модуля/корки есть некий уникальный ресурс/констрейн/привязка к пинам,...  то  естественно что множить такой  модуль  через generate нельзя.      

Может быть  что это  просто перестраховка  разработчиков корки чтобы не страдать проверяя все возможные комбинации параметров (или чтобы было что сделать в след. версии :wink2:). 
Но это надо  проверять самому. 

 

Удачи! Rob.

Share this post


Link to post
Share on other sites

Можно сбросить констрейн через вызов reset_property, вписав его в скрипт, который будет выполняться на стадии Implementation

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.

×
×
  • Create New...