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

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


Знающий
****

Группа: Свой
Сообщений: 576
Регистрация: 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


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

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


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

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


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

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


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

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


Местный
***

Группа: Свой
Сообщений: 294
Регистрация: 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


Знающий
****

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


Знающий
****

Группа: Участник
Сообщений: 802
Регистрация: 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 342
Регистрация: 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
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th May 2017 - 10:40
Рейтинг@Mail.ru


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