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

FPGA+MAC+PHY pause frame

Добрый день, коллеги!

Помогите, пожалуйста, разобраться в чем проблема.

Есть самописный Ethernet MAC в который я решил добавить поддержку Flow Control.

Алгоритм работы следующий:

При заполнении приёмного FIFO более чем на половину MAC контроллер отсылает pause frame в сторону ПК.

После отсылки pause frame MAC ждет таймаут равный pause time после чего снова проверяет заполнение приёмного FIFO.

Со стороны ПК pause frame нормально ловится Wireshark и вроде бы никакой ругани на неправильный формат Wireshark не выдает.

Со стороны ПЛИС смотрю наличие принимаемых пакетов с помощью SignalTap (на скриншоте флаг rx_dv).

В настройках сетевой карты Flow Control включен, однако при приходе pause frame не происходит приостановки передачи пакетов на 33 мс (pause time = 0xFFFF).

pause.png

stp1.png

stp2.png

stp3.png

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


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

в сигнал тапе плохо видно, а что за пакеты приходят? это же вроде там у вас не tcp уровень, может служебные какие или период паузы уже закончился

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

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


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

Это не служебные, т.к. по длине они совпадают с UDP потоком данных от ПК (8 байт преамбула + 1066 байт пакет + 4 байта CRC).

Таймаут не мог так быстро закончится, т.к. он выставлен на 33 мс (0xFFFF). В SignalTap видно, что пакеты идут с интервалом чуть больше 1000 тактов 125МГц, а это явно меньше 33 мс.

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


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

А значения в полях мак адреса верные(для udp и для pause frame)? По идее на стороне ПЛИС это можно не детектировать - вайршарк позволяет видеть тайминг пакетов - достаточно проследить< что после дросселирующего фрейма выдержана пауза - если я правильно понял задачу.

 

 

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


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

Для UDP точно правильные, т.к. эти пакеты я отсылаю с помощью своей тестовой программы и wireshark показывает правильные значения + это уже давно проверенный кусок кода + приёмную часть я не правил. Со стороны передачи pause frame вроде тоже все верно.

dst 0180C2000001 - специальный MAC адрес для pause пакетов

src 001122334455 - MAC адрес платы

wireshark показывает что паузы нет - см. скриншот в первом посте.

56 minutes ago, Lutovid said:

достаточно проследить< что после дросселирующего фрейма выдержана пауза - если я правильно понял задачу.

Да. Именно этого я и пытаюсь добиться.

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


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

8 minutes ago, BSACPLD said:

Для UDP точно правильные, т.к. эти пакеты я отсылаю с помощью своей тестовой программы и wireshark показывает правильные значения + это уже давно проверенный кусок кода + приёмную часть я не правил. Со стороны передачи pause frame вроде тоже все верно.

я имел в виду совпадает ли dst UDP пакета и src pause frame. Если да, то пока идей нет

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


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

5 minutes ago, Lutovid said:

я имел в виду совпадает ли dst UDP пакета и src pause frame. Если да, то пока идей нет

Совпадает.

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


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

Здравствуйте. Читали эту ветку?https://electronix.ru/forum/index.php?app=forums&amp;module=forums&amp;controller=topic&amp;id=101489&amp;tab=comments#comment-1046226

У меня была такая же проблема как у вас - компьютер не реагировал на PAUSE frame, пока в регистрах микросхемы физического уровня на плате с ПЛИС не были специально установлены биты включения PAUSE frame (смотрите регистры Auto-Negotiation Advertisement и Auto-Negotiation Link Partner Ability)

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


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

21 hours ago, BSACPLD said:

Это не служебные, т.к. по длине они совпадают с UDP потоком данных от ПК (8 байт преамбула + 1066 байт пакет + 4 байта CRC).

интересная логика. То есть вы вычисляете тип пакета по его размеру?

я бы все таки разобрался, что это приходит. Определенно на ваш самоедельный MAC идет с вашим адресом 001122334455.

потом вроде верный ether_type стоит 0800h (ip протокол, если я правильно разглядел на скрине), а вот после него какая то полная ерундистика из ff что не есть хорошо.

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

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


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

Я его уже 10 раз проверял и по размеру и по содержимому :(

Вообще, насколько я понимаю, если приходит pause с multicast адресом 0180C2000001, то порт должен приостанавливать любую передачу.

Вот лог wireshark.

https://yadi.sk/d/4L1NBbEF27b-QA

И где ff? Если Вы про pause, то 0xFFFF это максимальная длительность паузы равная 33 мс.

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


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

Глянул лог. А вы не пробовали пауз фрейм отсылать на карточку? которая с MAC = 00:1b:21:d0:04:10
А то вы паузу отсылаете на какой то маршрутизатор вроде, с MAC = 01:80:c2:00:00:01, карта то о паузе знать не знает и спаммит в вас

 

upd. Сколько сеток делал, о мультикаст маках знать не знал, но все равно попробуйте на карточку заслать

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

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


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

Вообще если быстро по стандартам побегать, то вроде бы МАКи вида 01-80-C2-00-00-XX исключительно для роутеров. Wireshark вон тоже его расшифровывает как служебный пакет для роутера. Видать карты не могут такие штуки (широковещательные) обрабатывать

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

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


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

Попробовал забить MAC сетевой карты вместо multicast - тоже самое.

Wireshark пакеты видит, карта не реагирует. Пробовал на 2 разных компах. :dash2:

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


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

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

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

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

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

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

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

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

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

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