This documentation is for a development version. Click here for the latest stable release (v1.0.0).
Board and host¶
Two variants of the Loihi boards exist: a single-chip board codenamed “Wolf Mountain” and an eight-chip board codenamed “Nahuku.”
Currently, both boards use an Altera ARRIA 10 SoC FPGA board as the host. The Wolf Mountain board is paired with an ARRIA 10 based on the “Meridian Hill” (MH) architecture. The Nahuku board is paired with an ARRIA 10 based on the “Golden Hardware Reference Design” (GHRD) architecture.
The remainder of this page explains how to set up a host-board pair. We will use the terminology introduced in the Overview (board, host, superhost).
Wolf Mountain / Meridian Hill¶
The Wolf Mountain board comes pre-connected to its host SoC. They are both contained within a single plastic box. The images below show the enclosure as well as where ports can be found.
To set up the Wolf Mountain / Meridian Hill system:
Configure the power supply units. Two bench power supplies are needed to supply 5.3V and 12V respectively. The bench power supplies should be dialed to the right voltages before they are connected to the Loihi system. The bench power supplies should also be off before they are wired to the Loihi system.
Connect the bench power supplies to the appropriate “5V” and “12V” ports on the box. Take care identifying the correct ports before connecting the bench power supplies. Do not plug the 12V power supply to the 5V port or vice versa!
Connect the USB tty cable (USB-A male to USB-A male cable) to the “TTY” port on the Loihi box, and connect the other end of the cable to the superhost.
Connect the Ethernet cable to the “eth” port on the Loihi box, and connect the other end of the cable to the superhost.
If a microSD card is present in the microSD card slot, and it has not yet been set up (see below), remove the microSD card from its slot. This is done by using a pair of tweezers to push the card in, and then releasing it (the card slot is spring loaded). Next, use the tweezers to grab on to and gently remove the card.
If necessary, set up the microSD card as described below. Then reinsert the microSD card into the microSD card slot. Be sure to push the card into the slot far enough to engage the spring-loaded latch.
Turn on the bench power supplies (in any order) and check that the system boots properly.
Nahuku / Golden Hardware Reference Design¶
The user guide is especially useful for reading status LEDs on the host (see section 5-3). The image below shows the location of components important to the Nahuku / GHRD Loihi system.
To set up the Nahuku / GHRD system:
Install the two FPGA RAM modules on the host (see image above for where they should be installed).
Connect the Nahuku board to the “Nahuku board connection” indicated above.
The pins in the connector can be quite fragile. Ensure that the two sides of the connectors are lined up before applying pressure to mate the two connectors.
Connect the USB tty cable (microUSB male to USB-A male cable) to the “TTY” port on the host, and connect the other end of the cable to the superhost.
Connect the Ethernet cable to the ethernet port on the host, and connect the other end to the superhost.
If a microSD card is present in the microSD card slot, and it has not yet been set up (see below), remove the microSD card from its slot. The card slot has a latch that is spring loaded. To remove the microSD card, push it into the card slot, then release. Once the microSD card is unlatched from the card slot, it can then be removed by sliding it out of the card slot.
If necessary, set up the microSD card as described below). Then reinsert the microSD card into the microSD card slot. Be sure to push the card into the slot far enough to engage the spring-loaded latch.
Connect the power brick to the power port of the host. Plug the power brick into the wall socket.
Turn on the power switch on the host and check that the system boots properly.
Creating an SD card image¶
The microSD card on the host contains its operating system. Creating an SD card image requires you to:
compile Ubuntu 16.04 for the ARM processor,
add Loihi specific configuration files, and
run a Python script to create the SD card image.
Instructions for each step follow.
These steps are based on this guide. These steps should be performed on the superhost. You will need root access.
For simplicity, begin these steps in a new empty directory on a partition with several GB of free space.
Begin by switching to the root user.
Create and navigate to a new folder for storing Ubuntu files.
mkdir ubuntu-rootfs cd ubuntu-rootfs
Download the latest Ubuntu 16.04 release compiled for ARM.
wget http://cdimage.ubuntu.com/ubuntu-base/releases/16.04/release/ubuntu-base-16.04.4-base-armhf.tar.gz -o ubuntu-base.tar.gz
Untar the files from the downloaded tarball.
tar -xpf ubuntu-base.tar.gz
qemu-user-staticand copy it to
apt install qemu-user-static cp /usr/bin/qemu-arm-static ./usr/bin/
Copy the superhost’s
ubuntu-rootfs. This will allow us to access repositories on the internet in later steps.
cp /etc/resolv.conf ./etc/resolv.conf
Return to the parent directory.
If you do
ls, you should see the
ubuntu-rootfsdirectory that you were working on earlier.
ubuntu-rootfs directory you set up
contains operating system files.
We will now use
act as though we are using those files
rather than the actual superhost OS.
Note that we are still running as the
Begin by mounting system components and running
mount -t proc /proc ./ubuntu-rootfs/proc mount -t sysfs /sys ./ubuntu-rootfs/sys mount -o bind /dev ./ubuntu-rootfs/dev mount -o bind /dev/pts ./ubuntu-rootfs/dev/pts chroot ./ubuntu-rootfs
Then, within the
Install a minimal set of general packages. Since you are in the
chrootenvironment, these will be installed inside
ubuntu-rootfs, not the superhost’s OS files.
apt install --no-install-recommends \ language-pack-en-base sudo ssh rsyslog \ net-tools ethtool network-manager wireless-tools iputils-ping \ lxde xfce4-power-manager \ xinit xorg lightdm lightdm-gtk-greeter \ alsa-utils gnome-mplayer bash-completion \ lxtask htop python-gobject-2 python-gtk2 \ synaptic resolvconf
Install packages needed to run Loihi models.
apt install libffi6 python3-pip python3-dev fake-hwclock
Add a user to the OS, and give it admin privileges.
We will call our user
abr-user, but you can use a different name if desired.
adduser abr-user addgroup abr-user adm && addgroup abr-user sudo
Set a unique hostname.
loihi-mhfor our Wolf Mountain / Meridian Hill system and
loihi-ghrdfor our Nahuku / GHRD system. If you have more than one of the same type of system, use a more detailed naming scheme.
echo 'loihi-xxx' > /etc/hostname
Add host entries.
echo '127.0.0.1 localhost' >> /etc/hosts echo '127.0.1.1 loihi-xxx' >> /etc/hosts
Assign a static IP to the board.
Begin by opening
/etc/network/interfacesyour text editor of choice. If you are not sure, try
Add the following text to the end of the
10.42.0.34for Wolf Mountain / Meridian Hill systems
10.42.0.100for Nahuku / GHRD systems
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address <address> netmask 255.255.255.0 gateway 10.42.0.1 dns-nameserver 10.42.0.1
Update DNS configuration based on the network connection. This will modify the
/etc/resolv.confwe changed previously.
When prompted, select “Yes” to the dialog box because we want to allow dynamic updates.
(Optional) Set up NFS.
Add instructions for setting up NFS.
We can now exit the
And unmount the environment files
umount ubuntu-rootfs/proc umount ubuntu-rootfs/sys umount ubuntu-rootfs/dev/pts umount ubuntu-rootfs/dev
But stay as the root user for the remaining steps.
Adding Loihi-specific FPGA configuration files¶
The Loihi specific configuration files
can be obtained from Intel’s cloud server.
Download all of the files below to the directory
that contains the
As of August 2018, the latest files for the two Loihi boards are located in:
Download the following files:
zImage: A linux kernel compiled for the host.
ubootscript for configuring the FPGA.
socfpga.rbf: The FPGA configuration file.
and one of the following FPGA device tree blob files, depending on the system:
Additionally, you need the u-boot preloader image,
The location of this file is also system dependent.
Wolf Mountain: Download
NxRuntime_01_05_17.tar.gzfrom the Intel sharepoint site and extract it.
uboot_w_dtb-mkpimage.binis in the
Nahuku: Located in the
/nfs/ncl/ext/boot/ghrd_2018-05-17folder on the Intel cloud server.
Your folder should now contain the following files if you are setting up a Wolf Mountain system:
And the following files if you are setting up a Nahuku system.
Making the SD card image¶
The easiest way to make the SD card image is to use a Python script provided by RocketBoards.org.
We assume in the following steps that you are
in the directory containing
and the Loihi FPGA files,
and that you are still acting as the root user
(if not, do
Download the SD card image script.
Run the script with to create the SD card image.
<device-dtb>.dtbbelow with the appropriate
*.dtbfile from the previous step.
python ./make_sdimage.py -f \ -P uboot_w_dtb-mkpimage.bin,num=3,format=raw,size=10M,type=A2 \ -P ubuntu-rootfs/*,num=2,format=ext3,size=3000M \ -P zImage,socfpga.rbf,<device-dtb>.dtb,u-boot.scr,num=1,format=vfat,size=500M \ -s 3550M \ -n sdimage_small.img
After running this command, you should have a
sdimage_small.imgin the current directory.
This image file contains three partitions:
Partition 1 (500 MB): contains the
/bootpartition, which contains
Partition 2 (3 GB): contains the Ubuntu OS file system.
Partition 3 (10 MB): contains the u-boot preloader image.
The partition sizes should not be changed from the values above.
When making an SD card for the Nahuku system, the Python script may throw an error when finalizing the third partition. This error can be safely ignored. It occurs because the
uboot_w_dtb-mkpimage.binimage for Nahuku is 1 byte larger than the 10 MB partition size. However, this does not seem to impact the functionality of the SD card image.
Connect an SD card to the superhost. Determine the identifier assigned to it by Linux with
You should be able to determine which device (e.g.
sdc) is the SD card via the size and mountpoint.
Write the SD card image to the physical SD card.
Be sure to use the correct device in the
ddcommand below. Using the wrong device will destroy existing data on that device.
dd if=sdimage_small.img | pv -s 3550M | dd of=/dev/<device>
<device>is the device determined with
Remove the SD card from the superhost and insert it into the host SD card slot.