FPGA прячет кадр 1080p в DDR4 и выпускает по сети только окно
IMX219 выдаёт 1920×1080 пикселей с частотой 30 кадров/с, а RJ45 на AUBoard-15P работает через 100-мегабитный Ethernet. В этой установке конфликт не пытаются победить сжатием или обещанием «быстрого стриминга»: полный поток остаётся внутри FPGA и DDR4, наружу отправляется только прямоугольное окно кадра с заданными координатами. Так плата может непрерывно принимать изображение, пока ПК запрашивает именно ту часть сцены, которая нужна измерению или алгоритму.
Кадр принимает логика, сеть видит вырезку
Входной тракт собран вокруг камеры IMX219 с двумя data lanes MIPI CSI-2 и форматом RAW10. Приёмник MIPI, дебайеризация и AXI VDMA живут в программируемой логике Artix UltraScale+ 15P. VDMA пишет кадры в DDR4, причём используются три буфера: пока один заполняется следующим кадром, другой доступен для чтения. Из цветного потока проект берёт старшие восемь бит зелёного канала и получает 8-битное grayscale-изображение. Настройку сенсора выполняют AXI IIC и GPIO.
Из памяти кадр забирает синтезированный в той же FPGA MicroBlaze V — soft-core на ISA RISC-V, а не отдельный процессор на плате. Он принимает команды клиента, выбирает полный кадр либо WINDOW/ROI, режет данные на UDP-датаграммы и передаёт их через lwIP и AXI Ethernet Lite. В DATA-пакете есть 12-байтный заголовок с номером последовательности и смещением байтов. Приёмник кладёт полезные данные точно по этому смещению: потерянный пакет оставляет чёрный прямоугольник на своём месте, не сдвигая весь хвост изображения.
1421 пакетов объясняют, почему полный кадр медленный
Цена такого решения хорошо видна именно на полном кадре. Один grayscale-кадр занимает 2 073 600 байт и раскладывается примерно на 1421 UDP-пакет с полезной нагрузкой до 1460 байт. В коде между пакетами задана пауза 2 ms, поэтому один только pacing занимает около 2.84 s; режим GRAB и последовательный --stream дают порядка одного кадра за 3–4 s. Это не полнокадровое видео по Ethernet.
Окно меняет масштаб задачи. ROI 128×128 содержит 16 KB и помещается примерно в 12 пакетов, поэтому автор сообщает для WINDOW ориентировочные 20–30 FPS. Это авторская оценка без опубликованного стенда с размером окна, нагрузкой сети, jitter и статистикой потерь, но сама граница режима определена честно: частота относится к выбранному окну, а не к 1080p-кадру.
Жёсткий видеотракт и мягкий сетевой процессор
Здесь интересен именно разрез системы. Логика принимает MIPI-поток и пишет память с аппаратным ритмом, где задержка и пропуск кадров определяются видеотрактом. Soft-core обслуживает I²C-конфигурацию, UDP-команды и сетевую выдачу, где допустимы программная пауза и потеря датаграммы. Полный кадр превращается в локальную историю DDR4, а Ethernet — в канал выборки данных. На AUBoard-15P есть и SFP+ 10GbE, однако данный проект его не использует: демонстрация построена вокруг 10/100 PHY и RJ45.
Исходники Vivado-проекта, прошивки и Python-клиента опубликованы автором, поэтому схему можно разбирать до формата пакета и команд GRAB/WINDOW. Воспроизводимость архитектуры заметно сильнее, чем доказательная база её длительной работы: независимых замеров latency, packet loss, потребления ресурсов FPGA и устойчивости на многочасовом потоке пока нет.