Cache Controller
UG0331 User Guide Revision 15.0
140
b. Supports hit/miss generation mechanism for Cache Memory and local buffer
c. One of the following types of transaction will come to the Cache Engine:
•
Transaction for cacheable region in DDR
•
Transaction for non-cacheable region in DDR
•
Transaction for cacheable region in eNVM
6.
Supports Cache Disable mode where all transactions will be treated as non-cacheable and
replicated “as is” on DDR or switch-side
4.2.3.3.1
Accessing I and D Buses Concurrently
Accessing the I and D buses concurrently is not allowed in the M2S050 devices. In rare cases, accessing
the I and D buses concurrently might result in an invalid value returned to the internal registers from the
cache causing the firmware to not function properly. All other devices do not exhibit this behavior when
using Libero 11.4 SP1 or later.
IAR tool chain users can do a work around for this problem by preventing the Cortex-M3 processor from
issuing concurrent I and D buses access through the cache. To implement this work-around, updates are
required to the IAR tool chains. All libraries must be fully rebuilt from the source code to avoid this
interaction by preventing the cache D-Bus accesses. The user's linker scripts are required to locate
constants and data variables outside the memory regions accessed by the cache to prevent conflicts.
Consequently, IAR compilation requires using the
-no_literal_pool
option to prevent the
compiler/assembler from locating variables close to instructions known as literal pools. Refer to the
following two figures. This option prevents literal pool data generation of instructions that used D-bus
accesses.
Note:
There is no known workaround for SoftConsole, Keil, or GCC (Linux) tool chains.
Figure 59 •
IAR Compiler Options