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

 
 
 
Reply to this topicStart new topic
> ПРОБЛЕМЫ СИНТЕЗА ТАКТОВОГО ДЕРЕВА
Mikhail241
сообщение Nov 16 2017, 06:29
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-17
Из: Msk
Пользователь №: 97 862



Добрый день.

Имеется дизайн с одним клоком и несколькими сгенерированными клоками(generated clock).
При выполнении CCOPT в Innovus получается большой skew между регистром источника generated clock и примыкающими к нему регистрами.
Поясняющая картинка:

Go to the top of the page
 
+Quote Post
Shivers
сообщение Nov 16 2017, 06:38
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



У Вас Caps залип?
CCOPT по всей видимости посчитал, что путь между регистрами больше требуемого периода, отсюда и skew. Це не баг, а фича. Если не нравится, запретите вообще скьюить клок setOptMode -usefulSkewCCOpt none
Go to the top of the page
 
+Quote Post
Mikhail241
сообщение Nov 16 2017, 07:25
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-17
Из: Msk
Пользователь №: 97 862



Цитата(Shivers @ Nov 16 2017, 13:38) *
CCOPT по всей видимости посчитал, что путь между регистрами больше требуемого периода, отсюда и skew. Це не баг, а фича. Если не нравится, запретите вообще скьюить клок setOptMode -usefulSkewCCOpt none


Спасибо за ответ. Так в этом и суть... Возникает отрицательный slack между регистрами, т.к. путь к приемнику меньше чем к источнику(одна из причин). UsfulSkew должен исправлять эту проблему. Я даже проверил, с помощью EcoAddRepeater, вставить буфер в дерево приемника и WNS уменьшился... Перепробовал кучу опций ничего не помогает! Без UsefulSkew тоже печально все.


Go to the top of the page
 
+Quote Post
Shivers
сообщение Nov 16 2017, 07:47
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Если "путь к приемнику меньше чем к источнику" значит в этом пути холд нарушен. Сделайте репорт по холду и по сетапу. Если по сетапу есть запас, то холд лечится. Если запаса нет, то холд лечится только в ущерб сетапу.

p.s. немного базовых вещей про сетап и холд
https://habrahabr.ru/post/302806/
Go to the top of the page
 
+Quote Post
Mikhail241
сообщение Nov 16 2017, 08:24
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-17
Из: Msk
Пользователь №: 97 862



Цитата(Shivers @ Nov 16 2017, 14:47) *
Если "путь к приемнику меньше чем к источнику" значит в этом пути холд нарушен. Сделайте репорт по холду и по сетапу. Если по сетапу есть запас, то холд лечится. Если запаса нет, то холд лечится только в ущерб сетапу.

p.s. немного базовых вещей про сетап и холд
https://habrahabr.ru/post/302806/

Дело не в ходде. Я специально задаю запас по WNS на холд и синтезирую с CU = 0 и в режиме setAnalysisMode -analysisType single. И по отчетам видно что это не проблемное место для холдов.
Проблема именно с регистрами соседними к источнику, CCOPT создает отдельную skew_group с rank 1 в которой: регистр генератора(РГ) и самый ближайший к нему регистр(БР). В результате эта группа сбалансирована а между БР и другим регистром(картинка) слэк.
PS: дизайн очень критичный по быстродействию
Go to the top of the page
 
+Quote Post
Shivers
сообщение Nov 16 2017, 12:37
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Так а в чем проблема, если тайминг нормальный?
Все группы и деревья, которые создает CCOPT, можно редактировать/удалять/создавать новые. Не доверяете машине - делайте свои спецификации. Или на крайняк в инновусе до сих пор остается поддержка CKsynthesis
Go to the top of the page
 
+Quote Post
Mikhail241
сообщение Nov 17 2017, 02:58
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-17
Из: Msk
Пользователь №: 97 862



Цитата(Shivers @ Nov 16 2017, 19:37) *
Так а в чем проблема, если тайминг нормальный?
Все группы и деревья, которые создает CCOPT, можно редактировать/удалять/создавать новые. Не доверяете машине - делайте свои спецификации. Или на крайняк в инновусе до сих пор остается поддержка CKsynthesis

Почему Вы так решили?) WNS по сетапу -0,4. Период 1нс. Понимаете, все, что Вы предлагаете я уже перепробовал(и вручную редактировал файл)... С CKsyn WNS = -0,6. Во всех вариантах результат плавает от -0,4 до -0,9 и всегда одно и тоже место возле gen clock.
Самое для меня странное, что EcoAddRepeater помогает сбросить около 0,2 без нарушений по холд. Думаю можно и до нуля сбросить, но это долго и нудно. У меня Иновус 15. Спасибо)
Go to the top of the page
 
+Quote Post
Shivers
сообщение Nov 17 2017, 05:54
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Посмотрите тайминг до передающего триггера и после принимающего, есть ли там запас по сетапу. Тул ведь сводит всю микросхему/блок, а не один выделенный путь. Если где то совсем плохо с таймингом, тулл попытается вытащить эти места за счет хороших путей. А если все же надо вытащить именно один путь или группу путей на фоне проблем в остальной части дизайна - выделите это в отдельную группу (group_path), и повысьте на ней приоритет (setPathGroupOptions).
Go to the top of the page
 
+Quote Post
Mikhail241
сообщение Nov 17 2017, 08:53
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-17
Из: Msk
Пользователь №: 97 862



Цитата(Shivers @ Nov 17 2017, 12:54) *
Посмотрите тайминг до передающего триггера и после принимающего, есть ли там запас по сетапу. Тул ведь сводит всю микросхему/блок, а не один выделенный путь. Если где то совсем плохо с таймингом, тулл попытается вытащить эти места за счет хороших путей. А если все же надо вытащить именно один путь или группу путей на фоне проблем в остальной части дизайна - выделите это в отдельную группу (group_path), и повысьте на ней приоритет (setPathGroupOptions).

Я смотрел worst chain в отчетах ccopt и там все сводится к тому, что нет временного окна для usful skew(constaraint = 0!)
Т.е. он не может добавить задержку в регистр gen clock(в данном случае это латч) --> choosen = 0.
Тут используется gating clock для генерации, но в классической ситуации где gen clock описывается сразу с выхода делителя аналогичные проблемы.
В UG ничего не нашел по этому поводу, кроме увеличения auto_limit_insertion_delay_factor. Т.е. проблема в том, что изначально ccopt задает временное окно равное нулю.
Хотя добавление задержки не вызовет ухудшения WNS(EcoAddRepeater). В общем беда!

Go to the top of the page
 
+Quote Post
Shivers
сообщение Nov 17 2017, 09:09
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Т.е. это путь reg2cgate? Я замечал, что CCOPT плохо правит reg2cgate, если есть нарушения сетап/холд в путях, которые находятся в дереве с выхода этого клок-гейта. Как только исправляете тайминг в дереве (к примеру, ослаблением констрейнтов, если нарушения в in2reg или reg2out), только тогда тул начинает сам править reg2cgate. На мой взгляд, это баг. Тулы кэденса вообще дико забагованы, как известно.
Go to the top of the page
 
+Quote Post
Mikhail241
сообщение Nov 17 2017, 09:18
Сообщение #11


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-17
Из: Msk
Пользователь №: 97 862



Цитата(Shivers @ Nov 17 2017, 16:09) *
Т.е. это путь reg2cgate? Я замечал, что CCOPT плохо правит reg2cgate, если есть нарушения сетап/холд в путях, которые находятся в дереве с выхода этого клок-гейта. Как только исправляете тайминг в дереве (к примеру, ослаблением констрейнтов, если нарушения в in2reg или reg2out), только тогда тул начинает сам править reg2cgate. На мой взгляд, это баг. Тулы кэденса вообще дико забагованы, как известно.

Сам слэк по пути reg2latch, но как я уже сказал если в качестве соурса для gen clock использовать обычный флип-флоп(вместо гейта) - тот же результат, с тем же constraint=0.
Хорошо, попробую еще ослабить sdc, хотя там уже кроме частоты все выключено...
Go to the top of the page
 
+Quote Post
Shivers
сообщение Nov 17 2017, 09:49
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Есть еще один путь. Можно задать констрейнт set_clock_latency на тот клоковый пин (скажем, триггера), который вы хотите подвинуть в дереве вверх или вниз. CCOPT учитывает это.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 17th July 2018 - 03:38
Рейтинг@Mail.ru


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