Xilinx Zynq board (xilinx-zynq-a9) — QEMU documentation

# Xilinx Zynq board (`xilinx-zynq-a9`)

The Zynq 7000 family is based on the AMD SoC architecture. These products integrate a feature-rich dual or single-core Arm Cortex-A9 MPCore based processing system (PS) and AMD programmable logic (PL) in a single device.

The SoC is documented in the Zynq 7000 Technical Reference manual.

The QEMU xilinx-zynq-a9 board supports the following devices:

- Arm Cortex-A9 MPCore CPU

  - Cortex-A9 CPUs

  - GIC v1 interrupt controller

  - Generic timer

  - Watchdog timer

- OCM 256KB

- SMC SRAM 64MB

- Zynq SLCR

- SPI x2

- QSPI

- UART

- TTC x2

- Gigabit Ethernet Controller x2

- SD Controller x2

- XADC

- Arm PrimeCell DMA Controller

- DDR Memory

- USB 2.0 x2

## Running Buildroot ZC702 Images

Buildroot has a ZC702 defconfig. Buildroot 2026.05 release is tested at the time of writing. From the Buildroot source tree:

    $ make zynq_zc702_defconfig
    $ make

The generated files are in `output/images/`. The examples below use:

> - `u-boot.bin`

> - `uImage`

> - `sdcard.img`

QEMU’s SD card model requires a power-of-two image size. Work on a copy of the Buildroot SD image and resize the copy, not the original output:

    $ cp output/images/sdcard.img sdcard-qemu.img
    $ qemu-img resize -f raw sdcard-qemu.img 128M

To boot through the U-Boot image generated by Buildroot, use the generic loader device to place the raw `u-boot.bin` at the address it was linked for and start the CPU there. The `zynq_zc702_defconfig` U-Boot image is U-Boot proper, not a Zynq boot ROM image, and is linked at `0x04000000`:

    $ qemu-system-arm -M xilinx-zynq-a9 -m 1G \
        -machine boot-mode=sd \
        -display none -serial null -serial mon:stdio \
        -device loader,file=output/images/u-boot.bin,addr=0x04000000,cpu-num=0 \
        -drive file=sdcard-qemu.img,if=sd,format=raw

Direct Linux boot of the generated Buildroot image is also supported. The Zynq ZC702 DTB is generated by Buildroot and is located in `output/images/zynq-zc702.dtb`. The kernel image is generated as a uImage:

    $ qemu-system-arm -M xilinx-zynq-a9 -m 1G \
        -display none -serial null -serial mon:stdio \
        -kernel output/images/uImage \
        -dtb output/images/zynq-zc702.dtb \
        -append "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw rootwait" \
        -drive file=sdcard-qemu.img,if=sd,format=raw

For configuring the boot-mode provide the following on the command line:

    -machine boot-mode=qspi

Supported values are `jtag`, `sd`, `qspi` and `nor`.