реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Гигабит Ethernet: RGMII и PHY 88e1111. Вопросы по взаимодействию
gin
сообщение Oct 9 2017, 07:40
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 17-12-10
Пользователь №: 61 682



Добрый день, господа!
Появилась у меня задача - написать простой 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? Или я опять что то упускаю?

Заранее спасибо!
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 9 2017, 10:24
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 032
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Все правильно. Заметьте - TX_EN является входом PHY, а RX_DV - выходом PHY. Так что не удивительно, что логика разная.
Цитата
А вот при передаче данных на PHY про это ничего не написано. Этот байт также не выделяется стробом TX_EN? Или я опять что то упускаю?
TX_EN должен сопровождать все данные, передаваемые в PHY. Он от себя в выходной поток ничего не добавляет.
Go to the top of the page
 
+Quote Post
Kluwert
сообщение Oct 9 2017, 10:52
Сообщение #3


Частый гость
**

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



TX_EN взводится вместе с первым байтом вступления (кстати, большинство современных сетевых девайсов прекрасно принимают пакеты, даже если все 0x55 отсутствуют, главное, что бы был байт 0xD5) и заканчивается в точности за последним байтом проверочной суммы Eth-пакета. Абсолютно в точности та же хрень на приёме. Учтите, что для 4ых даже топовых Циклонов 125МГц - это уже жестковато, поэтому рекомендую все сигналы (даже GTX_CLK) протаскивать через altddio, иначе потом будете долго за голову хвататься почему "акула" всё красным подсвечивает sm.gif
Go to the top of the page
 
+Quote Post
AVR
сообщение Oct 9 2017, 10:58
Сообщение #4


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 098
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Kluwert @ Oct 9 2017, 13:52) *
рекомендую все сигналы (даже GTX_CLK) протаскивать через altddio, иначе потом будете долго за голову хвататься почему "акула" всё красным подсвечивает sm.gif
Извините что вклиниваюсь, стоит аналогичная задача что и у автора темы, вот эти altddio как спасут здесь? Какую роль они выполняют?


--------------------
Go to the top of the page
 
+Quote Post
Kluwert
сообщение Oct 9 2017, 11:04
Сообщение #5


Частый гость
**

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



Цитата(AVR @ Oct 9 2017, 14:58) *
Извините что вклиниваюсь, стоит аналогичная задача что и у автора темы, вот эти altddio как спасут здесь? Какую роль они выполняют?

Обеспечивают жёсткую времЕнную привязку gtx_clk, стробов и самих данных друг к другу и плюс обеспечивают формирование достаточной крутизны фронтов (на передаче есс-но). Эти мегакоры просто настраивают двухтактные регистры, висящие на входе/выходе соответствующих выводов (см. IOE structure в описании к Циклону). Кстати, учтите один момент, т.к. эти регистры практически прицеплены к самой ноге, то STP дотянуться до них физически не может - посмотреть сигнальчики на этих выходах вы сможете только осциллографом sad.gif
Go to the top of the page
 
+Quote Post
_pv
сообщение Oct 9 2017, 11:08
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 245
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата
вот эти altddio как спасут здесь

RGMII по обоим фронтам клока работает.
Go to the top of the page
 
+Quote Post
gin
сообщение Oct 9 2017, 12:49
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 17-12-10
Пользователь №: 61 682



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


Так они взводятся именно с первым байтом преамбулы (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 или двигаете клок?

Цитата(XVR @ Oct 9 2017, 13:24) *
Все правильно. Заметьте - TX_EN является входом PHY, а RX_DV - выходом PHY. Так что не удивительно, что логика разная.
TX_EN должен сопровождать все данные, передаваемые в PHY. Он от себя в выходной поток ничего не добавляет.


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

Сообщение отредактировал gin - Oct 9 2017, 12:41
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Kluwert
сообщение Oct 10 2017, 08:48
Сообщение #8


Частый гость
**

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



Цитата(gin @ Oct 9 2017, 16:49) *
Так они взводятся именно с первым байтом преамбулы (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ом Циклоне практически не реально.
А вообще, прежде чем вопросы задавать, не плохо бы ознакомится с вами же найденной литературой, сделать пару проектиков, набить шишек и потом уже задавать конкретные вопросы.
Если вы хотите мастер-класса, то можете договориться с вашим работодателем и я могу за определённый гонорар провести обучение. А обучать вас разработке сетевых модулей через форум за бесплатно никакого интереса нету.
Go to the top of the page
 
+Quote Post
AVR
сообщение Oct 10 2017, 09:36
Сообщение #9


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 098
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(Kluwert @ Oct 10 2017, 11:48) *
Если вы хотите мастер-класса, то можете договориться с вашим работодателем и я могу за определённый гонорар провести обучение. А обучать вас разработке сетевых модулей через форум за бесплатно никакого интереса нету.

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


--------------------
Go to the top of the page
 
+Quote Post
gin
сообщение Oct 10 2017, 09:42
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 17-12-10
Пользователь №: 61 682



Цитата(Kluwert @ Oct 10 2017, 11:48) *
Я не знаю, кто чем взводится, но я вам написал выше: всё современное сетевое оборудование прекрасно работает, если даже все 55 пропущены.


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


Цитата(Kluwert @ Oct 10 2017, 11:48) *
Сдвигать клок на 4ом Циклоне практически не реально.


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

Сообщение отредактировал gin - Oct 10 2017, 09:43
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 10 2017, 10:28
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 032
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(gin @ Oct 9 2017, 15:49) *
Например в xgmii логика одинаковая, что на прием, что на передачу. Плюс к тому, что считать данными? Преамбула, CRC, END FRAME BYTE тоже данные или нет?
Принимайте (и игнорируйте) до 0xD5 включительно. Будет работать с любым способом формирования RX_DV
CRC в данные входит (IMHO), по поводу END FRAME BYTE - не знаю (поставьте натурный эксперимент rolleyes.gif )

Go to the top of the page
 
+Quote Post
gin
сообщение Oct 10 2017, 10:47
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 17-12-10
Пользователь №: 61 682



Цитата(XVR @ Oct 10 2017, 13:28) *
Принимайте (и игнорируйте) до 0xD5 включительно. Будет работать с любым способом формирования RX_DV
CRC в данные входит (IMHO), по поводу END FRAME BYTE - не знаю (поставьте натурный эксперимент rolleyes.gif )


Спасибо, буду экспериментировать. Просто сейчас платы под рукой нету, а когда она появится - времени для настройки будет не так много
Go to the top of the page
 
+Quote Post
Magnum
сообщение Oct 11 2017, 03:51
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 26-05-05
Пользователь №: 5 397



Если завернуть шину данных RXD на TXD и соединить RX_DV с TX_EN и соотв. clk, то всё отлично передается, что свидетельствует об однотипности интерфейсов.
Что касается преамбулы по стандарту передающее оборудование обязано формировать 55..55D5 (на передачу). На счет обработки её при приеме в стандарте ограничений нет, но наша задача устойчиво принимать пакет, как вы это реализуете - ваши проблемы, но можно с уверенностью сказать одно - ориентироваться на полную преамбулу не стоит, т.к. встречается оборудование, в т.ч. cisco выдающее периодически усеченную преамбулу. На эти грабли уже многократно наступали и на форуме она ранее описана.
Go to the top of the page
 
+Quote Post
_pv
сообщение Oct 11 2017, 08:53
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 245
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



0х55 в начале преамбулы вроде бы тянется ещё с тех времён когда в приёмниках 10BASE-T реально отдельные PLL стояли в декодерах манчестера, чтобы им было за что спокойно зацепиться в начале перед приёмом фрейма.
Нынче же схемотехника приёмников "немного" поменялась, да и 10ти мбитный езернет вымер давно.
Go to the top of the page
 
+Quote Post
gin
сообщение Oct 11 2017, 14:58
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 168
Регистрация: 17-12-10
Пользователь №: 61 682



Цитата(_pv @ Oct 11 2017, 11:53) *
0х55 в начале преамбулы вроде бы тянется ещё с тех времён когда в приёмниках 10BASE-T реально отдельные PLL стояли в декодерах манчестера, чтобы им было за что спокойно зацепиться в начале перед приёмом фрейма.
Нынче же схемотехника приёмников "немного" поменялась, да и 10ти мбитный езернет вымер давно.


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

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

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th November 2017 - 15:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01328 секунд с 7
ELECTRONIX ©2004-2016