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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> set_false_path Как правильно задать в TimeQuest
gin
сообщение Mar 7 2017, 11:08
Сообщение #1


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

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



Всем добрый день!
Есть следующий вопрос - в проекте имеется 2 клоковых домена. Между ними происходит обмен данными. Как задать в TimeQuest условие, чтобы он не учитывал пути между этими доменами в расчете?
Как я понимаю, есть команда set_false_path :

set_false_path -from [get_clocks __sourceClock] -to [get_clocks __destinationClock]

но как в ней описать клоки, которые формируются на внутренних PLL?

Сообщение отредактировал gin - Mar 7 2017, 11:08
Go to the top of the page
 
+Quote Post
myq
сообщение Mar 7 2017, 12:16
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
Shivers
сообщение Mar 7 2017, 12:26
Сообщение #3


Знающий
****

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



Цитата(gin @ Mar 7 2017, 14:08) *
но как в ней описать клоки, которые формируются на внутренних PLL?

Сначала объявить эти клоки, а потом сделать их асинхронными через set_false_path.
Go to the top of the page
 
+Quote Post
Timmy
сообщение Mar 7 2017, 13:03
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 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.
Go to the top of the page
 
+Quote Post
gin
сообщение Mar 7 2017, 13:03
Сообщение #5


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

Группа: Участник
Сообщений: 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. Но эти внутренние клоки имеют какие то сложные внутренние названия. Вот как их узнать и задать?
Go to the top of the page
 
+Quote Post
Timmy
сообщение Mar 7 2017, 13:14
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(gin @ Mar 7 2017, 16:03) *
Из этих входных клоков затем формируются клоки (на PLL), на которых работает внутренняя логика. И для этих внутренних клоков нужно написать false path. Но эти внутренние клоки имеют какие то сложные внутренние названия. Вот как их узнать и задать?

Узнать - из отчёта TimeQuest по всем клокам.
Go to the top of the page
 
+Quote Post
gin
сообщение Mar 7 2017, 14:05
Сообщение #7


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

Группа: Участник
Сообщений: 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

Go to the top of the page
 
+Quote Post
Timmy
сообщение Mar 7 2017, 14:23
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(gin @ Mar 7 2017, 17:05) *
То есть я правильно понял Вас?
Вот например, в отчете у меня есть клок 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

Конечно, можете, только в фигурные скобки обязательно ставьте, или через макроподстановку.
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Mar 7 2017, 14:39
Сообщение #9


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

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(gin @ Mar 7 2017, 14:08) *
Между ними происходит обмен данными.

Если таки "происходит обмен данными", то фолспасить есесно нельзя.

Можно правда и совсем не констрейнить, но только если этот обмен идёт через чужую корку (например фифо), которая уже правильно законстрейнена внутри.
Go to the top of the page
 
+Quote Post
gin
сообщение Mar 7 2017, 14:44
Сообщение #10


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

Группа: Участник
Сообщений: 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) *
Если таки "происходит обмен данными", то фолспасить есесно нельзя.

Можно правда и совсем не констрейнить, но только если этот обмен идёт через чужую корку (например фифо), которая уже правильно законстрейнена внутри.


Ну естественно там все по феншую сделано biggrin.gif , обмен происходит без потерь данных. Вопрос именно в том, чтобы дать указание анализатору времянок не учитывать этот асинхронный путь, так как он его правильно учитывать не сможет, а только отчет мне перегружает своими предупреждениями.

Сообщение отредактировал gin - Mar 7 2017, 14:45
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Mar 7 2017, 14:50
Сообщение #11


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

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(gin @ Mar 7 2017, 17:44) *
Ну естественно там все по феншую сделано biggrin.gif , обмен происходит без потерь данных. Вопрос именно в том, чтобы дать указание анализатору времянок не учитывать этот асинхронный путь, так как он его правильно учитывать не сможет, а только отчет мне перегружает своими предупреждениями.

Сами-то поняли чё сказали? Если УЖЕ всё по феншую, то и никаких указаний от вас уже не требуется.

Если же переход через клок-домены всё-таки самопальный и никто кроме вас его ещё не констрейнил, то констрейнить НАДО, но ФОЛСПАСИТЬ НЕЛЬЗЯ.
Go to the top of the page
 
+Quote Post
Timmy
сообщение Mar 7 2017, 14:54
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 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 почитайте. В большинстве примеров фигурные скобки не нужны, так как имена клоков не содержат внутри себя символов макроподстановки( [] и $ )
Go to the top of the page
 
+Quote Post
gin
сообщение Mar 7 2017, 16:13
Сообщение #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 просто убирает из анализа данные пути (которые между двумя клоками), так как их фактически невозможно обконстрейтить, они ведь асинхронные.

Go to the top of the page
 
+Quote Post
Shivers
сообщение Mar 7 2017, 17:13
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Mar 7 2017, 18:20
Сообщение #15


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

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(gin @ Mar 7 2017, 19:13) *
Ведь false path просто убирает из анализа данные пути (которые между двумя клоками), так как их фактически невозможно обконстрейтить, они ведь асинхронные.

Их не только можно обконстрейнить, а нужно.
Если разброс в длинах путей превысит 1 период приёмного клока, то ваш клок-домэйн-кроссинг работать не будет.
Конечно, если вы сделаете строб, запаздывающий на 100 тактов от данных, то можно и не констрейнить. Но вряд ли кто-то так делает.

Shivers говорит что он не встречал, чтобы такой разброс был, а вот я встречал.
Зато к примеру я не встречал, чтобы какой-то прожект не разводился на 10 МГц тактовой.
Но это не значит что тактовую не надо констрейнить, тем более что это просто.
Go to the top of the page
 
+Quote Post
Shivers
сообщение Mar 8 2017, 08:28
Сообщение #16


Знающий
****

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



Все не так страшно. Простой расчет: сигнал сопровождения к шине (т.е. строб) задерживается на 2 такта пересинхронизации в приемной части. Это значит, что данные могут задержаться не более чем на 2 такта относительно прихода строба. Если приемная частота 100 МГц, получаем 20нс - это очень много, откуда в ПЛИС такие задержки роутинга через матрицу интерконнекта? Далее, из приемной части должен прийти сигнал подтверждения приема. который задерживается на 2 такта в пересинхронизаторах передающей части, прежде чем выставятся новые данные. Итого, разброс задержек для шины между двумя клоковыми доменами составляет +/- 2 такта, или около +/- 20н (100 МГц), что очень много.
Опасность возникает, только если частоты под гигагерц, или если на границе клоковых доменов добавлена логика (изредка встречается, хотя я бы руки за такое отрывал) - вот тогда действительно нужно использовать малтисайкл 2.
Go to the top of the page
 
+Quote Post
gin
сообщение Mar 10 2017, 07:26
Сообщение #17


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

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



Цитата(Shivers @ Mar 8 2017, 11:28) *
Все не так страшно. Простой расчет: сигнал сопровождения к шине (т.е. строб) задерживается на 2 такта пересинхронизации в приемной части. Это значит, что данные могут задержаться не более чем на 2 такта относительно прихода строба. Если приемная частота 100 МГц, получаем 20нс - это очень много, откуда в ПЛИС такие задержки роутинга через матрицу интерконнекта? Далее, из приемной части должен прийти сигнал подтверждения приема. который задерживается на 2 такта в пересинхронизаторах передающей части, прежде чем выставятся новые данные. Итого, разброс задержек для шины между двумя клоковыми доменами составляет +/- 2 такта, или около +/- 20н (100 МГц), что очень много.
Опасность возникает, только если частоты под гигагерц, или если на границе клоковых доменов добавлена логика (изредка встречается, хотя я бы руки за такое отрывал) - вот тогда действительно нужно использовать малтисайкл 2.


Полностью согласен, задержка при передаче от триггера к триггеру (если между ними нет комбинационной логики) в современных ПЛИС занимает мало времени. Так что констрейтить, думаю там действительно не стоит, а то это уже какой то паранойей попахивает)
Go to the top of the page
 
+Quote Post
gin
сообщение Mar 30 2017, 07:25
Сообщение #18


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

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



Что то я совсем не так делаю...

Не хочет Квартус отключать выбранные пути из анализа. Из-за этого к чертям все времянки летят. Когда анализирую отдельно основную часть проекта (которая на 156 Мгц работает) - он пишет, что может ее и на 230 МГц вытянуть. Когда подключаю дополнительный модуль, работающей на 50 МГц, который изредка обменивается данными с основным, то все рушится. Вместо 156 Квартус дает только 105 МГц (это при том, что раньше он 230 гарантировал!!!). И в отчете как раз междоменные и заваливают частоту.

И как мне этот проклятый констрейт правильно задать?!

Сообщение отредактировал gin - Mar 30 2017, 07:26
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 30 2017, 09:58
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



да вроде не сложно

set_false_path -from [get_clocks clk_1] -to [get_clocks clk_2]
set_false_path -from [get_clocks clk_2] -to [get_clocks clk_1]

или
set_false_path -rise_from <clk_1> -rise_to <clk_2>
set_false_path -rise_from <clk_2> -rise_to <clk_1>
ну и от падающего до восходящего и наоборот если есть работы по разным фронтам

не забывайте что надо как вперед, так и назад
Go to the top of the page
 
+Quote Post
gin
сообщение Mar 30 2017, 11:42
Сообщение #20


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

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



Цитата(Golikov A. @ Mar 30 2017, 12:58) *
да вроде не сложно

set_false_path -from [get_clocks clk_1] -to [get_clocks clk_2]
set_false_path -from [get_clocks clk_2] -to [get_clocks clk_1]

или
set_false_path -rise_from <clk_1> -rise_to <clk_2>
set_false_path -rise_from <clk_2> -rise_to <clk_1>
ну и от падающего до восходящего и наоборот если есть работы по разным фронтам

не забывайте что надо как вперед, так и назад


Тоже так подумал, что надо в обе стороны описывать, вроде помогло. Вот что значит, поплакался на форуме, и заработало))
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Mar 30 2017, 11:45
Сообщение #21


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(Timmy @ Mar 7 2017, 16:03) *
Для сокращения длинных плохо читаемых автоматически созданных имён можно использовать макроподстановки TCL.

Очень заинтересовало Ваше сообщение. Надоело после команды derive_pll_clocks врукопашную править имена всех клоков на смысловые. Не сможете ли примерчик подкинуть?
Go to the top of the page
 
+Quote Post
gin
сообщение Mar 30 2017, 12:31
Сообщение #22


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

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



Цитата(_Anatoliy @ Mar 30 2017, 14:45) *
Очень заинтересовало Ваше сообщение. Надоело после команды derive_pll_clocks врукопашную править имена всех клоков на смысловые. Не сможете ли примерчик подкинуть?


Кстати да, а то писать эти длинные имена вручную очень утомительно. Да и при изменениях в проекте эти имена ведь тоже меняются. Хочется автоматизировать
Go to the top of the page
 
+Quote Post
DuHast
сообщение Mar 30 2017, 18:49
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 13-07-06
Из: Москва
Пользователь №: 18 797



Цитата(gin @ Mar 30 2017, 10:25) *
И как мне этот проклятый констрейт правильно задать?!

Сделайте через GUI в TimeQues. Команда будет продублирована в командной строке. Скопируйте её и вставте в свой SDC файл.
Go to the top of the page
 
+Quote Post
Timmy
сообщение Mar 31 2017, 05:10
Сообщение #24


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(_Anatoliy @ Mar 30 2017, 14:45) *
Очень заинтересовало Ваше сообщение. Надоело после команды derive_pll_clocks врукопашную править имена всех клоков на смысловые. Не сможете ли примерчик подкинуть?

Код
set rx_clk_name {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|divc
lk}
set sys_clk_name {pll_sys_inst|pll_sys_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}

set_false_path -from [get_clocks $rx_clk_name] -to [get_clocks $sys_clk_name]

# и ещё больше можно упростить:
set rx_clk [get_clocks $rx_clk_name]
set sys_clk [get_clocks $sys_clk_name]
set_false_path -from $rx_clk -to $sys_clk

Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Mar 31 2017, 06:31
Сообщение #25


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(Timmy @ Mar 31 2017, 08:10) *
Код
set rx_clk_name {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|divc
lk}
set sys_clk_name {pll_sys_inst|pll_sys_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}

set_false_path -from [get_clocks $rx_clk_name] -to [get_clocks $sys_clk_name]

# и ещё больше можно упростить:
set rx_clk [get_clocks $rx_clk_name]
set sys_clk [get_clocks $sys_clk_name]
set_false_path -from $rx_clk -to $sys_clk

Спасибо! Но это как раз понятно. Здесь строчку
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

всё равно придётся писать вручную (копипастить). Например у меня название клока такое spll1|pll1_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|vco1ph[0], а после пересборки проекта вполне может вместо vco1ph[0] оказаться vco1ph[1],естественно сыпятся все ограничения. Тогда приходится ручками перебивать все имена. Я эту ситуацию имел ввиду.
Go to the top of the page
 
+Quote Post
Timmy
сообщение Mar 31 2017, 11:03
Сообщение #26


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(_Anatoliy @ Mar 31 2017, 09:31) *
Спасибо! Но это как раз понятно. Здесь строчку
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

всё равно придётся писать вручную (копипастить). Например у меня название клока такое spll1|pll1_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|vco1ph[0], а после пересборки проекта вполне может вместо vco1ph[0] оказаться vco1ph[1],естественно сыпятся все ограничения. Тогда приходится ручками перебивать все имена. Я эту ситуацию имел ввиду.

Можно попробовать получить идентификатор и имя выходного пина PLL по имени clock net:
Код
foreach_in_collection net [get_nets "clk"] {
  puts [get_net_info -name $net]
  puts [set pin_id [get_net_info -pin $net]]
  puts [set pin_name [get_pin_info -name $pin_id]]
}
А потом непосредственно сделать имя клока из имени пина, или, по-научному, перебрать все клоки, и выбрать те, у которых target равен $pin_name
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Mar 31 2017, 11:10
Сообщение #27


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(Timmy @ Mar 31 2017, 14:03) *
Можно попробовать получить идентификатор и имя выходного пина PLL по имени clock net:
Код
foreach_in_collection net [get_nets "clk"] {
  puts [get_net_info -name $net]
  puts [set pin_id [get_net_info -pin $net]]
  puts [set pin_name [get_pin_info -name $pin_id]]
}
А потом непосредственно сделать имя клока из имени пина, или, по-научному, перебрать все клоки, и выбрать те, у которых target равен $pin_name

Спасибо! Как появится "окно" в работе обязательно попробую.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th August 2025 - 06:51
Рейтинг@Mail.ru


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