diff options
author | Gabe Black <gabeblack@google.com> | 2018-09-14 21:38:45 -0700 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2018-10-09 21:51:33 +0000 |
commit | daecb2b529e81c54fe4804ea35e74f4840b93511 (patch) | |
tree | 753d96e9f7bfbe52468eaff428adee871df54c91 /src/systemc/core/sc_sensitive.cc | |
parent | 164f3e01876b74618de111c4a0d2ee027d023e47 (diff) | |
download | gem5-daecb2b529e81c54fe4804ea35e74f4840b93511.tar.xz |
systemc: Check whether the simulation is running when creating sensitivities.
Change-Id: I499cde0d0eb45ba3287a8719174e1c794c1fb634
Reviewed-on: https://gem5-review.googlesource.com/c/12810
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc/core/sc_sensitive.cc')
-rw-r--r-- | src/systemc/core/sc_sensitive.cc | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/systemc/core/sc_sensitive.cc b/src/systemc/core/sc_sensitive.cc index 9b8ae2de4..2accc93c1 100644 --- a/src/systemc/core/sc_sensitive.cc +++ b/src/systemc/core/sc_sensitive.cc @@ -33,16 +33,31 @@ #include "systemc/ext/channel/sc_inout.hh" #include "systemc/ext/channel/sc_signal_in_if.hh" #include "systemc/ext/core/sc_interface.hh" +#include "systemc/ext/core/sc_main.hh" #include "systemc/ext/core/sc_sensitive.hh" +#include "systemc/ext/utils/sc_report_handler.hh" namespace sc_core { +namespace +{ + +void +checkIfRunning() +{ + if (sc_is_running()) + SC_REPORT_ERROR("(E526) make sensitive failed", "simulation running"); +} + +} // anonymous namespace + sc_sensitive::sc_sensitive() : currentProcess(nullptr) {} sc_sensitive & sc_sensitive::operator << (const sc_event &e) { + checkIfRunning(); sc_gem5::newStaticSensitivityEvent(currentProcess, &e); return *this; } @@ -50,6 +65,7 @@ sc_sensitive::operator << (const sc_event &e) sc_sensitive & sc_sensitive::operator << (const sc_interface &i) { + checkIfRunning(); sc_gem5::newStaticSensitivityInterface(currentProcess, &i); return *this; } @@ -57,6 +73,7 @@ sc_sensitive::operator << (const sc_interface &i) sc_sensitive & sc_sensitive::operator << (const sc_port_base &b) { + checkIfRunning(); sc_gem5::newStaticSensitivityPort(currentProcess, &b); return *this; } @@ -64,6 +81,7 @@ sc_sensitive::operator << (const sc_port_base &b) sc_sensitive & sc_sensitive::operator << (sc_event_finder &f) { + checkIfRunning(); sc_gem5::newStaticSensitivityFinder(currentProcess, &f); return *this; } @@ -80,6 +98,7 @@ void sc_sensitive::operator () (::sc_gem5::Process *p, const sc_signal_in_if<bool> &i) { + checkIfRunning(); sc_gem5::newStaticSensitivityEvent(p, &i.posedge_event()); } @@ -87,12 +106,14 @@ void sc_sensitive::operator () (::sc_gem5::Process *p, const sc_signal_in_if<sc_dt::sc_logic> &i) { + checkIfRunning(); sc_gem5::newStaticSensitivityEvent(p, &i.posedge_event()); } void sc_sensitive::operator () (::sc_gem5::Process *p, const sc_in<bool> &port) { + checkIfRunning(); sc_gem5::newStaticSensitivityFinder(p, &port.pos()); } @@ -100,12 +121,14 @@ void sc_sensitive::operator () (::sc_gem5::Process *p, const sc_in<sc_dt::sc_logic> &port) { + checkIfRunning(); sc_gem5::newStaticSensitivityFinder(p, &port.pos()); } void sc_sensitive::operator () (::sc_gem5::Process *p, const sc_inout<bool> &port) { + checkIfRunning(); sc_gem5::newStaticSensitivityFinder(p, &port.pos()); } @@ -113,12 +136,14 @@ void sc_sensitive::operator () (::sc_gem5::Process *p, const sc_inout<sc_dt::sc_logic> &port) { + checkIfRunning(); sc_gem5::newStaticSensitivityFinder(p, &port.pos()); } void sc_sensitive::operator () (::sc_gem5::Process *p, sc_event_finder &f) { + checkIfRunning(); sc_gem5::newStaticSensitivityFinder(p, &f); } |