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>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
1
|
||||
Reference in New Issue
Block a user