diff options
Diffstat (limited to 'src/systemc/core/kernel.cc')
-rw-r--r-- | src/systemc/core/kernel.cc | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/src/systemc/core/kernel.cc b/src/systemc/core/kernel.cc index dac2229e2..9eed325ec 100644 --- a/src/systemc/core/kernel.cc +++ b/src/systemc/core/kernel.cc @@ -36,44 +36,58 @@ namespace sc_gem5 { +namespace +{ + +bool stopAfterCallbacks = false; +bool startComplete = false; +bool endComplete = false; + +sc_core::sc_status _status = sc_core::SC_ELABORATION; + +} // anonymous namespace + +bool Kernel::startOfSimulationComplete() { return startComplete; } +bool Kernel::endOfSimulationComplete() { return endComplete; } + +sc_core::sc_status Kernel::status() { return _status; } +void Kernel::status(sc_core::sc_status s) { _status = s; } + Kernel::Kernel(Params *params) : - SimObject(params), _stopAfterCallbacks(false), - _startComplete(false), _endComplete(false), - _status(sc_core::SC_ELABORATION), - t0Event(this, false, EventBase::Default_Pri - 1) {} + SimObject(params), t0Event(this, false, EventBase::Default_Pri - 1) {} void Kernel::init() { - kernel->status(::sc_core::SC_BEFORE_END_OF_ELABORATION); + status(::sc_core::SC_BEFORE_END_OF_ELABORATION); for (auto m: sc_gem5::allModules) m->sc_mod()->before_end_of_elaboration(); - if (_stopAfterCallbacks) + if (stopAfterCallbacks) stopWork(); } void Kernel::regStats() { - kernel->status(::sc_core::SC_END_OF_ELABORATION); + status(::sc_core::SC_END_OF_ELABORATION); for (auto m: sc_gem5::allModules) m->sc_mod()->end_of_elaboration(); - if (_stopAfterCallbacks) + if (stopAfterCallbacks) stopWork(); } void Kernel::startup() { - kernel->status(::sc_core::SC_START_OF_SIMULATION); + status(::sc_core::SC_START_OF_SIMULATION); for (auto m: sc_gem5::allModules) m->sc_mod()->start_of_simulation(); - _startComplete = true; + startComplete = true; - if (_stopAfterCallbacks) + if (stopAfterCallbacks) stopWork(); kernel->status(::sc_core::SC_RUNNING); @@ -89,7 +103,7 @@ void Kernel::stop() { if (status() < ::sc_core::SC_RUNNING) - _stopAfterCallbacks = true; + stopAfterCallbacks = true; else stopWork(); } @@ -97,15 +111,15 @@ Kernel::stop() void Kernel::stopWork() { - kernel->status(::sc_core::SC_END_OF_SIMULATION); + status(::sc_core::SC_END_OF_SIMULATION); for (auto m: sc_gem5::allModules) m->sc_mod()->end_of_simulation(); - _endComplete = true; + endComplete = true; - kernel->status(::sc_core::SC_STOPPED); + status(::sc_core::SC_STOPPED); - if (_stopAfterCallbacks) + if (stopAfterCallbacks) fatal("Simulation called sc_stop during elaboration.\n"); } |