diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/systemc/channel/sc_signal.cc | 14 | ||||
-rw-r--r-- | src/systemc/ext/channel/sc_signal.hh | 40 |
2 files changed, 39 insertions, 15 deletions
diff --git a/src/systemc/channel/sc_signal.cc b/src/systemc/channel/sc_signal.cc index e3a3cf575..4829dad30 100644 --- a/src/systemc/channel/sc_signal.cc +++ b/src/systemc/channel/sc_signal.cc @@ -69,6 +69,20 @@ ScSignalBase::_signalChange() _valueChangedEvent.notify(sc_core::SC_ZERO_TIME); } +void +ScSignalBaseBinary::_signalPosedge() +{ + _posStamp = getChangeStamp(); + _posedgeEvent.notify(sc_core::SC_ZERO_TIME); +} + +void +ScSignalBaseBinary::_signalNegedge() +{ + _negStamp = getChangeStamp(); + _negedgeEvent.notify(sc_core::SC_ZERO_TIME); +} + namespace { diff --git a/src/systemc/ext/channel/sc_signal.hh b/src/systemc/ext/channel/sc_signal.hh index 522638dde..a2cb55397 100644 --- a/src/systemc/ext/channel/sc_signal.hh +++ b/src/systemc/ext/channel/sc_signal.hh @@ -96,6 +96,9 @@ class ScSignalBaseBinary : public ScSignalBase uint64_t _posStamp; uint64_t _negStamp; + + void _signalPosedge(); + void _signalNegedge(); }; template <class T> @@ -357,15 +360,18 @@ class sc_signal<bool, WRITER_POLICY> : return; this->m_cur_val = this->m_new_val; - this->_signalReset(); this->_signalChange(); - if (this->m_cur_val) { - this->_posStamp = ::sc_gem5::getChangeStamp(); - this->_posedgeEvent.notify(SC_ZERO_TIME); - } else { - this->_negStamp = ::sc_gem5::getChangeStamp(); - this->_negedgeEvent.notify(SC_ZERO_TIME); - } + } + + void + _signalChange() + { + sc_gem5::ScSignalBinary<bool, WRITER_POLICY>::_signalChange(); + this->_signalReset(); + if (this->m_cur_val) + this->_signalPosedge(); + else + this->_signalNegedge(); } private: @@ -421,13 +427,17 @@ class sc_signal<sc_dt::sc_logic, WRITER_POLICY> : this->m_cur_val = this->m_new_val; this->_signalChange(); - if (this->m_cur_val == sc_dt::SC_LOGIC_1) { - this->_posStamp = ::sc_gem5::getChangeStamp(); - this->_posedgeEvent.notify(SC_ZERO_TIME); - } else if (this->m_cur_val == sc_dt::SC_LOGIC_0) { - this->_negStamp = ::sc_gem5::getChangeStamp(); - this->_negedgeEvent.notify(SC_ZERO_TIME); - } + } + + void + _signalChange() + { + sc_gem5::ScSignalBinary<sc_dt::sc_logic, WRITER_POLICY>:: + _signalChange(); + if (this->m_cur_val == sc_dt::SC_LOGIC_1) + this->_signalPosedge(); + else if (this->m_cur_val == sc_dt::SC_LOGIC_0) + this->_signalNegedge(); } private: |