Build instructions

Source code

The source code for the reference designs is managed on this Github repository:

To get the code, you can follow the link and use the Download ZIP option, or you can clone it using this command:

git clone https://github.com/fpgadeveloper/ethernet-fmc-zynq-gem.git

License requirements

Some of the designs in this repository target dev boards for which a license is required to generate a bitstream. Others can be built with the Vivado ML Standard Edition without a license. The table of target designs in the following section contains a column specifying which designs require a license, and which can be built without a license.

Additionally, some designs use IP cores that are licensed separately from the Vivado edition itself (for example: TEMAC, XXV Ethernet, HDMI). The IP License column in the tables below indicates the designs that require such a license to generate a bitstream; evaluation licenses are generally available from AMD for testing.

Target designs

This repo contains several designs that target the various supported development boards and their FMC connectors. The table below lists the target design name, the Ethernet ports supported by the design and the FMC connector on which to connect the mezzanine card.

Zynq-7000 designs

Target board

Target design

Ports

FMC Slot

Standalone
Echo Server

PetaLinux

Vivado
Edition

IP
License

PicoZed 7030

pz_7030

4x

LPC

Standard 🆓

-

ZC706

zc706_lpc

4x

LPC

Enterprise

-

ZedBoard

zedboard

4x

LPC

Standard 🆓

-

Zynq UltraScale+ designs

Target board

Target design

Ports

FMC Slot

Standalone
Echo Server

PetaLinux

Vivado
Edition

IP
License

PYNQ-ZU

pynqzu

4x

LPC

Standard 🆓

-

UltraZed-EG PCIe Carrier

uzeg_pci

4x

LPC

Standard 🆓

-

UltraZed-EV Carrier

uzev

4x

HPC

Standard 🆓

-

ZCU102

zcu102_hpc0

4x

HPC0

Enterprise

-

ZCU102

zcu102_hpc1

3x

HPC1

Enterprise

-

ZCU104

zcu104

4x

LPC

Standard 🆓

-

ZCU106

zcu106_hpc0

4x

HPC0

Standard 🆓

-

ZCU111

zcu111

4x

FMCP

Enterprise

-

ZCU208

zcu208

4x

FMCP

Enterprise

-

Notes:

  1. The Vivado Edition column indicates which designs are supported by the Vivado Standard Edition, the FREE edition which can be used without a license. Vivado Enterprise Edition requires a license however a 30-day evaluation license is available from the AMD Xilinx Licensing site.

Cross-platform build runner

All builds are driven by the build.py runner at the root of the repository, on both Windows and Linux — the build instructions are the same for the two operating systems. Each command builds whatever it depends on automatically, skips anything that is already built, and locates the AMD tools itself, so there is no need to source the settings scripts beforehand.

On Linux and on Windows (git bash), commands are run with the build.sh shim, which finds a suitable Python 3 automatically (including the interpreter bundled with the AMD tools). Windows users who prefer not to use git bash can run the same commands from Command Prompt or PowerShell using build.bat instead — the commands and arguments are otherwise identical, for example build.bat xsa --target <target>.

To see the available targets and the state of a build:

./build.sh list                       # list the targets and their attributes
./build.sh status --target <target>   # show the per-stage artifact state
./build.sh clean --target <target>    # delete a target's generated outputs

Note

The embedded Linux images (PetaLinux) can only be built on a native Linux machine; everything else builds on Windows too. On Windows, the runner refuses the Linux-only stages up front and prints the exact command to run on the Linux machine.

Attention

The legacy make interface described in previous versions of this documentation still works on Linux — each Makefile is now a thin wrapper around build.sh — but it is deprecated and will be removed at the next version update.

Build Vivado project

This single command creates the Vivado project, generates the bitstream and exports the hardware to an XSA file:

./build.sh xsa --target <target>

Valid targets are: pynqzu, pz_7030, zc706_lpc, uzeg_pci, uzev, zcu102_hpc0, zcu102_hpc1, zcu104, zcu106_hpc0, zcu111, zcu208, zedboard.

If you want the Vivado project and block design without generating a bitstream — for example, to explore or modify the design in the Vivado GUI — run ./build.sh project --target <target> instead, then open the project from Vivado/<target>/.

Build Vitis workspace

This creates the Vitis workspace and compiles the standalone application, producing the baremetal boot file (BOOT.BIN or bit file, depending on the device family). The Vivado XSA is built first if it does not already exist:

./build.sh standalone --target <target>

Valid targets for the standalone application are: pynqzu, pz_7030, zc706_lpc, uzeg_pci, uzev, zcu102_hpc0, zcu102_hpc1, zcu104, zcu106_hpc0, zcu111, zcu208, zedboard.

The workspace is created in Vitis/<target>_workspace and the boot files are gathered in Vitis/boot/<target>/.

Build PetaLinux

The PetaLinux build requires a native Linux machine (one of the supported Linux distributions) with PetaLinux Tools 2025.2 installed. The runner locates and sources the PetaLinux settings.sh itself, and builds the Vivado XSA first if it does not already exist:

./build.sh petalinux --target <target>

Valid targets for PetaLinux are: pynqzu, pz_7030, zc706_lpc, uzeg_pci, uzev, zcu102_hpc0, zcu102_hpc1, zcu104, zcu106_hpc0, zcu111, zcu208, zedboard.

The output products are written to PetaLinux/<target>/images/linux/.

PetaLinux offline build

If you need to build the PetaLinux projects offline (without an internet connection), you can follow these instructions.

  1. Download the sstate-cache artefacts from the Xilinx downloads site (the same page where you downloaded PetaLinux tools). There are four of them:

    • aarch64 sstate-cache (for ZynqMP designs)

    • arm sstate-cache (for Zynq designs)

    • microblaze sstate-cache (for Microblaze designs)

    • Downloads (for all designs)

  2. Extract the contents of those files to a single location on your hard drive, for this example we’ll say /home/user/petalinux-sstate. That should leave you with the following directory structure:

    /home/user/petalinux-sstate
                              +---  aarch64
                              +---  arm
                              +---  downloads
                              +---  microblaze
    
  3. Create a text file called offline.txt in the PetaLinux directory of the project repository. The file should contain a single line of text specifying the path where you extracted the sstate-cache files. In this example, the contents of the file would be:

    /home/user/petalinux-sstate
    

    It is important that the file contain only one line and that the path is written with NO TRAILING FORWARD SLASH.

The PetaLinux builds will then be configured for offline build.

Build everything

This builds everything that the target supports — the Vivado project and XSA, the standalone application and the PetaLinux image — and gathers the boot images into bootimages/*.zip:

./build.sh all --target <target>
./build.sh all --target all      # every target in the repo

On Windows, all builds everything that the host can build and reports the Linux-only stages as BLOCKED rather than failing.