Перейти к содержанию
    

Kintex 7 - Опорный клок для GTX трансиверов (плата KC705)

В 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

 

 

Изменено пользователем gin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вивадо хочет, чтобы QPLL (GTXE_COMMON) располагался в том же кваде, что и использующий его канал.

При необходимости можно использовать один refclk для соседних квадов (в 7серии - на 1 выше и на 1 ниже квада с клоком), но GTXE_COMMON должен быть у них локальным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, Flood сказал:

Вивадо хочет, чтобы QPLL (GTXE_COMMON) располагался в том же кваде, что и использующий его канал.

При необходимости можно использовать один refclk для соседних квадов (в 7серии - на 1 выше и на 1 ниже квада с клоком), но GTXE_COMMON должен быть у них локальным.

 

А как указать конкретный Квад для 10G BASE-R? В визарде такого нет, в отличии от визарда для трансивера. Тем более, когда трансивер отключен, а есть только 10G Ethernet, то такой проблемы не возникает

Изменено пользователем gin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите описание на трансиверы (UG476) и на трансивер визард (PG168).

Вкратце - указывать их не нужно, они сами привязываются по имеющемуся пинауту (т.е. все квады привязаны к своим ногам, программируются только настройки и связи между ними).

Проблема скорее всего в структуре проекта и его клоковом дереве. Например, возможно что выход (QPLLOUTCLK и др.) одного shared clocking модуля уходит на трансиверы из разных квадов, чего быть не должно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Источники клоков все внешние от разных источников

 

Может здесь я что то неправильно сделал, хотя действовал согласно описанию на плату

1437157259_Transceiversbanks.jpg.1b85e634b971531ae74a1fbcd36e6d1f.jpg

Изменено пользователем gin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все-таки посмотрите ug476, раздел shared features. Возможно, все вопросы отпадут.

 

По пинам понятно, но как подключаются два разных блока - не совсем ясно.

В качестве простейшего предположения - если в блоке на 3.125Гбит используется QPLL, перегенерите его под использование CPLL.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

 

Видимо нужно копать в этом направлении... 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Видимо я точно ничего не понимаю...

 

В ug476 нашел описание на reference clock для Квадов. Там на картинке нарисована схема подключения клоков в зависимости от того, находятся ли они в том же банке или нет. Вроде выглядит всё логично.

multiple_GTX.thumb.jpg.f85d741fcbf9903431b42fb1a469d7f1.jpg

 

Также есть схема с управлением для подключения клоков к конкретному GTXE2_CHANNEL.

cpllsel.jpg.e61482a32bbad5d75ad695389b265297.jpg 

 

Пока вроде всё логично и понятно.

 

1. Я использую gtwizard для создания трансивера. Там выбираю требуемый мне GTXE2_CHANNEL и REFCLK.

gtwizard.jpg.0f5ce50c8b23f3380311f38964e7c39c.jpg

В данном варианте выбран 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]

 

 

Изменено пользователем gin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4. Следующий шаг - в визарде я создаю код для 10GBASE-R.

Но там вообще нет никаких настроек для выбора нужного мне REFCLK и Quad! Также нет вариантов выбора NORTHREFCLK и SOUTHREFCLK! Есть только один дифференциальный вход для опорного клока и всё!

10gbase-r.jpg.a6002fa730f28c7dc3d1b0febe1a4c1f.jpg

То есть, используя визард в 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 трансивера! :dash2::dash2::dash2:

 

Изменено пользователем gin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то слегка похожее у меня было с альтеровской Cyclone V.

В трансиверные банки изначально заводилось два клока - один для трансиверов, второй - для других целей. С китом и примером от Альтеры все работало. 

С другим, более младшим чипом - вроде собралось (правда, может и не заметил какой-нибудь ворнинг по этому поводу), но второй клок внутрь не проходил. По докам - если используются трансиверы, то и клоковый вход тех же банков тоже можно использовать, да и на ките то работало! Закончилось тем, что в конце концов удалил из проекта свои назначения выводов, дал Квартусу развести на выводы, как ему заблагорассудится, потом - снова поправил выводы микросхемы, как мне нужно было (точно так же, как это было изначально!) - и заработало!

Может, и тут что-то подобное можно сделать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...