dxp 58 18 февраля, 2021 Опубликовано 18 февраля, 2021 · Жалоба Всем привет! Ситуация следующая. Есть 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 ядра, который тупо закомментит эту строку. Но это как-то громоздко и некрасиво. Имеется ли альтернативное решение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 18 февраля, 2021 Опубликовано 18 февраля, 2021 · Жалоба Если говорить про работу с гуи, то можно открыть список сгенерированных файлов ip-ядра, и запретить этот конкретный файл (disable file на нем). При перегенерации ядра запрет сохраняется, насколько я помню. Работает не на всех вивадах. Там же можно подсмотреть соответсву.щую tcl-команду для запрета файла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 18 февраля, 2021 Опубликовано 18 февраля, 2021 · Жалоба С файлом понятно, это можно из скрипта сделать. Но нужно не весь файл, а вот этот конкретный констрейн. По ходу, индусы его откуда-то притащили (из прежнего проекта?), тут он стал не нужен и мешать, но им пофиг. В самом файле там ещё пачка других констрейнов, поэтому файл отключать нельзя. Вот конкретно этот бы отключить. У него даже имени нет. Подумалось, может как-то можно по его спецификации отловить и закрыть. Но что-то сомнительно. На всякий случай спрашиваю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 18 февраля, 2021 Опубликовано 18 февраля, 2021 · Жалоба Я бы попробовал отключить схожый констрейн через интерфейс (почему схожий, потому что констрейны IP нельзя юзеру редактировать извне) и использую полученную команду в Тикле, подставил в свои скрипты/констрейны. Вот только может быть проблема, что данные констрейны могут считываться не один раз и это нужно будет контролировать в процессе Имплементации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 19 февраля, 2021 Опубликовано 19 февраля, 2021 · Жалоба 18 hours ago, dxp said: Путь в лоб: запускать скрипт после сборки IP ядра, который тупо закомментит эту строку. Но это как-то громоздко и некрасиво. Имеется ли альтернативное решение? Тоже постоянно бесит эта фича, в тех же банальных PLLках меня всегда предупреждает что я переопределяю тактовые у себя на те же самые( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 30 19 февраля, 2021 Опубликовано 19 февраля, 2021 · Жалоба Приветствую! А смысл необходимости этого? Убрать варнинги? Ведь ни на что другое это вроде как не влияет. К тому же этим констрейном разработчики пытаются гарантировать что тайминги в этой точке будут в любом случае как для частоты 500MHz. И не зависеть от того что задали на входе pcie_ref или возможных коэффициентов умножения/деления (которые могут зависеть от режимов PCIe). Так что надо аккуратно удалять констрейны анализируя каждый раз к чему это может привести. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 19 февраля, 2021 Опубликовано 19 февраля, 2021 · Жалоба 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 это вообще в одну строчку решается, но я не хотел зависимость от внешних инструментов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 19 февраля, 2021 Опубликовано 19 февраля, 2021 · Жалоба 2 minutes ago, dxp said: Да, убрать варнинги. Без него их 3. А с ним 78. Когда много мусорных варнингов, можно среди этой кучи хлама потерять какой-нибудь значимый. Если мне не изменяет память, то в Виваде можно настроить фильтрацию этих самых варнингов, чтобы игнорировать "ненужные" и оставить остальное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 19 февраля, 2021 Опубликовано 19 февраля, 2021 · Жалоба Да, этим тоже активно пользуюсь. Можно было и так сделать. Но если можно убрать причину варнинга, предпочитаю этот способ подавлению сообщения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 30 19 февраля, 2021 Опубликовано 19 февраля, 2021 · Жалоба Приветствую! 3 hours ago, dxp said: ... Насколько я понял, там клок автоматически извлекается тулом из настроек PLL внутри IP ядра, и он всегда имеет правильное значение. Так зачем же его ещё раз руками задавать? Да, клоки создаются автоматически с помощью расчета из исходного клока и известных коэффициентов умножения/деления. Только вот не всегда tools может корректно получить эти самые величины. Например скорость работы PCIe устанавливается автоматически после начала работы. Причем изначально идет подъем скорости начиная с 2.5G и выше. Так какую частоту выведет автоматическое извлечение клока в таком случае? Поэтому как один из вариантов вот такое "насильное" задание максимально-возможной частоты в нужной точке. А удалив такой констрейн вы можете получить проблему так как автоматическая частота в этой точке может быть другой величины. Но при P&R этот констрейн будет выполнятся и варнингов никаких ни будет .... Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 19 февраля, 2021 Опубликовано 19 февраля, 2021 · Жалоба Но разве извлечение клоков и их параметров не производится на этапе сборки? Ведь на этом этапе все параметры заданы - например, я указал, что у меня Gen3 x8, исходя из этого у меня все настройки корки и делаются, в том числе и вычисляются частота шин (AXI4-S) и их разрядность. Например, для указанной конфигурации будет 250 МГц на 256 бит. При этом автоматически устанавливается и Core Clock Frequency (это как раз та, на которую констрейн настраивался - 500 МГц). Если поменять параметры, например, сделать х4, то эта настройка вообще исчезает. Поэтому, насколько я понимаю, конфигурация и синтез сразу настроены на указанные максимальные параметры, и если почему-то скорость на 8GT/s не поднимется, то все тайминги внутри будут ещё более расслабленными. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 30 19 февраля, 2021 Опубликовано 19 февраля, 2021 · Жалоба Приветствую! Инфа с картинки предназначена для разработчика, чтобы ему изначально страшно было Алгоритм извлечения клоков при синтезе и P&R может оперировать лишь опорной частотой и текущими параметрами (обычно заданными в RTL) блоков FPGA через которые клок проходит. И если по умолчанию эти параметры стоят как для низких частот (по требованиям того же дизайна) то как tools узнает что вы можете переключить их в процессе работы в более высокие? Только с помощью специальных констрейнов можно помочь в этом. Например для clock-mux можно указать какой из входов(с разными частотами) считать приоритетным для расчета времянки за ним. Еще сложнее если частота может "произвольно" меняться в процессе работы например изменением режимов работы PLL/трансивера. Ведь коэффициент деления PLL можно задавать динамически при этом начальный параметр для этого коэффициента в RTL может задаваться как для низкой частоты. Чтобы например после ресета начальная частота трансивера была 2.5G В таких случаях сложно автоматизировать расчет частот во время P&R и лучше сразу указывать максимальные частоты в точках где эта частота может меняться по прихоти разработчика. Очень может быть что рассчитанная в TCL скрипте частота 500 MHz с картинки как раз и служит для генерирования такого констрейна который вы и хотите удалить. А варнинги на то и нужны чтобы обращать ваше внимание на места требующие вашего контроля. Я вообще не помню сколь боле-менее приличного дизайна без варнингов. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 19 февраля, 2021 Опубликовано 19 февраля, 2021 · Жалоба Но у меня-то тут максимальная скорость и частоты, уже некуда задирать дальше. Или хотите сказать, что этот файл с констрейнами всегда одинаковый для всех вариантов? Завтра попробую сгенерить корку для более низкой частоты. И посмотреть, что он там родил. И всё равно не понятно. Если у меня предполагается работа на небольшой скорости - например, Gen1 (2.5 GT/s), то у меня и "железо" генерируется под эту скорость. И эта моя корка никогда не перейдёт на более высокую скорость, даже если link partner будет ей настойчиво это предлагать. А значит и ситуации, где нужен запас по скорости там возникнуть не может. 2 часа назад, RobFPGA сказал: А варнинги на то и нужны чтобы обращать ваше внимание на места требующие вашего контроля. Я вообще не помню сколь боле-менее приличного дизайна без варнингов. Да, я понимаю, что в мире ПЛИС предупреждения далеко не всегда являются указаниями на косяки (как это обычно в мире традиционного программирования). Некоторые предупреждения являются просто предостережениями. И вот логично было бы им придумать какой-то другой класс - замечания, советы, ещё что-то, а не валить всё в общую кучу. Имхо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 30 19 февраля, 2021 Опубликовано 19 февраля, 2021 · Жалоба Приветствую! 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 19 февраля, 2021 Опубликовано 19 февраля, 2021 · Жалоба 21 минуту назад, RobFPGA сказал: А автовывод частоты при P&R смотрит на начальные конфигурационные параметры трансивера и видит только одно значение, например 125MHz. А с чего он видит 125 МГц, когда параметры корки указаны такими, что там сразу 500 МГц? Сам же генератор корки эту частоту выводит и показывает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться