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

 
 
> Простая обработка UDP на Xilinx (6,7), Как сделать просто и эффективно.
count_enable
сообщение May 19 2015, 06:30
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Пока вопрос сугубо теоретический. Имеется GbE и ПЛИС 6 семейства. По UDP приходят пакеты, которые бывают 2х типов: командные и пакеты с данными. Один пакет содержит до 256 измерений, каждое измерение может иметь от 32 до 256 бит данных, но все поля одинакового размера который описан флагом в заголовке пакета. Соответсвенно надо пакеты с данными складывать в заданную область памяти, а пакеты с коммандами отдавать обработчику. Сейчас работает на Microblaze + lwIP, не жалуюсь. Но насколько оптимально данное решение? Что сделать если надо будет принимать 2 потока? С реализацией UDP/IP в железе без процессора никогда дела не имел, как и настройкой GbE "врукопашную". Сама обработка очень проста: смотрим в заголовок (4 первых байта payload, не UDP заголовок ) и ищем определённые битовые флаги. После чего записываем остальное в память через ПДП.
Так же неплохо иметь плюшки типа DHCP, jumbo frames и программной смены порта. С lwIP жизнь легка и беззаботна, но какую пропускную способность будет иметь такая система с Microblaze на 125 МГц? Верхнее ограничение это 2 интерфейса GbE, больше не надо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
RobFPGA
сообщение May 19 2015, 11:17
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



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

Сначала надо определится с критерием оптимальности! Если soft человеку писать легче чем hard ну и требования системы не вылазят за "физические" ограничения текущей структуры - ну пусть так и работает. Сколько у Вас поток таких данных ? Неужели по 100MByte/s с каждого GbE ?

Сложность написания парсера входных/генератора выходных пакетов в железе зависит от требований полноты поддержки сетевых стандартов - и в простейшем случае при заданных ограничениях реализуется за неделю/другую. Врезается такой парсер на вход/выход GbE - фильтрует пакеты по заданным параметрам (Eth addr, IP addr, Port, protocol, etc...) и делает с ними то что нужно (пересылка по заданным буферам, потоковая обработка, ...). Параметры для фильтрации/обработки задаются со стороны софта - хотя может быть и более экзотический вариант - как например ловля входных пакетов специальной структуры.
Причем тянуть все протоколы в железо не нужно - достаточно только реализовать критическую по скорости обработку данных, а все управляющие протоколы оставить в soft реализации.

У меня по такому принципу несколько систем работают как на 1Gb так и на 10Gb

Успехов! Rob.
Go to the top of the page
 
+Quote Post
count_enable
сообщение May 19 2015, 14:10
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Человеку однозначно легче работать с софтом чем с хардом, особенно потому что нету у него опыта разбора TCP/IP в железе при помощи FSM. А т.к. нужно фильтровать только UDP, только на определённый порт, да и как я упоминал DHCP совсем не лишний, то человек весьма смущается поставленной задачи по переносу всего в хард.
Работа эта является частью НИОКР, так что чем больше можно выжать из интерфейса - там лучше. Особенностью потока данных является его непостоянность - от сотни пакетов в минуту до макс. возможного для 1 GbE. Можно как-то грубо прикинуть каков будет (и будет ли) выигрыш при переносе обработки в железо? Я не знаю алгоритмической сложности lwIP чтобы оценить требуемое количество машинных циклов на пакет.
Если поделитесь ссылками на любые примеры железной обработки TCP-UDP/IP буду весьма благодарен. Я так понял что плясать надо от Tri-Mode Ethernet MAC, верно?
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение May 19 2015, 15:18
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643



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

Начинать плясат надо с (включения музыки sm.gif ) оценки потоков данных и алгоритмов, конкретизации требований к системе, вариантов ее постоения, и оценки возможных узких мест этих вариантов.
Например
Цитата
...от сотни пакетов в минуту до макс. возможного для 1 GbE...
это значит max входной поток от 1 GbE МОЖЕТ быть ~100MByte/s. Допустим данные чудесным образом попали в память и Microblaze готов их обрабатывать. Простейший алгоритм - подсчет суммы (int sum +=*data++) как минимум 4 такта что для 125 MHz дает всего 125 MByte/s sad.gif пиковой скорости ОБРАБОТКИ данных, без учета друих накладных расходов связанных с работой LwIP(5-20%), более сложных агоритмов обработки, и.т.д. Можно конечно пооптимизировать: unrol цикла, работа с long long, ... но это ооооочень зависит от алгоритма обрабртки.
Отсуда - вывод - на одном MicroBlaze 2 потока от GbE в 100 MByte/s HE ОБРАБОТАТЬ! используя чисто soft решениями. Да и для 1 GbE наверное будет тяжело и сильно критично от алгоритмов. В тоже время подсчет такой суммы в железе - элементарная задача - и соответтсвенно полность разгрузит CPU от необходимости ее делать хоть для 2 хоть для 10 каналов.

Если же Вы не планируете загружать CPU неблагодарной задачей ковыряния во всех данных то с задачами приема 2 потоков от GbE он может быть и справится но при серьезной оптимизации как LwIp (RAW API, buffer zero copy, ...) так и структуры управления последующей обработки. Ну а обрабатывать уже либо доругим/другими MicroBlaze либо спец модулями в жедезе.

Успехов! Rob.
Go to the top of the page
 
+Quote Post
Fourier
сообщение May 20 2015, 17:49
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 13-02-13
Из: Рыбинск
Пользователь №: 75 606



Делали простейший парсер UDP и ARP. За основу брали этот пример
Так же посмотрите здесь и здесь
Если нет каких-то сложных алгоритмов, то на HDL все реально сделать.
На спартане 6 получал скорость порядка 900 Мбит/с.
packet_receiver.v - парсер UDP пакета
packet_sender.v - формирователь UDP пакета.


Сообщение отредактировал Fourier - May 20 2015, 17:54
Go to the top of the page
 
+Quote Post
count_enable
сообщение May 20 2015, 18:43
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Спасибо Вам большое!
Go to the top of the page
 
+Quote Post
HFSE
сообщение Jun 22 2015, 13:09
Сообщение #7





Группа: Участник
Сообщений: 13
Регистрация: 16-06-15
Пользователь №: 87 174



Сергееч, скачайте прогу PackETH.
Там сможите потренироваться с этими пакетами. Можно создавать UDP, ARP или свои собственные.
Я долго парился, высчитывал. А с ней все пошло как по маслу. Там же можно и проверяться, правильно ли посчитали UDP Checksumme или Frame Check (CRC32).
http://packeth.sourceforge.net/packeth/Home.html
И да еще один важный момент:
Попробуйте поменять местами 5D <-> D5 в Preable.
У меня работает вот этот вариант : 55 55 55 55 55 55 55 D5



Sorry, форумом ошибся.
Go to the top of the page
 
+Quote Post
toshas
сообщение Jun 24 2015, 07:49
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 372
Регистрация: 14-02-06
Пользователь №: 14 339



Цитата(HFSE @ Jun 22 2015, 16:09) *
Сергееч, скачайте прогу PackETH.

еще один аналог, тоже бесплатный - Colasoft Packet Builder
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 16:07
Рейтинг@Mail.ru


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