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

Высокоскоростной вывод данных из ПЛИС

5 hours ago, RobFPGA said:

Приветствую!

Ethernet не гарантирует  доставку пакетов - потеря может быть как по "электрической" причине (помехи)  так и про причине неготовности приемника - отсутствие свободного места в приемном буфере как в самой карте так и в TCP/IP стеке. 

 

Электрические проблемы видны по  дропу пакетов по ошибке Ethernet frame CRC

 

Ну а бороться с потерями в приемнике  можно путем оптимизации параметров стека в PC. Так же можно попробовать включить для MAC в FPGA и сетевой кары в PC режим packet lossless - что то типа xon|xoff протокола на MAC уровне. В этом режиме приемник тормозить передатчик на время если видит что не может принять пакет.  

 

Но для начала не плохо бы вам проверить всю приемную часть генерируя пакеты с другого компа. 

Удачи! Rob.

Попробовал между 2 компами. Потери примерно такие же. Значит дело в приемной части. Приемный софт писал не я. Сейчас набросал простенький скрипт на Python, который принимает и пишет в файл. Все равно ошибки. Вот код приемного скрипта

import socket
import sys

UDP_PORT = 50016
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind(('', UDP_PORT))

with open(sys.path[0] + '\\data.bin', 'wb') as file:
    while True:
        data = sock.recv(2048)
        file.write(data)
        if not data:
            break

    sock.close()

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

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


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

я про питон не совсем в курсе, но на Си такой код легко отработает плохо, писать на жесткий диск дороговато по времени, я с таким столкнулся уже как раз с udp. Я бы переделал под запись в память, потом сброс в файл.

плюс у вас правильно спросили, какого размера приемный буфер, он может быстро заполняться и не успевать принимать.
для уверенности запустили бы лучше wireshark (tcpdump под Linux), там хоть приемная часть точно отработает

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

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


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

Приветствую!

8 minutes ago, excly said:

UDP_PORT = 50016
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

Я бы добавил  sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, RX_BUF_SIZE)

а для  sock.recv(2048)  поставил бы размер чуть более чем макс. размер пакета. На сколько я понимаю размер в recv(..) ограничивает размер данных из пакеты передаваемых за вызов фукнкции,  а SO_RCVBUF задает размер приемного буфера сокета.

Но игра с буферами может ничего не дать если проблемы сидят в тормозах на уровне драйвера карточки. Опять же надо видеть картину  - есть ли дроп пакетов на сетевой карте и по какой причине. 

Ну и надеюсь у вас  соединение точка-точка а не через общую сетку со всякими свичами :cray:

Удачи! Rob.

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


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

8 hours ago, excly said:

Данные идут потоком без остановки. Нужно эти данные выводить на PC.

Чипсет Ethernet на PC надеюсь Intel?

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


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

16 hours ago, RobFPGA said:

Приветствую!

Я бы добавил  sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, RX_BUF_SIZE)

а для  sock.recv(2048)  поставил бы размер чуть более чем макс. размер пакета. На сколько я понимаю размер в recv(..) ограничивает размер данных из пакеты передаваемых за вызов фукнкции,  а SO_RCVBUF задает размер приемного буфера сокета.

Но игра с буферами может ничего не дать если проблемы сидят в тормозах на уровне драйвера карточки. Опять же надо видеть картину  - есть ли дроп пакетов на сетевой карте и по какой причине. 

Ну и надеюсь у вас  соединение точка-точка а не через общую сетку со всякими свичами :cray:

Удачи! Rob.

Спасибо огромное. Проблема оказалась именно в размере буфера, который я не указал. На 350Мбит все летит без единой ошибки

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


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

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

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

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

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

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

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

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

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

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