Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ethernet на ПЛИС
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Alexey_pashinov
Здравствуйте, пытаюсь реализовать Ethernet на плис, имеется отладочная плата Xilinx sp605 для отладки. Пока реализовал два нижних уровня: Mac(взял корку xilinx) реализован на плис, для физического уровня на плате стоит PHY - marvell 88e1111. PHY конфигурирую по mdio записывая в 0 регистр: 15 бит (сброс) - 1
8 бит (дуплекс) - 1
6 бит (задает скорость ) - 1 (1000 мб/с)
остальные биты в этом регистре 0.
Далее отсылаю с компа пакет ethernet, чипскопом смотрю что пакет приходит в ядро MAC, в MAC ядре есть блок addr_swap, который этот пакет разворачивает и пакет должен придти обратно на комп. но что происходит, этот пакет застревает на обратном пути на физическом уровне, т.е. я предполагаю что в PHY приемник работает, а передачик нет. кто работал с 88e1111 подскажите, что я упустил при конфигурации

doom13
Если phy подключён к mac по rgmii, то можете попробовать подвигать "клок" относительно данных (регистр 0х14).
Alexey_pashinov
Цитата(doom13 @ May 12 2014, 19:14) *
Если phy подключён к mac по rgmii, то можете попробовать подвигать "клок" относительно данных (регистр 0х14).


phy подключен к mac по gmii
iosifk
Цитата(Alexey_pashinov @ May 12 2014, 19:02) *
Здравствуйте, пытаюсь реализовать Ethernet на плис, имеется отладочная плата Xilinx sp605 для отладки. Пока реализовал два нижних уровня: Mac(взял корку xilinx) реализован на плис, для физического уровня на плате стоит PHY - marvell 88e1111. PHY конфигурирую по mdio записывая в 0 регистр: 15 бит (сброс) - 1
8 бит (дуплекс) - 1
6 бит (задает скорость ) - 1 (1000 мб/с)
остальные биты в этом регистре 0.
Далее отсылаю с компа пакет ethernet, чипскопом смотрю что пакет приходит в ядро MAC, в MAC ядре есть блок addr_swap, который этот пакет разворачивает и пакет должен придти обратно на комп. но что происходит, этот пакет застревает на обратном пути на физическом уровне, т.е. я предполагаю что в PHY приемник работает, а передачик нет. кто работал с 88e1111 подскажите, что я упустил при конфигурации

1. В трансивере, который 10/100 есть 2 вида заглушек. Одна - цифровая (называется режим монитор), а другая - аналоговая. Скорее всего что и в Вашем трансивере это тоже есть. Убираете по MII автосогласование, задаете нижнюю частоту в линии и передаете в дуплексе пакет. Он же и должен приняться... Если правильно стоит адрес или широковещательный пакет... Причем с него и начинайте...
2. Берете кусок кабеля и делаете на нем заглушку. И на него передавайте пакет. Должен встать линк. Когда получите все пакеты, то только тогда переходите на более высокую скорость...
Ну и не забудьте посмотреть "глазок"...
Вот только недавно все эти шаги тут расписывал. Вы бы хоть их прочитали бы...
doom13
Для проверки приёмника и передатчика на уровне PHY попробуйте включить режим loopback (external loopback) и побросать пакеты на PHY с компа, но проблема, как мне кажется, в сечении MAC-PHY.
vadimuzzz
Цитата(Alexey_pashinov @ May 12 2014, 22:02) *
для физического уровня на плате стоит PHY - marvell 88e1111. PHY конфигурирую по mdio записывая в 0 регистр: 15 бит (сброс) - 1
8 бит (дуплекс) - 1
6 бит (задает скорость ) - 1 (1000 мб/с)
остальные биты в этом регистре 0.

для марвела этого не достаточно. помимо указанного необходимо как минимум перевести phy в режим gmii-copper через регистр 0x20 и отключить приблуды для rgmii в регистре 0x14
Alexey_pashinov
Проверил еще раз подключение mac к phy, в ucf все описано верно; включил режим loopback, tx также не работает, обратно отправленные мной пакеты присылать не хочет; есть мысли что нужно вручную устанавливать режим 1000base-t (но loopback и без этого вроде должен работать, для него нужно установить 0.15 - 1, 0.14 - 1 и скорость, что я и делаю), может у кого еще какие мысли есть?
Jury093
Цитата(vadimuzzz @ May 13 2014, 07:15) *
для марвела этого не достаточно. помимо указанного необходимо как минимум перевести phy в режим gmii-copper через регистр 0x20 и отключить приблуды для rgmii в регистре 0x14

у марвела есть пины конфигурации, посредством которых можно выставить нужный режим при включение аппаратно используя комбинации сигналов описанные в мане на камень (раздел 2.4 Hardware configuration)..

2ТС - вы аппаратуру по частям проверяйте..
сначала через MDIO регистры заверните сигнал в сторону меди - и убедитесь, что физика среды исправна
потом аналогично заворот в сторону gmii и добейтесь прохождения пакетов через чип физики
iosifk
Цитата(Alexey_pashinov @ May 13 2014, 11:47) *
Проверил еще раз подключение mac к phy, в ucf все описано верно; включил режим loopback, tx также не работает, обратно отправленные мной пакеты присылать не хочет; есть мысли что нужно вручную устанавливать режим 1000base-t (но loopback и без этого вроде должен работать, для него нужно установить 0.15 - 1, 0.14 - 1 и скорость, что я и делаю), может у кого еще какие мысли есть?

Странно ... Вроде бы Вы читать то должны уметь...
Я же расписал все ходы. Мало? Найдите у меня на сайте статью про 8842, там написано подробнее.
Начните тогда вообще с заглушки внутри ПЛИС. Заведите передачу на прием, подайте частоту вместо трансивера на МАС и проверьте МАС.
Потом принудительно установите НИЖНЮЮ частоту в линии. И ищите линк. Линк есть? И только после установления линка возможна передача.
Ну так давно бы здесь привели всю информацию. Как сконфигурирован трансивер? Модет он вообще в сбросе или ему запрещена передача? Мы что все гадать должны?
Corvus
Собственно, к SP605 есть куча готовых примеров. Может с них и начать? А может ими и закончить, перепилив под свою задачу. rolleyes.gif Раскройте подробнее задачу "реализовать Ethernet на ПЛИС". Может вам пару байт по UDP переслать, а может ftp и web-интерфейс... Решения будут разные.
iosifk
Цитата(Corvus @ May 13 2014, 12:30) *
Собственно, к SP605 есть куча готовых примеров. Может с них и начать? А может ими и закончить, перепилив под свою задачу. rolleyes.gif Раскройте подробнее задачу "реализовать Ethernet на ПЛИС". Может вам пару байт по UDP переслать, а может ftp и web-интерфейс... Решения будут разные.

В любом случае, дальнейшее относится к софту, а МАС и PHY при этом те же самые.
А здесь видимо "прикол" в том, что "хочу свое, но не знаю как"... При этом и "читать и смотреть где-то лень".... И "типа железо само должно заработать", а "мы - только софт любим"...
Alexey_pashinov
Так, еще раз: линк есть, прием есть, пакет приходит на мак и мак разворачивает его назад и пакет застревает на phy, т.е. не работает tx в phy.
При сбросе или включении phy конфигурируется как представлено на прикрепленном рисунке.

Я конфигурирую только регистр 0: 0.15 - 1, 0.8 - 1, 0.6 - 1, осальные 0.
iosifk
Цитата(Alexey_pashinov @ May 13 2014, 12:53) *
Так, еще раз: линк есть, прием есть, пакет приходит на мак и мак разворачивает его назад и пакет застревает на phy, т.е. не работает tx в phy.
При сбросе или включении phy конфигурируется как представлено на прикрепленном рисунке.

Я конфигурирую только регистр 0: 0.1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 000000

Тогда еще раз.
Если есть генератор на PHY и он работает, то:
PHY отправляет "фаст-линк-пульсы"... На другой стороне они принимаются и PHY поднимает флаг "линк"... Далее, если PHY разрешен прием и передача, то он ОБЯЗАН передавать и принимать. В нем нет памяти! Он работает сквозняком. В нем вообще ничего застревать не может...
Давайте сюда диаграмму сигналов по передаче:
Клоки, Tx, строб передачи данных, ошибку передачи данных...
Alexey_pashinov
Вот я и сколняюсь к тому что передача в phy запрещена, это кнч странно, но других обяснений происходящему нет, и нужно изучать регистры конфигурации, что я и делаю
Bad0512
Возможно ТС генерит некорректный пакет(битый CRC, неправильный dest MAC, wrong endianess, etc.), и этот пакет дропается на уровне MAC компутера.
В PHY есть разные счётчики статистические - рекомендую обратить на них внимание.
iosifk
Цитата(Alexey_pashinov @ May 13 2014, 13:15) *
Вот я и сколняюсь к тому что передача в phy запрещена, это кнч странно, но других обяснений происходящему нет, и нужно изучать регистры конфигурации, что я и делаю

Так там же всего 16 основных регистров. А за передачу отвечает еще меньше...
Прочитать по MII и сюда выложить. Но только расписать словами, т.к. никто ковыряться в регистрах и битах не будет... А так, пока будете писать, то Вы и сами их выучите...


Цитата(Bad0512 @ May 13 2014, 13:18) *
Возможно ТС генерит некорректный пакет(битый CRC, неправильный dest MAC, wrong endianess, etc.), и этот пакет дропается на уровне MAC компутера.

сказано же ему было - делай широковещательный пакет и передавай его на заглушку...
А для осциллографа CRC значения не имеет...
Bad0512
Цитата(iosifk @ May 13 2014, 16:30) *
сказано же ему было - делай широковещательный пакет и передавай его на заглушку...
А для осциллографа CRC значения не имеет...

Осциллографом залезть в контроллер Ethernet (они сейчас как правило интегрированные) на материнке проблематично будет.
Ну а в медном интерфейсе проблемно что-то вообще увидеть за исключением link pulses.
Можно передавать броадкасты, но при этом необходимо убедиться, что PHY на компе сконфигурена в promiscous mode.
Иначе она эти пакеты дропать будет.

doom13
Цитата(Alexey_pashinov @ May 13 2014, 10:47) *
включил режим loopback, tx также не работает, обратно отправленные мной пакеты присылать не хочет; есть мысли что нужно вручную устанавливать режим 1000base-t (но loopback и без этого вроде должен работать, для него нужно установить 0.15 - 1, 0.14 - 1 и скорость, что я и делаю), может у кого еще какие мысли есть?


Попробуйте включить Line Loopback 20.14 = 1 и посмотреть уйдёт ли принятый пакет обратно на ПК, вручную скорость не настраивал, всегда использовалось Auto-Negotiation и скорость выбиралась автоматом.


Цитата(Bad0512 @ May 13 2014, 12:47) *
Можно передавать броадкасты, но при этом необходимо убедиться, что PHY на компе сконфигурена в promiscous mode.
Иначе она эти пакеты дропать будет.


Бродкасты пройдут в любом mode, ну и за фильтрацию пакетов отвечает MAC уровень.
iosifk
Цитата(Bad0512 @ May 13 2014, 13:47) *
Осциллографом залезть в контроллер Ethernet (они сейчас как правило интегрированные) на материнке проблематично будет.

ТС написал: " имеется отладочная плата Xilinx sp605"... О какой материнке речь? Любой сигнал на разъем для осцилла можно вывести, да и чип-скоп никто не отменял...
Вообще можно шахматку гнать на трансивер и чередовать их, чтобы PHY увидела окончание преамбулы и через заглушку смотреть, что PHY отдает данные в МАС...
На этом уровне никаких "пакетов", "адресов" и прочего еще не нужно...
Alexey_pashinov
В общем считываю регистры и смотрю их содержимое, вопросов возникает много. Начну с простого. в нулевом регистре есть бит сброса 0.15 и написано что после записи 1 просиходит сброс phy и этот бит автоматически устанавливается в 0. но когда я считываю этот регистр бит сброса попрежнему стоит в 1
doom13
Цитата(Alexey_pashinov @ May 13 2014, 16:20) *
В общем считываю регистры и смотрю их содержимое, вопросов возникает много. Начну с простого. в нулевом регистре есть бит сброса 0.15 и написано что после записи 1 просиходит сброс phy и этот регистр автоматически устанавливается в 0. но когда я считываю этот регистр бит сброса попрежнему стоит в 1

Вот тут какая-то ерунда, должен обнуляться. А для остальных регистров запись-чтение работает правильно?
Alexey_pashinov
Цитата(doom13 @ May 13 2014, 17:27) *
Вот тут какая-то ерунда, должен обнуляться. А для остальных регистров запись-чтение работает правильно?


Ну да, читает вроде правильно, я ведь не знаю что именно записано должно быть в регистрах, но судя по 0 регистру куда я вел запись он считывает то что и записал (хотя должен считывать тоже, только 15 бит ставить в 0)
iosifk
Цитата(Alexey_pashinov @ May 13 2014, 17:20) *
В общем считываю регистры и смотрю их содержимое, вопросов возникает много. Начну с простого. в нулевом регистре есть бит сброса 0.15 и написано что после записи 1 просиходит сброс phy и этот бит автоматически устанавливается в 0. но когда я считываю этот регистр бит сброса попрежнему стоит в 1

А сигнал сброс из ПЛИС на PHY снят?
Alexey_pashinov
Цитата(iosifk @ May 13 2014, 17:37) *
А сигнал сброс из ПЛИС на PHY снят?


Нет, на phy подается '1' (при единице работает в обычном режиме) думаете в этом проблема?
sorok-odin
Цитата(Alexey_pashinov @ May 13 2014, 17:31) *
я ведь не знаю что именно записано должно быть в регистрах,

В регистре 2 находится код изготовителя, всегда читается 0x0141, проверьте.
doom13
Цитата(Alexey_pashinov @ May 13 2014, 16:40) *
Нет, на phy подается '1' (при единице работает в обычном режиме) думаете в этом проблема?

Тут нет проблем, так и должно быть. Единственная проблема с Hard Reset может заключаться в том, что после подачи питания микросхему надо какое-то время подержать в ресете (у нас на одной из плат была такая проблема), но у Вас, похоже, проблема не в этом, т.к. приём работает.
Попробуйте, работает ли loopback через PHY со стороны компа, ещё можно включить в PHY генератор пакетов, если и то и другое работает, то с передатчиком PHY всё нормально. Тогда смотрим ещё раз сечение MAC->PHY.


Цитата(Alexey_pashinov @ May 13 2014, 16:31) *
Ну да, читает вроде правильно, я ведь не знаю что именно записано должно быть в регистрах, но судя по 0 регистру куда я вел запись он считывает то что и записал (хотя должен считывать тоже, только 15 бит ставить в 0)

Попробуйте почитать reg2, должны получить 0х0141 и на reg3 можно чтение mdio потестить (биты 15-10 = 000011, биты 9-4 = 001100).
Alexey_pashinov
Спасибо, завтра прочитаю регистры и опробую режим loopback и тогда отпишусь
SFx
Еще можете Wireshark применить.
Digi
Может немного не в тему, но долго бился с такой проблеммой. При передаче данных с компа на ПЛИС по UDP, пакеты приходили, а если ПЛИС их пытается отправить обратно, переставив МАС, IP и Порт, то до компа ничего не доходит, даже Сниффер ничего не видит. Оказалось все просто, ПЛИС должна была отработать ARP запрос и после этого пакеты стали проходить в обе стороны.
Alexey_pashinov
Извините что долго не отписывался, моя ошибка была в назначении пинов, перепутал tx_clk и gtx_clk, естественно передатчик неправильно тактировался и поэтому не работал. После этого все заработало, так же доделал UDP/IP блок, взяв проект с opencores, если кому-то интересны какие-то детали по реализации могу отписаться что и как делал)

Кстати проект 1G eth UDP / IP Stack взятый с opencores гигабитный, интересно было бы узнать как заставить работь UDP/IP на 100 или 10 Мбит/с?
doom13
Цитата(Alexey_pashinov @ Jun 2 2014, 13:40) *
Извините что долго не отписывался, моя ошибка была в назначении пинов, перепутал tx_clk и gtx_clk, естественно передатчик неправильно тактировался и поэтому не работал. После этого все заработало, так же доделал UDP/IP блок, взяв проект с opencores, если кому-то интересны какие-то детали по реализации могу отписаться что и как делал)

Кстати проект 1G eth UDP / IP Stack взятый с opencores гигабитный, интересно было бы узнать как заставить работь UDP/IP на 100 или 10 Мбит/с?


Если хотите только передавать UDP с максимольно возможной скоростью, то обсуждали тут.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.