30 #ifndef __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_HH__ 31 #define __SYSTEMC_EXT_CHANNEL_SC_SIGNAL_HH__ 37 #include "../core/sc_event.hh" 38 #include "../core/sc_module.hh" 39 #include "../core/sc_prim.hh" 40 #include "../dt/bit/sc_logic.hh" 59 virtual const char *
kind()
const {
return "sc_signal"; }
100 void _signalPosedge();
101 void _signalNegedge();
125 template <sc_core::sc_writer_policy WRITER_POLICY>
135 std::string iface_type_name, std::string out_name);
152 std::string iface_type_name, std::string out_name);
161 template <
class T, sc_core::sc_writer_policy WRITER_POLICY>
172 m_new_val(initial_value), _checker(this)
179 # if !defined(SC_NO_WRITE_CHECK) 181 _checker.checkPort(port, iface_type_name,
187 virtual const T &
read()
const {
return m_cur_val; }
188 operator const T&()
const {
return read(); }
193 # if !defined(SC_NO_WRITE_CHECK) 195 _checker.checkWriter();
199 bool changed = !(m_cur_val == m_new_val);
201 this->request_update();
207 return ScSignalBase::defaultEvent();
213 return ScSignalBase::valueChangedEvent();
216 virtual void print(std::ostream &
os=std::cout)
const {
os << m_cur_val; }
220 os <<
" name = " << this->
name() << ::std::endl;
221 os <<
" value = " << m_cur_val << ::std::endl;
222 os <<
"new value = " << m_new_val << ::std::endl;
230 return WRITER_POLICY;
243 template <
typename T, sc_core::sc_writer_policy WRITER_POLICY>
256 return ScSignalBaseBinary::posedgeEvent();
261 return ScSignalBaseBinary::negedgeEvent();
264 bool posedge()
const {
return ScSignalBaseBinary::posedge(); }
265 bool negedge()
const {
return ScSignalBaseBinary::negedge(); }
273 template <
class T, sc_writer_policy WRITER_POLICY=SC_ONE_WRITER>
281 sc_gem5::ScSignalBaseT<T, WRITER_POLICY>(name)
284 sc_gem5::ScSignalBaseT<T, WRITER_POLICY>(name, initial_value)
289 operator = (
const T &
t)
297 this->write(s.
read());
305 if (this->m_new_val == this->m_cur_val)
308 this->m_cur_val = this->m_new_val;
309 this->_signalChange();
317 template <
class T, sc_writer_policy WRITER_POLICY>
318 inline std::ostream &
319 operator << (std::ostream &os, const sc_signal<T, WRITER_POLICY> &
s)
325 template <sc_writer_policy WRITER_POLICY>
331 sc_gem5::ScSignalBinary<bool, WRITER_POLICY>(
335 sc_gem5::ScSignalBinary<bool, WRITER_POLICY>(name)
338 sc_gem5::ScSignalBinary<bool, WRITER_POLICY>(name, initial_value)
343 operator = (
const bool &
b)
351 this->write(s.
read());
359 if (this->m_new_val == this->m_cur_val)
362 this->m_cur_val = this->m_new_val;
363 this->_signalChange();
370 this->_signalReset();
372 this->_signalPosedge();
374 this->_signalNegedge();
381 this->_resets.push_back(reset);
389 template <sc_writer_policy WRITER_POLICY>
395 sc_gem5::ScSignalBinary<
sc_dt::sc_logic, WRITER_POLICY>(
399 sc_gem5::ScSignalBinary<
sc_dt::sc_logic, WRITER_POLICY>(name)
403 sc_gem5::ScSignalBinary<
sc_dt::sc_logic, WRITER_POLICY>(
417 this->write(s.
read());
425 if (this->m_new_val == this->m_cur_val)
428 this->m_cur_val = this->m_new_val;
429 this->_signalChange();
438 this->_signalPosedge();
440 this->_signalNegedge();
450 #endif //__SYSTEMC_EXT_CHANNEL_SC_SIGNAL_HH__ sc_signal(const char *name, const T &initial_value)
sc_signal(const char *name, const bool &initial_value)
virtual sc_core::sc_writer_policy get_writer_policy() const
WriteChecker< WRITER_POLICY > _checker
const sc_core::sc_event & negedge_event() const
const std::string & name()
virtual void register_port(sc_core::sc_port_base &port, const char *iface_type_name)
const char * sc_gen_unique_name(const char *seed)
const sc_logic SC_LOGIC_1(Log_1)
const sc_logic SC_LOGIC_0(Log_0)
virtual void write(const T &t)
sc_signal(const char *name)
InternalScEvent _posedgeEvent
ScSignalBinary(const char *_name, const T &initial_value)
ScSignalBasePicker(const char *_name)
virtual const T & read() const
ScSignalBaseT(const char *_name)
sc_core::sc_port_base * _gem5WriterPort
bool _addReset(sc_gem5::Reset *reset) const
virtual bool event() const
InternalScEvent _valueChangedEvent
sc_signal(const char *name, const sc_dt::sc_logic &initial_value)
virtual const char * kind() const
ScSignalBasePicker(const char *_name)
sc_signal(const char *name)
virtual void print(std::ostream &os=std::cout) const
ScSignalBinary(const char *_name)
ScSignalBasePicker(const char *_name)
virtual const sc_core::sc_event & default_event() const
InternalScEvent _negedgeEvent
std::vector< sc_gem5::Reset * > _resets
const sc_core::sc_event & posedge_event() const
virtual void dump(std::ostream &os=std::cout) const
ScSignalBaseT(const char *_name, const T &initial_value)
virtual const sc_core::sc_event & value_changed_event() const
sc_core::sc_port_base * firstPort
sc_signal(const char *name)