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

Как сделать reset_path в Vivado?

Задача сперва сделать set_false_path большому числу сигналов, а затем часть из них исключить. Но Vivado 2016.2 не умеет делать reset_path.

Подскажите, как быть?

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


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

может, просто при задании set_false_path сразу исключить неприкасаемые сигналы? слышал, вивада умеет парсить регулярные выражения.

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


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

Да, парсить умеет. Только выдаёт кучу ворнингов наподобие

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 ворнингов, но это же не дело.

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


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

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

А что Вы хотите сделать в общем случае?

Закрыть пути для анализа от локального сброса до асинхронного сброса регистров? Если локальный сброс регистр - то банальным:

set_false_path -from [get_registers {soft_rst*}]

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

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


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

Почти. Закрыть все пути кроме нескольких.

Там важен момент старта счётчика.

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


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

Почти. Закрыть все пути кроме нескольких.

Там важен момент старта счётчика.

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

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


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

Есть три синхронных клока, грубо говоря clk_1, clk_2, clk_4. Частота clk_2 и clk_4 соответственно в 2 и 4 раза меньше, чем clk_1.

Ресет снимается по negedge clk_1 изнутри при определённом положении этих клоков - когда clk_2 и clk_4 в единице. При снятии ресета начнёт щёлкать счётчик, важно чтобы он начинал отсчёт именно при таком расположении клоков.

 

Но это лирика.

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

 

Странно, что вивадо не умеет делать исключения из констрейнов или оверрайды констрейнов определённых ранее.

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


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

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

 

А так, да, искать по маске, как уже писали выше:

set_false_path -through[get_cells{*}] - типа такого что-то

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


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

Нет, клоки реальные и идут дальше на логику.

 

В том-то и дело, что мне надо не задать false path по маске, а задать на всё, но исключить часть путей.

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


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

В том-то и дело, что мне надо не задать false path по маске, а задать на всё, но исключить часть путей.

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

Нет, клоки реальные и идут дальше на логику.

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

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


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

Сброс по срезу, работа по фронту - это нормальный асинхронный ресет, а не шаманство.

always @(posedge clk or negedge rstn)
if (!rstn) reg0 <= 1'b0;
else ...

 

Клоки формируются на одном PLL. Не надо на этом зацикливаться. Дизайн правильный, отличный, проверенный, соответствует стандартам и гайдлайнам.

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


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

Кстати, вот.

-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

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


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

Сброс по срезу, работа по фронту - это нормальный асинхронный ресет, а не шаманство.

Я применительно к этой фразе про шаманство

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

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

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


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

Кстати, вот.

-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, а после него. Чтобы отменить его действие.

 

Я применительно к этой фразе про шаманство

 

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

Да, это грязный хак. Обычно так делать не следует в FPGA, но если очень хочется, то можно с небольшим количеством логики :)

Это самое простое чтобы выставить ресет в нужный мне момент. Тут всё успевает по таймингам, проблем нет.

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


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

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

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

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

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

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

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

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

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

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