gin 0 3 июня, 2019 Опубликовано 3 июня, 2019 (изменено) · Жалоба В 08.05.2019 в 14:51, gin сказал: Эх, была бы у меня Altera - я бы себе сам рассказал)) Но у меня Xilinx Kintex7, плата KC705. И сейчас 2 варианта: либо заводить клок через микросхему JITTER ATTENUATOR, либо делать упрощенный тестовый вариант с использованием внутреннего клока (если такое возможно) Завел клок через аттенюатор Si5324. Проект собрался, частота правильная. Единственное, пока не могу проверить на реальных данных - нет сетевой карты с 10G. Ну да ладно Но возникла новая проблема. Теперь не хотят одновременно собираться модули 10G BASE-R и 3.125 Гбит трансивер, который я подключал ранее. По отдельности всё собирается, но вместе ни в какую! Какая то непонятная для меня проблема с PLL и клоками. Ошибка [Place 30-140] Unroutable Placement Может кто сталкивался с чем то подобным, так как я не могу понять, что от меня хочет Vivado??? Подробнее: Цитата [Place 30-140] Unroutable Placement! A GTXE_COMMON / GTXE_CHANNEL clock component pair is not placed in a routable site pair. The GTXE_COMMON component can use the dedicated path between the GTXE_COMMON and the GTXE_CHANNEL if both are placed in the same clock region. If this sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .xdc file to demote this message to a WARNING. However, the use of this override is highly discouraged. These examples can be used directly in the .xdc file to override this clock rule. < set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets gtwizard_0_support_i/U0/common0_i/GT0_QPLLOUTCLK_OUT] > gtwizard_0_support_i/U0/common0_i/gtxe2_common_i (GTXE2_COMMON.QPLLOUTCLK) is provisionally placed by clockplacer on GTXE2_COMMON_X0Y1 gtwizard_0_support_i/U0/gtwizard_0_init_i/gtwizard_0_i/gt0_gtwizard_0_i/gtxe2_i (GTXE2_CHANNEL.QPLLCLK) is locked to GTXE2_CHANNEL_X0Y8 The above error could possibly be related to other connected instances. Following is a list of all the related clock rules and their respective instances. Clock Rule: rule_bufds_bufhce Status: PASS Rule Description: A BUFDS driving a BUFH must both be in the same horizontal row (clockregion-wise) gtwizard_0_support_i/U0/gt_usrclk_source/ibufds_instq2_clk0 (IBUFDS_GTE2.O) is locked to IBUFDS_GTE2_X0Y4 gtwizard_0_support_i/U0/gtwizard_0_init_i/gtwizard_0_i/cpll_railing0_i/use_bufh_cpll.refclk_buf (BUFH.I) is provisionally placed by clockplacer on BUFHCE_X1Y64 Clock Rule: rule_bufds_gtxchannel_intelligent_pin Status: PASS Rule Description: A BUFDS driving a GTXChannel must both be placed in the same or adjacent clock region (top/bottom) gtwizard_0_support_i/U0/gt_usrclk_source/ibufds_instq2_clk0 (IBUFDS_GTE2.O) is locked to IBUFDS_GTE2_X0Y4 gtwizard_0_support_i/U0/gtwizard_0_init_i/gtwizard_0_i/gt0_gtwizard_0_i/gtxe2_i (GTXE2_CHANNEL.GTREFCLK0) is locked to GTXE2_CHANNEL_X0Y8 Clock Rule: rule_bufh_bufr_ramb Status: PASS Rule Description: Reginal buffers in the same clock region must drive a total number of brams less than the capacity of the region gtwizard_0_support_i/U0/gtwizard_0_init_i/gtwizard_0_i/cpll_railing0_i/use_bufh_cpll.refclk_buf (BUFH.O) is provisionally placed by clockplacer on BUFHCE_X1Y64 Clock Rule: rule_gt_bufg Status: PASS Rule Description: A GT driving a BUFG must be placed on the same half side (top/bottom) of the device gtwizard_0_support_i/U0/gtwizard_0_init_i/gtwizard_0_i/gt0_gtwizard_0_i/gtxe2_i (GTXE2_CHANNEL.TXOUTCLK) is locked to GTXE2_CHANNEL_X0Y8 and gtwizard_0_support_i/U0/gt_usrclk_source/txoutclk_bufg0_i (BUFG.I) is provisionally placed by clockplacer on BUFGCTRL_X0Y29 Изменено 3 июня, 2019 пользователем gin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 13 3 июня, 2019 Опубликовано 3 июня, 2019 · Жалоба Вивадо хочет, чтобы QPLL (GTXE_COMMON) располагался в том же кваде, что и использующий его канал. При необходимости можно использовать один refclk для соседних квадов (в 7серии - на 1 выше и на 1 ниже квада с клоком), но GTXE_COMMON должен быть у них локальным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 3 июня, 2019 Опубликовано 3 июня, 2019 (изменено) · Жалоба 3 минуты назад, Flood сказал: Вивадо хочет, чтобы QPLL (GTXE_COMMON) располагался в том же кваде, что и использующий его канал. При необходимости можно использовать один refclk для соседних квадов (в 7серии - на 1 выше и на 1 ниже квада с клоком), но GTXE_COMMON должен быть у них локальным. А как указать конкретный Квад для 10G BASE-R? В визарде такого нет, в отличии от визарда для трансивера. Тем более, когда трансивер отключен, а есть только 10G Ethernet, то такой проблемы не возникает Изменено 3 июня, 2019 пользователем gin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 13 3 июня, 2019 Опубликовано 3 июня, 2019 · Жалоба Посмотрите описание на трансиверы (UG476) и на трансивер визард (PG168). Вкратце - указывать их не нужно, они сами привязываются по имеющемуся пинауту (т.е. все квады привязаны к своим ногам, программируются только настройки и связи между ними). Проблема скорее всего в структуре проекта и его клоковом дереве. Например, возможно что выход (QPLLOUTCLK и др.) одного shared clocking модуля уходит на трансиверы из разных квадов, чего быть не должно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 3 июня, 2019 Опубликовано 3 июня, 2019 (изменено) · Жалоба 34 минуты назад, Flood сказал: Посмотрите описание на трансиверы (UG476) и на трансивер визард (PG168). Вкратце - указывать их не нужно, они сами привязываются по имеющемуся пинауту (т.е. все квады привязаны к своим ногам, программируются только настройки и связи между ними). Проблема скорее всего в структуре проекта и его клоковом дереве. Например, возможно что выход (QPLLOUTCLK и др.) одного shared clocking модуля уходит на трансиверы из разных квадов, чего быть не должно. Спасибо, описания обязательно посмотрю, возможно я что то упустил. По поводу структуры проекта: 1. Для 3.125 трансивера клок заведен на BANK_117, MGTREFCLK0. Данные (TX и RX) заведены на тот же банк BANK_117, канал X0Y8 2. Для 10GBASE-R клок заведен на BANK_116, MGTREFCLK0. Данные (TX и RX) заведены на банк BANK_117, канал X0Y10 Источники клоков все внешние от разных источников Может здесь я что то неправильно сделал, хотя действовал согласно описанию на плату Изменено 3 июня, 2019 пользователем gin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 13 4 июня, 2019 Опубликовано 4 июня, 2019 · Жалоба Все-таки посмотрите ug476, раздел shared features. Возможно, все вопросы отпадут. По пинам понятно, но как подключаются два разных блока - не совсем ясно. В качестве простейшего предположения - если в блоке на 3.125Гбит используется QPLL, перегенерите его под использование CPLL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 4 июня, 2019 Опубликовано 4 июня, 2019 · Жалоба 4 часа назад, Flood сказал: В качестве простейшего предположения - если в блоке на 3.125Гбит используется QPLL, перегенерите его под использование CPLL. для 3.125 используется CPLL, так что проблема не в этом А вот в PG168 увидел следующее: CPLL/QPLL/PLL0/PLL1REFCLKSEL has been always tied to 001 for REFCLK0, and 010 for REFCLK1 irrespective of whether the clock is from the North or South Quad. If you plan to use a reference clock from either North or South Quad, you must following the guidelines for changing the reference clock, which is found in the respective transceiver user guides for the device. Видимо нужно копать в этом направлении... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 5 июня, 2019 Опубликовано 5 июня, 2019 (изменено) · Жалоба Видимо я точно ничего не понимаю... В ug476 нашел описание на reference clock для Квадов. Там на картинке нарисована схема подключения клоков в зависимости от того, находятся ли они в том же банке или нет. Вроде выглядит всё логично. Также есть схема с управлением для подключения клоков к конкретному GTXE2_CHANNEL. Пока вроде всё логично и понятно. 1. Я использую gtwizard для создания трансивера. Там выбираю требуемый мне GTXE2_CHANNEL и REFCLK. В данном варианте выбран REFCLK0 Q2 и GTX_X0Y8 также для Quad2. 2. Далее генерится код. В нем я подключаю мой входной клок на соответсвующий input Цитата --TX/RX 3.125 GHz gtwizard_0_support_i : gtwizard_0 port map ( SOFT_RESET_TX_IN => btn(2), SOFT_RESET_RX_IN => btn(2), DONT_RESET_ON_DATA_ERROR_IN => tied_to_ground_i, Q2_CLK0_GTREFCLK_PAD_N_IN => clk_ref_n, Q2_CLK0_GTREFCLK_PAD_P_IN => clk_ref_p, GT0_TX_FSM_RESET_DONE_OUT => gt0_tx_fsm_reset_done, GT0_RX_FSM_RESET_DONE_OUT => gt0_rx_fsm_reset_done, GT0_DATA_VALID_IN => tied_to_vcc_i, . . . Вроде всё правильно, но если посмотреть на весь код сгенерированного компонента, то там нет возможности выбора для опорного клока (нет портов, как на картинке 2-3). Т.е. я при всем желании не смогу использовать входы NORTHREFCLK и SOUTHREFCLK. Хотя в данном случае этого вроде бы и не требуется (так как REF CLK находится в том же Кваде). 3. Далее в XDC файле я указываю конкретные пины для клока и положение для GTXE2 канала: Цитата set_property PACKAGE_PIN G7 [get_ports clk_ref_n] set_property PACKAGE_PIN G8 [get_ports clk_ref_p] set_property LOC GTXE2_CHANNEL_X0Y8 [get_cells gtwizard_0_support_i/U0/gtwizard_0_init_i/gtwizard_0_i/gt0_gtwizard_0_i/gtxe2_i] Изменено 5 июня, 2019 пользователем gin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 5 июня, 2019 Опубликовано 5 июня, 2019 (изменено) · Жалоба 4. Следующий шаг - в визарде я создаю код для 10GBASE-R. Но там вообще нет никаких настроек для выбора нужного мне REFCLK и Quad! Также нет вариантов выбора NORTHREFCLK и SOUTHREFCLK! Есть только один дифференциальный вход для опорного клока и всё! То есть, используя визард в Vivado я никак не могу управлять выбором клока и расположения элемента внутри кристалла! А в данном случае у меня клок идет из верхнего банка (BANK 116) в нижний Квад банка 117 (Quad 2). Т.е. я никак не могу указать визарду, что мне нужно использовать не вход GTREFCLK0, а вход GTSOUTHREFCLK0 5. Я могу только указать что то в XDC-файле: Цитата set_property PACKAGE_PIN L8 [get_ports eth10_refclk_p] set_property PACKAGE_PIN L7 [get_ports eth10_refclk_n] set_property LOC GTXE2_CHANNEL_X0Y10 [get_cells ten_gig_eth_pcs_pma_core_i/U0/ten_gig_eth_pcs_pma_block_i/gt0_gtwizard_10gbaser_multi_gt_i/gt0_gtwizard_10gbaser_i/gtxe2_i] В итоге естественно вся эта байда не собирается и я не понимаю, что мне нужно делать, чтобы правильно подключить 2 трансивера! Изменено 5 июня, 2019 пользователем gin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yuri124 4 5 июня, 2019 Опубликовано 5 июня, 2019 · Жалоба Что-то слегка похожее у меня было с альтеровской Cyclone V. В трансиверные банки изначально заводилось два клока - один для трансиверов, второй - для других целей. С китом и примером от Альтеры все работало. С другим, более младшим чипом - вроде собралось (правда, может и не заметил какой-нибудь ворнинг по этому поводу), но второй клок внутрь не проходил. По докам - если используются трансиверы, то и клоковый вход тех же банков тоже можно использовать, да и на ките то работало! Закончилось тем, что в конце концов удалил из проекта свои назначения выводов, дал Квартусу развести на выводы, как ему заблагорассудится, потом - снова поправил выводы микросхемы, как мне нужно было (точно так же, как это было изначально!) - и заработало! Может, и тут что-то подобное можно сделать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться