gin 0 9 октября, 2017 Опубликовано 9 октября, 2017 · Жалоба Добрый день, господа! Появилась у меня задача - написать простой 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? Или я опять что то упускаю? Заранее спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 9 октября, 2017 Опубликовано 9 октября, 2017 · Жалоба Все правильно. Заметьте - TX_EN является входом PHY, а RX_DV - выходом PHY. Так что не удивительно, что логика разная. А вот при передаче данных на PHY про это ничего не написано. Этот байт также не выделяется стробом TX_EN? Или я опять что то упускаю?TX_EN должен сопровождать все данные, передаваемые в PHY. Он от себя в выходной поток ничего не добавляет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kluwer 0 9 октября, 2017 Опубликовано 9 октября, 2017 · Жалоба TX_EN взводится вместе с первым байтом вступления (кстати, большинство современных сетевых девайсов прекрасно принимают пакеты, даже если все 0x55 отсутствуют, главное, что бы был байт 0xD5) и заканчивается в точности за последним байтом проверочной суммы Eth-пакета. Абсолютно в точности та же хрень на приёме. Учтите, что для 4ых даже топовых Циклонов 125МГц - это уже жестковато, поэтому рекомендую все сигналы (даже GTX_CLK) протаскивать через altddio, иначе потом будете долго за голову хвататься почему "акула" всё красным подсвечивает :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 9 октября, 2017 Опубликовано 9 октября, 2017 · Жалоба рекомендую все сигналы (даже GTX_CLK) протаскивать через altddio, иначе потом будете долго за голову хвататься почему "акула" всё красным подсвечивает :)Извините что вклиниваюсь, стоит аналогичная задача что и у автора темы, вот эти altddio как спасут здесь? Какую роль они выполняют? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kluwer 0 9 октября, 2017 Опубликовано 9 октября, 2017 · Жалоба Извините что вклиниваюсь, стоит аналогичная задача что и у автора темы, вот эти altddio как спасут здесь? Какую роль они выполняют? Обеспечивают жёсткую времЕнную привязку gtx_clk, стробов и самих данных друг к другу и плюс обеспечивают формирование достаточной крутизны фронтов (на передаче есс-но). Эти мегакоры просто настраивают двухтактные регистры, висящие на входе/выходе соответствующих выводов (см. IOE structure в описании к Циклону). Кстати, учтите один момент, т.к. эти регистры практически прицеплены к самой ноге, то STP дотянуться до них физически не может - посмотреть сигнальчики на этих выходах вы сможете только осциллографом :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 77 9 октября, 2017 Опубликовано 9 октября, 2017 · Жалоба вот эти altddio как спасут здесь RGMII по обоим фронтам клока работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 9 октября, 2017 Опубликовано 9 октября, 2017 (изменено) · Жалоба 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 тоже данные или нет? Изменено 9 октября, 2017 пользователем gin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kluwer 0 10 октября, 2017 Опубликовано 10 октября, 2017 · Жалоба Так они взводятся именно с первым байтом преамбулы (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ом Циклоне практически не реально. А вообще, прежде чем вопросы задавать, не плохо бы ознакомится с вами же найденной литературой, сделать пару проектиков, набить шишек и потом уже задавать конкретные вопросы. Если вы хотите мастер-класса, то можете договориться с вашим работодателем и я могу за определённый гонорар провести обучение. А обучать вас разработке сетевых модулей через форум за бесплатно никакого интереса нету. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 10 октября, 2017 Опубликовано 10 октября, 2017 · Жалоба Если вы хотите мастер-класса, то можете договориться с вашим работодателем и я могу за определённый гонорар провести обучение. А обучать вас разработке сетевых модулей через форум за бесплатно никакого интереса нету. Сурово, но справедливо. На самом деле, я бы не стал обижаться на такие слова со стороны автора темы, это вполне нормальная практика. Я такое практикую, когда что-то у самого не получается, то стараюсь нанять человека, который сделает за деньги, а сам продолжаю делать то, что получается самому, помогая в свою очередь кому-то другому с той задачей, с которой уже ему проблематично а мне запросто. Такая вот взаимовыручка, хоть и с примесью грубого материализма :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 10 октября, 2017 Опубликовано 10 октября, 2017 (изменено) · Жалоба Я не знаю, кто чем взводится, но я вам написал выше: всё современное сетевое оборудование прекрасно работает, если даже все 55 пропущены. Я не знаю, что как и насколько хорошо работает современное оборудование при отступлении от требований стандарта. Но знаю точно, что одна из гарантий работоспособности, разрабатываемой аппаратуры - это неукоснительное его соблюдение. Все остальное - это студенческие поделки. Сдвигать клок на 4ом Циклоне практически не реально. А сдвигать клок на четвертом Циклоне - элементарно. Могу вам даже пару вариантов сходу предложить, как это лучше сделать. Так что тут еще вопрос, кто кому мастер класс проводить будет ;) Изменено 10 октября, 2017 пользователем gin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 10 октября, 2017 Опубликовано 10 октября, 2017 · Жалоба Например в xgmii логика одинаковая, что на прием, что на передачу. Плюс к тому, что считать данными? Преамбула, CRC, END FRAME BYTE тоже данные или нет?Принимайте (и игнорируйте) до 0xD5 включительно. Будет работать с любым способом формирования RX_DV CRC в данные входит (IMHO), по поводу END FRAME BYTE - не знаю (поставьте натурный эксперимент :rolleyes: ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 10 октября, 2017 Опубликовано 10 октября, 2017 · Жалоба Принимайте (и игнорируйте) до 0xD5 включительно. Будет работать с любым способом формирования RX_DV CRC в данные входит (IMHO), по поводу END FRAME BYTE - не знаю (поставьте натурный эксперимент :rolleyes: ) Спасибо, буду экспериментировать. Просто сейчас платы под рукой нету, а когда она появится - времени для настройки будет не так много Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Magnum 0 11 октября, 2017 Опубликовано 11 октября, 2017 · Жалоба Если завернуть шину данных RXD на TXD и соединить RX_DV с TX_EN и соотв. clk, то всё отлично передается, что свидетельствует об однотипности интерфейсов. Что касается преамбулы по стандарту передающее оборудование обязано формировать 55..55D5 (на передачу). На счет обработки её при приеме в стандарте ограничений нет, но наша задача устойчиво принимать пакет, как вы это реализуете - ваши проблемы, но можно с уверенностью сказать одно - ориентироваться на полную преамбулу не стоит, т.к. встречается оборудование, в т.ч. cisco выдающее периодически усеченную преамбулу. На эти грабли уже многократно наступали и на форуме она ранее описана. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 77 11 октября, 2017 Опубликовано 11 октября, 2017 · Жалоба 0х55 в начале преамбулы вроде бы тянется ещё с тех времён когда в приёмниках 10BASE-T реально отдельные PLL стояли в декодерах манчестера, чтобы им было за что спокойно зацепиться в начале перед приёмом фрейма. Нынче же схемотехника приёмников "немного" поменялась, да и 10ти мбитный езернет вымер давно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 11 октября, 2017 Опубликовано 11 октября, 2017 · Жалоба 0х55 в начале преамбулы вроде бы тянется ещё с тех времён когда в приёмниках 10BASE-T реально отдельные PLL стояли в декодерах манчестера, чтобы им было за что спокойно зацепиться в начале перед приёмом фрейма. Нынче же схемотехника приёмников "немного" поменялась, да и 10ти мбитный езернет вымер давно. Возможно преамбула - это и рудимент, но раз в стандарте про нее написано, значит надо ее формировать. Верно ведь? Тем более в том же 10-и гигабитном Ethernet она тоже есть. Во всяком случае с ней вроде разобрался. Еще вопросик небольшой есть по поводу управления PHY через MDIO интерфейс. Не нашел даташит Марвелла с описанием внутренних регистров микросхемы 88e1111. Понимаю, что все они стандартные и описаны в спецификации на Etherent. Но все же, может кто то подскажет, какая последовательность записи данных в эти регистры? Кто это уже делал, и кому не жалко поделиться такой информацией. Заранее спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться