First Build (Simple-ZCU102-Example)

This tutorial covers the end-to-end build procedure for the Simple-ZCU102-Example firmware on the Xilinx ZCU102 evaluation board (FPGA part XCZU9EG-FFVB1156-2-E). It covers only the commands specific to this board; for host-prep details, build-output redirection, the bare-metal-vs-Docker decision, and the serial-console snippet — all board-agnostic — see the corresponding sections on the platform docs site (tutorial/first_soc_bringup.html).

Output filenames embed the build timestamp, the building user’s username, and the current git short-SHA, following the schema <TargetName>-<PRJ_VERSION>-<YYYYMMDDHHMMSS>-<user>-<git-short-SHA>. The <full-name> placeholder is used below wherever the exact filename is build-specific.

Verified host environment

Per-board build verification was not performed in this iteration; toolchain matches the platform reference environment. For the verified host-package list, Vivado install path, and conda environment setup, see tutorial/first_soc_bringup.html#setup-environment.

Clone

Install git-lfs in your shell profile (one-time per environment) before cloning, so any LFS-tracked binaries are fetched correctly:

git lfs install

Clone the repository with all submodules:

git clone --recursive https://github.com/slaclab/Simple-ZCU102-Example.git

The --recursive flag initialises the firmware submodules in one step. Omitting it leaves the firmware build unable to find the required RTL and TCL sources.

Firmware build

Change into the target directory and run make:

source firmware/vivado_setup.sh
cd firmware/targets/SimpleZcu102Example/
make

After a successful build, the .bit and .xsa artifacts are written to firmware/targets/SimpleZcu102Example/images/ using the schema SimpleZcu102Example-<PRJ_VERSION>-<YYYYMMDDHHMMSS>-<user>-<git-short-SHA>.

For the platform-level firmware-build narrative (Vivado strategy, log locations, common build failures), see tutorial/first_soc_bringup.html#firmware-build.

Yocto build

Pass the .xsa file produced by the firmware build to BuildYoctoProject:

cd firmware/targets/SimpleZcu102Example/
./BuildYoctoProject -f images/<TargetName>-<PRJ_VERSION>-<YYYYMMDDHHMMSS>-<user>-<git-short-SHA>.xsa

Note

Your filename will differ — the build embeds the build timestamp, your username, and the current git short-SHA.

For the bare-metal-vs-Docker decision, Yocto host-package list, and deploy-path layout, see tutorial/first_soc_bringup.html#yocto-build.

SD card

Once the Yocto build is complete, write the boot images to an SD card. See tutorial/first_soc_bringup.html#sd-card for the verified procedure.

Boot

The ZCU102 uses DIP switch SW6 to select the boot mode. Set Mode SW6 [4:1] = 1110 for SD card boot (switch OFF = 1 = High; ON = 0 = Low).

After inserting the SD card and powering on, confirm the board is reachable on the default DHCP IP 10.0.0.10:

ping 10.0.0.10

For serial-console access and troubleshooting boot or network failures, see tutorial/first_soc_bringup.html#boot.

Run the Rogue GUI

Once the board is reachable on the network, launch the PyDM GUI from the host:

python software/scripts/devGui.py --ip 10.0.0.10

For installing Rogue on a non-SLAC host, see how-to/rogue_install.html. For the platform-level GUI launch how-to, see how-to/rogue_gui_launch.html.

Next steps