deadmazay 0 12 декабря, 2017 Опубликовано 12 декабря, 2017 · Жалоба Использую контроллер реконфигурации один на все линии в логическом канале - в настройке interface bundles задается кол-во линий, остальное не выделено, т.е. без всякой реконфигурации PLL. Я так понял из описания, что MIF можно игнорировать, если не используется реконфигурация. Контроллер кроме неё отвечает за калибровку, но для неё эта хрень тоже не требуется. В общем, раскидал я 24 трансивера, чтобы было 16 каналов на одной скорости и 8 - на другой. Получилась такая картина: - на одной стороне ПЛИС 12 одинаковых трансиверов на 1 Гбит/c, связанные через xN по 6. Вместе с 2 fPLL и 2 REFCLK. Тут всё хорошо. - на другой стороне 4 по 1 Гбит/с, связанные через xN, свой fFPLL и REFCLK - потом 2 по 3,1 Гбит/с, не связанные (x1), от отделньго fPLL - и завершает всё 6 шт по 3,1 Гбит/с по xN, от отдельного fPLL, REFCLK общий с предыдущей парой. Короче, внутри тройки квартус вполне себе разводит трансиверы на разной скорости - один связан с соседней тройкой по x6/xN, а 2 других имеют отдельный fPLL по линиям x1. Засада ещё осталась в этом самом контроллере конфигурации. Если контроллер один на всех, то всё ОК. Но у меня 8 каналов включены обязательно (местный XAUI), а 16 - к ним может даже REFCLK не прийти. Но связь по XAUI должна быть, чтобы это диагностировать. Соответственно восьмёрка должна калиброваться сразу при включении, а остальные 16 - когда REFCLK появится. И фигня получилась в том, что 2 контроллера реконфигурации по описанию не могут расшарить между собой тройку. Пока остановился на том, что они точно не могут работать от разных клоков. Потому что внутри всей этой трансиверной кухни есть некий, скрытый от пользователя, но передаваемый от контроллера калибровочный такт cal_clk, и он один на каждую сторону ПЛИС. И вроде бы калибровка скважности, которая мешает расшарить тройку, не обязательна на моих скоростях, но не отключается в визарде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectr 0 21 декабря, 2017 Опубликовано 21 декабря, 2017 · Жалоба Так удалось кому-нибудь в итоге сделать двухскоростные трансиверы? Да так чтобы все задействовались. Я много чего попробовал, но - безрезультатно. А как-то сообщество молчит. То ли никто этого не делал, то все шифруются )) https://electronix.ru/forum/index.php?showt...=140385&hl= https://www.alteraforum.com/forum/showthrea...&highlight= Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
deadmazay 0 22 декабря, 2017 Опубликовано 22 декабря, 2017 (изменено) · Жалоба Так удалось кому-нибудь в итоге сделать двухскоростные трансиверы? Да так чтобы все задействовались. Я много чего попробовал, но - безрезультатно. А как-то сообщество молчит. То ли никто этого не делал, то все шифруются )) https://electronix.ru/forum/index.php?showt...=140385&hl= https://www.alteraforum.com/forum/showthrea...&highlight= По идее всё задействуются за счёт использования fPLL в качестве TX PLL. А для переключения скорости надо реконфигурировать (сменить делители) в RX PLL и TX PLL или в Central Clock Divider. fPLL - конфигурится отдельно, через её собственный реконфигуратор. RX PLL и делитель конфигурятся через общий реконфигуратор трансиверов, который работает с тройками. В арии 5 нельзя к тройке подключить 2 реконфигуратора - отдельные для трансиверов и PLL/CDR. В циклоне 5 скорее всего также. Частота fPLL должна быть равна половине скорости передачи. У fPLL есть выход DPA - к трансиверам подключается именно он. А протокол обмена какой? Если скорость меняется в 4 раза, то её можно и не переключать. На низкой скорости можно ставить приёмник в режим LTR и обрабатывать в режиме оверсэмплинга программно. Но, если нужно 8B/10B - это тоже придётся программно делать. Ну и заглядывай в Chip Planner, когда хоть что-то удаётся собрать. Увидишь, сколько и каких блоков задействовано. Изменено 22 декабря, 2017 пользователем DeadMazay Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectr 0 28 декабря, 2017 Опубликовано 28 декабря, 2017 · Жалоба DeadMazay, спасибо за советы. Пробую потихонечку различные варианты, пока глухо. Протокол STM-4/16 (622.08/2488.32), соответственно мне нужен режим LTD (LTR и оверсемплинг, получается, что не подходит). От трансивера нужно только принять/передать байты - вся протокольная логика делается дальше за его пределами. Вот такой эксперимент сделал. Один инстанс трансивера, один ресет контроллер, внешняя fpll, реконфигуратор: Попытка 1: - 1..7 каналов - 1 скорость 622.08 - Bonding xN - TX FPLL (311.04) - реконфигуратор (1 интерфейс) Результат: ОК Попытка 2: - 8-9 каналов - 1 скорость 622.08 - Bonding xN - TX FPLL (311.04) - реконфигуратор (1 интерфейс) Результат: ошибка на фиттере Error (14996): The Fitter failed to find a legal placement for all periphery components Info (14987): The following components had the most difficulty being legally placed: Info (175029): auto-promoted clock driver xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pcs:inst_av_pcs|av_pcs_ch:ch[6].inst_av_pcs_ch|av_hssi_tx_pld_pcs_interface_rbc:inst_av_hssi_tx_pld_pcs_interface|pld8gtxclkout~CLKENA0 (13%) Info (175029): auto-promoted clock driver xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pcs:inst_av_pcs|av_pcs_ch:ch[6].inst_av_pcs_ch|av_hssi_rx_pld_pcs_interface_rbc:inst_av_hssi_rx_pld_pcs_interface|pld8grxclkout~CLKENA0 (13%) Info (175029): auto-promoted clock driver xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pcs:inst_av_pcs|av_pcs_ch:ch[5].inst_av_pcs_ch|av_hssi_tx_pld_pcs_interface_rbc:inst_av_hssi_tx_pld_pcs_interface|pld8gtxclkout~CLKENA0 (13%) Info (175029): auto-promoted clock driver xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pcs:inst_av_pcs|av_pcs_ch:ch[5].inst_av_pcs_ch|av_hssi_rx_pld_pcs_interface_rbc:inst_av_hssi_rx_pld_pcs_interface|pld8grxclkout~CLKENA0 (13%) Info (175029): Transmitter channel for I/O xcvr_tx[6] (13%) Info (175029): Transmitter channel for I/O xcvr_tx[5] (9%) Info (175029): Transmitter channel for I/O xcvr_tx[7] (7%) Info (175029): auto-promoted clock driver xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pcs:inst_av_pcs|av_pcs_ch:ch[4].inst_av_pcs_ch|av_hssi_tx_pld_pcs_interface_rbc:inst_av_hssi_tx_pld_pcs_interface|pld8gtxclkout~CLKENA0 (5%) Info (175029): auto-promoted clock driver xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pcs:inst_av_pcs|av_pcs_ch:ch[4].inst_av_pcs_ch|av_hssi_rx_pld_pcs_interface_rbc:inst_av_hssi_rx_pld_pcs_interface|pld8grxclkout~CLKENA0 (5%) Info (175029): Transmitter channel for I/O xcvr_tx[4] (3%) Error (14986): After placing as many components as possible, the following errors remain: Error (175001): Could not place 1 HSSI AVMM Interface, which is within Cyclone V Transceiver Native PHY xcvr Info (14596): Information about the failing component(s): Info (175028): The HSSI AVMM Interface name(s): xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_xcvr_avmm:inst_av_xcvr_avmm|avmm_interface_insts[7].av_hssi_avmm_interface_inst Error (16234): No legal location could be found out of 3 considered location(s). Reasons why each location could not be used are summarized below: Error (178013): Node is not compatible with other nodes placed at the same location either because there are too few available HSSI AVMM Interface locations, or the nodes belong to different transceiver reconfiguration groups, or both. (1 location affected) Info (175029): HSSIAVMMINTERFACE_X0_Y35_N86. Already placed at this location: HSSI AVMM Interface xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_xcvr_avmm:inst_av_xcvr_avmm|avmm_interface_insts[0].av_hssi_avmm_interface_inst Error (175006): Could not find path between the HSSI AVMM Interface and destination HSSI PMA TX Buffer Info (175027): Destination: HSSI PMA TX Buffer xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[7].av_tx_pma_ch_inst|tx_pma_ch.tx_pma_buf.tx_pma_buf Error (175022): The HSSI AVMM Interface could not be placed in any location to satisfy its connectivity requirements Info (175021): The HSSI PMA TX Buffer was placed in location HSSIPMATXBUF_X0_Y43_N34 Info (175029): 2 locations affected Info (175029): HSSIAVMMINTERFACE_X0_Y11_N86. 3 other HSSI AVMM Interfaces are being routed to this region. Info (175029): HSSIAVMMINTERFACE_X0_Y23_N86. 3 other HSSI AVMM Interfaces are being routed to this region. Картинка с фиттера с удачной компиляции 7 каналов: Как видите, есть полностью свободные два блока. Почему он их не хочет задействовать? Насколько я понимаю из ошибок, он не может подцепить реконфигуратор. Но тогда как? Я вот сейчас попробовал сделать два отдельных 3-канальных инстанса с отдельными реконфигураторами (ну чтобы всё по-честному - один реконфигуратор на один триплет) - так он и их не хочет собирать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectr 0 28 декабря, 2017 Опубликовано 28 декабря, 2017 · Жалоба Итак, чего удалось добиться. Проект состоит из: - Ресет-контроллер. - Отдельная FPLL со своим реконфигуратором. - Трансивер в режиме внешней PLL (для двух скоростей использую две TXPLL). - Базовая скорость трансивера 622.08 (и 322.04 у FPLL соответственно). - Реконфигуратор трансивера (количество его каналов тоже меняется в соответствии с трансивером, включен режим MIF). Что получается: При количестве каналов от 1 до 6 - всё собирается отлично. При количестве каналов от 7 до 8 получаю ошибку фиттера: Info (170193): Fitter routing operations beginning Error (170084): Can't route signal "xcvr:inst3|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[0].av_tx_pma_ch_inst|tx_pma_ch.int_wire_clk[0]" to atom "xcvr:inst3|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[6].gen_bonded_group_native.av_xcvr_native_inst|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[0].av_tx_pma_ch_inst|tx_pma_ch.tx_cgb" Error (170084): Can't route signal "xcvr:inst3|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[0].av_tx_pma_ch_inst|tx_pma_ch.int_wire_clk[0]" to atom "xcvr:inst3|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[6].gen_bonded_group_native.av_xcvr_native_inst|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[0].av_tx_pma_ch_inst|tx_pma_ch.tx_cgb" Info (170194): Fitter routing operations ending: elapsed time is 00:00:01 В целом уже лучше )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectr 0 28 декабря, 2017 Опубликовано 28 декабря, 2017 · Жалоба Убрал ресеты, и ресет-контроллер вообще из проекта - ничего не изменилось, ошибки остались те же. Пробовал ставить ALTCLKCTRL перед FPLL - не помогает. После FPLL - не дает, т.к. хочет чтобы клок в трансивер шел с PLL напрямую. Попробовал использовать Transceiver PLL - тоже не помогает, ошибки те же. Есть идеи? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
deadmazay 0 28 декабря, 2017 Опубликовано 28 декабря, 2017 (изменено) · Жалоба Что получается: При количестве каналов от 1 до 6 - всё собирается отлично. При количестве каналов от 7 до 8 получаю ошибку фиттера Я детально не разбирался в циклоне 5, но на арии 5 нельзя от одного fPLL запустить больше 6 или 7 передатчиков. Я задействовал 2 fPLL на 12 трансиверов, по 6 передатчиков на каждый fPLL. Возможно даже, что от единственного REFCLK заработает. Протокол STM-4/16 (622.08/2488.32), соответственно мне нужен режим LTD (LTR и оверсемплинг, получается, что не подходит). Можно включить трансиверы постоянно на 2488 Мбит в режиме LTD. А на 622 переключать в LTR и получать оверсэмплинг в 4 раза. Только ресет-контроллеру нужно не забыть об этом сказать, если он работает по сигналу rx_is_lockedtodata. Изменено 28 декабря, 2017 пользователем DeadMazay Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectr 0 29 декабря, 2017 Опубликовано 29 декабря, 2017 · Жалоба Как раз сегодня ночью меня тоже осенило что возможно нужно питать трансиверные триплеты отдельными PLL-ками. В-общем, после ряда экспериментов оно наконец-то собралось - все 9 трансиверов в дуплексном двухскоростном режиме с поддержкой реконфигурации! То что мне и нужно! Структура проекта получилась следующая: 3 блока, каждый состоящий из: - FPLL с частотой 311.04 - PLL Reconfiguration controller - Трансивер в дуплексном режиме (External PLL - 2 штуки, TXPLL0=622.08, TXPLL1=2488.32, у обоих TXPLL - Bonding x1) 1 общий блок Transceiver Reconfiguration Controller (9 каналов, сгруппированные в 3 группы по 3 канала) FPLL питаются двумя клоками - один питает одну, второй клок питает оставшиеся две FPLL (а каждая FPLL в свою очередь питает по 3 канала каждого трансивера (точнее 6 каналов, т.к. 3 канала по 2 скорости)). Опорный клок для RXCDR - один общий. Клок/ресет для всех реконфигураторов - один общий. Что стоит отметить отдельно: 1. Я сначала пошел по простому пути и просто скопировал (копипастнул) трансивер с FPLL три раза. И оно не собралось. После тушения жопы и подключения мозгов оказалось что ему необходимо иметь не просто разные инстансы трансиверов, а именно разно созданные ядра, пусть и с одинаковыми в моем случае настройками. 2. FPLL тоже нужны в виде именно отдельно созданных IP-ядер. 3. Реконфигуратор трансивера допускается только одним инстансом (но в настройках можно разбить каналы на группы как нужно). Несколько реконфигураторов (например, 3 по 3 канала) - не собирает. 4. Реконфигуратор для FPLL можно использовать в виде одного ядра, просто скопипащенного 3 несколько раз. 5. Запитать 3 FPLL от одного клока не получилось - пришлось задействовать две клоковые ножки. Хочу отдельной строкой сказать спасибо DeadMazay за помощь! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
deadmazay 0 29 декабря, 2017 Опубликовано 29 декабря, 2017 · Жалоба 3 блока, каждый состоящий из: - FPLL с частотой 311.04 - Трансивер в дуплексном режиме (External PLL - 2 штуки, TXPLL0=622.08, TXPLL1=2488.32, у обоих TXPLL - Bonding x1) 1 общий блок Transceiver Reconfiguration Controller (9 каналов, сгруппированные в 3 группы по 3 канала) Дык получается на каждую тройку 2 ФАПЧа должно быть - если они подключаются как TXPLL0 и TXPLL1? Или всё-таки один ФАПЧ реконфигурируется? Или у ФАПЧа много выходов DPA? FPLL питаются двумя клоками - один питает одну, второй клок питает оставшиеся две FPLL (а каждая FPLL в свою очередь питает по 3 канала каждого трансивера (точнее 6 каналов, т.к. 3 канала по 2 скорости)). Опорный клок для RXCDR - один общий. 5. Запитать 3 FPLL от одного клока не получилось - пришлось задействовать две клоковые ножки. Я запитывал 2шт. FPLL от того же опорного клока, что и 8шт. RXCDR, то есть с одной выделенной ноги REFCLK Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
deadmazay 0 29 декабря, 2017 Опубликовано 29 декабря, 2017 · Жалоба А у меня эта кухня заработала уже в железе. То же всем спасибо, с Новым Годом! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectr 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Снова дошли руки до этого проекта. И возникла очередная заминка. С приёмом данных всё в порядке - поток приходит, разворачивается в байты и всё хорошо. Проблема с передачей - передатчик вообще ничего не передаёт. Совсем. Если включить pre- и post-CDR завороты, то на передающие пины данные выводятся, что говорит о том что уровень PMA работает нормально и проблема где-то выше - в PCS части. Измерительный прибор данные видит и успешно восстанавливает частоту. Но если завернуть поток на уровне PCS - после десериализации (ну например, соединить rx_parallel_data b tx_parallel_data), то на выходных пинах - тишина. TX часть не висит в сбросе - все сигналы индицируют что передатчик откалибровался и готов работать. Я перепробовал, пожалуй, все возможные варианты и ничего пока не помогает: - передавать биты задом наперед - двигать биты сигналом tx_bitslip - инвертировать полярность - крутить настройки TXPLL, integer, fractional режим - тактировать tx разными клоками И всё равно на выходе - 0. У кого это хозяйство работает - что вы делали для передачи? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
deadmazay 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Проблема с передачей - передатчик вообще ничего не передаёт. Совсем. Если включить pre- и post-CDR завороты, то на передающие пины данные выводятся, что говорит о том что уровень PMA работает нормально и проблема где-то выше - в PCS части. Измерительный прибор данные видит и успешно восстанавливает частоту. Не понял вопроса. Он всё-таки передаёт, или не передаёт? Заворот post-CDR работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectr 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Не понял вопроса. Он всё-таки передаёт, или не передаёт? Заворот post-CDR работает? Если включить заворот post-CDR, то да, работает. Но в этом случае работает только PMA-часть трансивера, PCS не задействуется. Если же заворот выключить и руками завернуть параллельные шинки rx на tx (ну или просто подать константу), то не работает - на выходе ничего нет. Кстати, а какой частотой (каким значением) должен тактироваться передающий тракт (tx_coreclkin)? Такой же, которую выдает CDR после восстановления? Как-то не очень ясен этот момент. Есть подозрение что проблема в этом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
deadmazay 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Если включить заворот post-CDR, то да, работает. Но в этом случае работает только PMA-часть трансивера, PCS не задействуется. Если же заворот выключить и руками завернуть параллельные шинки rx на tx (ну или просто подать константу), то не работает - на выходе ничего нет. Кстати, а какой частотой (каким значением) должен тактироваться передающий тракт (tx_coreclkin)? Такой же, которую выдает CDR после восстановления? Как-то не очень ясен этот момент. Есть подозрение что проблема в этом. Я имею в виду шлейф Serial Loopback из даташита. В этом случае и PCS, и PMA работают. На tx_coreclkin подаётся локальная частота, не из CDR. Это частота интерфейса между логикой и PCS. Её можно взять из передатчика, или прямо от генератора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectr 0 16 мая, 2018 Опубликовано 16 мая, 2018 · Жалоба В результате ряда экспериментов на serial loopback'e выяснилось что на tx_std_clkout выходит частота вдвое большая, чем надо. Ожидается 77.76, а выходит 155.52. Скорость передачи 622.08 Мбит/с, TX FPLL настроена корректно: - частота 311.04, параметры трансивера тоже: - Data rate = 622.08 - TX local clock division factor = 1 - PCS width = 8 bits Что интересно, RX часть трансивера работает отлично - CDR лочится и выдает ожидаемую 77.76 (ширина шины после десереализации - 8 бит). Теперь понятно почему RX не видит TX :)))) Но вот почему частоты приемного и передающего каналов различаются - ума не приложу пока. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться