summaryrefslogtreecommitdiff
path: root/src/systemc
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-08-13 18:20:52 -0700
committerGabe Black <gabeblack@google.com>2018-09-20 01:47:22 +0000
commitfe34731b02b1a32a0f881846d5b04d11ba6a2d12 (patch)
tree123a49a3dca1e723ef1e818aa7f2bd6913e73f75 /src/systemc
parent8e91764a3642c3ef5e630d02908f8c9072d5b538 (diff)
downloadgem5-fe34731b02b1a32a0f881846d5b04d11ba6a2d12.tar.xz
systemc: Implement the sc_in class.
Change-Id: I08174462cb650c7918a4e8f5284d4ee814cf595d Reviewed-on: https://gem5-review.googlesource.com/12085 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc')
-rw-r--r--src/systemc/ext/channel/sc_in.hh441
1 files changed, 188 insertions, 253 deletions
diff --git a/src/systemc/ext/channel/sc_in.hh b/src/systemc/ext/channel/sc_in.hh
index f691afee0..b7170aed3 100644
--- a/src/systemc/ext/channel/sc_in.hh
+++ b/src/systemc/ext/channel/sc_in.hh
@@ -32,6 +32,7 @@
#include <string>
+#include "../core/sc_event.hh"
#include "../core/sc_port.hh"
#include "sc_signal_in_if.hh"
#include "sc_signal_inout_if.hh"
@@ -41,119 +42,98 @@ namespace sc_core
{
class sc_event;
-class sc_event_finder;
class sc_trace_file;
template <class T>
class sc_in : public sc_port<sc_signal_in_if<T>, 1>
{
public:
- sc_in() : sc_port<sc_signal_in_if<T>, 1>() {}
- explicit sc_in(const char *name) : sc_port<sc_signal_in_if<T>, 1>(name) {}
+ sc_in() : sc_port<sc_signal_in_if<T>, 1>(),
+ _valueChangedFinder(*this, &sc_signal_in_if<T>::value_changed_event)
+ {}
+ explicit sc_in(const char *name) : sc_port<sc_signal_in_if<T>, 1>(name),
+ _valueChangedFinder(*this, &sc_signal_in_if<T>::value_changed_event)
+ {}
virtual ~sc_in() {}
// Deprecated binding constructors.
explicit sc_in(const sc_signal_in_if<T> &interface) :
- sc_port<sc_signal_in_if<T>, 1>(interface)
+ sc_port<sc_signal_in_if<T>, 1>(interface),
+ _valueChangedFinder(*this, &sc_signal_in_if<T>::value_changed_event)
{}
sc_in(const char *name, const sc_signal_in_if<T> &interface) :
- sc_port<sc_signal_in_if<T>, 1>(name, interface)
+ sc_port<sc_signal_in_if<T>, 1>(name, interface),
+ _valueChangedFinder(*this, &sc_signal_in_if<T>::value_changed_event)
{}
explicit sc_in(sc_port_b<sc_signal_in_if<T> > &parent) :
- sc_port<sc_signal_in_if<T>, 1>(parent)
+ sc_port<sc_signal_in_if<T>, 1>(parent),
+ _valueChangedFinder(*this, &sc_signal_in_if<T>::value_changed_event)
{}
sc_in(const char *name, sc_port_b<sc_signal_in_if<T> > &parent) :
- sc_port<sc_signal_in_if<T>, 1>(name, parent)
+ sc_port<sc_signal_in_if<T>, 1>(name, parent),
+ _valueChangedFinder(*this, &sc_signal_in_if<T>::value_changed_event)
{}
explicit sc_in(sc_port<sc_signal_in_if<T>, 1> &parent) :
- sc_port<sc_signal_in_if<T>, 1>(parent)
+ sc_port<sc_signal_in_if<T>, 1>(parent),
+ _valueChangedFinder(*this, &sc_signal_in_if<T>::value_changed_event)
{}
sc_in(const char *name, sc_port<sc_signal_in_if<T>, 1> &parent) :
- sc_port<sc_signal_in_if<T>, 1>(name, parent)
+ sc_port<sc_signal_in_if<T>, 1>(name, parent),
+ _valueChangedFinder(*this, &sc_signal_in_if<T>::value_changed_event)
{}
virtual void
- bind(const sc_signal_in_if<T> &)
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- }
- void
- operator () (const sc_signal_in_if<T> &)
+ bind(const sc_signal_in_if<T> &i)
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ sc_port<sc_signal_in_if<T>, 1>::bind(
+ const_cast<sc_signal_in_if<T> &>(i));
}
+ void operator () (const sc_signal_in_if<T> &i) { bind(i); }
virtual void
- bind(sc_port<sc_signal_in_if<T>, 1> &)
+ bind(sc_port<sc_signal_in_if<T>, 1> &i)
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ sc_port<sc_signal_in_if<T>, 1>::bind(i);
}
void
- operator () (sc_port<sc_signal_in_if<T>, 1> &)
+ operator () (sc_port<sc_signal_in_if<T>, 1> &p)
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ bind(p);
}
virtual void
- bind(sc_port<sc_signal_inout_if<T>, 1> &)
+ bind(sc_port<sc_signal_inout_if<T>, 1> &p)
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ sc_port_base::bind(p);
}
void
- operator () (sc_port<sc_signal_inout_if<T>, 1> &)
+ operator () (sc_port<sc_signal_inout_if<T>, 1> &p)
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ bind(p);
}
- virtual void
- end_of_elaboration()
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- }
+ virtual void end_of_elaboration() { /* Implementation defined. */ }
- const T &
- read() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const T *)nullptr;
- }
- operator const T& () const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const T *)nullptr;
- }
+ const T &read() const { return (*this)->read(); }
+ operator const T& () const { return (*this)->read(); }
- const sc_event &
- default_event() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const sc_event *)nullptr;
- }
+ const sc_event &default_event() const { return (*this)->default_event(); }
const sc_event &
value_changed_event() const
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const sc_event *)nullptr;
- }
- bool
- event() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return false;
- }
- sc_event_finder &
- value_changed() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(sc_event_finder *)nullptr;
+ return (*this)->value_changed_event();
}
+ bool event() const { return (*this)->event(); }
+ sc_event_finder &value_changed() const { return _valueChangedFinder; }
virtual const char *kind() const { return "sc_in"; }
private:
+ mutable sc_event_finder_t<sc_signal_in_if<T> > _valueChangedFinder;
+
// Disabled
- sc_in(const sc_in<T> &) : sc_port<sc_signal_in_if<T>, 1>() {}
- sc_in<T> &operator = (const sc_in<T> &) { return *this; }
+ sc_in(const sc_in<T> &);
+ sc_in<T> &operator = (const sc_in<T> &);
};
template <class T>
@@ -167,151 +147,135 @@ template <>
class sc_in<bool> : public sc_port<sc_signal_in_if<bool>, 1>
{
public:
- sc_in() : sc_port<sc_signal_in_if<bool>, 1>() {}
+ sc_in() : sc_port<sc_signal_in_if<bool>, 1>(),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<bool>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<bool>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<bool>::negedge_event)
+ {}
explicit sc_in(const char *name) :
- sc_port<sc_signal_in_if<bool>, 1>(name) {}
+ sc_port<sc_signal_in_if<bool>, 1>(name),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<bool>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<bool>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<bool>::negedge_event)
+ {}
virtual ~sc_in() {}
// Deprecated binding constructors.
explicit sc_in(const sc_signal_in_if<bool> &interface) :
- sc_port<sc_signal_in_if<bool>, 1>(interface)
+ sc_port<sc_signal_in_if<bool>, 1>(interface),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<bool>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<bool>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<bool>::negedge_event)
{}
sc_in(const char *name, const sc_signal_in_if<bool> &interface) :
- sc_port<sc_signal_in_if<bool>, 1>(name, interface)
+ sc_port<sc_signal_in_if<bool>, 1>(name, interface),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<bool>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<bool>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<bool>::negedge_event)
{}
explicit sc_in(sc_port_b<sc_signal_in_if<bool> > &parent) :
- sc_port<sc_signal_in_if<bool>, 1>(parent)
+ sc_port<sc_signal_in_if<bool>, 1>(parent),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<bool>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<bool>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<bool>::negedge_event)
{}
sc_in(const char *name, sc_port_b<sc_signal_in_if<bool> > &parent) :
- sc_port<sc_signal_in_if<bool>, 1>(name, parent)
+ sc_port<sc_signal_in_if<bool>, 1>(name, parent),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<bool>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<bool>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<bool>::negedge_event)
{}
explicit sc_in(sc_port<sc_signal_in_if<bool>, 1> &parent) :
- sc_port<sc_signal_in_if<bool>, 1>(parent)
+ sc_port<sc_signal_in_if<bool>, 1>(parent),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<bool>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<bool>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<bool>::negedge_event)
{}
sc_in(const char *name, sc_port<sc_signal_in_if<bool>, 1> &parent) :
- sc_port<sc_signal_in_if<bool>, 1>(name, parent)
+ sc_port<sc_signal_in_if<bool>, 1>(name, parent),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<bool>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<bool>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<bool>::negedge_event)
{}
virtual void
- bind(const sc_signal_in_if<bool> &)
+ bind(const sc_signal_in_if<bool> &i)
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- }
- void
- operator () (const sc_signal_in_if<bool> &)
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ sc_port<sc_signal_in_if<bool>, 1>::bind(
+ const_cast<sc_signal_in_if<bool> &>(i));
}
+ void operator () (const sc_signal_in_if<bool> &i) { bind(i); }
virtual void
- bind(sc_port<sc_signal_in_if<bool>, 1> &)
+ bind(sc_port<sc_signal_in_if<bool>, 1> &p)
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ sc_port<sc_signal_in_if<bool>, 1>::bind(p);
}
void
- operator () (sc_port<sc_signal_in_if<bool>, 1> &)
+ operator () (sc_port<sc_signal_in_if<bool>, 1> &p)
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ bind(p);
}
virtual void
- bind(sc_port<sc_signal_inout_if<bool>, 1> &)
+ bind(sc_port<sc_signal_inout_if<bool>, 1> &p)
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ sc_port_base::bind(p);
}
void
- operator () (sc_port<sc_signal_inout_if<bool>, 1> &)
+ operator () (sc_port<sc_signal_inout_if<bool>, 1> &p)
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ bind(p);
}
- virtual void
- end_of_elaboration()
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- }
+ virtual void end_of_elaboration() { /* Implementation defined. */ }
- const bool &
- read() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const bool *)nullptr;
- }
- operator const bool& () const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const bool *)nullptr;
- }
+ const bool &read() const { return (*this)->read(); }
+ operator const bool& () const { return (*this)->read(); }
- const sc_event &
- default_event() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const sc_event *)nullptr;
- }
+ const sc_event &default_event() const { return (*this)->default_event(); }
const sc_event &
value_changed_event() const
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const sc_event *)nullptr;
+ return (*this)->value_changed_event();
}
const sc_event &
posedge_event() const
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const sc_event *)nullptr;
+ return (*this)->posedge_event();
}
const sc_event &
negedge_event() const
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const sc_event *)nullptr;
+ return (*this)->negedge_event();
}
- bool
- event() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return false;
- }
- bool
- posedge() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return false;
- }
- bool
- negedge() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return false;
- }
+ bool event() const { return (*this)->event(); }
+ bool posedge() const { return (*this)->posedge(); }
+ bool negedge() const { return (*this)->negedge(); }
- sc_event_finder &
- value_changed() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(sc_event_finder *)nullptr;
- }
- sc_event_finder &
- pos() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(sc_event_finder *)nullptr;
- }
- sc_event_finder &
- neg() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(sc_event_finder *)nullptr;
- }
+ sc_event_finder &value_changed() const { return _valueChangedFinder; }
+ sc_event_finder &pos() const { return _posFinder; }
+ sc_event_finder &neg() const { return _negFinder; }
virtual const char *kind() const { return "sc_in"; }
private:
+ mutable sc_event_finder_t<sc_signal_in_if<bool> > _valueChangedFinder;
+ mutable sc_event_finder_t<sc_signal_in_if<bool> > _posFinder;
+ mutable sc_event_finder_t<sc_signal_in_if<bool> > _negFinder;
+
// Disabled
- sc_in(const sc_in<bool> &) : sc_port<sc_signal_in_if<bool>, 1>() {}
- sc_in<bool> &operator = (const sc_in<bool> &) { return *this; }
+ sc_in(const sc_in<bool> &);
+ sc_in<bool> &operator = (const sc_in<bool> &);
};
template <>
@@ -326,161 +290,132 @@ class sc_in<sc_dt::sc_logic> :
public sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>
{
public:
- sc_in() : sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>() {}
+ sc_in() : sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<sc_dt::sc_logic>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::negedge_event)
+ {}
explicit sc_in(const char *name) :
- sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(name)
+ sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(name),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<sc_dt::sc_logic>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::negedge_event)
{}
virtual ~sc_in() {}
// Deprecated binding constructors.
explicit sc_in(const sc_signal_in_if<sc_dt::sc_logic> &interface) :
- sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(interface)
+ sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(interface),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<sc_dt::sc_logic>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::negedge_event)
{}
sc_in(const char *name,
const sc_signal_in_if<sc_dt::sc_logic> &interface) :
- sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(name, interface)
+ sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(name, interface),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<sc_dt::sc_logic>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::negedge_event)
{}
explicit sc_in(sc_port_b<sc_signal_in_if<sc_dt::sc_logic> > &parent) :
- sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(parent)
+ sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(parent),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<sc_dt::sc_logic>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::negedge_event)
{}
sc_in(const char *name,
sc_port_b<sc_signal_in_if<sc_dt::sc_logic> > &parent) :
- sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(name, parent)
+ sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(name, parent),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<sc_dt::sc_logic>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::negedge_event)
{}
explicit sc_in(sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1> &parent) :
- sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(parent)
+ sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(parent),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<sc_dt::sc_logic>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::negedge_event)
{}
sc_in(const char *name,
sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1> &parent) :
- sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(name, parent)
+ sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>(name, parent),
+ _valueChangedFinder(*this,
+ &sc_signal_in_if<sc_dt::sc_logic>::value_changed_event),
+ _posFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::posedge_event),
+ _negFinder(*this, &sc_signal_in_if<sc_dt::sc_logic>::negedge_event)
{}
virtual void
- bind(const sc_signal_in_if<sc_dt::sc_logic> &)
+ bind(const sc_signal_in_if<sc_dt::sc_logic> &i)
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>::bind(
+ const_cast<sc_signal_in_if<sc_dt::sc_logic> &>(i));
}
void
- operator () (const sc_signal_in_if<sc_dt::sc_logic> &)
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- }
+ operator () (const sc_signal_in_if<sc_dt::sc_logic> &i) { bind(i); }
virtual void
- bind(sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1> &)
+ bind(sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1> &i)
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>::bind(i);
}
void
- operator () (sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1> &)
+ operator () (sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1> &p)
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ bind(p);
}
virtual void
- bind(sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1> &)
+ bind(sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1> &p)
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ sc_port_base::bind(p);
}
void
- operator () (sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1> &)
+ operator () (sc_port<sc_signal_inout_if<sc_dt::sc_logic>, 1> &p)
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
+ bind(p);
}
- virtual void
- end_of_elaboration()
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- }
+ virtual void end_of_elaboration() { /* Implementation defined. */ }
- const sc_dt::sc_logic &
- read() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const sc_dt::sc_logic *)nullptr;
- }
- operator const sc_dt::sc_logic& () const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const sc_dt::sc_logic *)nullptr;
- }
+ const sc_dt::sc_logic &read() const { return (*this)->read(); }
+ operator const sc_dt::sc_logic& () const { return (*this)->read(); }
- const sc_event &
- default_event() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const sc_event *)nullptr;
- }
+ const sc_event &default_event() const { return (*this)->default_event(); }
const sc_event &
value_changed_event() const
{
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const sc_event *)nullptr;
- }
- const sc_event &
- posedge_event() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const sc_event *)nullptr;
- }
- const sc_event &
- negedge_event() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(const sc_event *)nullptr;
+ return (*this)->value_changed_event();
}
+ const sc_event &posedge_event() const { return (*this)->posedge_event(); }
+ const sc_event &negedge_event() const { return (*this)->negedge_event(); }
- bool
- event() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return false;
- }
- bool
- posedge() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return false;
- }
- bool
- negedge() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return false;
- }
+ bool event() const { return (*this)->event(); }
+ bool posedge() const { return (*this)->posedge(); }
+ bool negedge() const { return (*this)->negedge(); }
- sc_event_finder &
- value_changed() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(sc_event_finder *)nullptr;
- }
- sc_event_finder &
- pos() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(sc_event_finder *)nullptr;
- }
- sc_event_finder &
- neg() const
- {
- sc_channel_warn_unimpl(__PRETTY_FUNCTION__);
- return *(sc_event_finder *)nullptr;
- }
+ sc_event_finder &value_changed() const { return _valueChangedFinder; }
+ sc_event_finder &pos() const { return _posFinder; }
+ sc_event_finder &neg() const { return _negFinder; }
virtual const char *kind() const { return "sc_in"; }
private:
+ mutable sc_event_finder_t<sc_signal_in_if<sc_dt::sc_logic> >
+ _valueChangedFinder;
+ mutable sc_event_finder_t<sc_signal_in_if<sc_dt::sc_logic> > _posFinder;
+ mutable sc_event_finder_t<sc_signal_in_if<sc_dt::sc_logic> > _negFinder;
+
// Disabled
- sc_in(const sc_in<sc_dt::sc_logic> &) :
- sc_port<sc_signal_in_if<sc_dt::sc_logic>, 1>()
- {}
- sc_in<sc_dt::sc_logic> &
- operator = (const sc_in<sc_dt::sc_logic> &)
- {
- return *this;
- }
+ sc_in(const sc_in<sc_dt::sc_logic> &);
+ sc_in<sc_dt::sc_logic> &operator = (const sc_in<sc_dt::sc_logic> &);
};
template <>