Перейти к содержанию
    

Vivado: no match pins/cells/nets issues

Всем привет!

 

Столкнулся со следующей проблемой: Vivado выдаёт предупреждения о том, что не может найти pins, cells, nets, прописанные в констрейнах, хотя оные объекты вроде на месте - это легко проверяется хоть через просмотр нетлиста, хоть через схематик, хоть через Tcl консоль, выдавая туда команды get_pins/get_cells/get_nets - ровно те, которые прописаны в констрейнах. Всё находится, всё на месте. Но при запуске, например, Synthesis, в окне Messages вижу:

Цитата

[Vivado 12-508] No pins matched 'dpc_clk_gen/inst/plle2_adv_inst/CLKOUT0'. ["<...>/timing.xdc":24]

 

Интриги добавляет ещё то обстоятельство, что аналогичный констрейн на другой объект не вызывает такого поведения - там всё хорошо. Вот оба констрейна:

create_generated_clock -name pcie_user_clk [get_pins pcie_port/pipe_clock_i/mmcm_i/CLKOUT2]
create_generated_clock -name dpc_clk       [get_pins dpc_clk_gen/inst/plle2_adv_inst/CLKOUT0]

 

Это два простых констрейна для переименования клоков. Разница между ними в том, что первый относится к MMCM, находящейся внутри корки, а второй - к инстансу в проекте. Сам объект на месте (как уже выше указал), более того, по результату вижу, что клок-то таки переименовался (имеет указанное в констрейне имя). Вот оно на схеме (пин помечен маркером):

 

dpc_clk.thumb.png.645e3f92d337dfee139862566ecaaeef.png

 

В общем, заподозревал, что что-то тут, возможно, с порядком обработки данных - такое впечатление, что констрейн прикладывается в момент, когда ещё нетлист не готов и поэтому не находит объект (а в случае первого констрейна находит потому, что там в проект подтаскивается корка, синтезированная OOC, т.е. уже с нетлистом). Но если так, то как это разрулить? Никаких средств не нашёл, гугление тоже не помогло.

 

Из-за этой же фигни не удаётся использовать waiver'ы - подобная ругань, что нет объектов (а они есть в результирующем нетлисте).

 

В общем, обращаюсь к коллективному разуму и опыту. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, примерно так и есть. Для меня всегда было вопросом на каких стадиях сборки какие констрейны применяет вивада. Для сложных случаев приходилось даже прописывать констрейны в post-synthesis / post-place / post-route скрипты, чтобы они выполнились когда нужные объекты возникли.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Для синтеза это "нормальное" поведение если часть BD/IP у вас синтезируется как OOC модули.  В таком случае  при синтезе констрэйны привязанные к net|pin внутри этих OOC не находятся.  Так как модуль OOC виден при синтезе как black-box. 

Тут нужно либо забить на варнинги,  либо все  синтезировать одним куском (global),  либо выносить  такие констрэйны в  отдельный xdc  с опцией "только для P&R".

 

1 hour ago, alexadmin said:

Да, примерно так и есть. Для меня всегда было вопросом на каких стадиях сборки какие констрейны применяет вивада

Порядок применения  констрэйнов в Vivado описан в доке. Если в общем случае то сначала все ip.xdc, затем user.xdc | user.tcl (в порядке включения в проекте!!!).   Ну а конкретная последовательность видна в логе синтеза/P&R

 

Удачи! Rob.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяюсь к вышесказанному. В целом, ксайлинкс прямо рекомендует использовать одни констрейны для синтеза и другие для раскладки. Хотя лично я просто забиваю на ругань синтезатора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Так как сейчас можно полноценно использовать tcl для констрейнов то при желании можно ваять универсальный  файл выбирая через if  часть для синтеза или P&R. 

Но у меня такое впечатление что Vivado при синтезе не учитывает данные по клоку  - так как по логу видно что xdc применяется после окончания синтеза :shok:.

Удачи! Rob.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 часов назад, RobFPGA сказал:

выбирая через if  часть для синтеза или P&R

А как определить в процессе, какой этап происходит (синтез или какой-либо из этапов P&R- их там чуть не с полдюжины)? Какая-то тиклевая команда есть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, dxp said:

А как определить в процессе, какой этап происходит (синтез или какой-либо из этапов P&R- их там чуть не с полдюжины)? Какая-то тиклевая команда есть?

у синтеза и имплеметации раздельные окна логов. Ну и там написано что он делает)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

7 hours ago, dxp said:

А как определить в процессе, какой этап происходит (синтез или какой-либо из этапов P&R- их там чуть не с полдюжины)? Какая-то тиклевая команда есть?

Казалось бы  что может быть проще   ... if {[current_run]=="synth_1"} {...  Ан нет  :(  Ведь  к моменту применения файлов констрейнов процесс синтеза  УЖЕ ЗАКОНЧИЛСЯ! Поэтому  [current_run] возвращает ... сюрприз ... "impl_1"   :wacko:

Но нормальные герои как известно всегда  в обход ползут. :bye: 

# synth_implentation_constaint_file.tcl

# out current property
report_property [current_design]
report_property [current_project]
report_property [current_run]
report_property [current_fileset]

common::send_msg_id "SYNTH: 00-000" "INFO" "apply user's common constraint"

# common constraint
create_clock -period 3.000 -name CLK_IN [get_ports clk_in]
create_clock -period 5.000 -name CLK_OU [get_ports clk_ou]

set_clock_groups -asynchronous -group {CLK_IN}
set_clock_groups -asynchronous -group {CLK_OU}

# Stone near 3 roads
if {[get_property DESIGN_MODE [current_fileset]]=="RTL"} {
  common::send_msg_id "SYNTH: 00-000" "INFO" "apply user's synthesis constraint"
  # ...

} elseif {[get_property DESIGN_MODE [current_fileset]]=="GateLvl"} {  
  common::send_msg_id "SYNTH: 00-000" "INFO" "apply user's implementation constraint"
  # ...

} else {
  common::send_msg_id "SYNTH: 00-000" "ERROR" "F..k! Where i'm?"
  exit 1
}

Увы  - в Vivado все еще  каша в части  организации  внутренних процессов и упорядочивании  команд.

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я мож путаю - но кажется в виваде есть понятие "свойства файла" где указывается для какого этапа применяется ограничения (синтез, имплемент итд) и порядок применения (очерёдность).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 16.12.2018 в 04:48, Alex77 сказал:

я мож путаю - но кажется в виваде есть понятие "свойства файла" где указывается для какого этапа применяется ограничения (синтез, имплемент итд)

Ничего не путаете, всё так и есть (и как же я сам не догадался, ведь знал же про это свойство). Спасибо за идею, тут вообще всё реализуется на раз!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 12/14/2018 at 2:05 PM, RobFPGA said:

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

Но у меня такое впечатление что Vivado при синтезе не учитывает данные по клоку  - так как по логу видно что xdc применяется после окончания синтеза :shok:.

Удачи! Rob.

 

гайд по non-project mode такую последовательность прямым текстом и рекомендует (иначе объекты не будут найдены):

 

read_verilog ...
synth_design ...
-> read_xdc ...
opt_design ...

 

PS: быть может это связано с тем, что на этапе synth_design выполняется маппирование во внутреннее представление (как в synopsys DC в GTECH), а синтез (с констрейнтами) происходит  всёже в opt_design

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...