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

Vivado. Disable Constraint From IP Core.

Всем привет!

 

Ситуация следующая. Есть IP ядро PCIe (для US+), собираю проект (их референс или свой, не суть важно), получаю на P&R несколько десятков предупреждений вида (иерархию пути я побил на отдельные строки, чтобы было проще воспринимать эту "кашу"):

 

[Timing 38-3] User defined clock exists on pin 
  
pcie4_uscale_plus_0_i/
inst/gt_top_i/
diablo_gt.diablo_gt_phy_wrapper/
gt_wizard.gtwizard_top_i/
pcie4_uscale_plus_0_gt_i/
inst/
gen_gtwizard_gtye4_top.pcie4_uscale_plus_0_gt_gtwizard_gtye4_inst/
gen_gtwizard_gtye4.gen_channel_container[0].gen_enabled_channel.gtye4_channel_wrapper_inst/
channel_inst/gtye4_channel_gen.gen_gtye4_channel_inst[0].GTYE4_CHANNEL_PRIM_INST/TXOUTCLK 
  
  [See "...kcu116/pcie4_uscale_plus_0_ex/pcie4_uscale_plus_0_ex.srcs/sources_1/ip/pcie4_uscale_plus_0/source/ip_pcie4_uscale_plus_x0y0.xdc":119] 
  
and will prevent any subsequent automatic derivation of generated clocks on that pin. If the user defined clock specifies '-add', any existing auto-derived clocks on that pin are retained. ["...kcu116/pcie4_uscale_plus_0_ex/imports/xilinx_pcie4_uscale_plus_x0y0.xdc":135]

 

Все они ссылаются на один и тот же констрейн из указанного файла (строка 119):

create_clock -period 2.0 [get_pins -filter {REF_PIN_NAME=~TXOUTCLK} -of_objects [get_cells -hierarchical -filter { PRIMITIVE_TYPE =~ ADVANCED.GT.* }]]

По смыслу, как я понял, тулу не нравится то, что руками описан клок, который тул и так сам создаёт. Я закомментил этот констрейн, и предупреждения ушли.

 

Собственно вопрос: поскольку файл этот генерируется в составе IP ядра, то править его в проекте идея так себе - при сборке проекта "с нуля" или пересборке все правки в этом файле потеряются. Поэтому надо бы как-то снаружи вырубать констрейн. Как это сделать?

 

Путь в лоб: запускать скрипт после сборки IP ядра, который тупо закомментит эту строку. Но это как-то громоздко и некрасиво. Имеется ли альтернативное решение?

 

 

 

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


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

Если говорить про работу с гуи, то можно открыть список сгенерированных файлов ip-ядра, и запретить этот конкретный файл (disable file на нем). При перегенерации ядра запрет сохраняется, насколько я помню. Работает не на всех вивадах. Там же можно подсмотреть соответсву.щую tcl-команду для запрета файла.

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


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

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

 

Bv9NGUd.png

 

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

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


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

Я бы попробовал отключить схожый констрейн через интерфейс (почему схожий, потому что констрейны IP нельзя юзеру редактировать извне) и использую полученную команду в Тикле, подставил в свои скрипты/констрейны.

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

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


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

18 hours ago, dxp said:

Путь в лоб: запускать скрипт после сборки IP ядра, который тупо закомментит эту строку. Но это как-то громоздко и некрасиво. Имеется ли альтернативное решение?

Тоже постоянно бесит эта фича, в тех же банальных PLLках меня всегда предупреждает что я переопределяю тактовые у себя на те же самые(

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


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

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

А смысл  необходимости  этого?   Убрать варнинги?   Ведь ни на что другое это вроде как не влияет.   

К тому же  этим констрейном  разработчики  пытаются гарантировать что тайминги в этой точке будут в любом случае как для частоты 500MHz. И не зависеть от того что задали на входе  pcie_ref или возможных коэффициентов умножения/деления (которые могут зависеть от режимов PCIe).  Так что надо аккуратно удалять констрейны  анализируя каждый раз к чему это может привести.

 

Удачи! Rob. 

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


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

2 часа назад, RobFPGA сказал:

А смысл  необходимости  этого?   Убрать варнинги?   Ведь ни на что другое это вроде как не влияет.   

Да, убрать варнинги. Без него их 3. А с ним 78. Когда много мусорных варнингов, можно среди этой кучи хлама потерять какой-нибудь значимый.

 

 

2 часа назад, RobFPGA сказал:

К тому же  этим констрейном  разработчики  пытаются гарантировать что тайминги в этой точке будут в любом случае как для частоты 500MHz. И не зависеть от того что задали на входе  pcie_ref или возможных коэффициентов умножения/деления (которые могут зависеть от режимов PCIe).

Насколько я понял, там клок автоматически извлекается тулом из настроек PLL внутри IP ядра, и он всегда имеет правильное значение. Так зачем же его ещё раз руками задавать?

Пофиксил с помощью тиклевого скрипта:

 

proc rmline {fname pattern} {
    set fh_in [open $fname r]
    set fh_out [open $fname-tmp w]
    while {[gets $fh_in line] != -1} {
        if {![regexp ${pattern} ${line}]} {
            puts $fh_out $line
        }
    }
    close $fh_in
    close $fh_out
    file rename -force $fname-tmp $fname
}

 

Скрипт вызывается после генерации корки. С помощью sed это вообще в одну строчку решается, но я не хотел зависимость от внешних инструментов.

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


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

2 minutes ago, dxp said:

Да, убрать варнинги. Без него их 3. А с ним 78. Когда много мусорных варнингов, можно среди этой кучи хлама потерять какой-нибудь значимый.

Если мне не изменяет память, то в Виваде можно настроить фильтрацию этих самых варнингов, чтобы игнорировать "ненужные" и оставить остальное.

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


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

Да, этим тоже активно пользуюсь. Можно было и так сделать. Но если можно убрать причину варнинга, предпочитаю этот способ подавлению сообщения.

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


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

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

3 hours ago, dxp said:

...

Насколько я понял, там клок автоматически извлекается тулом из настроек PLL внутри IP ядра, и он всегда имеет правильное значение. Так зачем же его ещё раз руками задавать?

Да,  клоки создаются автоматически  с помощью расчета из исходного клока и  известных коэффициентов умножения/деления.  Только вот не всегда tools  может корректно получить эти самые величины.   Например  скорость  работы  PCIe   устанавливается  автоматически после  начала  работы. Причем  изначально идет подъем скорости  начиная  с 2.5G  и выше. Так  какую частоту  выведет автоматическое  извлечение  клока  в таком случае?  Поэтому  как один из вариантов вот такое "насильное"  задание  максимально-возможной  частоты  в нужной точке.  А удалив такой констрейн  вы  можете получить   проблему   так как автоматическая частота в этой точке может быть  другой  величины. Но при P&R  этот констрейн будет выполнятся и варнингов никаких ни будет .... :scratch_one-s_head:

 

Удачи! Rob.   

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


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

Но разве извлечение клоков и их параметров не производится на этапе сборки? Ведь на этом этапе все параметры заданы - например, я указал, что у меня Gen3 x8, исходя из этого у меня все настройки корки и делаются, в том числе и вычисляются частота шин (AXI4-S) и их разрядность. Например, для указанной конфигурации будет 250 МГц на 256 бит.

T5TO9nk.png

 

При этом автоматически устанавливается и Core Clock Frequency (это как раз та, на которую констрейн настраивался - 500 МГц). Если поменять параметры, например, сделать х4, то эта настройка вообще исчезает. Поэтому, насколько я понимаю, конфигурация и синтез сразу настроены на указанные максимальные параметры, и если почему-то скорость на 8GT/s не поднимется, то все тайминги внутри будут ещё более расслабленными.

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


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

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

 

Инфа с картинки предназначена для разработчика,  чтобы  ему изначально страшно было :biggrin:

 

Алгоритм извлечения клоков  при синтезе и P&R может оперировать лишь опорной частотой и  текущими  параметрами (обычно заданными в RTL) блоков FPGA через  которые клок проходит. И  если по умолчанию эти параметры стоят как для низких частот (по требованиям того же дизайна) то как tools узнает что вы можете  переключить  их в процессе работы  в более высокие? Только с помощью специальных констрейнов можно помочь в этом. Например для clock-mux можно указать какой из входов(с разными частотами) считать приоритетным для расчета времянки за ним. 

 

Еще сложнее если частота может "произвольно" меняться в процессе работы например изменением режимов работы PLL/трансивера. Ведь коэффициент деления PLL можно задавать динамически при этом начальный параметр для этого коэффициента в RTL может задаваться как для низкой частоты. Чтобы например после ресета начальная частота трансивера была 2.5G

 

В таких случаях  сложно автоматизировать расчет частот во время P&R и лучше сразу указывать максимальные частоты в точках где эта частота может меняться по прихоти разработчика. Очень может быть что рассчитанная в TCL скрипте частота 500 MHz с картинки  как раз и служит  для  генерирования такого констрейна который вы и хотите удалить. 

 

А варнинги  на то и нужны чтобы обращать ваше внимание на места требующие вашего контроля. Я  вообще не помню сколь боле-менее приличного дизайна без варнингов.

 

Удачи! Rob. 

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


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

Но у меня-то тут максимальная скорость и частоты, уже некуда задирать дальше. Или хотите сказать, что этот файл с констрейнами всегда одинаковый для всех вариантов? Завтра попробую сгенерить корку для более низкой частоты. И посмотреть, что он там  родил.

 

И всё равно не понятно. Если у меня предполагается работа на небольшой скорости - например, Gen1 (2.5 GT/s), то у меня и "железо" генерируется под эту скорость. И эта моя корка никогда не перейдёт на более высокую скорость, даже если link partner будет ей настойчиво это предлагать. А значит и ситуации, где нужен запас по скорости там возникнуть не может.

 

2 часа назад, RobFPGA сказал:

А варнинги  на то и нужны чтобы обращать ваше внимание на места требующие вашего контроля. Я  вообще не помню сколь боле-менее приличного дизайна без варнингов.

Да, я понимаю, что в мире ПЛИС предупреждения далеко не всегда являются указаниями на косяки (как это обычно в мире традиционного программирования). Некоторые предупреждения являются просто предостережениями. И вот логично было бы им придумать какой-то другой класс - замечания, советы, ещё что-то, а не валить всё в общую кучу. Имхо.

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


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

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

20 minutes ago, dxp said:

Но у меня-то тут максимальная скорость и частоты, уже некуда задирать дальше. ...

Зачем задирать.  Но  указать какая  может быть максимальная  нужно.   Ведь в зависимости от текущего режима (Gen1,2,3) в этой точке частота может быть и 125, 250 и 500MHz.  А автовывод частоты при P&R смотрит на  начальные конфигурационные параметры трансивера и  видит только одно значение, например  125MHz.  

 

21 minutes ago, dxp said:

... Или хотите сказать, что этот файл с констрейнами всегда одинаковый для всех вариантов? Завтра попробую сгенерить корку для более низкой частоты.

И всё равно не понятно. Если у меня предполагается работа на небольшой скорости - например, Gen1 (2.5 GT/s), то у меня и "железо" генерируется под эту скорость. И эта моя корка никогда не перейдёт на более высокую скорость, даже если link partner будет ей настойчиво это предлагать. А значит и ситуации, где нужен запас по скорости там возникнуть не может.

Естественно - как раз ограничив  скорость корки  при конфигурации  и  макс. частота в констрейне будет другой (соответствующей этому ограничению).  Но  опять  же  максимальной из  возможных.

  

Удачи! Rob.

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


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

21 минуту назад, RobFPGA сказал:

А автовывод частоты при P&R смотрит на  начальные конфигурационные параметры трансивера и  видит только одно значение, например  125MHz.  

А с чего он видит 125 МГц, когда параметры корки указаны такими, что там сразу 500 МГц? Сам же генератор корки эту частоту выводит и показывает.

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


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

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

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

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

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

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

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

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

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

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