Модуль приема и препроцессинга ethernet пакетов FPGA + Linux Kernel

Цена договорная
16 ноября 2020, 19:32 • 1 отклик • 21 просмотр
Цель работы - обеспечить передачу ethernet пакетов + служебная информация о пакете (метаданные) в linux userspace (минуя сетевой стек) с производительностью до ~150 000 пакетов/c с минимально возможной нагрузкой на процессорное ядро


Используемая платформа Intel (Altera) Cyclone V SX SoC + Linux


Разработанное IP ядро должно реализовать следующий функционал:

Прием ethernet пакета по интерфейсу GMII от IP реализующего ethernet switch

Формирование метаданных пакета :

  • добавление поля таймстемп, зафиксированного в момент старта пакета на интерфейсе GMII
  • при необходимости (только для ethernet пакетов с определенным ethertype) добавление поля hash (требуется обычный, не криптографический hash, для идентификации отдельных потоков данных между собой, например xxh32 или что-то подобное)
Передачу принятого ethernet пакета + метанные в HPS часть SoC (например используя кольцевой буфер в shared memory расположенной в DDR подключенной к HPS)

Ведение статистики полученных данных :

  • общее число пакетов + число байт полученных в модуле
  • число пакетов + число байт данных полученных после старта приема из HPS
  • число сброшенных (пропущенных из-за переполненности кольцевого буфера) пакетов + число байт данных пропущенных после старта приема из HPS
Должно быть реализовано API для управлением данным IP со стороны HPS (например используя регистры управления) и чтение статистики приема на стороне HPS


Необходимо реализовать linux драйвер (kernel module) реализующий интерфейс управления IP Core и доступа к данным (метаданные + ethernet пакет) со следующим функционалом

  • старт/стоп приема данных по интерфейсу GMII
  • API чтения данных в стиле poll/receive (с возможностью ожидания готовности X пакетов и таймаутом не больше чем Y)
  • получение статистики
Так же должно быть реализовано простое linux user space приложение демонстрирующее работу с модулем. (для проверки работоспособности и оценки загруженности ядер процессора во время приема данных)



Файлы