PolarFire SoC FPGA Icicle Kit

FPGA Design

Ubuntu's kernel 5.19 requires the Icicle Kit Reference Design v2022.10 or later. The archive "MPFS_ICICLE_BASE_DESIGN_yyyy_mm.zip" contains a job file and digest file which can be used. This job file also includes the latest version of the Hart Software Services at the time of the release (see below). FlashPro Express is needed to program the job file to the FPGA. FlashPro Express standalone is bundled with the Programming and Debug Tools.

Hart Software Services

The first stage boot loader of the PolarFire SoC FPGA Icicle Kit is called Hart Software Services (HSS). Ubuntu's kernel 5.19 requires version v2022.10 or later of this software. Microchip provides a FlashPro Express programming job that can be used to update the HSS on a kit to the latest version without having to build the software, this job is provided with the FPGA design. Otherwise the HSS sources are available on GitHub and can be built and programmed independently of the design using the command line or the SoftConsole IDE.


The board uses package u-boot-microchip as second stage boot loader. It is installed in the partition with label loader on the SD-card. Ubuntu's U-Boot has been set up to use all U54 cores for Linux. If you want to use one or more cores for a real time operating system in parallel to Ubuntu, you will have to uninstall this package and install your own U-Boot onto partition loader.


The board features a USB to quad UART bridge controller (J11). The first UART has the HSS output, while the second UART is used for the U-Boot and the Linux console. The baudrate is 115200.


The USB OTG port (J16) can both be used a USB client or a USB host port. Jumpers on the board switch between client and host mode (J15) and control the provision of 5 Volt to the USB port (J17). The Ubuntu kernel supports the host mode.


As of Linux kernel version 6.2, PCIe is not supported.

Ubuntu Installation

Before installation check jumper settings and installation of the correct HSS and reference design version.

1. Flash the Ubuntu image onto the SD card or eMMC

Download the preinstalled server image for the board. You can extract the image and copy it to an SD-card or the Icicle Kit on board eMMC via the command line:

xzcat ubuntu-22.04.2-preinstalled-server-riscv64+icicle.img | sudo dd bs=1M conv=fsync of=/dev/sdX

You will have to replace /dev/sdX by the actual device name of your SD card or the eMMC. Please, be especially cautious not to overwrite the wrong drive as this cannot be undone.

2. Connect to serial console

To connect to the serial console you can use the program picocom:

picocom -b 115200 /dev/ttyUSB1

If the Icicle board is the only connected USB UART, /dev/ttyUSB0 will show the HSS output and /dev/ttyUSB1 will be the U-Boot and Linux console.

3. First boot

Insert the SD card and power on the board.

Don't be impatient when not seeing any output from the kernel for a while. This due to the board performance.

When booting the first time wait until you see an output line confirming that cloud-init has finished. Cloud init is responsible for generating the SSH keys and setting the default password. Cloud init itself will also need a few minutes. The line to wait for will look similar to

 [  291.932176] cloud-init[1282]: Cloud-init v. 22.3.4-0ubuntu1 finished at Thu, 20 Oct 2022 08:25:11 +0000. Datasource DataSourceNoCloud [seed=/var/lib/cloud/seed/nocloud-net][dsmode=net].  Up 291.79 seconds

Now you can login with user ubuntu and the default password ubuntu and will be asked to choose a new password.

RISC-V/PolarFire SoC FPGA Icicle Kit (last edited 2023-04-19 08:19:56 by xypron)