⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scx_signal_int.h

📁 system C源码 一种替代verilog的语言
💻 H
📖 第 1 页 / 共 4 页
字号:
inline void sc_signal<sc_dt::sc_int<W> >::check_writer(){    sc_process_b* writer_p = sc_get_curr_process_handle();    if( m_writer_p == 0 )     {           m_writer_p = writer_p;    }     else if( m_writer_p != writer_p )     {           sc_signal_invalid_writer( name(), kind(),                                  m_writer_p->name(), writer_p->name() );    }}//------------------------------------------------------------------------------//"sc_signal<sc_dt::sc_int<W> >::concat_set"//// These virtual methods allow value assignments to this object instance// from various sources. The position within the supplied source of the // low order bit for this object instance's value is low_i.//     src   = source value.//     low_i = bit within src to serve as low order bit of this object //             instance's value.//------------------------------------------------------------------------------SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::concat_set(sc_dt::int64 src, int low_i){    if ( low_i < 64 )    {        base_write(src >> low_i);    }    else    {        base_write( src >> 63 );    } }SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::concat_set(const sc_dt::sc_lv_base& src, int low_i){    sc_dt::sc_unsigned tmp(src.length());    tmp = src >> low_i;    base_write( tmp.to_int64() );}SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::concat_set(const sc_dt::sc_signed& src, int low_i){    base_write( (src >> low_i).to_int64());}SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::concat_set(const sc_dt::sc_unsigned& src, int low_i){    base_write( (src >> low_i).to_int64());}SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::concat_set(sc_dt::uint64 src, int low_i){    base_write( ( low_i < 64 ) ? src >> low_i : 0 );}SC_TEMPLATE // Return the default event for this object instance.inline const sc_event& sc_signal<sc_dt::sc_int<W> >::default_event() const 	{ return base_value_changed_event(); }SC_TEMPLATE // Return true if a changed event happened in the last delta cycle.inline bool sc_signal<sc_dt::sc_int<W> >::event() const	{ return base_event(); }SC_TEMPLATE // Return a reference to the value of this object instance.inline const sc_dt::sc_int<W>& sc_signal<sc_dt::sc_int<W> >::get_data_ref() const	{ return *this; }SC_TEMPLATE // Return a pointer to this object instance.inline sc_signal<sc_dt::sc_int<W> >& sc_signal<sc_dt::sc_int<W> >::get_signal() 	{ return *this; }SC_TEMPLATE // Return a kind value of "sc_signal".inline const char* sc_signal<sc_dt::sc_int<W> >::kind() const{	return "sc_signal";}//------------------------------------------------------------------------------//"sc_signal_uint::operator ()//// This operator returns a part selection of this object instance.//     left  = left-hand bit of the selection.//     right = right-hand bit of the selection.//------------------------------------------------------------------------------SC_TEMPLATEinline sc_int_sigref& sc_signal<sc_dt::sc_int<W> >::operator () (int left, int right){    sc_int_sigref* result_p;   // Value to return.	result_p = sc_int_sigref::m_pool.allocate();	result_p->initialize(this, left, right);	return *result_p;}//------------------------------------------------------------------------------//"sc_signal_uint::operator []"//// This operator returns a bit selection of this object instance.//     i = bit to be selected.//------------------------------------------------------------------------------SC_TEMPLATEinline sc_int_sigref& sc_signal<sc_dt::sc_int<W> >::operator [] ( int bit ){    return operator () (bit,bit);}SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::operator = ( const this_type& new_val )	{ base_write( (sc_dt::int64)new_val ); }SC_TEMPLATE inline void sc_signal<sc_dt::sc_int<W> >::operator = ( const char* new_val )	{ m_new_val = sc_dt::sc_int<64>(new_val); request_update(); }SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::operator = ( sc_dt::uint64 new_val )	{ base_write((sc_dt::int64)new_val); }SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::operator = ( sc_dt::int64 new_val )	{ base_write(new_val); }SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::operator = ( int new_val )	{ base_write((sc_dt::int64)new_val); }SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::operator = ( long new_val ) 	{ base_write((sc_dt::int64)new_val); }SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::operator = ( short new_val ) 	{ base_write((sc_dt::int64)new_val); }SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::operator = ( unsigned int new_val ) 	{ base_write((sc_dt::int64)new_val); }SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::operator = ( unsigned long new_val )	{ base_write((sc_dt::int64)new_val); }SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::operator = ( unsigned short new_val )	{ base_write((sc_dt::int64)new_val); }SC_TEMPLATEtemplate<typename T>inline void sc_signal<sc_dt::sc_int<W> >::operator = ( 	const sc_dt::sc_generic_base<T>& new_val )	{ base_write(new_val->to_int64()); }SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::operator = ( const sc_dt::sc_signed& new_val )	{ base_write(new_val.to_int64()); }SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::operator = ( const sc_dt::sc_unsigned& new_val )	{ base_write(new_val.to_int64()); }SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::operator = ( const sc_dt::sc_bv_base& new_val )	{ base_write( (sc_dt::sc_int<W>)new_val ); }SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::operator = ( const sc_dt::sc_lv_base& new_val )	{ base_write( (sc_dt::sc_int<W>)new_val ); }SC_TEMPLATEinline sc_dt::sc_int_base* sc_signal<sc_dt::sc_int<W> >::part_read_target()	{ return this; }SC_TEMPLATEinline const sc_dt::sc_int<W>& sc_signal<sc_dt::sc_int<W> >::read() const	{ return *this; }SC_TEMPLATE // Read a portion of a value.inline sc_dt::uint64 sc_signal<sc_dt::sc_int<W> >::read_part( int left, int right ) const{	// This pointer required for HP aCC.    return (this->m_val & ~sc_dt::mask_int[left][right]) >> right;}SC_TEMPLATEinline void sc_signal<sc_dt::sc_int<W> >::register_port( 	sc_port_base& port_, const char* if_typename_ ){#       ifdef DEBUG_SYSTEMC		std::string nm( if_typename_ );		if( nm == typeid( sc_signal_inout_if<sc_dt::sc_int<W> > ).name() ) 		{			if( m_output_p != 0 ) 			{				sc_signal_invalid_writer( name(), kind(),					 m_output_p->name(), port_.name() );			}			m_output_p = &port_;		}#       endif}SC_TEMPLATE // Autogenerated name object instance constructor.inline sc_signal<sc_dt::sc_int<W> >::sc_signal() : 	sc_prim_channel(sc_gen_unique_name( "signal" )),	m_changed_event_p(0),	m_output_p(0),	m_writer_p(0){ }SC_TEMPLATE // Explicitly named object instance constructor.inline sc_signal<sc_dt::sc_int<W> >::sc_signal(const char* name_) : 	sc_prim_channel(name_),	m_changed_event_p(0),	m_output_p(0),	m_writer_p(0){ }SC_TEMPLATE // Object instance destructor.inline sc_signal<sc_dt::sc_int<W> >::~sc_signal() {	if ( m_changed_event_p ) delete m_changed_event_p;}SC_TEMPLATE // Update the current value from new value.inline void sc_signal<sc_dt::sc_int<W> >::update(){    if ( m_changed_event_p )    {		// This pointer required for HP aCC.        sc_dt::int64 old_val = this->m_val;        sc_dt::sc_int_base::operator = (m_new_val);        if ( old_val != this->m_val )        {            m_changed_event_p->notify_delayed();            m_event_delta = simcontext()->delta_count();        }    }    else    {        sc_dt::sc_int_base::operator = (m_new_val);    }}SC_TEMPLATE // Return the value changed event.inline const sc_event& sc_signal<sc_dt::sc_int<W> >::value_changed_event() const	{ return base_value_changed_event(); }SC_TEMPLATE // Write a sc_in<sc_dt::sc_int<W> > value to this object instance.inline void sc_signal<sc_dt::sc_int<W> >::write( const sc_in<sc_dt::sc_int<W> >& value ) 	{ base_write( value.operator sc_dt::int64 () ); }SC_TEMPLATE // Write a sc_inout<sc_dt::sc_int<W> > value to this object instance.inline void sc_signal<sc_dt::sc_int<W> >::write( const sc_inout<sc_dt::sc_int<W> >& value ) 	{ base_write( value.operator sc_dt::int64 () ); }SC_TEMPLATE // Write a sc_dt::sc_int<W> value to this object instance.inline void sc_signal<sc_dt::sc_int<W> >::write( const sc_dt::sc_int<W>& value ) 	{ base_write( value); }SC_TEMPLATE // Write a portion of a value. If this is the first write in             // a delta cycle we copy the existing value before setting the bits.inline void sc_signal<sc_dt::sc_int<W> >::write_part( sc_dt::uint64 v, int left, int right ) {    sc_dt::int64  new_v;   // New value.    sc_dt::uint64 keep;    // Keep mask value.    keep = sc_dt::mask_int[left][right];    new_v = (m_new_val & keep) | ((v << right) & ~keep);	if ( m_new_val != new_v ) request_update();    m_new_val = new_v;}//==============================================================================// CLASS sc_in<sc_dt::sc_int<W> >//// This class implements an input port whose target acts like an sc_dt::sc_int<W> data// value. This class is a specialization of the generic sc_in class to // implement tailored support for the sc_dt::sc_int<W> class.//==============================================================================SC_TEMPLATEclass sc_in<sc_dt::sc_int<W> > :     public sc_port<sc_signal_in_if<sc_dt::sc_int<W> >, 1>,    public sc_dt::sc_value_base{  public:    // typedefs    typedef sc_dt::sc_int<W>                      data_type;    typedef sc_signal_in_if<sc_dt::sc_int<W> >    if_type;    typedef sc_port<if_type,1>                    base_type;    typedef sc_in<sc_dt::sc_int<W> >              this_type;    typedef if_type                               in_if_type;    typedef base_type                             in_port_type;    typedef sc_signal_inout_if<sc_dt::sc_int<W> > inout_if_type;    typedef sc_inout<sc_dt::sc_int<W> >           inout_port_type;  public:    // bind methods and operators:    void bind( const in_if_type& interface_ )         { sc_port_base::bind( CCAST<in_if_type&>( interface_) );}    void operator () ( const in_if_type& interface_ )        { sc_port_base::bind( CCAST<in_if_type&>( interface_) );}    void bind( in_port_type& parent_ )        { sc_port_base::bind(parent_);}    void operator () ( in_port_type& parent_ )        { sc_port_base::bind(parent_);}    void bind( inout_port_type& parent_ )        { sc_port_base::bind(parent_);}    void operator () ( inout_port_type& parent_ )        { sc_port_base::bind(parent_);}  protected:    // called by pbind (for internal use only)    virtual inline int vbind( sc_interface& interface_ )        {            return sc_port_b<if_type>::vbind( interface_ );        }           virtual inline int vbind( sc_port_base& parent_ )        {            in_port_type* in_parent = DCAST<in_port_type*>( &parent_ );              if( in_parent != 0 ) {                sc_port_base::bind( *in_parent );                return 0;            }            inout_port_type* inout_parent = DCAST<inout_port_type*>( &parent_ );            if( inout_parent != 0 ) {                sc_port_base::bind( *inout_parent );                return 0;            }            // type mismatch

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -