SymbiFlow is now F4PGA. See, and

Running example designs

This section describes how to properly connect your board. It also helps you configure and run any other software that is necessary to observe results.

Connecting development boards

Arty board

  1. Connect the board to your computer using the USB cable

  2. Connect the board to your computer using the Ethernet cable (only if you want to test the LiteX Linux Example)


Basys 3 board

Connect the Basys3 Board to your computer using the USB cable:


Zybo-Z7 board

Connect the Zybo-Z7 Board to your computer using the USB cable:


Insert the SD card in the dedicated slot:


Connecting to UART

First check available teletypes with:

ls -l /dev | grep ttyUSB

You should see at least one, e.g.:

crw-rw----+ 1 root  plugdev   188,   0 11-06 13:58 ttyUSB0
crw-rw----+ 1 root  plugdev   188,   1 11-06 13:58 ttyUSB1

Simply use picocom to connect:

picocom -b 115200 --imap lfcrlf /dev/ttyUSB1


Substitute 115200 with the baud rate that your design uses!


Please note that /dev/ttyUSB1 is just an example. The number appearing may change!


If the picocom is unable to connect to any ttyUSBx device, you probably don’t have appropriate user permissions. On Debian distributions, type the command below to add the user to the dialout group. This should resolve the missing permissions problem:

sudo usermod -a -G dialout `whoami`

Setting up TFTP

It is assumed that the server is running on port 6069 and uses /tftp directory.

  1. Install tftp with (Ubuntu example):

    sudo apt install tftpd-hpa
  2. Create a directory for the server:

    sudo mkdir -p /tftp
    sudo chmod 777 -R /tftp
    sudo chown tftp -R /tftp
  3. Set up your TFTP configuration with:

    cat << EOF | sudo tee /etc/default/tftpd-hpa
  4. Restart the TFTP server:

    sudo systemctl restart tftpd-hpa

Configuring your network interfaces

Check your network interfaces with:

ip link

Add IPv4 address to you interface:

ip addr add dev eth0

Warning and eth0 are just examples!

Setting up Zynq ARM CPU

Zynq FPGAs include an ARM CPU. This guide instructs on setting up U-boot to run Linux, load bitstreams and control the Programmable Logic through the ARM CPU.

Prepare SD card

  1. Format the SD card by following the official guide.

  2. Download and extract pre-built U-boot images:

    mkdir uboot-linux-images
    pushd uboot-linux-images
    wget -qO- | bsdtar -xf-
  3. Copy U-boot images to the boot mountpoint:

    cp uboot-linux-images/boot/* /path/to/mountpoint/boot/
  4. Copy Arch Linux to the root mountpoint:

    wget -qO- | sudo tar -xvzC /path/to/mountpoint/root
  5. Copy additional files and binaries to the root directory in the Arch Linux filesystem:

    sudo cp -a uboot-linux-images/root/* /path/to/mountpoint/root/root/


/path/to/mountpoint is the path to the mounted SD card. If everything was set correctly in the formatting step, the boot and root directories should be under /media/<user>/


/path/to/mountpoint/root contains the Arch Linux filesystem, while /path/to/mountpoint/root/root/ is a directory within the filesystem itself.


The sync step is crucial to let all the write buffers to complete the writing step on the SD card.

Load bitstreams from U-boot

Make sure to have prepared the SD correctly.

  1. With the SD card inserted in the PC, copy the bitstream in the boot directory:

    cp <name>.bit /path/to/mountpoint/boot
  2. Set the jumper J5 to SD.

  3. With the Zybo-Z7 connected insert the SD in the board’s slot and switch on the board.

  4. Connect to UART, see Connecting to UART.

  5. Press the reset PS SRST button on the Zybo-Z7 and halt U-boot autoboot by pressing any key in the picocom terminal.

  6. On the picocom terminal, you should have access to the U-boot terminal. Load the bitstream to memory:

    Zynq> load mmc 0 0x10000000 <name>.bit
  7. The size of the loaded bitstream appears on console:

    <size> bytes read in 128 ms (15.5 MiB/s)
  8. Load the bitstream to the FPGA:

    Zynq> fpga loadb 0 0x10000000 <size>