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

Quartus на хочет размещать гигабитные трансиверы

Добрый день!

Прошу помочь с сабжем.

Есть проект под 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 (может какие-то хитрые требования к размещению трансиверов о которых мы не знали :laughing: ).

 

Может кто-то сталкивался с похожими проблемами?

 

P.S. скриншот пин-планера с распиновкой на которую ругается Quartus

image.png

 

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


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

UPDATE

Вроде разобрался, оказывается надо внимательней читать документацию :rolleyes: Хотя осталось не мало непонятных для меня моментов.

Из того что понял:

- в 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.

clock_schemes.png

Для тактирования через xN, как оказалось, нужно пожертвовать одним центральным трансивером, который будет работать только как CMU PLL с делителем. На нашей плате этого не было учтено, и каналы slite2 были разведены в точности по центральным трансиверам. Так что если освободить хоть один центральный трансивер в любом банке - все заработает т.к. он будет работать как CMU PLL.

Screenshot_20170304_160530.png

А вот с тактированием по схеме x1 происходят не совсем мне понятные совсем не понятные вещи:

почему-то необходимо хотя бы один центральный трансивер с каждого банка оставлять не подключенным. Однако в handbook'e нарисовано что при тактировании по схеме x1 будет использоваться CMU PLL центрального трансивера, но сам трансивер при этом может использоавтся по прямому назначению, а какого либо комментария на счет того что его нельзя использовать я так и не смог найти. Единственное предположение - что это как-то связанно с приемной частью трансиверов, там есть ограничение при котором центральный трансивер превращяется в PLL если использоавть согласующее FIFO на входе PCM блока трансивера. Я то не использую их, но других предположентий у меня нет)

 

Если смотреть на схему Альтеровского ArriaV-SoC devkit - они оставили не подключенными все центральные трансиверы во всех банках (кроме банка с PCIe, там только одна из 2-х не подключена).

 

Если кто-то сталкивался с такими ограичениями на размещения трансиверов - напишите, может еще кому-то поможет в схожей ситуации :rolleyes:

 

 

 

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


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

Если кто-то сталкивался с такими ограичениями на размещения трансиверов - напишите, может еще кому-то поможет в схожей ситуации :rolleyes:

Сейчас сижу и разбираюсь. Мне нужно включить все 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-клока, и всё это не влезает.

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


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

Заводил все свои 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 картинка прикреплена.

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


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

Заводил все свои 36 трансиверов на arriaV в следующем режиме - группы по 3/6 в одном логическом канале, native, Bounding mode xN, external pll (number=1, clock network = xN). Частота 1250, все работает как надо.

Версия квартуса какая?

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

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


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

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

У меня CV используется, но думаю для Аррии принципы те же.

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


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

Отличная тема. А вот скажите, удалось ли кому запустить эти с%%ные трансиверы в режиме реконфигурации скорости?

Вот как здесь?

https://www.altera.co.jp/content/altera-www...2012014_13.html

Да, там 2 ФАПЧа на 2 скорости.

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


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

Версия квартуса какая?

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

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


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

Заводил все свои 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 поставил даже.

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


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

Квартус 17.1 не смог развести даже одну группу из 6 xN, которую 12.1 разводил. Выругался на PCS bonding. После отключения последнего дал те же результаты, что 12.1 - хрен мне.

Сам интел пока тоже молчит.

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

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


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

PCS включён?

Включен, протокол базовый 10/8. Вы правильно подключили на внешнюю pll клоки? На каждый логический канал (группу) требуется одна pll, внешний клок на специальную клоковую ногу (каждому триплету соответствует собственная нога, если объединение, скажем, по шести линиям, то любую из двух ног. Нельзя из триплета взять две линии под один канал, а оставшуюся под другой (при настройках, которые я выше описал).

Квартус 17.1 не смог развести даже одну группу из 6 xN, которую 12.1 разводил. Выругался на PCS bonding. После отключения последнего дал те же результаты, что 12.1 - хрен мне.

Что за ошибка? Каким образом Вы объединяете линии, какие настройки трансивера?

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

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


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

Вы удивитесь, но 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 на другой.

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


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

Вот как здесь?

https://www.altera.co.jp/content/altera-www...2012014_13.html

Да, там 2 ФАПЧа на 2 скорости.

 

Ссылку неправильную дал. Правильная:

https://www.altera.com/en_US/pdfs/literature/an/an676.pdf

 

И обшибочка вышла: tx_analogreset(0)=pll_powerdown(0) без инверсии.

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

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


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

Включен, протокол базовый 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

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


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

А что с этим делать?

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, запустил автомат сбросов, далее инициализация и все заново.

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


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

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

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

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

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

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

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

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

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

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