ARM-like global exclusive monitor.
More...
#include <exclusive-monitor.h>
|
tlm_utils::simple_target_socket< exclusive_monitor, DEFAULT_TLM_BUSWIDTH > | front_socket |
|
tlm_utils::simple_initiator_socket< exclusive_monitor, DEFAULT_TLM_BUSWIDTH > | back_socket |
|
ARM-like global exclusive monitor.
This component models an ARM-like global exclusive monitor. It connects in front of an target and monitors accesses to it. It behaves as follows:
- On an exclusive load, it internally marks the corresponding region as locked. The load is forwarded to the target.
- On an exclusive store to the same region, the region is unlocked, and the store is forwarded to the target.
- When an initiator perform an exclusive load while already owning a region, the region gets unlocked before the new one is locked.
- A regular store will unlock all intersecting regions
- If an exclusive store fails, that it, corresponds to a region which is not locked, or is locked by another initiator, or does not exactly match the store boundaries, the failure is reported into the TLM exclusive extension and the store is not forwarded to the target.
- DMI invalidation is performed when a region is locked.
- DMI requests are intercepted and modified accordingly to match the current locking state.
- DMI hints (the is_dmi_allowed() flag in transactions) is also intercepted and modified if necessary.
The documentation for this class was generated from the following file: