Boot flow and boot images
Follow the stages from BootROM, build BOOT.BIN and select the roles of the FSBL, ATF, U-Boot and bitstream.
From JTAG to autonomous boot
During development, the engineer can use Vitis to initialize the board and load an ELF through JTAG. An autonomous product must find these elements in non-volatile memory, which keeps its contents after power is removed, and load them without the development computer.
Boot starts after power-on reset. Boot mode selects QSPI, SD, eMMC or JTAG depending on the device and board.
Boot stages
BootROM is fixed startup code stored inside the chip. It is the first code executed and is called stage 0. It initializes the minimum hardware, reads the image header and loads the first loader into local memory.
On Zynq-7000, the First Stage Boot Loader, or FSBL, initializes the PS from Vivado-generated data. It can configure the PL and load later partitions. Zynq UltraScale+ MPSoC adds platform management and security components.

| Partition | Common role |
|---|---|
| FSBL | PS initialization and first loading stage |
| PMU firmware | ZynqMP platform management |
| Bitstream | PL configuration |
| Arm Trusted Firmware | Transition to the required exception levels |
| U-Boot | Second-stage loader and system source selection |
| Linux image | Kernel, device tree and file system |
| Application ELF | Standalone program |
Building BOOT.BIN
Bootgen assembles partitions according to a BIF file.
the_ROM_image:
{
[bootloader] fsbl.elf
[pmufw_image] pmufw.elf
[destination_device=pl] design.bit