Skip to content

ERA on alternative platforms

dtrilla edited this page Apr 25, 2019 · 15 revisions

Introduction

In this page you will find how-to run ERA on platforms other than x86 as well as findings and discoveries of such process.

Limitations

ZCU102 is not OpenCL capable. Therefore OpenCL cannot be used to perform computation in the Mali GPU. [1]

ERA on ARM (Xilinx ZYNQ UltraSCALE [ARM+Mali+FPGA])

The goal of this process is to run Ubuntu 16.04 on the ZYNQ Platform. In order to be able easy access to the FPGA resources linux kernel must include the fpga_manager kernel module provided by xilinx in their version of the linux kernel (e.i. petalinux). The idea is to combine a linux kernel image bootable from an SD card with an Ubuntu 16.04 rootfs. This can be done by following the instructions of the following link [2]. To use full capabilities of the platform, use a rootfs for aarch64 (arm64), this can be found at ubuntu's website. The one provided in [2] is armhf (arm32).

With this you will be able to boot Ubuntu 16.04, without GUI support.

Follow the indications for installing ERA as usual [3].

Instaling GNUradio

Currently installing gnuradio from ubuntu:arm64 repositories will provide a volk version that does not support neon extensions.

To make use of volk kernels, volk must be compiled from sources, and change the /lib/libvolk.so to point to the new compiled library

When compiling gnuradio from sources (9.7.9.3), if you are compiling it with volk 1.4 or later apply this patch: https://github.com/gnuradio/gnuradio/commit/00c6f258259c61f25dc220402a9d07544942b414

Check PYTHONPATH

Booting

Set Switch SW6 to (1:on,2:off,3:off,4:off) for booting from SD Card.

Comunication with the Board

UART through usb (115200 8N1 ttyUSB0)

Optimization Oportunities and Summary of Modifications and Implementations

delete_head_no_wait

delete_head_blocking used instead

memset

Adjusted memset size

cexpf (on sync_short.cc)

FPGA Implementation:

Implementing a Design with the DMA IP requires recompiling the petalinux kernel without DMA support:

petalinux-config -c kernel

look for Device Drivers

Disable DMA

If petalinux-build fails, Enable DMA but make sure all the flags inside are deasserted

NEON vectorized

VOLK vectorized (watchout with this implementation, since it seems to have much lower precision than the other two)

viterbi_decoder

NEON vectorized

ERA on POWER

Refs

[1] https://forums.xilinx.com/t5/Embedded-Linux/opencl-mali-gpu-Petalinux-zcu102/td-p/812797 [2] https://medium.com/developments-and-implementations-on-zynq-7000-ap/install-ubuntu-16-04-lts-on-zynq-zc702-using-petalinux-2016-4-e1da902eaff7 [3] https://github.com/IBM/era