166 #if !defined(SC_SIGNAL_UINT_H) 167 #define SC_SIGNAL_UINT_H 169 #if ( !defined(_MSC_VER) || _MSC_VER > 1200 ) 170 # define SC_TEMPLATE template<int W> 172 # define SC_TEMPLATE template<> template<int W> 179 class sc_uint_sigref;
233 virtual const sc_event& value_changed_event()
const = 0;
244 virtual bool event()
const = 0;
273 inline void initialize(
sc_uint_part_if* if_p,
int left_,
int right_ );
327 explicit inline sc_signal(
const char* name_);
331 inline bool base_event()
const;
333 inline const sc_event& base_value_changed_event()
const;
337 virtual inline const char* kind()
const;
338 virtual inline void update();
352 virtual inline bool event()
const;
356 virtual inline const sc_event& value_changed_event()
const;
366 inline void operator = (
const this_type& new_val );
367 inline void operator = (
const char* new_val );
373 inline void operator = (
unsigned int new_val ) ;
374 inline void operator = (
unsigned long new_val );
375 inline void operator = (
unsigned short new_val );
384 virtual inline void concat_set(
sc_dt::int64 src,
int low_i);
388 virtual inline void concat_set(
sc_dt::uint64 src,
int low_i);
420 return simcontext()->delta_count() == m_event_delta + 1;
434 if ( !m_changed_event_p ) m_changed_event_p =
new sc_event;
435 return *m_changed_event_p;
442 # if defined(DEBUG_SYSTEMC) 459 if( m_writer_p == 0 )
461 m_writer_p = writer_p;
463 else if( m_writer_p != writer_p )
466 m_writer_p->name(), writer_p->
name() );
487 base_write(src >> low_i);
491 base_write( (src < 0 ) ? src >> 63 : 0 );
501 base_write( tmp.to_uint64() );
508 base_write( (src >> low_i).to_uint64());
515 base_write( (src >> low_i).to_uint64());
522 base_write( ( low_i < 64 ) ? src >> low_i : 0 );
529 {
return base_value_changed_event(); }
534 {
return base_event(); }
566 (
int left,
int right)
585 return operator () (bit,bit);
595 { base_write(new_val); }
642 { base_write(new_val->to_uint64()); }
648 { base_write(new_val.to_uint64()); }
654 { base_write(new_val.to_uint64()); }
688 # ifdef DEBUG_SYSTEMC 689 std::string nm( if_typename_ );
692 if( m_output_p != 0 )
695 m_output_p->name(), port_.
name() );
700 if ( &port_ && if_typename_ ) {}
708 m_changed_event_p(0),
717 m_changed_event_p(0),
726 if ( m_changed_event_p )
delete m_changed_event_p;
733 if ( m_changed_event_p )
738 if ( old_val != this->m_val )
740 m_changed_event_p->notify_delayed();
753 {
return base_value_changed_event(); }
769 { base_write( value); }
789 new_v = (
m_new_val & keep) | ((v << right) & ~keep);
804 public sc_port<sc_signal_in_if<sc_dt::sc_uint<W> >, 1,
805 SC_ONE_OR_MORE_BOUND>,
826 void bind(
const in_if_type& interface_ )
828 void operator () (
const in_if_type& interface_ )
830 void bind( in_port_type& parent_ )
832 void operator () ( in_port_type& parent_ )
834 void bind( inout_port_type& parent_ )
836 void operator () ( inout_port_type& parent_ )
847 in_port_type* in_parent =
dynamic_cast<in_port_type*
>( &parent_ );
848 if( in_parent != 0 ) {
852 inout_port_type* inout_parent =
dynamic_cast<inout_port_type*
>( &parent_ );
853 if( inout_parent != 0 ) {
866 : base_type(), m_traces( 0 )
870 : base_type( name_ ), m_traces( 0 )
873 explicit sc_in(
const in_if_type& interface_ )
874 : base_type( const_cast<in_if_type&>( interface_ ) ), m_traces( 0 )
877 sc_in(
const char* name_,
const in_if_type& interface_ )
878 : base_type( name_, const_cast<in_if_type&>( interface_ ) ), m_traces( 0 )
881 explicit sc_in( in_port_type& parent_ )
882 : base_type( parent_ ), m_traces( 0 )
885 sc_in(
const char* name_, in_port_type& parent_ )
886 : base_type( name_, parent_ ), m_traces( 0 )
889 explicit sc_in( inout_port_type& parent_ )
890 : base_type(), m_traces( 0 )
893 sc_in(
const char* name_, inout_port_type& parent_ )
894 : base_type( name_ ), m_traces( 0 )
898 : base_type( parent_ ), m_traces( 0 )
901 sc_in(
const char* name_, this_type& parent_ )
902 : base_type( name_, parent_ ), m_traces( 0 )
916 {
return (*this)->read()[
i]; }
918 {
return (*this)->read()[
i]; }
920 {
return (*this)->read()(left,right); }
922 {
return (*this)->read()(left,right); }
930 {
return (*this)->value_changed_event(); }
936 {
return (*this)->value_changed_event(); }
942 {
return (*this)->read(); }
950 {
return (*this)->event(); }
958 *
this, &in_if_type::value_changed_event );
966 {
return (*this)->read().and_reduce(); }
968 {
return (*this)->read().nand_reduce(); }
970 {
return (*this)->read().nor_reduce(); }
972 {
return (*this)->read().or_reduce(); }
974 {
return (*this)->read().xnor_reduce(); }
976 {
return (*this)->read().xor_reduce(); }
985 if( m_traces != 0 ) {
986 for(
unsigned int i = 0;
i < m_traces->size(); ++
i ) {
994 virtual inline const char*
kind()
const 1002 if( m_traces == 0 ) {
1013 {
return (*this)->read().concat_length( xz_present_p ); }
1015 {
return (*this)->read().concat_get_uint64(); }
1018 {
return (*this)->read().concat_get_ctrl(dst_p, low_i); }
1021 {
return (*this)->read().concat_get_data(dst_p, low_i); }
1026 if( m_traces != 0 ) {
1027 for(
int i = m_traces->size() - 1;
i >= 0; --
i ) {
1028 delete (*m_traces)[
i];
1049 static data_type dummy;
1060 a.read().print( os );
1075 public sc_port<sc_signal_inout_if<sc_dt::sc_uint<W> >, 1,
1076 SC_ONE_OR_MORE_BOUND>,
1095 void bind(
const inout_if_type& interface_ )
1097 void operator () (
const inout_if_type& interface_ )
1099 void bind( inout_port_type& parent_ )
1101 void operator () ( inout_port_type& parent_ )
1112 inout_port_type* inout_parent =
dynamic_cast<inout_port_type*
>( &parent_ );
1113 if( inout_parent != 0 ) {
1126 : base_type(), m_init_val_p(0), m_traces( 0 )
1130 : base_type( name_ ), m_init_val_p(0), m_traces( 0 )
1134 : base_type( interface_ ), m_init_val_p(0), m_traces( 0 )
1137 sc_inout(
const char* name_, inout_if_type& interface_ )
1138 : base_type( name_, interface_ ), m_init_val_p(0), m_traces( 0 )
1142 : base_type( parent_ ), m_init_val_p(0), m_traces( 0 )
1145 sc_inout(
const char* name_, inout_port_type& parent_ )
1146 : base_type( name_, parent_ ), m_init_val_p(0), m_traces( 0 )
1150 : base_type( parent_ ), m_init_val_p(0), m_traces( 0 )
1154 : base_type( name_, parent_ ), m_init_val_p(0), m_traces( 0 )
1168 {
return (*this)->read()[
i]; }
1170 {
return (*this)->read()[
i]; }
1172 {
return (*this)->select_part(i,i); }
1174 {
return (*this)->select_part(i,i); }
1176 {
return (*this)->read()(left,right); }
1178 {
return (*this)->read()(left,right); }
1180 {
return (*this)->select_part(left,right); }
1182 {
return (*this)->select_part(left,right); }
1190 {
return (*this)->value_changed_event(); }
1196 {
return (*this)->value_changed_event(); }
1202 {
return (*this)->read(); }
1210 {
return (*this)->event(); }
1218 *
this, &inout_if_type::value_changed_event );
1226 {
return (*this)->read().and_reduce(); }
1228 {
return (*this)->read().nand_reduce(); }
1230 {
return (*this)->read().nor_reduce(); }
1232 {
return (*this)->read().or_reduce(); }
1234 {
return (*this)->read().xnor_reduce(); }
1236 {
return (*this)->read().xor_reduce(); }
1245 if( m_init_val_p != 0 ) {
1247 delete m_init_val_p;
1250 if( m_traces != 0 ) {
1251 for(
unsigned int i = 0;
i < m_traces->size(); ++
i ) {
1259 virtual inline const char*
kind()
const 1260 {
return "sc_inout"; }
1266 inout_if_type* iface = this->get_interface(0);
1268 iface->
write( value_ );
1270 if( m_init_val_p == 0 ) {
1273 *m_init_val_p = value_;
1282 if( m_traces == 0 ) {
1293 {
return (*this)->read().concat_length( xz_present_p ); }
1295 {
return (*this)->read().concat_get_uint64(); }
1298 {
return (*this)->read().concat_get_ctrl(dst_p, low_i); }
1301 {
return (*this)->read().concat_get_data(dst_p, low_i); }
1303 { *
this = (src >> ((low_i < 64) ? low_i : 63)); }
1306 {
if (low_i < 64) *
this = src >> low_i;
else *
this = 0; }
1309 { *
this = (src >> low_i); }
1311 { *
this = (src >> low_i); }
1321 { (*this)->write( this_type(new_val) ); }
1323 { (*this)->write(new_val); }
1338 template<
typename T>
1340 { (*this)->write(new_val->to_uint64()); }
1342 { (*this)->write(new_val.
to_uint64()); }
1344 { (*this)->write(new_val.
to_uint64()); }
1360 if( m_traces != 0 ) {
1361 for(
int i = m_traces->size() - 1;
i >= 0; --
i ) {
1362 delete (*m_traces)[
i];
1383 static data_type dummy;
1394 a.read().print( os );
1428 : base_type( name_ )
1432 : base_type( interface_ )
1435 sc_out(
const char* name_, inout_if_type& interface_ )
1436 : base_type( name_, interface_ )
1440 : base_type( parent_ )
1443 sc_out(
const char* name_, inout_port_type& parent_ )
1444 : base_type( name_, parent_ )
1448 : base_type( parent_ )
1451 sc_out(
const char* name_, this_type& parent_ )
1452 : base_type( name_, parent_ )
1468 { (*this)->write( this_type(new_val) ); }
1470 { (*this)->write(new_val); }
1485 template<
typename T>
1487 { (*this)->write(new_val->to_uint64()); }
1489 { (*this)->write(new_val); }
1491 { (*this)->write(new_val); }
1500 sc_out(
const this_type& );
1531 m_if_p->write_part( v, m_left, m_right );
1568 template<
typename T>
1571 *
this = v->to_uint64();
1586 #endif // !defined(SC_SIGNAL_UINT_H) 1636 *
this = (low_i < 64) ? src >> low_i : src >> 63;
1642 if ( low_i < src.
length() )
1643 *
this = src >> low_i;
1651 if ( low_i < src.
length() )
1652 *
this = (src >> low_i).to_uint64();
1660 if ( low_i < src.
length() )
1661 *
this = src >> low_i;
1669 *
this = (low_i < 64) ? src >> low_i : 0;
sc_in< sc_dt::sc_uint< W > > this_type
void add_trace(sc_trace_file *tf_, const std::string &name_) const
sc_in(in_port_type &parent_)
void bind(inout_port_type &parent_)
sc_uint_sigref & bit(int i)
X & operator^=(sc_proxy< X > &px, const sc_proxy< Y > &py)
sc_uint_part_if & operator=(const sc_uint_part_if &)
virtual void end_of_elaboration()
const sc_dt::sc_uint< W > & read() const
virtual sc_dt::sc_uint_base * part_read_target()
sc_in(const in_if_type &interface_)
const std::string & name()
sc_inout(this_type &parent_)
sc_inout(const char *name_)
sc_port< if_type, 1, SC_ONE_OR_MORE_BOUND > base_type
base_type::inout_port_type inout_port_type
sc_port< if_type, 1, SC_ONE_OR_MORE_BOUND > base_type
X & operator&=(sc_proxy< X > &px, const sc_proxy< Y > &py)
void remove_traces() const
sc_out(inout_if_type &interface_)
void add_trace(sc_trace_file *tf_, const std::string &name_) const
sc_out(const char *name_, inout_if_type &interface_)
const char * sc_gen_unique_name(const char *seed)
const sc_event & value_changed_event() const
virtual int vbind(sc_interface &interface_)
sc_signal< T, WRITER_POLICY > & operator=(const T &t)
sc_in(const char *name_, const in_if_type &interface_)
const char * name() const
int vbind(sc_interface &i) override
virtual void write(const T &t)
sc_dt::sc_uint< W > data_type
sc_event * m_changed_event_p
sc_signal_in_if< sc_dt::sc_uint< W > > this_type
base_type inout_port_type
const sc_event & default_event() const
sc_dt::sc_uint< W > data_type
virtual const char * kind() const
std::ostream & operator<<(std::ostream &os, sc_status s)
virtual const T & read() const
virtual void write(const T &)=0
sc_inout< sc_dt::sc_uint< W > > this_type
static sc_process_b * sc_get_current_process_b()
void initialize(const sc_dt::sc_uint< W > &value_)
void operator=(sc_dt::uint64 v)
sc_inout(inout_if_type &interface_)
const sc_dt::sc_uint< W > & read() const
sc_signal_inout_if< sc_dt::sc_uint< W > > inout_if_type
virtual ~sc_uint_sigref()
sc_out< data_type > this_type
const sc_event & value_changed_event() const
sc_dt::sc_uint_bitref_r bit(int i) const
sc_simcontext * simcontext() const
virtual int vbind(sc_interface &interface_)
void sc_trace(sc_trace_file *tf, const sc_in< T > &i, const std::string &name)
const sc_event & default_event() const
sc_out(const char *name_, this_type &parent_)
virtual sc_dt::uint64 concat_get_uint64() const
sc_inout(const char *name_, inout_port_type &parent_)
sc_dt::sc_uint_subref_r range(int left, int right) const
virtual void concat_set(sc_dt::int64 src, int low_i)
virtual sc_dt::uint64 concat_get_uint64() const
virtual void concat_set(sc_dt::uint64 src, int low_i)
sc_dt::sc_uint_bitref_r bit(int i) const
sc_in(inout_port_type &parent_)
sc_in(const char *name_, inout_port_type &parent_)
sc_out(const char *name_)
sc_trace_params_vec * m_traces
virtual void end_of_elaboration()
virtual bool concat_get_data(sc_dt::sc_digit *dst_p, int low_i) const
sc_signal_in_if< sc_dt::sc_uint< W > > if_type
void sc_signal_invalid_writer(const char *name, const char *kind, const char *first_writer, const char *second_writer)
sc_in(const char *name_, in_port_type &parent_)
void bind(inout_port_type &parent_)
void bind(const inout_if_type &interface_)
sc_out(const char *name_, inout_port_type &parent_)
virtual void write_part(sc_dt::uint64 v, int left, int right)
virtual sc_dt::uint64 read_part(int left, int right) const
void initialize(sc_uint_part_if *if_p, int left_, int right_)
X & operator|=(sc_proxy< X > &px, const sc_proxy< Y > &py)
void bind(in_port_type &parent_)
sc_signal< sc_dt::sc_uint< W > > this_type
virtual const char * kind() const
virtual bool concat_get_ctrl(sc_dt::sc_digit *dst_p, int low_i) const
sc_port_base * m_output_p
const char SC_ID_OPERATION_ON_NON_SPECIALIZED_SIGNAL_[]
sc_in(this_type &parent_)
const uint_type mask_int[SC_INTWIDTH][SC_INTWIDTH]
sc_event_finder & value_changed() const
virtual void register_port(sc_port_base &, const char *)
virtual void concat_set(sc_dt::int64 src, int low_i)
sc_out(inout_port_type &parent_)
sc_inout(const char *name_, this_type &parent_)
void write(const sc_dt::sc_uint< W > &new_val)
void remove_traces() const
sc_event_finder & value_changed() const
virtual int concat_length(bool *xz_present_p) const
virtual int vbind(sc_port_base &parent_)
sc_out(this_type &parent_)
#define SC_REPORT_ERROR(msg_type, msg)
static sc_vpool< sc_uint_sigref > m_pool
virtual int vbind(sc_port_base &parent_)
sc_inout(const char *name_, inout_if_type &interface_)
sc_process_b * m_writer_p
virtual bool concat_get_ctrl(sc_dt::sc_digit *dst_p, int low_i) const
base_type::inout_if_type inout_if_type
virtual const sc_event & default_event() const
std::vector< sc_trace_params * > sc_trace_params_vec
sc_dt::sc_uint_subref_r range(int left, int right) const
virtual int concat_length(bool *xz_present_p) const
sc_dt::uint64 m_event_delta
sc_signal_inout_if< sc_dt::sc_uint< W > > if_type
sc_uint_sigref & range(int left, int right)
sc_uint_base & operator=(uint_type v)
sc_trace_params_vec * m_traces
void bind(const in_if_type &interface_)
virtual const sc_core::sc_event & value_changed_event() const
sc_in(const char *name_, this_type &parent_)
sc_dt::sc_uint< W > data_type
sc_inout(inout_port_type &parent_)
virtual void concat_set(const sc_dt::sc_signed &src, int low_i)
void write(const sc_in< sc_dt::sc_uint< W > > &new_val)
sc_dt::uint64 delta_count() const
void bind(sc_interface &)
sc_dt::uint64 * m_init_val_p
sc_inout< data_type > base_type
virtual bool concat_get_data(sc_dt::sc_digit *dst_p, int low_i) const
sc_inout< sc_dt::sc_uint< W > > inout_port_type
void write(const sc_inout< sc_dt::sc_uint< W > > &new_val)
virtual void concat_set(const sc_dt::sc_unsigned &src, int low_i)
virtual sc_uint_sigref & select_part(int left, int right)