|
<< Click to Display Table of Contents >> Navigation: ASA-EMulatR Reference Guide > Introduction > Architecture Overview > Chapter 5 - Memory System Architecture > 5.7 MMIO Regions |
MMIO regions map physical address ranges to devices, not RAM. The default MMIO region spans PA 0x10_0000_0000 – 0x20_0000_0000 (64 GB). Device emulators register address ranges with the mmio_Manager, which dispatches reads and writes to the correct IDeviceEmulator instance.
Examples of MMIO-mapped devices: disk controllers, network adapters, console devices, timers, PCI configuration space.
MMIO is strongly ordered by default:
•Reads complete synchronously — data is returned immediately to the pipeline
•Writes complete synchronously — the device sees the write before the pipeline advances
•No buffering — MMIO writes bypass the write buffer entirely
•No reordering — MMIO accesses are sequenced in program order
•No speculation past MMIO — the pipeline does not advance speculatively over an MMIO access
This prevents device protocol violations and simplifies debugging. The strong ordering guarantee for MMIO means that no explicit barriers are needed for device register access sequences.
Implementation note: GuestMemory's Span API does not support MMIO regions — getSpanToPA() returns a null span for MMIO addresses, forcing per-access routing through handleRead/handleWrite.