| |||
| Home > Processor Components > ARMv7A - AEM > Parameters | |||
In the platform models, configuration parameters are located
in the parameter hierarchy at cluster.parameter_name.
There are a number of other parameters that adjust the behavior
of external platform components on the Versatile™ Express (VE)
system board. These are:
You can configure this model as a multicore processor, so
there are separate groups of configuration parameters for each core
in the system. In cases where fewer cores than the maximum number
possible are instantiated, the parameters from cpu0 are
always used first. See Table 4.28.
Table 4.28. Multiprocessing parameters
| Parameter | Description | Default |
|---|---|---|
cluster_id | Value for Cluster ID that is available to target programs in MPIDR. | 0 |
multiprocessor_extensions | Enable the instruction set changes introduced with the ARMv7 Multiprocessor Extensions. | true |
num_cores | Number of cores implemented. To instantiate
more than one core, set parameter multiprocessor_extensions. | 1 |
vmsa.cachetlb_broadcast | Enable broadcasting of cache and TLB maintenance operations that apply to the inner shared domain. | true |
cpu[n].SMPnAMP | Place this core inside the inner shared domain, and participate in the coherency protocol that arranges inner cache coherency among other cores in the domain. | false |
This section describes processor configuration parameters. See Table 4.29.
Table 4.29. Processor configuration parameters
| Parameter | Description | Default |
|---|---|---|
auxilliary_feature_register0 | Value for AFR0 ID register | 0 |
cpuID | Value for main CPU ID register | 0x411fc081 |
dic-spi_count | Number of shared peripheral interrupts implemented. | 64 |
dtcm0_base | DTCM base address at reset | 0 |
dtcm0_enable | Enable DTCM at reset | false |
dtcm0_size | DTCM size in KB | 32 |
FILTEREN | Enable filtering of accesses between master
bus ports. This is usually not used inside a VE system and should
be left false. | false |
FILTEREND | End of region filtered to pvbus_m1.
Values must be aligned to a 1MB boundary. | 0 |
FILTERSTART | Start of region filtered to pvbus_m1.
Values must be aligned to a 1MB boundary. | 0 |
implements_ple_like_a8 | Add support for the PLE from Cortex-A8 | false |
IS_VALIDATION[a] | Reserved. Enables A9-validation-like trickbox-coprocessor, which is only usable in validation platform model. | false |
itcm0_base | ITCM base address at reset | 0x40000000 |
itcm0_enable | Enable ITCM at reset | false |
itcm0_size | ITCM size in KB | 32 |
PERIPHBASE[b] | Base address of MP “private” peripherals (WatchdogTimers, GIC) (bits 31:13 used). | 0x13080000 |
siliconID | Value for Auxilliary ID register | 0x41000000 |
CFGSDISABLE | Disables access to some registers in the internal interrupt controller peripheral. | false |
implements_virtualization | Implement the Virtualization extension in this processor. When set, this also enables LPAE. | false |
implements_lpae | Implement the Large Physical Address extension in this processor. | false |
use_Cortex-A15_peripherals | Changes the layout of the internal peripheral memory map to mimic that of the Cortex-A15. See Internal peripherals. | false |
delayed_CP15_operations | Delay the functional effect of CP15 operations. See Delayed operation of CP15 instructions. | false |
take_ccfail_undef | Take undefined exceptions even if the instruction failed its condition codes check. See An undefined instruction failed its condition code check. | false |
low_latency_mode | Run only a single instruction between checks for IRQ and other events. This ensures that when the platform raises an interrupt, the exception vector is taken immediately, but it involves a considerable penalty in performance. | false |
[a] IS_VALIDATION
is not exposed in the VE platform model, and fixed as [b] PERIPHBASE
is not exposed in the VEplatform model, and fixed as | ||
This section describes memory configuration parameters. See Table 4.30.
Table 4.30. Memory configuration parameters
| Parameter | Description | Default |
|---|---|---|
vmsa.implements_fcse | Support fcse in this processor | false |
vmsa.infinite_write_buffer | Enable infinite write-buffer. See Infinite write buffer. | false |
vmsa.write_buffer_delay | Elapsed time between natural buffer drains. See Infinite write buffer. | 1000 |
vmsa.delayed_read_buffer | Enable deferred read values in conjunction
with use_IR. See Memory operation reordering. | false |
vmsa.cache_incoherence_check | Enable the check for cache incoherence. See Cache incoherence check. | false |
vmsa.memory_marking_check | Enable the check for inconsistent memory marking in the TLB. See Memory marking check. | false |
vmsa.instruction_tlb_lockable_entries | Number of lockable entries in instruction TLB | 32 |
vmsa.instruction_tlb_size | Total number of entries in instruction TLB | 32 |
vmsa.main_tlb_lockable_entries | Number of lockable entries in data or unified TLB | 32 |
vmsa.main_tlb_size | Total number of entries in data or unified TLB | 32 |
vmsa.separate_tlbs | Separate ITLB and DTLB. If the TLB is unified,
its size is defined by parameter vmsa.main_tlb_size. | true |
vmsa.tlb_prefetch | Enables aggressive pre-fetching into the TLB. See Aggressively pre-fetching TLB. | false |
vmsa.implements_outer_shareable | Distinguish between inner shareable and outer shareable memory access types. Outer shareable is implemented as Non Cacheable. | true |
vmsa.access_flags_hardware_management | Enable support for the hardware management of the Access Flag in the pagetables. | true |
dcache-state_modelled | Allow line allocation in d-side caches at all levels | true |
icache-state_modelled | Allow line allocation in i-side caches at all levels. Unified caches allocate lines only if these parameters are enabled at both i-side and d-side. | true |
The [d|i]cache-state_modelled parameters
control the way that caches are simulated. When switched on, the
default mode, all cache behaviors and maintenance operations are
modeled fully.
If false, the cache is still present in
the programmer’s view of the processor but in the simulated implementation
there are no memory lines associated with the cache at this level.
The programmer-view effect of this is as though the cache cleans
and invalidates any line as soon as it is loaded, and can never
become incoherent with its backing memory. Although this is an architecturally
legal behavior, it is not realistic to any current hardware and
is less likely to expose problems in target software. It can, however,
be useful when debugging problems that are suspected to be related
to cache maintenance, and also has the side effect of allowing the model
to run faster.
Compare this to the effect of setting cpu[n].l2dcache-size_bytes
= 0, which is to simulate a CPU that contains only Level
1 caches. In this case, the ID code registers do not describe a
Level 2 cache. Level 2 is entirely absent from the processor.
You can configure the processor with up to four levels of
cache. The cache layout is not required to be symmetrical for each
CPU in the processor, so the parameters listed in Table 4.31 are repeated in
groups cpu0-cpu3 corresponding
to the view for each core of the memory hierarchy.
Table 4.31. General cache configuration parameters
| Parameter | Description | Default |
|---|---|---|
cpu[n].cache-coherency_level | 1-based-Level of cache coherency. A value of 2 means that the L2 caches, and all subsequent levels, are coherent. | 2 |
cpu[n].cache-unification_level | 1-based-Level of cache unification. A value of 2 means that the L2 caches, and all subsequent levels, are unified. | 2 |
cpu[n].cache-outer_level | Level at which outer cache attributes start to be used. L1 caches always uses inner attributes. A value of 2 means that the L2 caches, and all subsequent levels, use outer attributes. | 2 |
Each cache block in the system is configured using the parameters
listed in Table 4.32, which are
repeated for groups cpu0-cpu3,
and within each group in caches l1icache, l1dcache-l4icache, l4dcache.
The number and type of cache blocks are active depending on the unification level of each core. Before the unification level, caches are separate on the instruction and data sides, and both sets of parameters are used. After the unification level, the data and instruction sides are unified, and the single cache block is described using the data side parameters only.
Table 4.32. Cache block configuration parameters
| Parameter | Description | Default |
|---|---|---|
cpu[n].[cache]-size_bytes | Zero if the cache is not present, otherwise the total size in bytes of the cache. Must be divisible by the line length and associativity, and represent a number of cache sets not greater than 32768. | 32768 |
cpu[n].[cache]-linelength_bytes | Length of each cache line. Must be 32 or 64. | 32 |
cpu[n].[cache]-associativity | Associativity of this cache. Must be between 1 and 1024. | 4 |
cpu[n].[cache]-read_allocate | Support allocate-on-read in this cache | true |
cpu[n].[cache]-write_allocate[a] | Support allocate-on-write in this cache | true |
cpu[n].[cache]-write_back[a] | Support write-back in this cache | true |
cpu[n].[cache]-write_through[a] | Support write-through in this cache | true |
cpu[n].[cache]-treat_invalidate_as_clean[a] | Always clean dirty cache lines before invalidating them. See Other checks. | false |
cpu[n].[cache]-shared_key | If non-zero, mark this cache as being shared with other cores. | 0 |
[a] This parameter is not applicable to instruction-side caches. | ||
The parameters for each core describe the view for that core of the memory hierarchy. If more than one core has access to the same cache unit, for example, a shared Level 2 cache, then:
the cache must be described with all the same parameter settings in every case
all caches downstream of a shared cache must also be shared, and in the same order for every observer
the [cache]-shared_key parameter
is set to an arbitrary non-zero value. Any cache in the system that
has this value is considered to be one cache block.
You can describe non-legal cache layouts using the shared_key mechanism.
Not all bad cases can be easily detected during initialization,
so take care to ensure correct cache configuration. The model might
behave erratically if the cache layout cannot be rationalized.
See Figure 4.12 and Figure 4.13 for examples of CPU-cache architecture configurations.
cpu0.cache-unification_level=2 cpu0.l2dcache-size_bytes=32768 cpu0.l2dcache-shared_key=1 cpu1.cache-unification_level=2 cpu1.l2dcache-size_bytes=32768 cpu1.l2dcache-shared_key=1
cpu0.cache-unification_level=2 cpu0.l2dcache-size_bytes=32768 cpu0.l2dcache-shared_key=1 cpu0.l3dcache-size_bytes=65536 cpu0.l3dcache-shared_key=2 cpu1.cache-unification_level=1 cpu1.l2dcache-size_bytes=32768 cpu1.l2dcache-shared_key=1 cpu1.l3dcache-size_bytes=65536 cpu1.l3dcache-shared_key=2 cpu2.cache-unification_level=2 cpu2.l2dcache-size_bytes=65536 cpu2.l2dcache-shared_key=2
In the view of CPU2, the shared cache block marked L3U$ is at Level 2 in the memory system hierarchy.
The ARMv7 Debug architecture contains a number of optional features. The parameters listed in Table 4.33 control which of these features are implemented by the model.
Table 4.33. Debug architecture configuration parameters
| Parameter | Description | Default |
|---|---|---|
implements_OSSaveAndRestore | Add support for the OS Save and Restore mechanism implemented by DBGOSSRR and other registers. | true |
DBGOSLOCKINIT | Initial value for the Locked bit in DBGOSLSR. When this bit is set, software access to debug registers is restricted. | 0x1 |
implements_secure_user_halting_debug | Permit debug events in Secure User mode when invasive debug is not permitted in Secure privileged modes. (Deprecated in ARM v7.) | false |
DBGPID | Value for CP14 DBGPID registers | 0x8000bb000 |
DBGCID | Value for CP14 DBGCID registers | 0x0 |
DBGDSCCR_mask | Implemented bits of DBGDSCCR | 0x7 |
cpu[n].DBGDRAR | Value for Debug ROM address register | 0x0 |
cpu[n].DBGSRAR | Value for Debug Self address register | 0x0 |
These parameters are repeated in groups cpu0-cpu3 for
each core in the processor. See Table 4.34.
Table 4.34. Core configuration parameters
| Parameter | Description | Default |
|---|---|---|
cpu[n].CFGEND0 | Starts the core in big endian BE8 mode | false |
cpu[n].CFGNMFI | Sets the NMFI bit in the System Control Register (SCTLR) that prevents the FIQ interrupt from being masked in APSR. | false |
cpu[n].CFGTE | Starts the core in Thumb2 mode | false |
cpu[n].CP15SDISABLE | Disables access to some CP15 registers | false |
cpu[n].VINITHI | Starts the core with high vectors enabled,
the vector base address is 0xFFFF0000 | false |
cpu[n].implements_neon | Support NEON in this CPU | true |
cpu[n].implements_thumbEE | Support ThumbEE in this CPU | true |
cpu[n].implements_trustzone | Support TrustZone™ in this CPU | true |
cpu[n].implements_vfp | Support VFP in this CPU | true |
cpu[n].fpsID | Value for Floating-point System ID Register | 0x41033091 |
cpu[n].implements_vfpd16-d31 | If VFP is implemented, support 32 double-precision registers. Otherwise 16 are supported. If NEON is implemented, 32 registers are always supported and this parameter is ignored. | true |
cpu[n].implements_vfp_short_vectors | Enable support for vfp short vector operations,
as indicated by MVFR0[27:24] | true |
cpu[n].implements_fused_mac | Implement the vfp fused multiply accumulate operations | false |
cpu[n].implements_sdiv_udiv | Implement the integer divide operations | false |
cpu[n].vfp-enable_at_reset | VFP registers are enabled without a requirement to write the corresponding access enable bits first | false |
cpu[n].use_IR | Enable operation reordering in conjunction
with delayed_read_buffer. See Memory operation reordering. | 0 |
Semihosting is a method of target software running on the model to communicate with the host environment. This model allows the target C library to access I/O facilities of the host computer; file system, keyboard input, clock and so on. For more information see the RealView Compilation Tools Developer Guide.
These parameters are repeated in groups cpu0-cpu3 for
each core in the processor. See Table 4.35.
Table 4.35. Core configuration parameters
| Parameter | Description | Default |
|---|---|---|
cpu[n].semihosting-ARM_SVC | ARM SVC number to be treated as a semihosted call | 0x123456 |
cpu[n].semihosting-Thumb_SVC | Thumb SVC number to be treated as a semihosted call | 0xab |
cpu[n].semihosting-cmd_line | Program name and arguments to be passed as argc, argv to target
programs using the semihosted c library. | |
cpu[n].semihosting-debug | Enable debug output of semihosting SVC calls | false |
cpu[n].semihosting-enable | Enable semihosting of SVC instructions | true |
cpu[n].semihosting-heap_base | Virtual address of heap base | 0x00000000 |
cpu[n].semihosting-heap_limit | Virtual address of top of heap | 0x0f000000 |
cpu[n].semihosting-stack_base | Virtual address of base of descending stack | 0x10000000 |
cpu[n].semihosting-stack_limit | Virtual address of stack limit | 0x0f000000 |
The parameters listed in Table 4.36 control how warning and error messages from the architectural checkers are generated.
Table 4.36. Message severity levels
| Parameter | Description | Default |
|---|---|---|
messages.break_warning_level | The simulation stops in the debugger after emitting a message at this level or higher. | 5 |
messages.ignore_warning_level | Messages below this level are ignored and not printed. | 1 |
messages.suppress_repeated_messages | The simulation does not emit more than one copy of a message when it is generated from a given point in the target program. | true |
messages.output_file | The path[a] of the file to which
messages are written. If blank, messages are sent to stderr. | |
[a] The format of the string follows the normal file path conventions for the host platform. File paths without a leading root are written into the current working directory, which might vary. | ||
Except for fatal errors, the severity level of each message
can be reconfigured in parameters messages.severity_level_[*],
allowing you to concentrate only on those warnings that are appropriate
to your task. See Table 4.37.
Table 4.37. Message configuration parameters
| Level | Name | Description |
|---|---|---|
| 0 | Minor Warning | Suspect, but plausibly correct |
| 1 | Warning | A likely bug |
| 2 | Severe Warning | Technically legal, but believed certain to be a bug |
| 3 | Error | A definite architectural violation |
| 4 | Severe Error | Target code unlikely to be able to recover |
| 5 | Fatal | From which the simulation is unable to continue |