Модуль приема и препроцессинга ethernet пакетов FPGA + Linux Kernel
Используемая платформа Intel (Altera) Cyclone V SX SoC + Linux
Разработанное IP ядро должно реализовать следующий функционал:
Прием ethernet пакета по интерфейсу GMII от IP реализующего ethernet switch
Формирование метаданных пакета :
- добавление поля таймстемп, зафиксированного в момент старта пакета на интерфейсе GMII
- при необходимости (только для ethernet пакетов с определенным ethertype) добавление поля hash (требуется обычный, не криптографический hash, для идентификации отдельных потоков данных между собой, например xxh32 или что-то подобное)
Ведение статистики полученных данных :
- общее число пакетов + число байт полученных в модуле
- число пакетов + число байт данных полученных после старта приема из HPS
- число сброшенных (пропущенных из-за переполненности кольцевого буфера) пакетов + число байт данных пропущенных после старта приема из HPS
Необходимо реализовать linux драйвер (kernel module) реализующий интерфейс управления IP Core и доступа к данным (метаданные + ethernet пакет) со следующим функционалом
- старт/стоп приема данных по интерфейсу GMII
- API чтения данных в стиле poll/receive (с возможностью ожидания готовности X пакетов и таймаутом не больше чем Y)
- получение статистики