реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Как сделать reset_path в Vivado?
Vascom
сообщение Dec 13 2016, 12:14
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 2-08-07
Из: Москва
Пользователь №: 29 534



Задача сперва сделать set_false_path большому числу сигналов, а затем часть из них исключить. Но Vivado 2016.2 не умеет делать reset_path.
Подскажите, как быть?
Go to the top of the page
 
+Quote Post
Vascom
сообщение Dec 14 2016, 06:46
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 2-08-07
Из: Москва
Пользователь №: 29 534



Неужели ни кто не сталкивался?
Go to the top of the page
 
+Quote Post
FakeDevice
сообщение Dec 14 2016, 09:49
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 81
Регистрация: 31-10-14
Из: Воронеж
Пользователь №: 83 452



может, просто при задании set_false_path сразу исключить неприкасаемые сигналы? слышал, вивада умеет парсить регулярные выражения.
Go to the top of the page
 
+Quote Post
Vascom
сообщение Dec 14 2016, 10:51
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 2-08-07
Из: Москва
Пользователь №: 29 534



Да, парсить умеет. Только выдаёт кучу ворнингов наподобие
Код
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 ворнингов, но это же не дело.
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Dec 14 2016, 11:13
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



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

А что Вы хотите сделать в общем случае?
Закрыть пути для анализа от локального сброса до асинхронного сброса регистров? Если локальный сброс регистр - то банальным:
set_false_path -from [get_registers {soft_rst*}]
Или Вы используете сброс еще в какой-то комбинационной логике? Если так, то в общем случае я такого лично нигде не видел.
Go to the top of the page
 
+Quote Post
Vascom
сообщение Dec 14 2016, 11:15
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 2-08-07
Из: Москва
Пользователь №: 29 534



Почти. Закрыть все пути кроме нескольких.
Там важен момент старта счётчика.
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Dec 14 2016, 11:26
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(Vascom @ Dec 14 2016, 14:15) *
Почти. Закрыть все пути кроме нескольких.
Там важен момент старта счётчика.

Пояснили бы часть алгоритма. Сброс внешний или используете пересинхронизацию на внутренней логике? Если вариант второй, то может имеет смыл продублировать логику и пустить на те регистры, которые не требуется закрывать для анализа.
Go to the top of the page
 
+Quote Post
Vascom
сообщение Dec 14 2016, 12:09
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 2-08-07
Из: Москва
Пользователь №: 29 534



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

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

Странно, что вивадо не умеет делать исключения из констрейнов или оверрайды констрейнов определённых ранее.
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Dec 14 2016, 12:39
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795



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

А так, да, искать по маске, как уже писали выше:
set_false_path -through[get_cells{*}] - типа такого что-то
Go to the top of the page
 
+Quote Post
Vascom
сообщение Dec 14 2016, 12:42
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 2-08-07
Из: Москва
Пользователь №: 29 534



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

В том-то и дело, что мне надо не задать false path по маске, а задать на всё, но исключить часть путей.
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Dec 14 2016, 12:47
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



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

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

Идут они извне или на одном DCM формируются (или как клок визард в последних версиях называется)?
Go to the top of the page
 
+Quote Post
Vascom
сообщение Dec 14 2016, 12:53
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 2-08-07
Из: Москва
Пользователь №: 29 534



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


Клоки формируются на одном PLL. Не надо на этом зацикливаться. Дизайн правильный, отличный, проверенный, соответствует стандартам и гайдлайнам.
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Dec 14 2016, 12:58
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795



Кстати, вот.
-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
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Dec 14 2016, 13:16
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



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

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

Ну т.е. я понял так - есть клоки, которые идут по глобальным шинам, а потом они же используются в комбинационной логике, просто нигде такого не встречал.
Go to the top of the page
 
+Quote Post
Vascom
сообщение Dec 14 2016, 13:44
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 2-08-07
Из: Москва
Пользователь №: 29 534



Цитата(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
Это самое простое чтобы выставить ресет в нужный мне момент. Тут всё успевает по таймингам, проблем нет.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 00:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01483 секунд с 7
ELECTRONIX ©2004-2016