summaryrefslogtreecommitdiff
path: root/src/systemc/ext/channel/sc_signal.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemc/ext/channel/sc_signal.hh')
-rw-r--r--src/systemc/ext/channel/sc_signal.hh40
1 files changed, 25 insertions, 15 deletions
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: