|
|
  |
FPGA для работы с 10G Ethernet |
|
|
|
Feb 15 2017, 03:51
|

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

|
Цитата(gin @ Feb 14 2017, 18:25)  Если кому интересно... В общем в середине января приехала, купленная плата. Запустил на ней тестовый проект: прием 10G трафика и сразу же его выдача обратно без какой либо промежуточной обработки. Делал это для проверки правильности настройки тактового генератора. Настроил правильно, проект заработал - принимает и выдает обратно данные без ошибок и потерь.
Теперь делаю боевой проект, в общем то принципиальных трудностей нет, но есть некоторые вопросы: 1. Как правильно задать констрейт на xgmii_rx_clk? В принципе, так как этот клок формируется автоматически модулем 10GBASE-R, то констрейт должен генериться автоматически. Но хотелось бы описать его самому. 2. Пока не очень принципиально, но все же. Каким методом лучше рассчитывать CRC-32. Так как шина данных параллельная (64 бита), то табличный способ тут явно не пойдет. Но и не уверен,что получится напрямую на проходе сделать. В общем, может есть какие то описания, как считать CRC для Ethernet?
Заранее спасибо! Установить Quartus 11. Сконфигурировать в MegaWizard IP блок CRC. Использовать сгенерированный блок в своём проекте, в своей версии Quartus'а
|
|
|
|
|
Feb 15 2017, 14:26
|

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

|
Цитата(DuHast @ Feb 15 2017, 06:51)  Установить Quartus 11. Сконфигурировать в MegaWizard IP блок CRC. Использовать сгенерированный блок в своём проекте, в своей версии Quartus'а Спасибо! Надо будет глянуть Кстати, по поводу констрейтов. Есть один очень неприятный момент. В принципе, когда подключается ядро 10GBASE-R, то как уже говорил, Quartus автоматически задает констрейт на xgmii clk. И честно разводит проект с учетом требований на этот клок. Но когда я подключаю к проекту SignalTap, то констрейт этот игнорируется, и разводка проекта происходит без учета ограничений по xgmii clk. В итоге требования не выполняются и работоспособность нарушается. Пол дня ломал сегодня голову, почему вдруг рабочий проект перестает работать... У меня 14 Quartus, может в поздних версиях это исправили.
|
|
|
|
|
Feb 15 2017, 15:04
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(gin @ Feb 15 2017, 17:26)  Кстати, по поводу констрейтов. Есть один очень неприятный момент. В принципе, когда подключается ядро 10GBASE-R, то как уже говорил, Quartus автоматически задает констрейт на xgmii clk. И честно разводит проект с учетом требований на этот клок. Но когда я подключаю к проекту SignalTap, то констрейт этот игнорируется, и разводка проекта происходит без учета ограничений по xgmii clk. В итоге требования не выполняются и работоспособность нарушается. Пол дня ломал сегодня голову, почему вдруг рабочий проект перестает работать... У меня 14 Quartus, может в поздних версиях это исправили. А есть уверенность, что иерархия проекта не меняется (имеется ввиду, что пути, указанные в ограничениях не меняются и названия портов/сигналов) и что ограничения именно игнорируются, а не просто не выполняются?
|
|
|
|
|
Feb 15 2017, 15:32
|

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

|
Цитата(bogaev_roman @ Feb 15 2017, 18:04)  А есть уверенность, что иерархия проекта не меняется (имеется ввиду, что пути, указанные в ограничениях не меняются и названия портов/сигналов) и что ограничения именно игнорируются, а не просто не выполняются? Проект точно не меняется, так как все модули сохраняется, а логика работает (но со сбоями). Эти сбои как раз очень похожи на те, что будут происходит при не выполнении констрейтов. Плюс к этому, когда не подключен SignalTap, то в отчете Quartus дает информацию по всем клокам, которые есть в проекте. А когда подключен, то только по одному. Поэтому я и грешу на SignalTap
Эскизы прикрепленных изображений
|
|
|
|
|
Feb 15 2017, 15:42
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(gin @ Feb 15 2017, 18:32)  Проект точно не меняется, так как все модули сохраняется, а логика работает (но со сбоями). Эти сбои как раз очень похожи на те, что будут происходит при не выполнении констрейтов. Плюс к этому, когда не подключен SignalTap, то в отчете Quartus дает информацию по всем клокам, которые есть в проекте. А когда подключен, то только по одному. Поэтому я и грешу на SignalTap Очень интересная картинка, он повыкидывал вообще все клоки из анализа. Читайте отчет фиттера, на каком основании, может действительно глюк конкретной версии. Можно еще посмотреть в rtl viewer, может он эти сигналы переименовал на каком-то основании, хотя clk_ref и clk_sys не должен был трогать, если они порты.
|
|
|
|
|
Feb 15 2017, 15:54
|

Местный
  
Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845

|
Цитата Quartus автоматически задает констрейт на xgmii clk А что это значит? Вы sdc файл создали с описанием клока clk_ref?
|
|
|
|
|
Feb 16 2017, 07:25
|

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

|
Цитата(bogaev_roman @ Feb 15 2017, 18:42)  Очень интересная картинка, он повыкидывал вообще все клоки из анализа. Читайте отчет фиттера, на каком основании, может действительно глюк конкретной версии. Можно еще посмотреть в rtl viewer, может он эти сигналы переименовал на каком-то основании, хотя clk_ref и clk_sys не должен был трогать, если они порты. Я склоняюсь, что это глюк Квартуса (хотя, очень не люблю я на него грешить, так как обычно все эти "глюки" - это чаще всего наши ошибки  ). Но в любом случае, нужно писать SDC файл с констрейтами, там то он не должен ничего выкидывать. Но честно скажу, я не мастер писать констрейты, для сгенерированных внутри клоков))
|
|
|
|
|
Feb 16 2017, 08:08
|

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

|
Цитата(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
|
|
|
|
|
Feb 16 2017, 09:11
|

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

|
Цитата(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 и посмотреть как он будет выполнять констрейты
|
|
|
|
|
Feb 16 2017, 11:10
|

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

|
Как и советовали подключил 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)
Сообщение отредактировал gin - Feb 16 2017, 11:12
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|