Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: FPGA для работы с 10G Ethernet
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Страницы: 1, 2
novartis
Цитата
Quartus автоматически задает констрейт на xgmii clk

А что это значит?

Вы sdc файл создали с описанием клока clk_ref?
bogaev_roman
Цитата(novartis @ Feb 15 2017, 18:54) *
А что это значит?

Там автоматически создается sdc файл и также автоматически прикрепляется. Другое дело, что все остальные ограничения нужно описывать отдельно в другом файле и прикреплять его вручную.
ЗЫ. Извиняюсь, был неправ, для tse по крайней мере - в автоматическом режиме sdc не создается, создавал его вручную на основе примера для devboard, прикрепляется также вручную.
gin
Цитата(bogaev_roman @ Feb 15 2017, 18:42) *
Очень интересная картинка, он повыкидывал вообще все клоки из анализа. Читайте отчет фиттера, на каком основании, может действительно глюк конкретной версии. Можно еще посмотреть в rtl viewer, может он эти сигналы переименовал на каком-то основании, хотя clk_ref и clk_sys не должен был трогать, если они порты.


Я склоняюсь, что это глюк Квартуса (хотя, очень не люблю я на него грешить, так как обычно все эти "глюки" - это чаще всего наши ошибки sm.gif ). Но в любом случае, нужно писать SDC файл с констрейтами, там то он не должен ничего выкидывать.

Но честно скажу, я не мастер писать констрейты, для сгенерированных внутри клоков))
bogaev_roman
Цитата(gin @ Feb 16 2017, 10:25) *
Но честно скажу, я не мастер писать констрейты, для сгенерированных внутри клоков))

А это достаточно проделать один раз, потом все очевидно становится.Что именно непонятно?
novartis
Надо добавить в проект sdc файл:
derive_clock_uncertainty
create_clock -period "XXX MHz" -name {clk_ref} {clk_ref}
create_clock -period "YYY MHz" -name {clk_sys} {clk_sys}
derive_pll_clocks

XXX и YYY замените на ваши значения.

Строка derive_pll_clocks укажет квартусу рассчитать все выходные клоки pll, и тех pll, которые вы сами создавали, и тех pll, которые внутри IP-ядра.

Я обычно этим и ограничиваюсь.
gin
Цитата(bogaev_roman @ Feb 16 2017, 10:33) *
А это достаточно проделать один раз, потом все очевидно становится.Что именно непонятно?


Собственно не понятно, как описать xgmii_rx_clk, который формируется модулем 10GBASE-R. Какое у него реальное имя? Потому что в отчете он указан как 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

bogaev_roman
Цитата(gin @ Feb 16 2017, 11:08) *
Собственно не понятно, как описать xgmii_rx_clk, который формируется модулем 10GBASE-R. Какое у него реальное имя? Потому что в отчете он указан как 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_156... и, если Вы описали входную частоту для этой pll, то директива derive_pll_clocks сделает то, что описал novartis
gin
Цитата(bogaev_roman @ Feb 16 2017, 12:05) *
а он является выходом pll_156... и, если Вы описали входную частоту для этой pll, то директива derive_pll_clocks сделает то, что описал novartis
Помимо описаний самих частот вообще говоря потребуется еще описание временных соотношений между входными/выходными портами (все цифры указаны в документации), типа
Код
#88e1111-DS Register 20.7 = 1 Tsetup=1.2ns/Thold=1.2ns RX_CLK+90deg (page 219)
set_input_delay -clock { rx_eth_virt } -rise -max -add_delay 1.0 [get_ports {RGMII_IN[0] RGMII_IN[1] RGMII_IN[2] RGMII_IN[3] RX_CONTROL}]
set_input_delay -clock { rx_eth_virt } -fall -max -add_delay 1.0 [get_ports {RGMII_IN[0] RGMII_IN[1] RGMII_IN[2] RGMII_IN[3] RX_CONTROL}]

set_input_delay -clock { rx_eth_virt } -rise -min -add_delay -1.0 [get_ports {RGMII_IN[0] RGMII_IN[1] RGMII_IN[2] RGMII_IN[3] RX_CONTROL}]
set_input_delay -clock { rx_eth_virt } -fall -min -add_delay -1.0 [get_ports {RGMII_IN[0] RGMII_IN[1] RGMII_IN[2] RGMII_IN[3] RX_CONTROL}]

#88e1111-DS Register 20.1 = 1 Tsetup=-0.9ns/Thold=2.7ns GTX_CLK+0deg (page 218)
set_output_delay -clock { clk125_txclk } -rise -max -0.9 [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] -add_delay
set_output_delay -clock { clk125_txclk } -fall -max -0.9 -add_delay  [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}]
set_output_delay -clock { clk125_txclk } -rise -min 2.7 [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] -add_delay
set_output_delay -clock { clk125_txclk } -fall -min 2.7 -add_delay  [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}]


Спасибо, попробую написать нормальный SDC файл, подключить SignalTap и посмотреть как он будет выполнять констрейты
gin
Как и советовали подключил SDC файл к проекту

Код
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


Теперь клоки считает нормально, осталось еще задать false path, чтоб timequest не ругался. И посмотреть как в железе работать будет

Код
80.95 MHz    80.95 MHz    pll_sys_inst|pll_sys_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk        
94.67 MHz    94.67 MHz    altera_reserved_tck        
177.43 MHz    177.43 MHz    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        
493.1 MHz    493.1 MHz    clk_ref        
507.36 MHz    507.36 MHz    pll_322_inst|pll_322_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk        
33333.33 MHz    700.28 MHz    clk_sys    limit due to minimum period restriction (tmin)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.