#include <sc_port.h>
Public 型 | |
typedef sc_port_base | base_type |
typedef sc_port_b< IF > | this_type |
Public メソッド | |
void | bind (IF &interface_) |
void | operator() (IF &interface_) |
void | bind (this_type &parent_) |
void | operator() (this_type &parent_) |
int | size () const |
IF * | operator-> () |
const IF * | operator-> () const |
const IF * | get_interface (int iface_i) const |
IF * | get_interface (int iface_i) |
IF * | operator[] (int index_) |
const IF * | operator[] (int index_) const |
virtual sc_interface * | get_interface () |
virtual const sc_interface * | get_interface () const |
Protected メソッド | |
sc_port_b (int max_size_, sc_port_policy policy=SC_ONE_OR_MORE_BOUND) | |
sc_port_b (const char *name_, int max_size_, sc_port_policy policy=SC_ONE_OR_MORE_BOUND) | |
virtual | ~sc_port_b () |
virtual int | vbind (sc_interface &) |
virtual int | vbind (sc_port_base &) |
virtual void | make_sensitive (sc_thread_handle, sc_event_finder *=0) const |
virtual void | make_sensitive (sc_method_handle, sc_event_finder *=0) const |
Private メソッド | |
virtual void | add_interface (sc_interface *) |
virtual const char * | if_typename () const |
virtual int | interface_count () |
sc_port_b () | |
sc_port_b (const this_type &) | |
this_type & | operator= (const this_type &) |
Private 変数 | |
IF * | m_interface |
std::vector< IF * > | m_interface_vec |
フレンド | |
class | sc_sensitive |
class | sc_sensitive_neg |
class | sc_sensitive_pos |
typedef sc_port_base sc_core::sc_port_b< IF >::base_type |
sc_core::sc_fifo_in< T >, sc_core::sc_fifo_out< T >, sc_core::sc_port< IF, N, P >, sc_core::sc_in< T >, sc_core::sc_in< bool >, sc_core::sc_in< sc_dt::sc_logic >, sc_core::sc_inout< T >, sc_core::sc_inout< bool >, sc_core::sc_inout< sc_dt::sc_logic >, sc_core::sc_out< T >, sc_core::sc_in_resolved, sc_core::sc_inout_resolved, sc_core::sc_out_resolved, sc_core::sc_in_rv< W >, sc_core::sc_inout_rv< W >, sc_core::sc_out_rv< W >, sc_core::sc_port< sc_core::sc_signal_inout_if< bool >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_inout_if< sc_dt::sc_logic >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_in_if< bool >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_in_if< sc_dt::sc_logic >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_inout_if< T >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_in_if< T >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_fifo_out_if< T >, 0, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_fifo_in_if< T >, 0, SC_ONE_OR_MORE_BOUND >, sc_core::sc_in< sc_dt::sc_lv< W > >, と sc_core::sc_inout< sc_dt::sc_lv< W > >で再定義されています。
typedef sc_port_b<IF> sc_core::sc_port_b< IF >::this_type |
sc_core::sc_port_baseを再定義しています。
sc_core::sc_fifo_in< T >, sc_core::sc_fifo_out< T >, sc_core::sc_port< IF, N, P >, sc_core::sc_in< T >, sc_core::sc_in< bool >, sc_core::sc_in< sc_dt::sc_logic >, sc_core::sc_inout< T >, sc_core::sc_inout< bool >, sc_core::sc_inout< sc_dt::sc_logic >, sc_core::sc_out< T >, sc_core::sc_in_resolved, sc_core::sc_inout_resolved, sc_core::sc_out_resolved, sc_core::sc_in_rv< W >, sc_core::sc_inout_rv< W >, sc_core::sc_out_rv< W >, sc_core::sc_port< sc_core::sc_signal_inout_if< bool >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_inout_if< sc_dt::sc_logic >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_in_if< bool >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_in_if< sc_dt::sc_logic >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_inout_if< T >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_in_if< T >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_fifo_out_if< T >, 0, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_fifo_in_if< T >, 0, SC_ONE_OR_MORE_BOUND >, sc_core::sc_in< sc_dt::sc_lv< W > >, と sc_core::sc_inout< sc_dt::sc_lv< W > >で再定義されています。
sc_core::sc_port_b< IF >::sc_port_b | ( | int | max_size_, | |
sc_port_policy | policy = SC_ONE_OR_MORE_BOUND | |||
) | [inline, explicit, protected] |
sc_core::sc_port_b< IF >::sc_port_b | ( | const char * | name_, | |
int | max_size_, | |||
sc_port_policy | policy = SC_ONE_OR_MORE_BOUND | |||
) | [inline, protected] |
virtual sc_core::sc_port_b< IF >::~sc_port_b | ( | ) | [inline, protected, virtual] |
sc_core::sc_port_b< IF >::sc_port_b | ( | ) | [private] |
sc_core::sc_port_b< IF >::sc_port_b | ( | const this_type & | ) | [private] |
void sc_core::sc_port_b< IF >::bind | ( | IF & | interface_ | ) | [inline] |
void sc_core::sc_port_b< IF >::operator() | ( | IF & | interface_ | ) | [inline] |
void sc_core::sc_port_b< IF >::bind | ( | this_type & | parent_ | ) | [inline] |
sc_core::sc_port_baseを再定義しています。
sc_core::sc_in< T >, sc_core::sc_in< bool >, sc_core::sc_in< sc_dt::sc_logic >, と sc_core::sc_in< sc_dt::sc_lv< W > >で再定義されています。
00317 { base_type::bind( parent_ ); }
void sc_core::sc_port_b< IF >::operator() | ( | this_type & | parent_ | ) | [inline] |
sc_core::sc_in< T >, sc_core::sc_in< bool >, sc_core::sc_in< sc_dt::sc_logic >, と sc_core::sc_in< sc_dt::sc_lv< W > >で再定義されています。
00320 { base_type::bind( parent_ ); }
int sc_core::sc_port_b< IF >::size | ( | ) | const [inline] |
IF * sc_core::sc_port_b< IF >::operator-> | ( | ) | [inline] |
00487 { 00488 if( m_interface == 0 ) { 00489 report_error( SC_ID_GET_IF_, "port is not bound" ); 00490 } 00491 return m_interface; 00492 }
const IF * sc_core::sc_port_b< IF >::operator-> | ( | ) | const [inline] |
00498 { 00499 if( m_interface == 0 ) { 00500 report_error( SC_ID_GET_IF_, "port is not bound" ); 00501 } 00502 return m_interface; 00503 }
const IF * sc_core::sc_port_b< IF >::get_interface | ( | int | iface_i | ) | const [inline] |
00530 { 00531 if ( index_ == 0 ) { 00532 return m_interface; 00533 } 00534 else if( index_ < 0 || index_ >= size() ) { 00535 report_error( SC_ID_GET_IF_, "index out of range" ); 00536 } 00537 return m_interface_vec[index_]; 00538 }
IF * sc_core::sc_port_b< IF >::get_interface | ( | int | iface_i | ) | [inline] |
00516 { 00517 if ( index_ == 0 ) { 00518 return m_interface; 00519 } 00520 else if( index_ < 0 || index_ >= size() ) { 00521 report_error( SC_ID_GET_IF_, "index out of range" ); 00522 } 00523 return m_interface_vec[index_]; 00524 }
IF* sc_core::sc_port_b< IF >::operator[] | ( | int | index_ | ) | [inline] |
const IF* sc_core::sc_port_b< IF >::operator[] | ( | int | index_ | ) | const [inline] |
virtual sc_interface* sc_core::sc_port_b< IF >::get_interface | ( | ) | [inline, virtual] |
virtual const sc_interface* sc_core::sc_port_b< IF >::get_interface | ( | ) | const [inline, virtual] |
int sc_core::sc_port_b< IF >::vbind | ( | sc_interface & | interface_ | ) | [inline, protected, virtual] |
sc_core::sc_port_baseを実装しています。
sc_core::sc_in< T >, sc_core::sc_in< bool >, sc_core::sc_in< sc_dt::sc_logic >, と sc_core::sc_in< sc_dt::sc_lv< W > >で再定義されています。
00547 { 00548 IF* iface = DCAST<IF*>( &interface_ ); 00549 if( iface == 0 ) { 00550 // type mismatch 00551 return 2; 00552 } 00553 base_type::bind( *iface ); 00554 return 0; 00555 }
int sc_core::sc_port_b< IF >::vbind | ( | sc_port_base & | parent_ | ) | [inline, protected, virtual] |
sc_core::sc_port_baseを実装しています。
sc_core::sc_in< T >, sc_core::sc_in< bool >, sc_core::sc_in< sc_dt::sc_logic >, と sc_core::sc_in< sc_dt::sc_lv< W > >で再定義されています。
00561 { 00562 this_type* parent = DCAST<this_type*>( &parent_ ); 00563 if( parent == 0 ) { 00564 // type mismatch 00565 return 2; 00566 } 00567 base_type::bind( *parent ); 00568 return 0; 00569 }
void sc_core::sc_port_b< IF >::make_sensitive | ( | sc_thread_handle | handle_p, | |
sc_event_finder * | event_finder_ = 0 | |||
) | const [inline, protected, virtual] |
sc_core::sc_port_baseを再定義しています。
00620 { 00621 if ( m_bind_info == 0 ) 00622 { 00623 int if_n = m_interface_vec.size(); 00624 for ( int if_i = 0; if_i < if_n; if_i++ ) 00625 { 00626 IF* iface_p = m_interface_vec[if_i]; 00627 assert( iface_p != 0 ); 00628 add_static_event( handle_p, iface_p->default_event() ); 00629 } 00630 } 00631 else 00632 { 00633 sc_port_base::make_sensitive( handle_p, event_finder_ ); 00634 } 00635 }
void sc_core::sc_port_b< IF >::make_sensitive | ( | sc_method_handle | handle_p, | |
sc_event_finder * | event_finder_ = 0 | |||
) | const [inline, protected, virtual] |
sc_core::sc_port_baseを再定義しています。
00641 { 00642 if ( m_bind_info == 0 ) 00643 { 00644 int if_n = m_interface_vec.size(); 00645 for ( int if_i = 0; if_i < if_n; if_i++ ) 00646 { 00647 IF* iface_p = m_interface_vec[if_i]; 00648 assert( iface_p != 0 ); 00649 add_static_event( handle_p, iface_p->default_event() ); 00650 } 00651 } 00652 else 00653 { 00654 sc_port_base::make_sensitive( handle_p, event_finder_ ); 00655 } 00656 }
void sc_core::sc_port_b< IF >::add_interface | ( | sc_interface * | interface_ | ) | [inline, private, virtual] |
sc_core::sc_port_baseを実装しています。
00578 { 00579 IF* iface = DCAST<IF*>( interface_ ); 00580 assert( iface != 0 ); 00581 00582 // make sure that the interface is not already bound: 00583 00584 int size = m_interface_vec.size(); 00585 for ( int i = 0; i < size; i++ ) 00586 { 00587 if ( iface == m_interface_vec[i] ) 00588 { 00589 report_error( SC_ID_BIND_IF_TO_PORT_, 00590 "interface already bound to port" ); 00591 } 00592 } 00593 00594 // "bind" the interface and make sure our short cut for 0 is set up. 00595 00596 m_interface_vec.push_back( iface ); 00597 m_interface = m_interface_vec[0]; 00598 }
const char * sc_core::sc_port_b< IF >::if_typename | ( | ) | const [inline, private, virtual] |
int sc_core::sc_port_b< IF >::interface_count | ( | ) | [inline, private, virtual] |
this_type& sc_core::sc_port_b< IF >::operator= | ( | const this_type & | ) | [private] |
sc_core::sc_port_baseを再定義しています。
sc_core::sc_port< IF, N, P >, sc_core::sc_in< T >, sc_core::sc_in< bool >, sc_core::sc_in< sc_dt::sc_logic >, sc_core::sc_inout< T >, sc_core::sc_inout< T >, sc_core::sc_inout< bool >, sc_core::sc_inout< bool >, sc_core::sc_inout< sc_dt::sc_logic >, sc_core::sc_inout< sc_dt::sc_logic >, sc_core::sc_out< T >, sc_core::sc_out< T >, sc_core::sc_in_resolved, sc_core::sc_inout_resolved, sc_core::sc_inout_resolved, sc_core::sc_out_resolved, sc_core::sc_out_resolved, sc_core::sc_in_rv< W >, sc_core::sc_inout_rv< W >, sc_core::sc_out_rv< W >, sc_core::sc_port< sc_core::sc_signal_inout_if< bool >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_inout_if< sc_dt::sc_logic >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_in_if< bool >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_in_if< sc_dt::sc_logic >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_inout_if< T >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_in_if< T >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_fifo_out_if< T >, 0, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > >, 1, SC_ONE_OR_MORE_BOUND >, sc_core::sc_port< sc_core::sc_fifo_in_if< T >, 0, SC_ONE_OR_MORE_BOUND >, sc_core::sc_in< sc_dt::sc_lv< W > >, sc_core::sc_inout< sc_dt::sc_lv< W > >, と sc_core::sc_inout< sc_dt::sc_lv< W > >で再定義されています。
friend class sc_sensitive [friend] |
friend class sc_sensitive_neg [friend] |
friend class sc_sensitive_pos [friend] |
IF* sc_core::sc_port_b< IF >::m_interface [private] |
std::vector<IF*> sc_core::sc_port_b< IF >::m_interface_vec [private] |