By default, devices in Simics use the Standard Device Model. Such
models run in the Sim_Concurrency_Mode_Serial
concurrency mode.
Using the Standard Device Model amounts to being able to assume at
least Cell Context when interface methods are invoked. Certain things,
like object initialization, run in Global Context, which is
the most permissive context.
Cell Context has the following properties:
- Any object belonging to the same cell may be accessed or referenced.
Interfaces marked as available in Cell Context can be
called directly without any additional steps.
- Accessed objects always have a stable state.
- The cell thread domain is held.
- The direct memory subsystem ensures that there is no observable
concurrency with respect to simulated RAM.
In Cell Context, everything within the cell appears
to be completely serialized. Under to hood, this may not be the case, and
CPUs might be running concurrently. But when a CPU is accessed from a
device, it is stopped until the device access is complete. For instance,
a device will always see a stable cycle count when it repeatedly
queries its associated clock during a register access.