|
set_false_path Как правильно задать в TimeQuest |
|
|
|
Mar 7 2017, 12:16
|

Местный
  
Группа: Свой
Сообщений: 208
Регистрация: 11-05-04
Из: World wide
Пользователь №: 3

|
Цитата(gin @ Mar 7 2017, 14:08)  Всем добрый день! Есть следующий вопрос - в проекте имеется 2 клоковых домена. Между ними происходит обмен данными. Как задать в TimeQuest условие, чтобы он не учитывал пути между этими доменами в расчете? Как я понимаю, есть команда set_false_path :
set_false_path -from [get_clocks __sourceClock] -to [get_clocks __destinationClock]
но как в ней описать клоки, которые формируются на внутренних PLL? Почитайте нашего коллегу с форума http://www.kit-e.ru/articles/plis/2010_10_54.phpА вообще - это команда, использовать которую *нельзя*. Надо сетфальспасить только конкретные пути. Это приходит с опытом, поэтому убеждать не буду.
--------------------
IPSA SCIENTIA POTESTAS EST
|
|
|
|
|
Mar 7 2017, 13:03
|
Знающий
   
Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515

|
Цитата(gin @ Mar 7 2017, 14:08)  Всем добрый день! Есть следующий вопрос - в проекте имеется 2 клоковых домена. Между ними происходит обмен данными. Как задать в TimeQuest условие, чтобы он не учитывал пути между этими доменами в расчете? Как я понимаю, есть команда set_false_path :
set_false_path -from [get_clocks __sourceClock] -to [get_clocks __destinationClock]
но как в ней описать клоки, которые формируются на внутренних PLL? Для задания асинхронных клоков нужно пользоваться командой set_clock_groups а не set_false_path. Чтобы автоматически описать клоки от внутренних PLL, есть команда derive_pll_clocks. Также можно вручную их описать с помощью create_generated_clock. Для сокращения длинных плохо читаемых автоматически созданных имён можно использовать макроподстановки TCL.
|
|
|
|
|
Mar 7 2017, 13:03
|

Частый гость
 
Группа: Участник
Сообщений: 183
Регистрация: 17-12-10
Пользователь №: 61 682

|
Цитата(Shivers @ Mar 7 2017, 15:26)  Сначала объявить эти клоки, а потом сделать их асинхронными через set_false_path. Я наверное не совсем точно описал задачу. Описаны входные клоки: Код derive_clock_uncertainty create_clock -period "50 MHz" -name {clk_sys} {clk_sys} create_clock -period "322.265625 MHz" -name {clk_ref} {clk_ref} derive_pll_clocks Из этих входных клоков затем формируются клоки (на PLL), на которых работает внутренняя логика. И для этих внутренних клоков нужно написать false path. Но эти внутренние клоки имеют какие то сложные внутренние названия. Вот как их узнать и задать?
|
|
|
|
|
Mar 7 2017, 14:05
|

Частый гость
 
Группа: Участник
Сообщений: 183
Регистрация: 17-12-10
Пользователь №: 61 682

|
Цитата(Timmy @ Mar 7 2017, 16:14)  Узнать - из отчёта TimeQuest по всем клокам. То есть я правильно понял Вас? Вот например, в отчете у меня есть клок rx_10g_inst|rx_10g_inst|xv_xcvr_10gbaser_nr_inst|ch[0].sv_xcvr_10gbaser_native_i nst|g_fpll.altera_pll_156M~PLL_OUTPUT_COUNTER|divclkи есть клок pll_sys_inst|pll_sys_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclkи я могу их использовать в команде set_false_path как sourceClock и destinationClock
|
|
|
|
|
Mar 7 2017, 14:44
|

Частый гость
 
Группа: Участник
Сообщений: 183
Регистрация: 17-12-10
Пользователь №: 61 682

|
Цитата(Timmy @ Mar 7 2017, 17:23)  Конечно, можете, только в фигурные скобки обязательно ставьте, или через макроподстановку. Спасибо! Т.е. команда будет выглядеть следующим образом? set_false_path -from {get_clocks rx_10g_inst|rx_10g_inst|xv_xcvr_10gbaser_nr_inst|ch[0].sv_xcvr_10gbaser_native_i nst|g_fpll.altera_pll_156M~PLL_OUTPUT_COUNTER|divclk} -to {get_clocks pll_sys_inst|pll_sys_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk} И чем отличаются фигурные скобки от квадратных? В Альтеровском примере они вроде как квадратные Цитата(Dr.Alex @ Mar 7 2017, 17:39)  Если таки "происходит обмен данными", то фолспасить есесно нельзя.
Можно правда и совсем не констрейнить, но только если этот обмен идёт через чужую корку (например фифо), которая уже правильно законстрейнена внутри. Ну естественно там все по феншую сделано  , обмен происходит без потерь данных. Вопрос именно в том, чтобы дать указание анализатору времянок не учитывать этот асинхронный путь, так как он его правильно учитывать не сможет, а только отчет мне перегружает своими предупреждениями.
Сообщение отредактировал gin - Mar 7 2017, 14:45
|
|
|
|
|
Mar 7 2017, 14:50
|
Профессионал
    
Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863

|
Цитата(gin @ Mar 7 2017, 17:44)  Ну естественно там все по феншую сделано  , обмен происходит без потерь данных. Вопрос именно в том, чтобы дать указание анализатору времянок не учитывать этот асинхронный путь, так как он его правильно учитывать не сможет, а только отчет мне перегружает своими предупреждениями. Сами-то поняли чё сказали? Если УЖЕ всё по феншую, то и никаких указаний от вас уже не требуется. Если же переход через клок-домены всё-таки самопальный и никто кроме вас его ещё не констрейнил, то констрейнить НАДО, но ФОЛСПАСИТЬ НЕЛЬЗЯ.
|
|
|
|
|
Mar 7 2017, 14:54
|
Знающий
   
Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515

|
Цитата(gin @ Mar 7 2017, 17:44)  Спасибо! Т.е. команда будет выглядеть следующим образом?
set_false_path -from {get_clocks rx_10g_inst|rx_10g_inst|xv_xcvr_10gbaser_nr_inst|ch[0].sv_xcvr_10gbaser_native_i nst|g_fpll.altera_pll_156M~PLL_OUTPUT_COUNTER|divclk} -to {get_clocks pll_sys_inst|pll_sys_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk } И чем отличаются фигурные скобки от квадратных? В Альтеровском примере они вроде как квадратные set_false_path -from [get_clocks {rx_10g_inst|rx_10g_inst|xv_xcvr_10gbaser_nr_inst|ch[0].sv_xcvr_10gbaser_native_ inst|g_fpll.altera_pll_156M~PLL_OUTPUT_COUNTER|divclk}] -to [get_clocks {pll_sys_inst|pll_sys_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divcl k}] По поводу скобок учебник языка TCL почитайте. В большинстве примеров фигурные скобки не нужны, так как имена клоков не содержат внутри себя символов макроподстановки( [] и $ )
|
|
|
|
|
Mar 7 2017, 16:13
|

Частый гость
 
Группа: Участник
Сообщений: 183
Регистрация: 17-12-10
Пользователь №: 61 682

|
Цитата(Timmy @ Mar 7 2017, 17:54)  set_false_path -from [get_clocks {rx_10g_inst|rx_10g_inst|xv_xcvr_10gbaser_nr_inst|ch[0].sv_xcvr_10gbaser_native_ inst|g_fpll.altera_pll_156M~PLL_OUTPUT_COUNTER|divclk}] -to [get_clocks {pll_sys_inst|pll_sys_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divcl k}] По поводу скобок учебник языка TCL почитайте. В большинстве примеров фигурные скобки не нужны, так как имена клоков не содержат внутри себя символов макроподстановки( [] и $ ) Спасибо! Буду теперь знать, а то с tcl практически не приходилось иметь дело Цитата(Dr.Alex @ Mar 7 2017, 17:50)  Сами-то поняли чё сказали? Если УЖЕ всё по феншую, то и никаких указаний от вас уже не требуется.
Если же переход через клок-домены всё-таки самопальный и никто кроме вас его ещё не констрейнил, то констрейнить НАДО, но ФОЛСПАСИТЬ НЕЛЬЗЯ. Не понял, а почему собственно нельзя? Ведь false path просто убирает из анализа данные пути (которые между двумя клоками), так как их фактически невозможно обконстрейтить, они ведь асинхронные.
|
|
|
|
|
Mar 7 2017, 17:13
|

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

|
Цитата(gin @ Mar 7 2017, 19:13)  Ведь false path просто убирает из анализа данные пути (которые между двумя клоками), так как их фактически невозможно обконстрейтить, они ведь асинхронные. Так и есть. Просто бытует мнение, что если set_false_path заменить на что то более нейтральное, к примеру на set_multycycle_path или set_max_delay, то фиттер расположит триггеры-источники и триггеры-приемники разных клоковых доменов рядом, а не как бог на душу положит. В этом есть свой резон, особенно если границу клоковых доменов пересекают не отдельные сигналы, а целые шины, разряды которых могут сильно "расползтись" по кристаллу. Но на практике я не встречал, чтобы set_false_path ломал логику схемы. Т.е. все работает и с set_false_path.
|
|
|
|
|
Mar 7 2017, 18:20
|
Профессионал
    
Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863

|
Цитата(gin @ Mar 7 2017, 19:13)  Ведь false path просто убирает из анализа данные пути (которые между двумя клоками), так как их фактически невозможно обконстрейтить, они ведь асинхронные. Их не только можно обконстрейнить, а нужно. Если разброс в длинах путей превысит 1 период приёмного клока, то ваш клок-домэйн-кроссинг работать не будет. Конечно, если вы сделаете строб, запаздывающий на 100 тактов от данных, то можно и не констрейнить. Но вряд ли кто-то так делает. Shivers говорит что он не встречал, чтобы такой разброс был, а вот я встречал. Зато к примеру я не встречал, чтобы какой-то прожект не разводился на 10 МГц тактовой. Но это не значит что тактовую не надо констрейнить, тем более что это просто.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|