Салют-ЭЛ24Д1: знакомство с модулем на российском процессоре 1892ВМ14Я для жестких условий
В нашей инженерной лаборатории появилась новая российская плата для экспериментов — отладочный модуль Салют-ЭЛ24Д1 на многоядерном сигнальном микропроцессоре 1892ВМ14Я. Посмотрим, на что он способен.
Модуль Салют-ЭЛ24Д1, как и все отладочные платы, рассчитан на изучение возможностей процессора, разработку и отладку программного обеспечения. Его разработчик — НПЦ «ЭЛВИС» — начал поставки «Салюта» в конце 2015 года.
Одна из главных областей применения процессора 1892ВМ14Я — системы машинного зрения, обработка видео- и аудиопотока с расчетом на жесткие условия, производственные или космические. Так что процессор ориентирован скорее на industrial, чем на гражданское применение — диапазон рабочих температур составляет от –60°C до +85°C.
Чип 1892ВМ14Я разработан по технологии «система на кристалле» (SoC) и включает в себя два ядра ARM Cortex-A9, блок GPU Mali-300, два ядра DSP Elcore-03M, блок аппаратной видеообработки VELcore-01 и различные порты ввода-вывода.
Комплект поставки
В коробке, помимо самой отладочной платы Салют-ЭЛ24Д1, имеются блок питания на 12В, CSI-камера со шлейфом, карта памяти micro-SD на 32 Гб, адаптер USB → UART, батарейка для RTC, антенна WiFi-модуля и радиатор для процессора, без которого неслабо греется.
Отладочная плата поставляется с предустановленным дистрибутивом Arch Linux. Доступны исходники buildroot, из которых можно самостоятельно собрать необходимые пакеты или всю систему.
Самое вкусное в Arch Linux — демонстрационные утилиты для захвата видеопотока с CSI-камеры, утилиты для работы с видеокодеком H264 и Gstreamer с установленными RTSP-плагинами.
Интерфейсы платы
На плате имеются порты USB, Ethernet, Wifi и разъемы для подключения антенн ZigBee/GPS.
Видео/аудиоинтерфейсы включают HDMI-видеовыход, DSI-видеовыход, разъем CSI для подключения камеры, стандартный аудиовход/выход 3,5 мм.
Также доступны интерфейсы RS-232, RS-485, CAN-шина, UART, I2C, I2S, SPI.
На верхней части платы выведены отладочные порты и RaspberryPI-совместимый блок PLS-штырьков с GPIO и соответствующими интерфейсами.
Процессор 1892ВМ14Я:
2-ядерный CPU Cortex-A9, до 912 МГц;
2-ядерный DSP ELcore-30M, до 720 МГц;
видеокодек VELcore-01: обеспечение функций H.264 CBP Encode and Decode, Full HD (1920×1080) стерео поток c частотой следования не менее 30 кадров/с;
аппаратный ускоритель для сжатия изображений по стандарту JPEG;
графический процессор Mali-300, 250 млн. пикселей/с.
DDR3–1066, 32 бит, 1 ГБ.
Энергонезависимая память:
NAND Flash x 8 бит @ 100 МГц, 4 ГБ;
microSD card, 10 МБ/с, 32 ГБ.
Беспроводные интерфейсы:
WiFi (IEEE 802.11);
Bluetooth (IEEE 802.15.1);
ZigBee (IEEE 802.15.4).
Навигация: ГЛОНАСС/GPS (опционально).
Высокоскоростные интерфейсы:
4 порта USB 2.0 Host;
Ethernet 10/100.
Видеовход:
MIPI CSI2 4 lanes, 1.5 Гбит/с, I2C.
Видеовыход:
MIPI DSI, 2 lanes, 1.5 Гбит/с;
HDMI 1.3a Tx, 1080 p/60 Гц, аудио.
Аудио вход:
Analog jack, Stereo PCM, 16 бит, 192 кГц.
Аудио выход:
Analog jack, Stereo PCM, 16 бит, 192 кГц.
Прочие интерфейсы:
UART; RS485; RS232;
I2C; I2S;
SPI; MFBSP;
CAN ISO 11898.
Отладочные интерфейсы:
JTAG OnCD;
Trace Debug Port.
Режимы загрузки: SPI Flash, UART, SD, NAND.
Питание:
DC JACK 2.5mm 10–30 В;
MicroUSB 5 В, 3 А.
Размер: 130×105 мм.
Обработка видео на процессоре
Основная область, в которой мы экспериментировали с процессором 1892ВМ14Я — обработка видеосигналов — одна из его главных возможностей.
Для начала провели пробные тесты программного кодирования в H264 с помощью GStreamer. С разрешением видео 1280×720 px программное кодирование в H264 с плагином libx264 в GStreamer выдает всего 2—3 fps. Декодирование работает немного быстрее — около 8 fps. Скорость довольно низкая, что не удивительно, т.к. процессор не предназначен для выполнения сложных вычислительных задач.
Целевая область применения 1892ВМ14Я — обработка видео/аудио, IP-камеры и др. Поэтому больше всего нас интересовал блок видеообработки VELcore-01 с возможностью аппаратного кодирования/декодирования H264.
Аппаратный кодек H264
Основные характеристики ядра видеообработки VELcore-01:
- Максимальный размер обрабатываемых изображений — 4096×4096 пикселей.
- Минимальный размер обрабатываемых изображений — 16×16 пикселей.
- Формат изображений — YCbCr (4:2:0).
- Точность представления — 8 бит на пиксель.
- Количество одновременно обрабатываемых потоков видеоданных — до двух потоков компрессии и до двух потоков декомпрессии.
- Максимальная производительность — до двух потоков компрессии и до двух потоков декомпрессии видео в формате Full HD (1920×1080 пикселей) с частотой 60 кадров в секунду по любому из указанных стандартов.
Одной из особенностей аппаратного блока кодирования H264 является то, что он использует нестандартный формат пикселей M420 для входного видео. M420 — это формат YUV (4:2:0) с плотностью записи 12 бит на пиксель. Y-компонента записывается для каждого пикселя (1 байт на пиксель), а CbCr-компоненты — по одной паре значений на блок из 4-х пикселей (2 байта на 4 пикселя). Этот формат похож на NV12, с тем отличием, что блок данных CbCr идет не в конце, а «смешан» построчно с блоком Y: 2 строки Y — одна строка CbCr и т.д.
Структура формата M420 выглядит так, судя по описанию на linuxtv.org:
start + 0: Y'00 Y'01 Y'02 Y'03
start + 4: Y'10 Y'11 Y'12 Y'13
start + 8: Cb00 Cr00 Cb01 Cr01
start + 16: Y'20 Y'21 Y'22 Y'23
start + 20: Y'30 Y'31 Y'32 Y'33
start + 24: Cb10 Cr10 Cb11 Cr11
Видеопоток с комплектной камеры
Драйвер CSI-видеокамеры также выдает видео в формате M420, поэтому можно использовать его с драйвером аппаратного кодека H264 напрямую.
Запускаем команду…
cap-enc -s 1920x1072 -r30 -f1 /dev/v4l/by-name/vinc0 /dev/v4l/by-name/avico0 | gst-rtsp-launch 'fdsrc ! h264parse ! rtph264pay name=pay0'
… и получаем работающий RTSP-стрим «из коробки» со сжатием видео в H264 с подключенной камеры.
Видеопоток из файла
Со сжатием видео из файла не все оказалось так просто. В утилите, предназначенной для этих целей, есть возможность преобразовывать видео в формат M420 «на лету». Но эта операция сильно грузит процессор, в результате программная часть не успевает вовремя выдавать драйверу кадры для сжатия, что приводит к заметному снижению fps. Для решения этой проблемы пришлось написать скрипт, который заранее преобразовывает видеофайл в формат M420.
Вторая проблема состоит в том, что ядро видеообработки умеет сжимать только кадры, размер которых кратен 16 пикселям. С разрешением 1280×720 все сходится — обе стороны кадра кратны 16, а вот у Full HD (1920×1080) высота на 16 не делится. Таким образом, для сжатия видео 1920×1080 нужно перед передачей кадра драйверу дорисовывать полоску из 8 пикселей, чтобы получилась высота, кратная 16. Формат M420 в этом плане оказался весьма удобен из-за того, что каналы Y и Cb/Cr в нем идут совместно, а не один за другим — достаточно вставить в конец буфера 1920×8 * 1.5 пустых байт.
В итоге удалось достичь кодирования H264 с разрешением 1280×720 и с разрешением 1920×1080, но с «костылем» в виде полоски дополнительных пикселей. Оба разрешения стабильно выдают частоту кадров в 30 fps.
Ядро видеообработки VELcore-01 на аппаратном уровне также поддерживает декодирование H264, но на уровне драйверов поддержка этой функции пока не реализована, поэтому в данном направлении эксперимент провести не удалось.
В целом знакомство получилось позитивным: 1892ВМ14Я показал себя как отличный процессор для промышленности и спец. применений, где требуется HDMI, графика и мультимедиа. Понравилась отзывчивая техподдержка.