<<<
:sectnums:
==== Bootloader ROM (BOOTROM)

[cols="<3,<3,<4"]
[grid="none"]
|=======================
| Hardware source files:  | neorv32_bootrom.vhd       | default platform-agnostic bootloader ROM
|                         | neorv32_bootrom_image.vhd | memory initialization image
|                         | neorv32_bootrom_rom.vhd   | ROM component (primitive/IP wrapper)
| Software driver files:  | none                      | _implicitly used_
| Top entity ports:       | none                      |
| Configuration generics: | `BOOT_MODE_SELECT`        | implement BOOTROM when `BOOT_MODE_SELECT` = 0; see <<_boot_configuration>>
| CPU interrupts:         | none                      |
|=======================

**Key Features**

* Tightly-coupled on-chip ROM
* Accessible at the byte level
* Mapped to memory primitives
* Pre-initialized with default NEORV32 bootloader


**Overview**

The boot ROM contains the pre-compiled executable image of the default NEORV32 <<_bootloader>>. When the
<<_boot_configuration>> is set to _bootloader_ mode (0) via the `BOOT_MODE_SELECT` generic, the
boot ROM is automatically enabled and the CPU boot address is adjusted to the base address of the boot ROM.
Note that the entire boot ROM is read-only.

.Bootloader Image
[IMPORTANT]
The bootloader ROM is initialized during synthesis with the default bootloader image
(`rtl/core/neorv32_bootrom_image.vhd`). The physical size of the ROM is automatically
adjusted to the next power of two of the image size. However, note that the BOOTROM is
constrained to a maximum size of 64kB.

.Memory Primitives
[TIP]
The memory's memory core is encapsulated as individual wrapper (`neorv32_bootrom_rom.vhd`)
that can be replaced by a technology-specific IP. All interface ports provide static signal
widths to ease replacement.
