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

Гигабит Ethernet: RGMII и PHY 88e1111. Вопросы по взаимодействию

Добрый день, господа!

Появилась у меня задача - написать простой MAC для связи FPGA c ПК по Гигабит Ethernet. Реализовано все это будет на Cyclone 4 (плата DE2 115).

Вроде задача не сложная, но возник вопрос по взаимодействию с PHY (Marvell 88e1111), который установлен на плате.

Обмен данных с PHY будет организован по интерфейсу RGMII. Собственно вопросы следующие:

 

1. Как правильно подавать управляющий сигнал TX_EN (transmit enable)?

В стандарте на Ethernet (параграф 22) есть следующее описание -

It shall
be asserted by the Reconciliation sublayer synchronously with the first nibble of the preamble and shall
remain asserted while all nibbles to be transmitted are presented to the MII

 

Т.е. этим сигналом должны выделяются все байты преамбулы, судя из описания и картинки. Но в то же время, аналогичный сигнал RX_DV (Receive Data Valid), который идет от PHY, судя по описанию, устанавливается несколько иначе -

RX_DV must encompass the frame,
starting no later than the Start Frame Delimiter (SFD) and excluding any End-of-Frame delimiter.

 

Здесь (при приеме от PHY) преамбула не обязана быть выделена этим сигналом. Выделен обязательно должен быть только байт SFD, идущий непосредственно переда байтами данных.

 

2. Правильно ли я понял, что получается немного разная логика формирования управляющих сигналов при приеме и передаче? Или я где то ошибся и есть еще какие то тонкости?

 

3. И как быть с байтом END OF FRAME?

При приеме данных от PHY в описании есть явные указания на то, что он не выделяется сигналом RX_DV.

А вот при передаче данных на PHY про это ничего не написано. Этот байт также не выделяется стробом TX_EN? Или я опять что то упускаю?

 

Заранее спасибо!

post-61682-1507534836_thumb.jpg

post-61682-1507534842_thumb.jpg

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


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

Все правильно. Заметьте - TX_EN является входом PHY, а RX_DV - выходом PHY. Так что не удивительно, что логика разная.

А вот при передаче данных на PHY про это ничего не написано. Этот байт также не выделяется стробом TX_EN? Или я опять что то упускаю?
TX_EN должен сопровождать все данные, передаваемые в PHY. Он от себя в выходной поток ничего не добавляет.

 

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


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

TX_EN взводится вместе с первым байтом вступления (кстати, большинство современных сетевых девайсов прекрасно принимают пакеты, даже если все 0x55 отсутствуют, главное, что бы был байт 0xD5) и заканчивается в точности за последним байтом проверочной суммы Eth-пакета. Абсолютно в точности та же хрень на приёме. Учтите, что для 4ых даже топовых Циклонов 125МГц - это уже жестковато, поэтому рекомендую все сигналы (даже GTX_CLK) протаскивать через altddio, иначе потом будете долго за голову хвататься почему "акула" всё красным подсвечивает :)

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


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

рекомендую все сигналы (даже GTX_CLK) протаскивать через altddio, иначе потом будете долго за голову хвататься почему "акула" всё красным подсвечивает :)
Извините что вклиниваюсь, стоит аналогичная задача что и у автора темы, вот эти altddio как спасут здесь? Какую роль они выполняют?

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


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

Извините что вклиниваюсь, стоит аналогичная задача что и у автора темы, вот эти altddio как спасут здесь? Какую роль они выполняют?

Обеспечивают жёсткую времЕнную привязку gtx_clk, стробов и самих данных друг к другу и плюс обеспечивают формирование достаточной крутизны фронтов (на передаче есс-но). Эти мегакоры просто настраивают двухтактные регистры, висящие на входе/выходе соответствующих выводов (см. IOE structure в описании к Циклону). Кстати, учтите один момент, т.к. эти регистры практически прицеплены к самой ноге, то STP дотянуться до них физически не может - посмотреть сигнальчики на этих выходах вы сможете только осциллографом :(

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


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

TX_EN взводится вместе с первым байтом вступления (кстати, большинство современных сетевых девайсов прекрасно принимают пакеты, даже если все 0x55 отсутствуют, главное, что бы был байт 0xD5) и заканчивается в точности за последним байтом проверочной суммы Eth-пакета. Абсолютно в точности та же хрень на приёме. Учтите, что для 4ых даже топовых Циклонов 125МГц - это уже жестковато, поэтому рекомендую все сигналы (даже GTX_CLK) протаскивать через altddio, иначе потом будете долго за голову хвататься почему "акула" всё красным подсвечивает :)

 

Так они взводятся именно с первым байтом преамбулы (0x55) или байтом SFD (0xD5 - который непосредственно переда данными)?

И еще, правильно ли я понял, что для 1 Gb преамбула будет такая - 55 55 55 55 55 55 55, затем D5?

Например, в 10 Gb (xgmii) несколько иная она - FB 55 55 55 55 55 55, затем D5.

 

А по поводу клока GTX_CLK - идея кстати не плохая, использовать DDR.

 

Сейчас еще немного покопался в описании на Etherent - вот нашел такие таблички (правда они для MII, для RGMII ничего нет):

И вот там, что RX_DV, что TX_EN - устанавливаются именно вместе с первым байтом преамбулы (который 0x55)

 

И еще по поводу клока, у Альтеры есть такой апликейшн ноут - AN 477: Designing RGMII Interfaceswith FPGAs and HardCopy ASICs

Так там написано, что необходимо дополнительно настраивать внешний PHY на прием клока. Если не настраивать - то необходимо самому сдвигать фазу выходного клока на 90 градусов.

Кто как делает: настраиваете PHY или двигаете клок?

 

Все правильно. Заметьте - TX_EN является входом PHY, а RX_DV - выходом PHY. Так что не удивительно, что логика разная.

TX_EN должен сопровождать все данные, передаваемые в PHY. Он от себя в выходной поток ничего не добавляет.

 

Например в xgmii логика одинаковая, что на прием, что на передачу. Плюс к тому, что считать данными? Преамбула, CRC, END FRAME BYTE тоже данные или нет?

post-61682-1507552815_thumb.jpg

post-61682-1507552824_thumb.jpg

post-61682-1507553234_thumb.jpg

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

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


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

Так они взводятся именно с первым байтом преамбулы (0x55) или байтом SFD (0xD5 - который непосредственно переда данными)?

И еще, правильно ли я понял, что для 1 Gb преамбула будет такая - 55 55 55 55 55 55 55, затем D5?

Например, в 10 Gb (xgmii) несколько иная она - FB 55 55 55 55 55 55, затем D5.

 

А по поводу клока GTX_CLK - идея кстати не плохая, использовать DDR.

 

 

И еще по поводу клока, у Альтеры есть такой апликейшн ноут - AN 477: Designing RGMII Interfaceswith FPGAs and HardCopy ASICs

Так там написано, что необходимо дополнительно настраивать внешний PHY на прием клока. Если не настраивать - то необходимо самому сдвигать фазу выходного клока на 90 градусов.

Кто как делает: настраиваете PHY или двигаете клок?

Я не знаю, кто чем взводится, но я вам написал выше: всё современное сетевое оборудование прекрасно работает, если даже все 55 пропущены.

По клоку: настраивать физику по MDIO (хотя у некоторых это делается по умолчанию), если она такое вообще позволяет. Сдвигать клок на 4ом Циклоне практически не реально.

А вообще, прежде чем вопросы задавать, не плохо бы ознакомится с вами же найденной литературой, сделать пару проектиков, набить шишек и потом уже задавать конкретные вопросы.

Если вы хотите мастер-класса, то можете договориться с вашим работодателем и я могу за определённый гонорар провести обучение. А обучать вас разработке сетевых модулей через форум за бесплатно никакого интереса нету.

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


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

Если вы хотите мастер-класса, то можете договориться с вашим работодателем и я могу за определённый гонорар провести обучение. А обучать вас разработке сетевых модулей через форум за бесплатно никакого интереса нету.

Сурово, но справедливо. На самом деле, я бы не стал обижаться на такие слова со стороны автора темы, это вполне нормальная практика. Я такое практикую, когда что-то у самого не получается, то стараюсь нанять человека, который сделает за деньги, а сам продолжаю делать то, что получается самому, помогая в свою очередь кому-то другому с той задачей, с которой уже ему проблематично а мне запросто. Такая вот взаимовыручка, хоть и с примесью грубого материализма :)

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


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

Я не знаю, кто чем взводится, но я вам написал выше: всё современное сетевое оборудование прекрасно работает, если даже все 55 пропущены.

 

Я не знаю, что как и насколько хорошо работает современное оборудование при отступлении от требований стандарта. Но знаю точно, что одна из гарантий работоспособности, разрабатываемой аппаратуры - это неукоснительное его соблюдение. Все остальное - это студенческие поделки.

 

 

Сдвигать клок на 4ом Циклоне практически не реально.

 

А сдвигать клок на четвертом Циклоне - элементарно. Могу вам даже пару вариантов сходу предложить, как это лучше сделать.

Так что тут еще вопрос, кто кому мастер класс проводить будет ;)

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

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


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

Например в xgmii логика одинаковая, что на прием, что на передачу. Плюс к тому, что считать данными? Преамбула, CRC, END FRAME BYTE тоже данные или нет?
Принимайте (и игнорируйте) до 0xD5 включительно. Будет работать с любым способом формирования RX_DV

CRC в данные входит (IMHO), по поводу END FRAME BYTE - не знаю (поставьте натурный эксперимент :rolleyes: )

 

 

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


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

Принимайте (и игнорируйте) до 0xD5 включительно. Будет работать с любым способом формирования RX_DV

CRC в данные входит (IMHO), по поводу END FRAME BYTE - не знаю (поставьте натурный эксперимент :rolleyes: )

 

Спасибо, буду экспериментировать. Просто сейчас платы под рукой нету, а когда она появится - времени для настройки будет не так много

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


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

Если завернуть шину данных RXD на TXD и соединить RX_DV с TX_EN и соотв. clk, то всё отлично передается, что свидетельствует об однотипности интерфейсов.

Что касается преамбулы по стандарту передающее оборудование обязано формировать 55..55D5 (на передачу). На счет обработки её при приеме в стандарте ограничений нет, но наша задача устойчиво принимать пакет, как вы это реализуете - ваши проблемы, но можно с уверенностью сказать одно - ориентироваться на полную преамбулу не стоит, т.к. встречается оборудование, в т.ч. cisco выдающее периодически усеченную преамбулу. На эти грабли уже многократно наступали и на форуме она ранее описана.

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


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

0х55 в начале преамбулы вроде бы тянется ещё с тех времён когда в приёмниках 10BASE-T реально отдельные PLL стояли в декодерах манчестера, чтобы им было за что спокойно зацепиться в начале перед приёмом фрейма.

Нынче же схемотехника приёмников "немного" поменялась, да и 10ти мбитный езернет вымер давно.

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


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

0х55 в начале преамбулы вроде бы тянется ещё с тех времён когда в приёмниках 10BASE-T реально отдельные PLL стояли в декодерах манчестера, чтобы им было за что спокойно зацепиться в начале перед приёмом фрейма.

Нынче же схемотехника приёмников "немного" поменялась, да и 10ти мбитный езернет вымер давно.

 

Возможно преамбула - это и рудимент, но раз в стандарте про нее написано, значит надо ее формировать. Верно ведь? Тем более в том же 10-и гигабитном Ethernet она тоже есть. Во всяком случае с ней вроде разобрался.

 

Еще вопросик небольшой есть по поводу управления PHY через MDIO интерфейс. Не нашел даташит Марвелла с описанием внутренних регистров микросхемы 88e1111. Понимаю, что все они стандартные и описаны в спецификации на Etherent. Но все же, может кто то подскажет, какая последовательность записи данных в эти регистры? Кто это уже делал, и кому не жалко поделиться такой информацией.

Заранее спасибо!

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


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

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

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

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

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

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

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

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

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

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