1.8.2 Controlling and observing the syncLevel

CADI watchpoints automatically register and unregister for their required syncLevel (POST_INSN_IO). All other use cases must explicitly register and unregister for the syncLevel they require.

Users of syncLevel write to a set of non-architectural processor registers in the CADI and SCADI interface to register and unregister for specific syncLevels. Processor registers are more suitable than CADI parameters for exposing an interface that has side effects on writes and where values might change spontaneously.

This is the exposed interface to control and observe the value of syncLevel. All these registers are in the CADI/SCADI register group Simulation for each CT processor that contains non-architectural, simulator-specific registers. All are 32-bit integer registers. Users of syncLevel write to these registers to register and unregister for the syncLevel they require:

syncLevelSyncStateRegister
Users write to this register for SYNC_STATE. Write-only.
syncLevelSyncStateUnregister
Users write this to unregister for SYNC_STATE. Write-only.
syncLevelPostInsnIORegister
Users write to this register for POST_INSN_LDST. Write-only.
syncLevelPostInsnIOUnregister
Users write this to unregister for POST_INSN_LDST. Write-only.
syncLevelPostInsnAllRegister
Users write this to register for POST_INSN_ALL. Write-only.
syncLevelPostInsnAllUnregister
Users write this to unregister for POST_INSN_ALL. Write-only.

These registers are only for debugging and visibility in the debugger, and syncLevel users do not usually access them at all:

syncLevel
Current syncLevel. Read-only.
syncLevelSyncStateCount
User counter. Read/write (use as read-only).
syncLevelPostInsnIOCount
User counter. Read/write (use as read-only).
syncLevelPostInsnAllCount
User counter. Read/write (use as read-only).
minSyncLevel
Same as the min_sync_level parameter, described below. Read/write.

The *Register and *Unregister registers are for syncLevel users to register and unregister themselves, by writing the value 0 to them. Changes to the syncLevel become effective at the next stop event checkpoint. In addition, syncLevel users can write to these registers any time before the simulation is running, for example from the init() simulation phase. The change takes effect immediately when the simulation is run.

The other registers are only present to make the debugging of these mechanisms and their users easier. The syncLevel register enables you to see what kind of performance you can expect from the model. You must treat access to these other registers as read-only. You can write to them, however, to permit debugging the syncLevel mechanisms.

These registers are not memory (or CPnn-) mapped anywhere, and are not accessible to target programs.

In addition to this debug register interface, there is a CADI parameter that can influence the syncLevel:

min_sync_level (default=0, type=int, runtime=true)

This parameter enables you to control the minimum syncLevel by the CADI parameter interface. This is not the intended primary interface to control the syncLevel because it does not enable multiple independent syncLevel users to indicate their requirements to the simulator. It is primarily for debugging purposes and for situations where a single global syncLevel setting is sufficient. You can change this parameter at runtime, and changes become effective at the next stop event checkpoint. Reading this parameter value returns the min_sync_level, not the current syncLevel. This parameter is only an additional way of controlling the syncLevel and controls the same mechanisms as the register interface.

Non-ConfidentialPDF file icon PDF version100964_1180_00_en
Copyright © 2014–2019 Arm Limited or its affiliates. All rights reserved.