Elements is fully integrated into Zephyr’s meta-tool West and aims to provide RISC-V designs to developers without deep knowledge about hardware design. Therefore, extra commands were added to West to generate, synthesize, and simulate designs.
Prerequisites¶
Linux host system (Ubuntu 22.04 recommended)
Python 3 (python3.10-dev)
Vivado for Xilinx platforms (optional)
Installation¶
Install required packages:
sudo apt install ssh git curl libtool-bin autotools-dev automake pkg-config libyaml-dev sudo apt install libssl-dev gdb ninja-build flex bison libfl-dev cmake libftdi1-dev sudo apt install python3 python3.10-dev python3-pip virtualenv openjdk-11-jdk-headless sudo apt install verilator gtkwave libcanberra-gtk-module libcanberra-gtk3-module sudo apt install libtinfo5 libncurses5 libboost-all-dev
Install sbt:
echo "deb https://repo.scala-sbt.org/scalasbt/debian all main" | sudo tee /etc/apt/sources.list.d/sbt.list echo "deb https://repo.scala-sbt.org/scalasbt/debian /" | sudo tee /etc/apt/sources.list.d/sbt_old.list curl -sL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2EE0EA64E40A89B84B2DF73499E82A75642AC823" | sudo -H gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/scalasbt-release.gpg --import sudo chmod 644 /etc/apt/trusted.gpg.d/scalasbt-release.gpg sudo apt update sudo apt install sbt
Download and build all components:
chmod +x init.sh ./init.sh
Afterwards, everything should be installed and west can be used to generate RISC-V designs.
Vivado¶
The Vivado toolchain is not part of this SDK and needs to be installed separately for Xilinx
platforms from Xilinx’s homepage. Download the Linux Self Extracting Web Installer for Version
2022.2 and install it. Select Vivado as product and Vivado HL WebPACK as Edition. You can use this
edition’s license for free if you do not sell the bitstream, and disable everything except the
Artix-7 Platform to save disk storage. Elements except to find the Vivado toolchain under
/opt/xilinx
.
chmod +x ~/Downloads/Xilinx_Unified_2022.2_1014_8888_Lin64.bin
~/Downloads/Xilinx_Unified_2022.2_1014_8888_Lin64.bin
Docker¶
The Elements SDK supports running inside Docker. Currently, only self-build images can be used.
Custom Image¶
A Docker Compose configuration is provided for systems that do not run with the recommended versions. The Docker will have included all required packages for the SDK, except vendor toolchains. Build the image (which can take some minutes).
docker-compose build
Next, start the Docker in the background.
docker-compose up -d
Afterwards, west can be used identical to the CLI.
sudo docker exec -it elements-sdk_zephyr_1 west build -p always -b helium1-ecpix5 \
elements-zephyr-samples/demo/leds/
Finally, stop the Docker.
docker-compose stop
Development¶
The docker image can also be used to develop. Therefore, the repos on the host system should be
forwarded to the container to make all changes public. Open the docker-compose.yml
file and
uncomment the lines in volumes
which should be made public.
Afterwards, go into zephyr/ and download Zephyr with all repositories.
chmod +x init.sh
.init.sh -z
GUI Support¶
Some GUI applications require access to the host system’s X server. Run the following command in the host shell to grant them.
xhost local:root
Support¶
The following boards are supported with this version.
Board |
Elements SoC |
FPGA Board |
Vendor |
FPGA Chip |
---|---|---|---|---|
helium1-ecpix5 |
Helium1 |
ECPIX-5 |
LambdaConcept |
ECP5 |
helium1-nexysa7 |
Helium1 |
Nexys A7 |
Digilent |
Artix-7 |
neon1-ecpix5 |
Neon1 |
ECPIX-5 |
LambdaConcept |
ECP5 |
neon1-nexysa7 |
Neon1 |
Nexys A7 |
Digilent |
Artix-7 |
argon1-ecpix5 |
Argon1 |
ECPIX-5 |
LambdaConcept |
ECP5 |
Usage¶
Elements is fully integrated into the Zephyr west development process. Simply build software for a Elements board. Afterwards, the build cache contains enough information to synthesize the design.
west build -p always -b helium1-ecpix5 elements-zephyr-samples/demo/leds/
west synthesize
west flash
Run flash with the –spi` argument to flash the bitstream into the SPI flash.
west flash --spi
Additionally, a design can only be generated instead of synthesized to inspect the generated Verilog code.
west build -p always -b helium1-ecpix5 elements-zephyr-samples/demo/leds/
west generate
Lastly, a design can be simulated and viewed with GTKWave.
west build -p always -b helium1-ecpix5 elements-zephyr-samples/demo/leds/
west simulate
Flash SPI-Nor Flash¶
Pad the Zephyr binary because flashrom can’t handle images which not align with pages.
dd if=/dev/zero of=flash.bin bs=1MiB count=32
dd if=build/zephyr/zephyr.bin of=flash.bin conv=notrunc
Use a bus pirate to flash the padded Zephyr image to the SPI-Nor flash.
flashrom -p buspirate_spi:dev=/dev/ttyUSB0,spispeed=1M -c MT25QL256 -l layout.txt -i ROM -N -w flash.bin
Known Issues¶
west debug
only works with bitstreams synthesized with Vivado.F4PGA does not support PLLs on Xilinx architectures right now.
PLLs are not working on the ECPIX-5 board when the bitstream gets loaded from the flash.