Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как сделать reset_path в Vivado?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Vascom
Задача сперва сделать set_false_path большому числу сигналов, а затем часть из них исключить. Но Vivado 2016.2 не умеет делать reset_path.
Подскажите, как быть?
Vascom
Неужели ни кто не сталкивался?
FakeDevice
может, просто при задании set_false_path сразу исключить неприкасаемые сигналы? слышал, вивада умеет парсить регулярные выражения.
Vascom
Да, парсить умеет. Только выдаёт кучу ворнингов наподобие
Код
WARNING: [Constraints 18-401] set_false_path: 'decoders_inst/ldpc_0/ldpc_graph_inst/pnp_gen[8].pnp__58_i_5/S[1]' is not a valid endpoint. [/my_prj/sim/fpga/gnss_dsp_impl.xdc:51]
Resolution: A valid end point is a data pin of a sequential cell or a primary output or inout port. Please validate that all the objects returned by your query belong to this list.


Проект огромный, таких невалидных endpoint, наверное, сотни тысяч. Поскольку мне надо сделать false path на ресет к регистрам, то все "не регистры" выдают этот ворнинг.

Лог конечно затыкается на 100 ворнингов, но это же не дело.
bogaev_roman
Цитата(Vascom @ Dec 14 2016, 13:51) *
Проект огромный, таких невалидных endpoint, наверное, сотни тысяч. Поскольку мне надо сделать false path на ресет к регистрам, то все "не регистры" выдают этот ворнинг.

А что Вы хотите сделать в общем случае?
Закрыть пути для анализа от локального сброса до асинхронного сброса регистров? Если локальный сброс регистр - то банальным:
set_false_path -from [get_registers {soft_rst*}]
Или Вы используете сброс еще в какой-то комбинационной логике? Если так, то в общем случае я такого лично нигде не видел.
Vascom
Почти. Закрыть все пути кроме нескольких.
Там важен момент старта счётчика.
bogaev_roman
Цитата(Vascom @ Dec 14 2016, 14:15) *
Почти. Закрыть все пути кроме нескольких.
Там важен момент старта счётчика.

Пояснили бы часть алгоритма. Сброс внешний или используете пересинхронизацию на внутренней логике? Если вариант второй, то может имеет смыл продублировать логику и пустить на те регистры, которые не требуется закрывать для анализа.
Vascom
Есть три синхронных клока, грубо говоря clk_1, clk_2, clk_4. Частота clk_2 и clk_4 соответственно в 2 и 4 раза меньше, чем clk_1.
Ресет снимается по negedge clk_1 изнутри при определённом положении этих клоков - когда clk_2 и clk_4 в единице. При снятии ресета начнёт щёлкать счётчик, важно чтобы он начинал отсчёт именно при таком расположении клоков.

Но это лирика.
Про дублирование ресета думал, однако не хотелось бы ради этого изменять дизайн. Регистры, которые не требуется закрывать для анализа находятся внутри иерархии модулей.

Странно, что вивадо не умеет делать исключения из констрейнов или оверрайды констрейнов определённых ранее.
Tausinov
Если клоки используются только в таком контексте, то возможно есть смысл вместо кратных клоков использовать valid_en2 и valid_en4, совпадающий c фронтом соответствующих клоков или же с полупериодом, когда они равны 1, в зависимости от того, что нужно.

А так, да, искать по маске, как уже писали выше:
set_false_path -through[get_cells{*}] - типа такого что-то
Vascom
Нет, клоки реальные и идут дальше на логику.

В том-то и дело, что мне надо не задать false path по маске, а задать на всё, но исключить часть путей.
bogaev_roman
Цитата(Vascom @ Dec 14 2016, 15:42) *
В том-то и дело, что мне надо не задать false path по маске, а задать на всё, но исключить часть путей.

Каким образом в вивадо это сделать конкретно я Вам ответить не могу. А вообще похоже на какое-то шаманство - сброс по срезу, работа по фронту.
Цитата
Нет, клоки реальные и идут дальше на логику.

Идут они извне или на одном DCM формируются (или как клок визард в последних версиях называется)?
Vascom
Сброс по срезу, работа по фронту - это нормальный асинхронный ресет, а не шаманство.
Код
always @(posedge clk or negedge rstn)
if (!rstn) reg0 <= 1'b0;
else ...


Клоки формируются на одном PLL. Не надо на этом зацикливаться. Дизайн правильный, отличный, проверенный, соответствует стандартам и гайдлайнам.
Tausinov
Кстати, вот.
-reset_path - (Optional) Reset the timing path before setting false path.
This clears all exception-based timing constraints from the defined timing
path.
Это ключик к set_false_path.

Цитата
Идут они извне или на одном DCM формируются (или как клок визард в последних версиях называется)?


Корка так и называется - ClockWizard, а в результате получается MMCM или PLL
bogaev_roman
Цитата(Vascom @ Dec 14 2016, 15:53) *
Сброс по срезу, работа по фронту - это нормальный асинхронный ресет, а не шаманство.

Я применительно к этой фразе про шаманство
Цитата
Ресет снимается по negedge clk_1 изнутри при определённом положении этих клоков - когда clk_2 и clk_4 в единице

Ну т.е. я понял так - есть клоки, которые идут по глобальным шинам, а потом они же используются в комбинационной логике, просто нигде такого не встречал.
Vascom
Цитата(Tausinov @ Dec 14 2016, 15:58) *
Кстати, вот.
-reset_path - (Optional) Reset the timing path before setting false path.
This clears all exception-based timing constraints from the defined timing
path.
Это ключик к set_false_path.


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

Цитата(bogaev_roman @ Dec 14 2016, 16:16) *
Я применительно к этой фразе про шаманство

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

Да, это грязный хак. Обычно так делать не следует в FPGA, но если очень хочется, то можно с небольшим количеством логики sm.gif
Это самое простое чтобы выставить ресет в нужный мне момент. Тут всё успевает по таймингам, проблем нет.
Tausinov
Цитата
Да, только мне надо не до set_false_path, а после него. Чтобы отменить его действие.


Не совсем понял, что вы имели в виду. Приведенный ключ можно поместить в любое место команды.
Vascom
Цитата(Tausinov @ Dec 14 2016, 18:02) *
Не совсем понял, что вы имели в виду. Приведенный ключ можно поместить в любое место команды.

Как я понял из описания, этот ключ сбрасывает все предыдущие настройки указанных путей и применяет к ним false path.
Kuzmi4
2 Vascom:
не смотрели в сторону set_max_delay ??
Vascom
На форуме Xilinx, я прочитал, что set_max_delay имеет меньший приоритет, чем set_false_path. Так что это не должно сработать.
Tausinov
Цитата
Как я понял из описания, этот ключ сбрасывает все предыдущие настройки указанных путей и применяет к ним false path.


Да, все верно. Прошу прощения, невнимательно прочитал описание, после беглого взгляда подумал это то, что надо.
Vascom
Да, странный Вивадо действительно так не умеет sad.gif
Вот ответ техподдержки https://forums.xilinx.com/t5/Timing-Analysi...p/738576#M10731
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.