Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ArriaV, native transceiver, external pll, режим CDR
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
bogaev_roman
На нескольких платах потребовалось завести все имеющиеся трансиверы (независимы). Для этой цели выбрал режим native с external pll в базовой конфигурации. Написал простейшую обвязку из логики сброса, подстройки и начальной синхронизации ну и генератора ПСП. В качестве CDR клока подаю входной клок на специальную ногу. Т. к. разные концы трансивера находятся на разных платах, то при отсутствии на входе сигнала rx_is_lockedtodata запускается сброс и начинается начальная синхронизация. Ну и, соответственно, в случае, если трансиверы питаются от одного генератора опорной частоты, после начальной синхронизации все работает стабильно, ошибок нет. Но если соединяю две платы (генераторы опорной частоты разные), то через некоторое время падает rx_is_lockedtodata.
Соответственно вопрос - я неправильно понимаю логику работы CDR (я считал, что этот блок из входного потока данных благодаря кодированию 8b/10b выделяет опорную частоту -всегда)? Получается, что для правильной работы требуется периодически заново синхронизироваться?
Magnum
Нет, что-то неправильно настроили, всё должно работать. Конечно для наглядности и понимания было бы неплохо схемку всей установке.
bogaev_roman
Цитата(Magnum @ Aug 9 2017, 13:34) *
Нет, что-то неправильно настроили, всё должно работать. Конечно для наглядности и понимания было бы неплохо схемку всей установке.

Да я просто документацию, похоже, читать не умею. Как я понял CDR работает сначала с опорной частотой и только потом подстраивается под входной поток данных, после этого сигнал rx_is_lockedtoref становится неактуальным (для контроля работы и перезапуска приемопередатчика я его использовал), а в качестве контрольного сигнала нужно использовать rx_is_lockedtodata. После этапа отладки, если все будет стабильно работать отпишусь.
bogaev_roman
Цитата(bogaev_roman @ Aug 9 2017, 13:59) *
После этапа отладки, если все будет стабильно работать отпишусь.

Стабильно не работает. В случае передачи непрерывной последовательности синхросимволов BC все работает без сбоев, при попытке вставить в передачу обычные данные периодически возникают ошибки - rx_errdetect. Изменение скважности и периодичности синхроимпульсов на ситуацию не влияет - в последнем случае передавал последовательно 32 синхроимпульса и 32 слова данных, после подстройки стабильно вываливается ошибка через 2^20 тактов.
novartis
я может глупость спрошу: а скрамблер там вставить не надо?
bogaev_roman
Цитата(novartis @ Aug 15 2017, 14:33) *
я может глупость спрошу: а скрамблер там вставить не надо?

Да, похоже, мелочь какую-то и упустил. Что за скрамблер?
novartis
скрамблер из вашего потока данных делает поток, в котором единицы/нули идут с равной вероятностью.
Соответственно блоку cdr будет легче получить опорную частоту.
Скрамблер ставите на выходе.
На входе дескрамблер.
bogaev_roman
Цитата(novartis @ Aug 15 2017, 14:55) *
скрамблер из вашего потока данных делает поток, в котором единицы/нули идут с равной вероятностью.
Соответственно блоку cdr будет легче получить опорную частоту.
Скрамблер ставите на выходе.
На входе дескрамблер.

Для этих вроде целей используется кодирование 8b/10b, для определения границ слова используется синхрослово BC, которое кодируется в 17С и последовательно передается по линии.
novartis
У вас выбран режим Standart PCS? И там установлены галки Enable TX 8/10 и Enable RX 8/10?
Я с таким режимом не работал...
bogaev_roman
Цитата(novartis @ Aug 15 2017, 15:13) *
У вас выбран режим Standart PCS? И там установлены галки Enable TX 8/10 и Enable RX 8/10?

Да, я к сожалению не могу прикрепить настройки трансивера, попробую так описать главное:
Код
        .tx_enable                       (1),
        .rx_enable                       (1),
        .enable_std                      (1),
        .data_path_select                ("standard"),
        .channels                        (6),
        .bonded_mode                     ("xN"),
        .data_rate                       ("1250 Mbps"),
        .pma_width                       (10),
        .tx_pma_clk_div                  (1),
        .pll_reconfig_enable             (0),
        .pll_external_enable             (1),
        .pll_data_rate                   ("1250 Mbps"),
        .pll_type                        ("CMU"),
        .pma_bonding_mode                ("xN"),
        .plls                            (1),
        .pll_select                      (0),
        .pll_refclk_cnt                  (1),
        .pll_refclk_select               ("0"),
        .pll_refclk_freq                 ("125.0 MHz"),
        .pll_feedback_path               ("internal"),
        .cdr_reconfig_enable             (0),
        .cdr_refclk_cnt                  (1),
        .cdr_refclk_select               (0),
        .cdr_refclk_freq                 ("125.0 MHz"),
        .rx_ppm_detect_threshold         ("1000"),
        .rx_clkslip_enable               (0),
        .std_protocol_hint               ("basic"),
        .std_pcs_pma_width               (10),
        .std_low_latency_bypass_enable   (0),
        .std_tx_pcfifo_mode              ("register_fifo"),
        .std_rx_pcfifo_mode              ("register_fifo"),
        .std_rx_byte_order_enable        (0),
        .std_rx_byte_order_mode          ("manual"),
        .std_rx_byte_order_width         (9),
        .std_rx_byte_order_symbol_count  (1),
        .std_rx_byte_order_pattern       ("0"),
        .std_rx_byte_order_pad           ("0"),
        .std_tx_byte_ser_enable          (0),
        .std_rx_byte_deser_enable        (0),
        .std_tx_8b10b_enable             (1),
        .std_tx_8b10b_disp_ctrl_enable   (0),
        .std_rx_8b10b_enable             (1),
        .std_rx_rmfifo_enable            (0),
        .std_rx_rmfifo_pattern_p         ("00000"),
        .std_rx_rmfifo_pattern_n         ("00000"),
        .std_tx_bitslip_enable           (1),
        .std_rx_word_aligner_mode        ("sync_sm"),
        .std_rx_word_aligner_pattern_len (10),
        .std_rx_word_aligner_pattern     ("17c"),
        .std_rx_word_aligner_rknumber    (3),
        .std_rx_word_aligner_renumber    (1),
        .std_rx_word_aligner_rgnumber    (3),
        .std_rx_run_length_val           (31),
        .std_tx_bitrev_enable            (0),
        .std_rx_bitrev_enable            (0),
        .std_tx_byterev_enable           (0),
        .std_rx_byterev_enable           (0),
        .std_tx_polinv_enable            (0),
        .std_rx_polinv_enable            (0)

Цитата
Я с таким режимом не работал...

А у Вас с какими настройками стабильно работало в режиме CDR?
Magnum
По симптомам походит на скремблеронедостаточность. Нужно понимать что если включен 8b/10b, то скорость данных 1Гб/с, а выходной поток после кодирования будет уже 1.25Гб/с и частоты задавать соответственно.
При использовании скремблера (без кодера 8b/10b) можно получить полную скорость 1.25Гб/с.
bogaev_roman
А кто-нибудь знает, в каком документе описаны требования к частотам, являющимся опорными для трансиверов ну и максимальное отклонение в ppm при работе CDR (помимо документа io switching characteristics)?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.