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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Подключение компьютера к LAN через FPGA
EgorTol
сообщение Jan 24 2013, 14:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 23-01-13
Пользователь №: 75 311



Задача: требуется подключить компьютер через FPGA с помощью Ethernet к локальной сети с интернетом и другими компьютерами.

Исходные данные:
1) Компьютер (обычный)
2) Плата с FPGA (Cyclone III), двумя микросхемами PHY (RTL8201bl) и двумя трансформаторами для сети Ethernet.
3) Роутер D-LINK (DI-804 HV)
4) Кабели категории 5Е с разъёмами RJ-45.

Решение:
1) Схема подключения:
Компьютер<--->плата с FPGA<--->роутер<--->сеть/интернет.

2) Берем кабели и подключаем все компоненты согласно схеме подключения.

3) Пишем код в FPGA и программируем её.

4) Работаем.

Описание работы и взаимодействия FPGA и PHY:
Плата с FPGA, микросхемами и разъемами выглядит так:
Трансформатор<--->PHY<--->FPGA<--->PHY<--->Трансформатор
PHY и FPGA связаны интерфейсом MII.

Описание кода для FPGA:
В FPGA реализован асинхронный буфер, который с одной стороны принмает данные от PHY по интерфейсу MII и потом передает эти же данные в другой PHY также по интерфейсу MII и наоборот (т.е. в обратную сторону).

Описание проблемы: Если компьютер подключить просто к сети, без FPGA, то максимальная скорость передачи данных равна 11,5 МБайт/сек, если подключить через FPGA, то скорость падает до 10,9 МБайт/сек.

Диагностика:
1) с помощью SignalTap определно, что буфер не переполняется и не опустошается (гарантированно), пакеты не обрываются (гарантированно), преамбула не повреждена (гарантированно), данные не повреждаются (маловероятно, что повреждаются в FPGA).
2) с помощью программы Wireshark было установленно, что компьютер или сервер посылает дублированные запросы на передачу данных, что говорит о том, что некая часть данных теряется, а теряется скорее всего из-за того что в каком-то месте пакет повреждается, а поврежденный пакет отбрасывается.

Просьба о помощи: Задача вроде крайне простая, но никак не удается достичь передачи данных без потерь и на максимальной скорости, если кто сталкивался с подобной задачей, просьба подсказать в чем может быть проблема. Буду очень благодарен.

P.S. буфер реализован с помощью MegaWizard. Управление буфером тоже очень простое, могу выложить код на Verilog.
P.S.2 не знаю в какую тему форума писать, так как задача объединяет и язык Verilog, и интерфейсы, и FPGA.

Спасибо за внимание. sm.gif


Go to the top of the page
 
+Quote Post
telix
сообщение Jan 24 2013, 17:07
Сообщение #2


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

Группа: Свой
Сообщений: 118
Регистрация: 9-12-12
Из: Курск
Пользователь №: 74 767



Фото платы в студию, может у Вас LAN разведен так, что данные теряются, может FIFO теряет пакеты, нужно больше информации. Раз пакеты теряются, то либо на физическом уровне, либо на программном. Запустите тесты на просто передачу пакетов от FPGA к компьютеру на максимальной скорости и посмотрите, какая скорость. Чтобы FPGA сама генерила разные пакеты и пуляла их в комп. Затем повторите это со вторым каналом. Если скорость будет максимальная и потерь не будет, значит проблема в программе и FIFO.
А если пакеты будут теряться значит искать что именно портит пакеты.

Сообщение отредактировал telix - Jan 24 2013, 17:09


--------------------
улыбаемся ...
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jan 24 2013, 17:59
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(EgorTol @ Jan 24 2013, 18:41) *
Задача: требуется подключить компьютер через FPGA с помощью Ethernet к локальной сети с интернетом и другими компьютерами.

А почему вместо FPGA не взять микросхемку 3 или 5-ти портового свитча? И гарантированно будет работать без всяких прошивок... Например у Микрела свитч с физикой сразу...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Alex11
сообщение Jan 24 2013, 21:59
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Вообще-то странно. На 100 Мб должно работать абсолютно без сбоев. Циклон3 даже гига-ethernet тянет без сбоев. Попробуйте для начала выкинуть буфера и соединить две физики проводами в Циклоне. Если будет работать правильно, надо будет искать ошибки в проекте, а если нет - в разводке и электричестве.
Go to the top of the page
 
+Quote Post
EgorTol
сообщение Jan 25 2013, 08:03
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 23-01-13
Пользователь №: 75 311



Цитата(telix @ Jan 24 2013, 21:07) *
Фото платы в студию, может у Вас LAN разведен так, что данные теряются, может FIFO теряет пакеты, нужно больше информации. Раз пакеты теряются, то либо на физическом уровне, либо на программном. Запустите тесты на просто передачу пакетов от FPGA к компьютеру на максимальной скорости и посмотрите, какая скорость. Чтобы FPGA сама генерила разные пакеты и пуляла их в комп. Затем повторите это со вторым каналом. Если скорость будет максимальная и потерь не будет, значит проблема в программе и FIFO.
А если пакеты будут теряться значит искать что именно портит пакеты.


Фото пока не могу предоставить, в понедельник может быть. Могу сказать сразу, что разведено всё "соплями". Где они там в FIFO могут потеряться? Считал количество принятых и переданных пакетов на входе и выходе FPGA, вроде всё совпадает. Сделать тест для генерации можно, хотя не слишком просто, надо поднимать сеть: компьютер<--->FPGA, для этого надо MAC-контроллер реализовывать? А еще как скорость в таком случае посмотреть? На данный момент я просто скачиваю большой файл из сети и смотрю скорость.

Цитата(iosifk @ Jan 24 2013, 21:59) *
А почему вместо FPGA не взять микросхемку 3 или 5-ти портового свитча? И гарантированно будет работать без всяких прошивок... Например у Микрела свитч с физикой сразу...


В дальнейшем необходимо обрабатывать некоторые пакеты с помощью FPGA.

Цитата(Alex11 @ Jan 25 2013, 01:59) *
Вообще-то странно. На 100 Мб должно работать абсолютно без сбоев. Циклон3 даже гига-ethernet тянет без сбоев. Попробуйте для начала выкинуть буфера и соединить две физики проводами в Циклоне. Если будет работать правильно, надо будет искать ошибки в проекте, а если нет - в разводке и электричестве.


Попробовал. Потери большие, скорость настолько низкая, что нельзя определить какая она sm.gif
Go to the top of the page
 
+Quote Post
sorok-odin
сообщение Jan 25 2013, 18:19
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 23-12-12
Пользователь №: 74 946



Цитата(EgorTol @ Jan 24 2013, 18:41) *
1) Схема подключения:
Компьютер<--->плата с FPGA<--->роутер<--->сеть/интернет.

Отсекаем все лишнее, попробуйте Компьютер<--->плата с FPGA<--->второй компьютер.

Цитата(EgorTol @ Jan 24 2013, 18:41) *
1) с помощью SignalTap определно, что буфер не переполняется и не опустошается (гарантированно), пакеты не обрываются (гарантированно), преамбула не повреждена (гарантированно), данные не повреждаются (маловероятно, что повреждаются в FPGA).

TX_ER и RX_ER на MII ни разу не возникают?

Цитата(EgorTol @ Jan 24 2013, 18:41) *
2) с помощью программы Wireshark было установленно, что компьютер или сервер посылает дублированные запросы на передачу данных, что говорит о том, что некая часть данных теряется, а теряется скорее всего из-за того что в каком-то месте пакет повреждается, а поврежденный пакет отбрасывается.

Приложите лог-файл вайршарка, лучше снятого и у передатчика, и у приемника (естественно, одной и той же передачи). Сильно большой файл не надо, вдруг там что-то такое, что сразу бросится в глаза.

Я так понимаю, вы скачиваете какой-то файл из расшаренной папки, или фтп, или чего-то подобного высокоуровнего. Отсекайте и их. Найдите в интернете любой простейший генератор траффика (сырых Ethernet пакетов, IP или UDP, но не TCP) и пошлите мильён пакетов (на разных скоростях), у приемника вайршарком посчитаете, посмотрите, есть ли пакеты со сбойной CRC. Так вы гарантированно установите, повреждает ли ПЛИС данные.

Вдруг ваша ПЛИС вносит некую маленькую, но достаточно ощутимую задержку для пакетов, и передатчик, не дождавшись квитанции о доставке пакета, посылает его еще раз. Конечно, это очень маловероятно, но если вы все равно в тупике, стоит посмотреть время между входом пакета в ПЛИС и выходом его оттуда (например, по сигналам RX_DV и TX_EN).

Цитата(EgorTol @ Jan 24 2013, 18:41) *
Попробовал. Потери большие, скорость настолько низкая, что нельзя определить какая она

Очень странно. Какие при этом пакеты доходят до вайршарка?
Go to the top of the page
 
+Quote Post
telix
сообщение Jan 25 2013, 18:28
Сообщение #7


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

Группа: Свой
Сообщений: 118
Регистрация: 9-12-12
Из: Курск
Пользователь №: 74 767



Цитата(EgorTol @ Jan 25 2013, 12:03) *
Могу сказать сразу, что разведено всё "соплями".


Ну вот и ответ. Ваши "сопли на плате" искажают форму сигналов LAN и как результат часть данных теряется.

Сообщение отредактировал telix - Jan 25 2013, 18:40


--------------------
улыбаемся ...
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jan 25 2013, 19:21
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(EgorTol @ Jan 25 2013, 12:03) *
В дальнейшем необходимо обрабатывать некоторые пакеты с помощью FPGA.

Ну так и надо делать все по человечески. Смело ставьте свитч, как минимум 3-х портовый, управляемый... И тогда через 2 порта у Вас будет вот это:
Компьютер<--->свитч<--->второй компьютер
а на третий будете зеркалить нужные Вам пакеты и прицепите его к ПЛИС. Или к быстрому процессору, что тоже неплохо.
При этом, поскольку в свитче есть буфер, то при сбоях в линии он сам перезапустит передачу пакета. И справится с автопереговорами. А если возьмете 5-ти портовый, а цена у микросхем примерно одинаковая, то в 4-й порт воткнете ноутбук и произведете отладку...
А уж в ПЛИС проект будет значительно проще...
Да, еще учтите, что "на соплях" порты работать не будут. Там 125 МГц аналоговые сигналы.
У меня на сайте найдите статью про 8842, там написано, как конструировать и отлаживать...
Удачи!


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
prig
сообщение Jan 31 2013, 14:34
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 869
Регистрация: 30-01-08
Из: СПб
Пользователь №: 34 595



Цитата(EgorTol @ Jan 25 2013, 12:03) *
Фото пока не могу предоставить, в понедельник может быть. Могу сказать сразу, что разведено всё "соплями". Где они там в FIFO могут потеряться? Считал количество принятых и переданных пакетов на входе и выходе FPGA, вроде всё совпадает. Сделать тест для генерации можно, хотя не слишком просто, надо поднимать сеть: компьютер<--->FPGA, для этого надо MAC-контроллер реализовывать? А еще как скорость в таком случае посмотреть? На данный момент я просто скачиваю большой файл из сети и смотрю скорость.



В дальнейшем необходимо обрабатывать некоторые пакеты с помощью FPGA.



Попробовал. Потери большие, скорость настолько низкая, что нельзя определить какая она sm.gif


Не всё, что сопля, есть плохо. Если сигнал RXER с PHY в порядке, то это в ПЛИСе. Честно говоря, это ещё какие сопли должны быть, что бы убить сигнал 100Мбит.
Ну, разве что некорректно сделано подключение PHY или "левая" комплектация.

С MAC-контроллерами на фирменном ядре и "тестером" у Вас появится возможность нормально посчитать все пакеты, включая битые, сравнить их количество с количеством посланных из тестера и проверить потерю пакетов в ПЛИСе по разбежке счётчиков. Это стандартный путь. Остальное - от лукавого.

Если получится, что RXER в порядке, а пакеты по входу битые, то м.б. это проблема с тактированием по MII. Но для MII это маловероятно, разве что клок перевёрнут.
Ну, и т.д., от точки к точке, пока не локализуется место потери пакетов.


Цитата(iosifk @ Jan 25 2013, 23:21) *
Ну так и надо делать все по человечески. Смело ставьте свитч, как минимум 3-х портовый, управляемый... И тогда через 2 порта у Вас будет вот это:
Компьютер<--->свитч<--->второй компьютер

а на третий будете зеркалить нужные Вам пакеты и прицепите его к ПЛИС. Или к быстрому процессору, что тоже неплохо.
При этом, поскольку в свитче есть буфер, то при сбоях в линии он сам перезапустит передачу пакета. И справится с автопереговорами. А если возьмете 5-ти портовый, а цена у микросхем примерно одинаковая, то в 4-й порт воткнете ноутбук и произведете отладку...
А уж в ПЛИС проект будет значительно проще...
Да, еще учтите, что "на соплях" порты работать не будут. Там 125 МГц аналоговые сигналы.
У меня на сайте найдите статью про 8842, там написано, как конструировать и отлаживать...
Удачи!


Вы думаете, что человек для развлечения FPGA ставит? Если нет, то зачем такие советы?
А некоторые категоричные утверждения крайне сомнительны. Там оно конечно аналог, но ещё тот. Убить его не так просто.
Старая разводка сетей под 10/100Мбит в большинстве офисов - сплошные "сопли", да ещё на хороших дистанциях, и ничего, работает.

Сообщение отредактировал prig - Jan 31 2013, 16:37
Go to the top of the page
 
+Quote Post
polyakovav
сообщение Jan 31 2013, 15:18
Сообщение #10


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

Группа: Свой
Сообщений: 197
Регистрация: 26-05-06
Из: Воронеж
Пользователь №: 17 486



Цитата(EgorTol @ Jan 24 2013, 18:41) *
Задача: требуется подключить компьютер через FPGA с помощью Ethernet к локальной сети с интернетом и другими компьютерами.

...

Плата с FPGA, микросхемами и разъемами выглядит так:
Трансформатор<--->PHY<--->FPGA<--->PHY<--->Трансформатор
PHY и FPGA связаны интерфейсом MII.

Описание кода для FPGA:
В FPGA реализован асинхронный буфер, который с одной стороны принмает данные от PHY по интерфейсу MII и потом передает эти же данные в другой PHY также по интерфейсу MII и наоборот (т.е. в обратную сторону).

Описание проблемы: Если компьютер подключить просто к сети, без FPGA, то максимальная скорость передачи данных равна 11,5 МБайт/сек, если подключить через FPGA, то скорость падает до 10,9 МБайт/сек.
.....


Попробуйте найти компьютер с двумя портами и закольцевать передачу. Обратите внимание на статистику задержек. Может быть при неравномерном потоке буфер маловат?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jan 31 2013, 16:59
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(prig @ Jan 31 2013, 18:34) *
Вы думаете, что человек для развлечения FPGA ставит? Если нет, то зачем такие советы?
А некоторые категоричные утверждения крайне сомнительны. Там оно конечно аналог, но ещё тот. Убить его не так просто.
Старая разводка сетей под 10/100Мбит в большинстве офисов - сплошные "сопли", да ещё на хороших дистанциях, и ничего, работает.


Скорее всего человек просто не в курсе того, что есть микросхемы свитчей. Потому и пытается сделать "по Суворовски, через Альпы"... только на одних ПЛИС. Потому и советую...
И не забудьте про память для пакетов. Внутри ПЛИС пакет в 1,5Кб не поместится. Надо использовать внешнюю память. И перезапуск пакетов в линию при колиззиях, ну и т.д. А уж про уровни обслуживания я и совсем молчу. Это в ПЛИС сделать трудно. Хотя, если для развлечения, то почему бы не поставить дорогую ПЛИС с МАСами, вместо дешевого свитча...
А конструкция платы и сетевые провода - это совершенно разные вещи... И утверждения мои сделаны не на пустом месте, поверьте.


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
prig
сообщение Feb 1 2013, 09:03
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 869
Регистрация: 30-01-08
Из: СПб
Пользователь №: 34 595



Цитата(iosifk @ Jan 31 2013, 20:59) *
Скорее всего человек просто не в курсе того, что есть микросхемы свитчей.
...


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


Цитата(polyakovav @ Jan 31 2013, 19:18) *
Попробуйте найти компьютер с двумя портами и закольцевать передачу. Обратите внимание на статистику задержек. Может быть при неравномерном потоке буфер маловат?


Ещё лучше, найти(арендовать) сетевой тестер и сделать тест по кольцу с его помощью. С ним будет несколько удобней.
В принципе, при правильной загрузке каналов и отсутствии потери пакетов, задержка не должна сказываться на максимальной скорости.

Сообщение отредактировал prig - Feb 1 2013, 09:09
Go to the top of the page
 
+Quote Post
iosifk
сообщение Feb 1 2013, 10:43
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(prig @ Feb 1 2013, 13:03) *
Вообще-то, такое утверждение очень похоже на оскорбление.
Скорее всего, Вы просто не в курсе, что есть множество случаев, когда приходится делать обработку пакетов именно в FPGA. А речь шла именно об обработке.
А уж чего только не помещается в FPGA... Вы даже представить не можете, если судить по Вашим замечаниям.

Вижу, что читать Вы умеете, но суть не всегда понимаете. Я же написал - управляемый свитч. Нужные пакеты перебрасываются на 3-й порт т отправляются в ПЛИС на обработку. Не нужные - идут транзитом с 1-го порта на 2-й.
А для справки сообщаю, что с ПЛИС я имел дело всего-то лет 12, а может и более. Те, кто был на моем сайте, это знают и знают, какие проекты я делал. А Вы не знаете, ну потому и спорить с Вами не вижу необходимости..


И даже более добавлю для ТС. За последние 7 лет, когда я занимался еще и техподдержкой Микрела, то от клиентов чего только не приходилось выслушивать. И чем более неординарная постановка задачи дается клиентом, тем больше вероятность того, что сама задача исходно поставлена неправильно.
Вот и в данном случае. Что делаем? приемное ФИФО на глубину кадра и передающее ФИФО так же на глубину кадра? Значит ставим к ПЛИС внешнюю память и организуем к ней несколько каналов ДМА. Но это будет работать только при дуплексе, без колиззий на той стороне, которая уходит в сеть... А значит, там надо обязательно ставить свитч, чтобы убрать колиззии и сделать дуплекс.
А если полудуплекс, то кто будет очищать ФИФО на стороне "линии". Делаем автомат? А если ФИФО не на всю глубину кадра? То и кто сообщит компьютеру, что надо перезапустить пакет? Еще автомат?
И чем обработка в ПЛИС лучше, чем на микроконтроллере? UDP будем разбирать аппаратно? Или сделаем внутри микроконтроллер и будем мучиться с отладкой? Для чего? Ведь разборка пакетов - обычно идет как библиотека. Да и дешевле в микроконтроллере получится в несколько раз... Например Блэкфин с тактовой 800 МГц чем будет хуже, чем ПЛИС?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
prig
сообщение Feb 1 2013, 14:18
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 869
Регистрация: 30-01-08
Из: СПб
Пользователь №: 34 595



iosifk, дело не в том, что лучше или хуже. М.б. 101 причина, что бы делать обработку именно на ПЛИСе. А у военных иногда всего 1 причина, но непрошибаемая.
Думаю, что из этого и надо исходить, давая советы ТС. Ну, поинтересоваться в необходимости именно ПЛИС, как максимум.
Тем более, предлагаемая Вами схема давно известна и не является откровением для большинства разработчиков, решающих задачи обработки пакетов.

Так что, если использование ПЛИС действительно оправдано, то всё остальное - оффтоп разной степени голимости.
Лучше уж нам прикрыть эту дискуссию, что бы не впадать во все тяжкие.
Go to the top of the page
 
+Quote Post
gosu-art
сообщение Feb 4 2013, 04:16
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 555
Регистрация: 14-10-09
Пользователь №: 52 939



Цитата(iosifk @ Jan 31 2013, 20:59) *
Внутри ПЛИС пакет в 1,5Кб не поместится.

В EP3C16 56 кб ОЗУ! Даже если самый младший взять - 42к. Все влезет.
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 July 2025 - 06:25
Рейтинг@Mail.ru


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