Parallella

The Adapteva Parallella is a family of credit card sized single board computers. Based on the dual-core Zynq-7000 series of ARMv7-A processors, they also contain a built-in FPGA and Epiphany-III 16-core co-processor. The board is intended to democratise access to parallel programming, due to the price, number of cores and low power draw (5W).

The Parallella was crowdfunded via Kickstarter, and the schematics and design files were released as open source.

Hardware
Generally available Parallella hardware comes in three forms:
 * Parallella-16 Micro Server
 * Parallella-16 Desktop Computer
 * Parallella-16 Embedded Platform

Kickstarter backers would have been able to receive a limited number of Parallella-64s with a 64-core co-processor, but these were not mass-produced and are not covered here.

Parallella-16s can be powered by 2A 5V DC barrel jack (5.5mm OD/2.1mm ID centre-positive ), microUSB (with jumper) or by the metal pads in the corners via the J15 header.

Parallella-16 Desktop Computer
Includes all hardware of the Parallella-16 Micro Server, additionally with:

Parallella-16 Embedded Platform
Includes the hardware of the Parallella-16 Desktop Computers, except the CPU is upgraded to the Zynq-7020. EP devices must use FPGA firmware built for Zynq-7020 devices.

SD Card
The Parallella finds its firmware, bootloader, kernel and device tree necessary to boot on the SD card. In order for the board to find these files, the SD Card must be MBR/DOS partitioned, with the first partition FAT32 formatted.

Firmware
Parallella boards load the FPGA firmware (including u-boot bootloader), kernel (uImage) and device tree (dtb) from the microSD card slot whenever power is applied to the board.

The firmware file must be named on the FAT32 filesystem on the SD card.

This firmware is open sourced on Github parallella/oh but requires the free (as in beer) Xilinx Vivado tools to produce.

Versions
Parallella has provided 3 versions of the firmware that boots Linux:

Post-boot customisation
Once the operating system is running, the FPGA can be reconfigured with a compatible bitstream by use of the driver. .

Kernel
The firmware, in addition to the FPGA routines that concern board bring-in, contains u-boot to boot the system into Linux. The load address for a kernel uImage is 0x8000.

Parallella provide kernel sources with working Epiphany drivers in the parallella-linux repository. provides the target to generate a kernel config suitable for all Parallella boards.

Upstream kernels can also work, however the Epiphany driver has not been upstreamed. Upstream kernels have the which is suitable for the Parallella.

Building a kernel requires the package, and building a uImage requires the  package:

The resulting uImage can be found at. The kernel must be named  on the FAT32 filesystem on the SD card.

Device Tree
The device tree is available in the sources at. It can be compiled into a dtb file with :

The device tree must be named on the FAT32 filesystem on the SD card.

Root Filesystem
The upstream device tree configures the root partition as the second partition with an ext4 filesystem.

An armv7a stage3 can be unpacked and customised. Gentoo autobuilds can be found on distfiles.gentoo.org.

Epiphany SDK (esdk)
Adapteva provides the SDK to interact with the Epiphany device on Github adapteva/epiphany-sdk.

Version 2016.3 of the esdk utilises the elink2 interface with the Epiphany chip and requires an elink2 firmware.

The esdk sources build for the armv7l architecture which is not the same as the Gentoo architecture (armv7a).

Cross-compiling
A compatible cross-compiler can be generated with crossdev:

When cross-compiling the kernel, call with the ARCH and CROSS_COMPILE environment variables:

When cross-compiling the Epiphany SDK, use the flag:

External Resources

 * Parallella hardware design files are available on Github parallella/parallella-hw.
 * Xilinx Vivado Design Suite to create the FPGA firmware files