|
Quartus на хочет размещать гигабитные трансиверы |
|
|
|
Mar 3 2017, 07:17
|
Частый гость
 
Группа: Свой
Сообщений: 76
Регистрация: 8-04-11
Из: Ростов-на-Дону
Пользователь №: 64 227

|
Добрый день! Прошу помочь с сабжем. Есть проект под ArriaV-SX в котором должно размещаться 8 одноканальных (1 link) SerialLite-2 корок. В 5-м семействе из slite2 управление трансиверов вынесено в отдельную корку custom_phy (пробовал использовать 2 варианта подключения: по одной 1-канальной custom_phy на каждую кору slite2, и одна 8-канальная custom_phy на все slite2). Собственно, сама проблема - Quartus (16.1) не хочет размещать все это добро на кристалле с определенной распиновкой. В этом камне 3 гигабитных банка [2:0]. На плате эти 8 каналов разведены по всем 3-м банкам, с такой конфигурацией Quartus неминуемо фейлится с сообщением: Код Error (14566): The Fitter cannot place 8 periphery component(s) due to conflicts with existing constraints (8 Clock Divider(s)). Error (175001): The Fitter cannot place 1 Clock Divider, which is within Custom PHY custom_phy_sl2. Info (14596): Information about the failing component(s): Info (175028): The Clock Divider name(s): slite2_wrp:array_of_slite2[4]....|tx_pma_ch.master_cgb_inst[0].tx_cgb_master Error (16234): No legal location could be found out of 22 considered location(s). Error (178004): Could not find location for destination Clock Divider that enable routing of bonding clock lines Info (175027): Destination: Clock Divider slite2_wrp:array_of_slite2[4]:...|tx_pma_ch.tx_cgb ... Error (11238): The following 8 Clock Divider locations are already occupied, and the Fitter cannot merge the previously placed nodes with these instances. The nodes may have incompatible inputs or parameters. Error (11239): Location HSSIPMATXCGB_X0_Y11_N33 is already occupied by slite2_wrp:array_of_slite2[3] Error (11239): Location HSSIPMATXCGB_X0_Y15_N33 is already occupied by slite2_wrp:array_of_slite2[2] .... Как я понимаю он берет какой-то экземпляр корки, например slite[2], пытается разместить "clock devider", для это перебирает все указанные GXB каналы, обнаруживает что все заняты (хотя при этом в сообщении будет указанно что место такое-то для корки slite2[2] уже занято коркой slite2[2]), после чего фэйлится. Если убрать назначения пинов, то он разместит трансиверы в банках 1-2, при этом проект собирается. Пробовал перебирать комбинации банков, количества трансиверов в них, опорных клоков, опций биндинга между каналами. Без биндинга собирается только комбинация с использованием 1-2 банков, с биндингом - любых 2-х. Но вот как заставить его принять размещение в 3-х банках... В userguids на Ariia-V и custom_phy не нашел специфичных условий на размещение сразу в 3-х банках. Плата кастомная, поэтому вполне возможна ошибка с распиновкой GXB (может какие-то хитрые требования к размещению трансиверов о которых мы не знали  ). Может кто-то сталкивался с похожими проблемами? P.S. скриншот пин-планера с распиновкой на которую ругается Quartus
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 30)
|
Mar 4 2017, 13:17
|
Частый гость
 
Группа: Свой
Сообщений: 76
Регистрация: 8-04-11
Из: Ростов-на-Дону
Пользователь №: 64 227

|
UPDATE Вроде разобрался, оказывается надо внимательней читать документацию  Хотя осталось не мало непонятных для меня моментов. Из того что понял: - в Arria-V все трансиверы разделены по банкам; - в каждом банке по 6 полнодуплексных трансиверов. В понятие "полнодуплексный трансивер" включают один RX и один TX трансиверы + канальная PLL + своя схеме деления клока "clock devider"; - каждый банк поделен на 2 полу-банка - верхний и нижний; - в каждом полу-банке (т.е. 3 трансивера) в среднем трансивере стоит "central PLL", тогда как в оставшихся 2-х "local PLL". Central PLL являются более производительными (для GT и ST кристаллов), и могут питать клоком другие трансиверы, тогда как local - только самих себя; - есть 3 схемы тактирования трансиверов: x1, x6, xN. В схеме x1 - каждый трансивер питается через свой локальный делитель, В схемах x6, xN - клок проходит через центральный, потом через локальный. Причем в xN режиме можно питать одним клоком все трансиверы на той-же самой стороне кристалла, на которой находится сама питающая CMU PLL.  Для тактирования через xN, как оказалось, нужно пожертвовать одним центральным трансивером, который будет работать только как CMU PLL с делителем. На нашей плате этого не было учтено, и каналы slite2 были разведены в точности по центральным трансиверам. Так что если освободить хоть один центральный трансивер в любом банке - все заработает т.к. он будет работать как CMU PLL.  А вот с тактированием по схеме x1 происходят не совсем мне понятные совсем не понятные вещи: почему-то необходимо хотя бы один центральный трансивер с каждого банка оставлять не подключенным. Однако в handbook'e нарисовано что при тактировании по схеме x1 будет использоваться CMU PLL центрального трансивера, но сам трансивер при этом может использоавтся по прямому назначению, а какого либо комментария на счет того что его нельзя использовать я так и не смог найти. Единственное предположение - что это как-то связанно с приемной частью трансиверов, там есть ограничение при котором центральный трансивер превращяется в PLL если использоавть согласующее FIFO на входе PCM блока трансивера. Я то не использую их, но других предположентий у меня нет) Если смотреть на схему Альтеровского ArriaV-SoC devkit - они оставили не подключенными все центральные трансиверы во всех банках (кроме банка с PCIe, там только одна из 2-х не подключена). Если кто-то сталкивался с такими ограичениями на размещения трансиверов - напишите, может еще кому-то поможет в схожей ситуации
|
|
|
|
|
Dec 6 2017, 16:11
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-11-09
Пользователь №: 53 611

|
Цитата(R6L-025 @ Mar 4 2017, 16:17)  Если кто-то сталкивался с такими ограичениями на размещения трансиверов - напишите, может еще кому-то поможет в схожей ситуации  Сейчас сижу и разбираюсь. Мне нужно включить все 24 трансивера в дуплексе на 24-трансиверной ArriaV. 8 шт. на 3,125 Гбит/с, и 16 шт. - на 2,5 Гбит/с. По описанию это можно сделать, если взять в качестве ФАПЧа передатчиков не CMU, а fPLL. Примерно как здесь: https://www.altera.co.jp/content/altera-www...2012014_13.htmlИ вроде от одной fPLL можно 6 трансиверов запитать, но пока не получается - квартус (12.1) выставляет лишний распределитель TX-клока, и всё это не влезает.
|
|
|
|
|
Dec 7 2017, 12:10
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Заводил все свои 36 трансиверов на arriaV в следующем режиме - группы по 3/6 в одном логическом канале, native, Bounding mode xN, external pll (number=1, clock network = xN). Частота 1250, все работает как надо. Но два момента: 1. Жрет по мощности это чудо прилично (использовал датчик alt_temp_sense, за пару минут нагревается до 95 градусов, охлаждайзер пришлось ставить). 2. При добавлении других внешних интерфейсов по максимуму (типа DDR3) и логической большой загрузке требует добавление грамотных ограничений (проблемы с клоковыми ресурсами, приходится прибивать гвоздями расположение pll). PS/ Там в документации много неочевидных (с первого взгляда) вещей, например, если использовать два трансивера из одного логического триплета в одном логическом канале, то то оставшийся уже не задействовать ну или один трансивер в некоторых режимах используется под CMU PLL, причем не абы какой, а конкретный - 0 или 4 из банка (вроде), ну это в посте 2 картинка прикреплена.
|
|
|
|
|
Dec 7 2017, 13:43
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-11-09
Пользователь №: 53 611

|
Цитата(bogaev_roman @ Dec 7 2017, 15:10)  Заводил все свои 36 трансиверов на arriaV в следующем режиме - группы по 3/6 в одном логическом канале, native, Bounding mode xN, external pll (number=1, clock network = xN). Частота 1250, все работает как надо. Версия квартуса какая?
Сообщение отредактировал DeadMazay - Dec 7 2017, 13:45
|
|
|
|
|
Dec 7 2017, 13:57
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Отличная тема. А вот скажите, удалось ли кому запустить эти с%%ные трансиверы в режиме реконфигурации скорости? Я так и не смог - либо все на одной скорости, либо все на другой. А так, чтобы в процессе работы скорость переключать - не шмогла, даже скомпилить не получается. Такое чувство что ему, если например, используется трансивер в двухскоростном режиме, надо две PLL. Соответственно, т.к. у меня 9 трансиверов должны уметь работать на двух скоростях, то надо иметь 18 PLL. Ну бред же. А использовать внешнюю PLL (fpll, txpll) тоже не получается - не хочет собираться... У меня CV используется, но думаю для Аррии принципы те же.
|
|
|
|
|
Dec 7 2017, 14:04
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-11-09
Пользователь №: 53 611

|
Цитата(spectr @ Dec 7 2017, 16:57)  Отличная тема. А вот скажите, удалось ли кому запустить эти с%%ные трансиверы в режиме реконфигурации скорости? Вот как здесь? https://www.altera.co.jp/content/altera-www...2012014_13.htmlДа, там 2 ФАПЧа на 2 скорости.
|
|
|
|
|
Dec 7 2017, 14:56
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-11-09
Пользователь №: 53 611

|
Цитата(bogaev_roman @ Dec 7 2017, 15:10)  Заводил все свои 36 трансиверов на arriaV в следующем режиме - группы по 3/6 в одном логическом канале, native, Bounding mode xN, external pll (number=1, clock network = xN). Частота 1250, все работает как надо. PCS включён? Мне удалось все, группируя по 3 шт через x1, развести. Не не сгруппировать мне тройки так, чтобы 8 шт было на одной скорости и 16 шт на другой. Вроде и подобрал такую комбинацию через x1 и x6, что даташит разрешает развести тактовые, но не лезет. Уже квартус 17.1 поставил даже.
|
|
|
|
|
Dec 8 2017, 07:53
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-11-09
Пользователь №: 53 611

|
Квартус 17.1 не смог развести даже одну группу из 6 xN, которую 12.1 разводил. Выругался на PCS bonding. После отключения последнего дал те же результаты, что 12.1 - хрен мне. Сам интел пока тоже молчит.
Сообщение отредактировал DeadMazay - Dec 8 2017, 07:54
|
|
|
|
|
Dec 8 2017, 15:29
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(DeadMazay @ Dec 7 2017, 17:56)  PCS включён? Включен, протокол базовый 10/8. Вы правильно подключили на внешнюю pll клоки? На каждый логический канал (группу) требуется одна pll, внешний клок на специальную клоковую ногу (каждому триплету соответствует собственная нога, если объединение, скажем, по шести линиям, то любую из двух ног. Нельзя из триплета взять две линии под один канал, а оставшуюся под другой (при настройках, которые я выше описал). Цитата Квартус 17.1 не смог развести даже одну группу из 6 xN, которую 12.1 разводил. Выругался на PCS bonding. После отключения последнего дал те же результаты, что 12.1 - хрен мне. Что за ошибка? Каким образом Вы объединяете линии, какие настройки трансивера? ЗЫ. Самое главное забыл - тип трансивера - native, в документации было прописано, что только в нем можно заточить внешнюю pll(уже с полгода прошло, так что пишу по памяти, может для некотрых семейств по-другому или версийй).
|
|
|
|
|
Dec 10 2017, 10:22
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-11-09
Пользователь №: 53 611

|
Цитата(bogaev_roman @ Dec 7 2017, 17:42)  Вы удивитесь, но 13.1. Сейчас на 17.0 перехожу, но буду ли переводить проект на него, не знаю - там многие корки обновлений потребуют. Решилась проблемка! Спасибо всем, особенно Роману. Поставил 13.1, как у него. А вот уже 13.1 мне при компиляции один умный вещь сказал: - Не могу, - говорит, - слить свой лишний тактовый делитель с остальными, потому что у них ресеты разные. Это уже что-то. 12.1 и 17.1 ругались на гораздо большее число различий. Дальше я залез в код, сгенерённый мегафункцией Native PHY, и увидел следующую картину: В режиме "PCS bonded" квартус генерит кучу каналов и к ним дополнительный тактовый распределитель. Который, оказывается, сбрасывается ногой pll_powerdown. Все остальные блоки, с которыми квартус собрался слить этот распределитель, сбрасываются через tx_analogreset. И чтобы всё влезло, похоже нужно иметь tx_analogreset(0)=~pll_powerdown(0). И ещё убило - в коде этом так, невзначай, местами написано "// TODO - Examine resets"... В своём проекте на pll_powerdown я вообще забил - fPLL то у меня внешняя. А tx/rx_analog/digitalreset используются. Как только я все ресеты отключил, квартус сам автоматом заполнил мне всю левую сторону ПЛИС 12-ю трансиверами без вопросов. В общем осталось немного - восстановить ресеты и из 24-х сделать 8 на одной скорости и 16 на другой.
|
|
|
|
|
Dec 11 2017, 12:02
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-11-09
Пользователь №: 53 611

|
Цитата(DeadMazay @ Dec 7 2017, 17:04)  Ссылку неправильную дал. Правильная: https://www.altera.com/en_US/pdfs/literature/an/an676.pdfИ обшибочка вышла: tx_analogreset(0)=pll_powerdown(0) без инверсии.
Сообщение отредактировал DeadMazay - Dec 11 2017, 12:21
|
|
|
|
|
Dec 11 2017, 13:38
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-11-09
Пользователь №: 53 611

|
Цитата(bogaev_roman @ Dec 8 2017, 18:29)  Включен, протокол базовый 10/8. Вы правильно подключили на внешнюю pll клоки? На каждый логический канал (группу) требуется одна pll, внешний клок на специальную клоковую ногу (каждому триплету соответствует собственная нога, если объединение, скажем, по шести линиям, то любую из двух ног. Нельзя из триплета взять две линии под один канал, а оставшуюся под другой (при настройках, которые я выше описал).
Что за ошибка? Каким образом Вы объединяете линии, какие настройки трансивера? ЗЫ. Самое главное забыл - тип трансивера - native, в документации было прописано, что только в нем можно заточить внешнюю pll(уже с полгода прошло, так что пишу по памяти, может для некотрых семейств по-другому или версийй). Да, тоже Native PHY, PCS xN, PMA xN, 8B/10B, RateMatchFIFO. А что с этим делать? Warning (15104): Quartus II software detected a bonding design. Reconfiguration is not supported for Bonded designs and MIF is not created for this design. Оно вообще нужно? Всё компилится и без MIF-файлов. У альтеры написано, что эта ошибка возникает в версии <=12.0, а я в 13.1. Нужно ли этот варнинг исправлять, как там у них написано (сгенерить MIF для несвязанных трансиверов)?
Сообщение отредактировал DeadMazay - Dec 11 2017, 13:54
|
|
|
|
|
Dec 11 2017, 14:46
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(DeadMazay @ Dec 11 2017, 16:38)  А что с этим делать? Warning (15104): Quartus II software detected a bonding design. Reconfiguration is not supported for Bonded designs and MIF is not created for this design. Оно вообще нужно? Всё компилится и без MIF-файлов. У альтеры написано, что эта ошибка возникает в версии <=12.0, а я в 13.1. Нужно ли этот варнинг исправлять, как там у них написано (сгенерить MIF для несвязанных трансиверов)? Использую контроллер реконфигурации один на все линии в логическом канале - в настройке interface bundles задается кол-во линий, остальное не выделено, т.е. без всякой реконфигурации PLL. Соответственно, подобных предупреждений поиском в своем отчете не нашел. У меня завелось все с ходу, подробно с контроллером не разбирался, ну мне как бы и не требовалось перенастраивать трансиверные каналы - подал сброс, произошла инициализация, совпали паттерны, пошел информационный обмен. Произошел сбой в любой линии (условие ошибки или не выделяется частота из входного потока данных) - все по новой - сбросил внешнюю pll, запустил автомат сбросов, далее инициализация и все заново.
|
|
|
|
|
Dec 12 2017, 15:21
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-11-09
Пользователь №: 53 611

|
Цитата(bogaev_roman @ Dec 11 2017, 17:46)  Использую контроллер реконфигурации один на все линии в логическом канале - в настройке 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, и он один на каждую сторону ПЛИС. И вроде бы калибровка скважности, которая мешает расшарить тройку, не обязательна на моих скоростях, но не отключается в визарде.
|
|
|
|
|
Dec 22 2017, 11:36
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-11-09
Пользователь №: 53 611

|
Цитата(spectr @ Dec 21 2017, 13:20)  Так удалось кому-нибудь в итоге сделать двухскоростные трансиверы? Да так чтобы все задействовались. Я много чего попробовал, но - безрезультатно. А как-то сообщество молчит. То ли никто этого не делал, то все шифруются )) 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, когда хоть что-то удаётся собрать. Увидишь, сколько и каких блоков задействовано.
Сообщение отредактировал DeadMazay - Dec 22 2017, 17:07
|
|
|
|
|
Dec 28 2017, 08:45
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
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-канальных инстанса с отдельными реконфигураторами (ну чтобы всё по-честному - один реконфигуратор на один триплет) - так он и их не хочет собирать.
|
|
|
|
|
Dec 28 2017, 10:23
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Итак, чего удалось добиться. Проект состоит из: - Ресет-контроллер. - Отдельная 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 В целом уже лучше ))
|
|
|
|
|
Dec 28 2017, 19:59
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-11-09
Пользователь №: 53 611

|
Цитата(spectr @ Dec 28 2017, 13:23)  Что получается: При количестве каналов от 1 до 6 - всё собирается отлично. При количестве каналов от 7 до 8 получаю ошибку фиттера Я детально не разбирался в циклоне 5, но на арии 5 нельзя от одного fPLL запустить больше 6 или 7 передатчиков. Я задействовал 2 fPLL на 12 трансиверов, по 6 передатчиков на каждый fPLL. Возможно даже, что от единственного REFCLK заработает. Цитата(spectr @ Dec 28 2017, 11:45)  Протокол STM-4/16 (622.08/2488.32), соответственно мне нужен режим LTD (LTR и оверсемплинг, получается, что не подходит). Можно включить трансиверы постоянно на 2488 Мбит в режиме LTD. А на 622 переключать в LTR и получать оверсэмплинг в 4 раза. Только ресет-контроллеру нужно не забыть об этом сказать, если он работает по сигналу rx_is_lockedtodata.
Сообщение отредактировал DeadMazay - Dec 28 2017, 20:00
|
|
|
|
|
Dec 29 2017, 09:39
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Как раз сегодня ночью меня тоже осенило что возможно нужно питать трансиверные триплеты отдельными 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 за помощь!
|
|
|
|
|
Dec 29 2017, 11:34
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-11-09
Пользователь №: 53 611

|
Цитата(spectr @ Dec 29 2017, 12:39)  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? Цитата(spectr @ Dec 29 2017, 12:39)  FPLL питаются двумя клоками - один питает одну, второй клок питает оставшиеся две FPLL (а каждая FPLL в свою очередь питает по 3 канала каждого трансивера (точнее 6 каналов, т.к. 3 канала по 2 скорости)). Опорный клок для RXCDR - один общий.
5. Запитать 3 FPLL от одного клока не получилось - пришлось задействовать две клоковые ножки. Я запитывал 2шт. FPLL от того же опорного клока, что и 8шт. RXCDR, то есть с одной выделенной ноги REFCLK
|
|
|
|
|
Dec 29 2017, 15:21
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-11-09
Пользователь №: 53 611

|
А у меня эта кухня заработала уже в железе. То же всем спасибо, с Новым Годом!
|
|
|
|
|
May 11 2018, 08:53
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Снова дошли руки до этого проекта. И возникла очередная заминка. С приёмом данных всё в порядке - поток приходит, разворачивается в байты и всё хорошо. Проблема с передачей - передатчик вообще ничего не передаёт. Совсем.
Если включить pre- и post-CDR завороты, то на передающие пины данные выводятся, что говорит о том что уровень PMA работает нормально и проблема где-то выше - в PCS части. Измерительный прибор данные видит и успешно восстанавливает частоту.
Но если завернуть поток на уровне PCS - после десериализации (ну например, соединить rx_parallel_data b tx_parallel_data), то на выходных пинах - тишина. TX часть не висит в сбросе - все сигналы индицируют что передатчик откалибровался и готов работать. Я перепробовал, пожалуй, все возможные варианты и ничего пока не помогает: - передавать биты задом наперед - двигать биты сигналом tx_bitslip - инвертировать полярность - крутить настройки TXPLL, integer, fractional режим - тактировать tx разными клоками
И всё равно на выходе - 0. У кого это хозяйство работает - что вы делали для передачи?
|
|
|
|
|
May 11 2018, 10:13
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-11-09
Пользователь №: 53 611

|
Цитата(spectr @ May 11 2018, 11:53)  Проблема с передачей - передатчик вообще ничего не передаёт. Совсем.
Если включить pre- и post-CDR завороты, то на передающие пины данные выводятся, что говорит о том что уровень PMA работает нормально и проблема где-то выше - в PCS части. Измерительный прибор данные видит и успешно восстанавливает частоту. Не понял вопроса. Он всё-таки передаёт, или не передаёт? Заворот post-CDR работает?
|
|
|
|
|
May 11 2018, 11:52
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
Цитата(DeadMazay @ May 11 2018, 13:13)  Не понял вопроса. Он всё-таки передаёт, или не передаёт? Заворот post-CDR работает? Если включить заворот post-CDR, то да, работает. Но в этом случае работает только PMA-часть трансивера, PCS не задействуется. Если же заворот выключить и руками завернуть параллельные шинки rx на tx (ну или просто подать константу), то не работает - на выходе ничего нет. Кстати, а какой частотой (каким значением) должен тактироваться передающий тракт (tx_coreclkin)? Такой же, которую выдает CDR после восстановления? Как-то не очень ясен этот момент. Есть подозрение что проблема в этом.
|
|
|
|
|
May 11 2018, 15:13
|
Участник

Группа: Участник
Сообщений: 15
Регистрация: 13-11-09
Пользователь №: 53 611

|
Цитата(spectr @ May 11 2018, 14:52)  Если включить заворот post-CDR, то да, работает. Но в этом случае работает только PMA-часть трансивера, PCS не задействуется. Если же заворот выключить и руками завернуть параллельные шинки rx на tx (ну или просто подать константу), то не работает - на выходе ничего нет.
Кстати, а какой частотой (каким значением) должен тактироваться передающий тракт (tx_coreclkin)? Такой же, которую выдает CDR после восстановления? Как-то не очень ясен этот момент. Есть подозрение что проблема в этом. Я имею в виду шлейф Serial Loopback из даташита. В этом случае и PCS, и PMA работают. На tx_coreclkin подаётся локальная частота, не из CDR. Это частота интерфейса между логикой и PCS. Её можно взять из передатчика, или прямо от генератора.
|
|
|
|
|
May 16 2018, 14:04
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
В результате ряда экспериментов на 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  ))) Но вот почему частоты приемного и передающего каналов различаются - ума не приложу пока.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|