
UM10413 All information provided in this document is subject to legal disclaimers. © NXP B.V. 2011. All rights reserved.
User manual Rev. 1 — 16 December 2011 13 of 268
NXP Semiconductors UM10413
MPT612 User manual
For these areas, both attempted data access and instruction fetch generate an exception.
In addition, a prefetch abort exception is generated for any instruction fetch that maps to
an AHB or APB peripheral address.
Within the address space of an existing APB peripheral, a data abort exception is not
generated in response to an access to an undefined address. Address decoding within
each peripheral is limited to distinguish only defined registers within the peripheral itself.
For example, an access to address 0xE000 D000 (an undefined address within the
UART0 space) can result in a register access defined at address 0xE000 C000. Details of
such address aliasing within a peripheral space are not defined in the MPT612
documentation and are not a supported feature.
Remark: the ARM core stores the prefetch abort flag and the (meaningless) associated
instruction in the pipeline, and processes the abort only if an attempt is made to execute
the instruction fetched from the illegal address. This method prevents accidental aborts
caused by prefetches occurring when code is executed very close to a memory boundary.
8. Memory Acceleration Module (MAM)
The MAM block in the MPT612 maximizes the performance of the ARM processor when it
is running code in flash memory using a single flash bank.
8.1 Operation
Essentially, the Memory Accelerator Module (MAM) attempts to have the next ARM
instruction that is needed in its latches in time to prevent CPU fetch stalls. The MPT612
uses one bank of flash memory, compared to the two banks used on predecessor
devices. It includes three 128-bit buffers called the prefetch buffer, the branch trail buffer
and the data buffer. The ARM is stalled while a fetch is initiated for the 128-bit line for an
Instruction Fetch not satisfied by either the prefetch or branch trail buffer, or a prefetch not
initiated for that line. If a prefetch is initiated but not yet completed, the ARM is stalled for
a shorter time. Unless aborted by a data access, a prefetch is initiated when the flash has
completed the previous access. The flash module latches the prefetched line, but the
MAM does not capture the line in its prefetch buffer until the ARM core presents the
address from which the prefetch is made. If the core presents a different address from the
one from which the prefetch is made, the prefetched line is discarded.
The prefetch and branch trail buffers each include four 32-bit ARM instructions or eight
16-bit Thumb instructions. During sequential code execution, typically the prefetch buffer
contains the current instruction and the entire flash line that contains it.
The MAM uses the LPROT[0] line to differentiate between instruction and data accesses.
Code and data accesses use separate 128-bit buffers. Three of every four sequential
32-bit code or data accesses "hit" in the buffer without requiring a flash access (7 of 8
sequential 16-bit accesses, 15 of every 16 sequential byte accesses). The fourth (eighth,
16th) sequential data access must access flash, aborting any prefetch in progress. When
a flash data access is concluded, any prefetch in progress is re-initiated.
Timing of flash read operations is programmable and is described later in this section.
There is no code fetch penalty for sequential instruction execution when the CPU clock
period is greater than or equal to one fourth of the flash access time. The average amount
of time spent processing program branches is relatively small (less than 25 %) and can be