This is a guest post by Promwad, an electronics design house with development centers in Belarus and Russia, as well as sales offices in Europe and North America. They also evaluated Baikal T1 development board previously.
Engineers at Promwad Electronics Design House have got a new Russian board to experiment; it is an evaluation board Salute EL24D1 which is based upon multicore 1892VM14Ya SOC designed to be used in the Arctic and in space. Let us have a look what it is able to do.
Board Salute EL24D1 is designed to investigate CPU abilities, develop and debug software. The developer, R&D center ELVEES began deliveries of Salute at the end of 2015.
One of the main application areas of 1892VM14Ya is machine vision systems, processing of video and audio streaming in severe conditions, in manufacturing and in space. So the CPU is mainly aimed at the industrial sector rather than civil applications; its operating temperature ranges from –60°C up to +85°C.
1892VM14Ya chip was designed upon SoC and includes two kernels, an ARM Cortex-A9, unit GPU Mali-30, two kernels of DSP Elcore-03M, a unit of hardware video processing VELcore-01 and various input-output ports.
In the box, along with the Salute EL24D1 evaluation board, there is a 12V power supply unit,a CSI camera with a ribbon cable, a 32 Gb micro-SD memory card, a USB → UART adapter, a battery for RTC, an antenna for the Wi-Fi module, and a heatsink that prevents the CPU from overheating.
The evaluation board is preloaded Arch Linux distribution package. Available Buildroot sources make it possible to build necessary packages or the entire system. The best in Arch Linux are demo utilities to capture video stream from CSI camera, utilities for operation with H264 video codec and Gstreamer with RTSP plugins installed.
The board has USB, Ethernet, Wi-Fi and connectors for ZigBee/GPS antennas. Video/audio interfaces include HDMI and DSI video outputs, a CSI connector for a camera, a standard 3.5 mm audio input/output. RS-232, RS-485 interfaces, CAN bus, UART, I2C, I2S, and SPI are available as well. The top side of the board contains debug ports and a Raspberry Pi-compatible module of PLS pins with GPIO and appropriate interfaces.
The full list of Salute EL24D1 features:
- CPU – ELVEES 1892VM14Ya with:
- 2-core CPU Cortex-A9, up to 912 MHz
- 2- core DSP ELcore-30M, up to 720 MHz
- Video codec VELcore-01: provides H.264 CBP Encode and Decode functions, Full HD (1920×1080) stereo stream with the frequency of 30 frames/second minimum
- Hardware accelerator to compress images according to JPEG standard;
- ARM Mali-300 GPU, 250 million pixels/second.
- System Memory – 1GB DDR3-1066, 32 bit
- Storage – 4GB NAND Flash x 8 bit @ 100 MHz, microSD card, 10 Mb/s, up to 32 GB.
- Wireless interfaces – WiFi (IEEE 802.11); Bluetooth (IEEE 802.15.1); ZigBee (IEEE 802.15.4).
- Navigation: GLONASS/GPS (optional).
- High-speed interfaces – 4 ports USB 2.0 Host; 10/100M Ethernet
- Video input – MIPI CSI2 4 lanes, 1.5 Gb/s, I2C.
- Video output – MIPI DSI, 2 lanes, 1.5 Gb/s; HDMI 1.3a Tx, 1080 p/60 Hz, audio.
- Audio input – Analog jack, Stereo PCM, 16 bit, 192 kHz.
- Audio output – Analog jack, Stereo PCM, 16 bit, 192 kHz.
- Other interfaces:
- UART; RS485; RS232
- I2C; I2S; SPI; MFBSP;
- CAN ISO 11898.
- Debug interfaces – JTAG OnCD; Trace Debug Port.
- Loading modes: SPI Flash, UART, SD, NAND.
- Power supply – 10-30 VDC via 2.5mm jack or 5V/3A via micro USB port
- Dimensions – 130×105 mm.
The main area where Promwad’s team experimented with the 1892VM14Ya CPU was video signal processing, one of its main features.
Firstly, we conducted trial software coding tests in H264 with of GStreamer. With 1280×720 px video resolution, the software coding in H264 with a libx264 plugin in GStreamer provides only 2-3 fps. The speed in quite slow because the processor is not designed to perform complex computational tasks.
The target application area of 1892VM14Ya is video/audio processing, IP cameras and so on. That is why we were mostly interested in VELcore-01 video processing module with the feature of hardware H264 coding/decoding.
The main features of VELcore-01 video processing kernel:
- The maximum size of the processed images is 4096 x 4096 pixels.
- The minimum size of pro is 16×16 pixels.
- The image format is YCbCr (4:2:0).
- The accuracy of representation is 8 bits per pixel.
- The number of concurrently processed video streams: up to two compression streams and up to two decompression streams.
- Maximum performance: up to two compression and decompression video streams in Full HD (1920 x 1080 pixels) format at 60 frames per second of any of the specified standards
One of the features of H264 hardware coding module is that it uses M420, a nonstandard pixel format, for input video. M420 is a YUV (4:2:0) format with a recording density of 12 bits per pixel. Y-component is recorded for each pixel (one byte per pixel), and the CbCr-components are recorded by one pair of values for a block of 4 pixels (2 bytes by 4 pixels). This format is similar to NV12 with the difference that CbCr data unit does not go at the end; it is mixed line by line with Y unit: 2 Y lines – one CbCr line an so on.
M420 format structure according to its description at www.linuxtv.org looks like that:
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
The driver of CSI video camera provides video in the M420 format as well. That is why it makes possible using it directly with H264 hardware codec driver.
Run the command…
cap-enc -s 1920x1072 -r30 -f1 /dev/v4l/by-name/vinc0 /dev/v4l/by-name/avico0 | gst-rtsp-launch 'fdsrc ! h264parse ! rtph264pay name=pay0'
… and obtain an operating RTSP stream “from the box” compressed in H264 from the connected camera.
As for compression of video files, not everything was so easy there. The utility designed for that purpose has an option to convert video to M420 format right away. However, this kind of operation heavily loads the CPU, the software part cannot provide the frames to the driver to compress them, and it leads to significant fps slow down. In order to solve that problem, a script had to be written which can convert the video file to M420 in advance.
The second problem is that the video processing kernel is capable of compressing only those frames with the size equal to 16 pixels. When the resolution is 1280×720, it fits everything because both frame sides are aliquot of 16. As for Full HD, 1920×1080, the height is not aliquot of 16. Thus in order to compress the video of 1920×1080, the driver has to add a line of 8 pixels in order to reach the height aliquot of 16. M420 format appeared to be usable because Y and Cb/Cr channels go together, not one after an; it is just enough to put at the end of the buffer 1920 * 8 * 1.5 of empty bytes.
As a result, it became possible to achieve H.264 encoding with the resolutions of 1280 x 720 and 1920 x 1080, but with a “crutch” in the form of a strip of additional pixels. Both provide a stable frame rate of 30 fps.
The velcore-01 kernel of video processing at the hardware level supports H264 decoding as well, but at the driver level support of this function is not implemented yet, and therefore it was impossible to conduct an experiment in this direction.
In general, the initial experiments turned to be positive for the Promwad’s engineering team: 1892VM14Ya proved itself an excellent CPU to industry and for special application where HDMI, graphics, and multimedia are required. They also liked the developer’s technical support, it was competent and responsive.