diff options
Diffstat (limited to 'src/systemc/core/sensitivity.cc')
-rw-r--r-- | src/systemc/core/sensitivity.cc | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/systemc/core/sensitivity.cc b/src/systemc/core/sensitivity.cc index 4f84ce0e9..11e04a100 100644 --- a/src/systemc/core/sensitivity.cc +++ b/src/systemc/core/sensitivity.cc @@ -55,12 +55,29 @@ Sensitivity::satisfy() } bool +Sensitivity::notifyWork(Event *e) +{ + satisfy(); + return true; +} + +bool Sensitivity::notify(Event *e) { + if (scheduler.current() == process) { + static bool warned = false; + if (!warned) { + SC_REPORT_WARNING("(W536) immediate self-notification ignored " + "as of IEEE 1666-2011", process->name()); + warned = true; + } + return false; + } + if (process->disabled()) return false; - satisfy(); - return true; + + return notifyWork(e); } bool @@ -203,11 +220,8 @@ DynamicSensitivityEventOrList::DynamicSensitivityEventOrList( {} bool -DynamicSensitivityEventOrList::notify(Event *e) +DynamicSensitivityEventOrList::notifyWork(Event *e) { - if (process->disabled()) - return false; - events.erase(e->sc_event()); // All the other events need this deleted from their lists since this @@ -225,11 +239,8 @@ DynamicSensitivityEventAndList::DynamicSensitivityEventAndList( {} bool -DynamicSensitivityEventAndList::notify(Event *e) +DynamicSensitivityEventAndList::notifyWork(Event *e) { - if (process->disabled()) - return false; - events.erase(e->sc_event()); // This sensitivity is satisfied if all events have triggered. |