#include <sc_port.h>
Public 型 | |
typedef sc_port_base | this_type |
Public メソッド | |
virtual sc_interface * | get_interface ()=0 |
virtual const sc_interface * | get_interface () const =0 |
virtual const char * | kind () const |
Protected メソッド | |
sc_port_base (int max_size_, sc_port_policy policy=SC_ONE_OR_MORE_BOUND) | |
sc_port_base (const char *name_, int max_size_, sc_port_policy policy=SC_ONE_OR_MORE_BOUND) | |
virtual | ~sc_port_base () |
void | bind (sc_interface &interface_) |
void | bind (this_type &parent_) |
virtual int | vbind (sc_interface &)=0 |
virtual int | vbind (sc_port_base &)=0 |
virtual void | add_interface (sc_interface *)=0 |
virtual int | interface_count ()=0 |
virtual const char * | if_typename () const =0 |
virtual void | before_end_of_elaboration () |
virtual void | end_of_elaboration () |
virtual void | start_of_simulation () |
virtual void | end_of_simulation () |
void | report_error (const char *id, const char *add_msg=0) const |
virtual void | make_sensitive (sc_thread_handle, sc_event_finder *=0) const |
virtual void | make_sensitive (sc_method_handle, sc_event_finder *=0) const |
void | add_static_event (sc_method_handle process_p, const sc_event &event) const |
void | add_static_event (sc_thread_handle process_p, const sc_event &event) const |
Protected 変数 | |
sc_bind_info * | m_bind_info |
Private メソッド | |
int | pbind (sc_interface &) |
int | pbind (sc_port_base &) |
int | first_parent () |
void | insert_parent (int) |
void | construction_done () |
void | complete_binding () |
void | elaboration_done () |
void | start_simulation () |
void | simulation_done () |
sc_port_base () | |
sc_port_base (const this_type &) | |
this_type & | operator= (const this_type &) |
フレンド | |
class | sc_module |
class | sc_port_registry |
class | sc_sensitive |
class | sc_sensitive_pos |
class | sc_sensitive_neg |
sc_core::sc_fifo_in< T >, sc_core::sc_fifo_out< T >, sc_core::sc_port_b< IF >, 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_b< sc_core::sc_signal_in_if< bool > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_fifo_out_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_fifo_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< bool > >, 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_base::sc_port_base | ( | int | max_size_, | |
sc_port_policy | policy = SC_ONE_OR_MORE_BOUND | |||
) | [explicit, protected] |
sc_port.cpp の 271 行で定義されています。
00273 : 00274 sc_object( sc_gen_unique_name( "port" ) ), 00275 m_bind_info( new sc_bind_info( max_size_, policy ) ) 00276 { 00277 simcontext()->get_port_registry()->insert( this ); 00278 }
sc_core::sc_port_base::sc_port_base | ( | const char * | name_, | |
int | max_size_, | |||
sc_port_policy | policy = SC_ONE_OR_MORE_BOUND | |||
) | [protected] |
sc_port.cpp の 280 行で定義されています。
00282 : 00283 sc_object( name_ ), 00284 m_bind_info( new sc_bind_info( max_size_, policy ) ) 00285 { 00286 simcontext()->get_port_registry()->insert( this ); 00287 }
sc_core::sc_port_base::~sc_port_base | ( | ) | [protected, virtual] |
sc_port.cpp の 292 行で定義されています。
00293 { 00294 simcontext()->get_port_registry()->remove( this ); 00295 if( m_bind_info != 0 ) { 00296 delete m_bind_info; 00297 } 00298 }
sc_core::sc_port_base::sc_port_base | ( | ) | [private] |
sc_core::sc_port_base::sc_port_base | ( | const this_type & | ) | [private] |
virtual sc_interface* sc_core::sc_port_base::get_interface | ( | ) | [pure virtual] |
sc_core::sc_port_b< IF >, sc_core::sc_port_b< sc_core::sc_signal_in_if< bool > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_fifo_out_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_fifo_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< T > >, と sc_core::sc_port_b< sc_core::sc_signal_inout_if< bool > >で実装されています。
virtual const sc_interface* sc_core::sc_port_base::get_interface | ( | ) | const [pure virtual] |
sc_core::sc_port_b< IF >, sc_core::sc_port_b< sc_core::sc_signal_in_if< bool > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_fifo_out_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_fifo_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< T > >, と sc_core::sc_port_b< sc_core::sc_signal_inout_if< bool > >で実装されています。
virtual const char* sc_core::sc_port_base::kind | ( | ) | const [inline, virtual] |
sc_core::sc_objectを再定義しています。
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 > >で再定義されています。
void sc_core::sc_port_base::bind | ( | sc_interface & | interface_ | ) | [protected] |
sc_port.cpp の 304 行で定義されています。
00305 { 00306 if( m_bind_info == 0 ) { 00307 // cannot bind an interface after elaboration 00308 report_error( SC_ID_BIND_IF_TO_PORT_, "simulation running" ); 00309 } 00310 00311 m_bind_info->vec.push_back( new sc_bind_elem( &interface_ ) ); 00312 00313 if( ! m_bind_info->has_parent ) { 00314 // add (cache) the interface 00315 add_interface( &interface_ ); 00316 m_bind_info->last_add ++; 00317 } 00318 }
void sc_core::sc_port_base::bind | ( | this_type & | parent_ | ) | [protected] |
sc_core::sc_port_b< IF >, sc_core::sc_in< T >, sc_core::sc_in< bool >, sc_core::sc_in< sc_dt::sc_logic >, sc_core::sc_port_b< sc_core::sc_signal_in_if< bool > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_fifo_out_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_fifo_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< bool > >, と sc_core::sc_in< sc_dt::sc_lv< W > >で再定義されています。
sc_port.cpp の 324 行で定義されています。
00325 { 00326 if( m_bind_info == 0 ) { 00327 // cannot bind a parent port after elaboration 00328 report_error( SC_ID_BIND_PORT_TO_PORT_, "simulation running" ); 00329 } 00330 00331 if( &parent_ == this ) { 00332 report_error( SC_ID_BIND_PORT_TO_PORT_, "same port" ); 00333 } 00334 00335 // check if parent port is already bound to this port 00336 #if 0 00337 for( int i = m_bind_info->size() - 1; i >= 0; -- i ) { 00338 if( &parent_ == m_bind_info->vec[i]->parent ) { 00339 report_error( SC_ID_BIND_PORT_TO_PORT_, "already bound" ); 00340 } 00341 } 00342 #endif // 00343 00344 m_bind_info->vec.push_back( new sc_bind_elem( &parent_ ) ); 00345 m_bind_info->has_parent = true; 00346 parent_.m_bind_info->is_leaf = false; 00347 }
virtual int sc_core::sc_port_base::vbind | ( | sc_interface & | ) | [protected, pure virtual] |
sc_core::sc_port_b< IF >, sc_core::sc_in< T >, sc_core::sc_in< bool >, sc_core::sc_in< sc_dt::sc_logic >, sc_core::sc_port_b< sc_core::sc_signal_in_if< bool > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_fifo_out_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_fifo_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< bool > >, と sc_core::sc_in< sc_dt::sc_lv< W > >で実装されています。
virtual int sc_core::sc_port_base::vbind | ( | sc_port_base & | ) | [protected, pure virtual] |
sc_core::sc_port_b< IF >, sc_core::sc_in< T >, sc_core::sc_in< bool >, sc_core::sc_in< sc_dt::sc_logic >, sc_core::sc_port_b< sc_core::sc_signal_in_if< bool > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_fifo_out_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_fifo_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< bool > >, と sc_core::sc_in< sc_dt::sc_lv< W > >で実装されています。
virtual void sc_core::sc_port_base::add_interface | ( | sc_interface * | ) | [protected, pure virtual] |
sc_core::sc_port_b< IF >, sc_core::sc_port_b< sc_core::sc_signal_in_if< bool > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_fifo_out_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_fifo_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< T > >, と sc_core::sc_port_b< sc_core::sc_signal_inout_if< bool > >で実装されています。
virtual int sc_core::sc_port_base::interface_count | ( | ) | [protected, pure virtual] |
sc_core::sc_port_b< IF >, sc_core::sc_port_b< sc_core::sc_signal_in_if< bool > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_fifo_out_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_fifo_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< T > >, と sc_core::sc_port_b< sc_core::sc_signal_inout_if< bool > >で実装されています。
virtual const char* sc_core::sc_port_base::if_typename | ( | ) | const [protected, pure virtual] |
sc_core::sc_port_b< IF >, sc_core::sc_port_b< sc_core::sc_signal_in_if< bool > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_fifo_out_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_fifo_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< T > >, と sc_core::sc_port_b< sc_core::sc_signal_inout_if< bool > >で実装されています。
void sc_core::sc_port_base::before_end_of_elaboration | ( | ) | [protected, virtual] |
void sc_core::sc_port_base::end_of_elaboration | ( | ) | [protected, virtual] |
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_in_resolved, sc_core::sc_inout_resolved, sc_core::sc_in_rv< W >, sc_core::sc_inout_rv< W >, sc_core::sc_in< sc_dt::sc_lv< W > >, と sc_core::sc_inout< sc_dt::sc_lv< W > >で再定義されています。
sc_port.cpp の 357 行で定義されています。
void sc_core::sc_port_base::start_of_simulation | ( | ) | [protected, virtual] |
void sc_core::sc_port_base::end_of_simulation | ( | ) | [protected, virtual] |
void sc_core::sc_port_base::report_error | ( | const char * | id, | |
const char * | add_msg = 0 | |||
) | const [protected] |
sc_port.cpp の 257 行で定義されています。
00258 { 00259 char msg[BUFSIZ]; 00260 if( add_msg != 0 ) { 00261 std::sprintf( msg, "%s: port '%s' (%s)", add_msg, name(), kind() ); 00262 } else { 00263 std::sprintf( msg, "port '%s' (%s)", name(), kind() ); 00264 } 00265 SC_REPORT_ERROR( id, msg ); 00266 }
void sc_core::sc_port_base::make_sensitive | ( | sc_thread_handle | handle_, | |
sc_event_finder * | event_finder_ = 0 | |||
) | const [protected, virtual] |
sc_core::sc_port_b< IF >, sc_core::sc_port_b< sc_core::sc_signal_in_if< bool > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_fifo_out_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_fifo_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< T > >, と sc_core::sc_port_b< sc_core::sc_signal_inout_if< bool > >で再定義されています。
sc_port.cpp の 409 行で定義されています。
00411 { 00412 assert( m_bind_info != 0 ); 00413 m_bind_info->thread_vec.push_back( 00414 new sc_bind_ef( (sc_process_b*)handle_, event_finder_ ) ); 00415 }
void sc_core::sc_port_base::make_sensitive | ( | sc_method_handle | handle_, | |
sc_event_finder * | event_finder_ = 0 | |||
) | const [protected, virtual] |
sc_core::sc_port_b< IF >, sc_core::sc_port_b< sc_core::sc_signal_in_if< bool > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_fifo_out_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_fifo_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< T > >, と sc_core::sc_port_b< sc_core::sc_signal_inout_if< bool > >で再定義されています。
sc_port.cpp の 418 行で定義されています。
00420 { 00421 assert( m_bind_info != 0 ); 00422 m_bind_info->method_vec.push_back( 00423 new sc_bind_ef( (sc_process_b*)handle_, event_finder_ ) ); 00424 }
void sc_core::sc_port_base::add_static_event | ( | sc_method_handle | process_p, | |
const sc_event & | event | |||
) | const [protected] |
void sc_core::sc_port_base::add_static_event | ( | sc_thread_handle | process_p, | |
const sc_event & | event | |||
) | const [protected] |
int sc_core::sc_port_base::pbind | ( | sc_interface & | interface_ | ) | [private] |
sc_port.cpp の 374 行で定義されています。
00375 { 00376 if( m_bind_info == 0 ) { 00377 // cannot bind an interface after elaboration 00378 report_error( SC_ID_BIND_IF_TO_PORT_, "simulation running" ); 00379 } 00380 00381 if( m_bind_info->size() != 0 ) { 00382 // first interface already bound 00383 return 1; 00384 } 00385 00386 return vbind( interface_ ); 00387 }
int sc_core::sc_port_base::pbind | ( | sc_port_base & | parent_ | ) | [private] |
sc_port.cpp の 390 行で定義されています。
00391 { 00392 if( m_bind_info == 0 ) { 00393 // cannot bind a parent port after elaboration 00394 report_error( SC_ID_BIND_PORT_TO_PORT_, "simulation running" ); 00395 } 00396 00397 if( m_bind_info->size() != 0 ) { 00398 // first interface already bound 00399 return 1; 00400 } 00401 00402 return vbind( parent_ ); 00403 }
int sc_core::sc_port_base::first_parent | ( | ) | [private] |
sc_port.cpp の 430 行で定義されています。
00431 { 00432 for( int i = 0; i < m_bind_info->size(); ++ i ) { 00433 if( m_bind_info->vec[i]->parent != 0 ) { 00434 return i; 00435 } 00436 } 00437 return -1; 00438 }
void sc_core::sc_port_base::insert_parent | ( | int | i | ) | [private] |
sc_port.cpp の 441 行で定義されています。
00442 { 00443 std::vector<sc_bind_elem*>& vec = m_bind_info->vec; 00444 00445 this_type* parent = vec[i]->parent; 00446 00447 00448 // IF OUR PARENT HAS NO BINDING THEN IGNORE IT: 00449 // 00450 // Note that the zeroing of the parent pointer must occur before this 00451 // test 00452 00453 vec[i]->parent = 0; 00454 if ( parent->m_bind_info->vec.size() == 0 ) return; 00455 00456 vec[i]->iface = parent->m_bind_info->vec[0]->iface; 00457 int n = parent->m_bind_info->size() - 1; 00458 if( n > 0 ) { 00459 // resize the bind vector (by adding new elements) 00460 for( int k = 0; k < n; ++ k ) { 00461 vec.push_back( new sc_bind_elem() ); 00462 } 00463 // move elements in the bind vector 00464 for( int k = m_bind_info->size() - n - 1; k > i; -- k ) { 00465 vec[k + n]->iface = vec[k]->iface; 00466 vec[k + n]->parent = vec[k]->parent; 00467 } 00468 // insert parent interfaces into the bind vector 00469 for( int k = i + 1; k <= i + n; ++ k ) { 00470 vec[k]->iface = parent->m_bind_info->vec[k - i]->iface; 00471 vec[k]->parent = 0; 00472 } 00473 } 00474 }
void sc_core::sc_port_base::construction_done | ( | ) | [private] |
void sc_core::sc_port_base::complete_binding | ( | ) | [private] |
sc_port.cpp の 480 行で定義されています。
00481 { 00482 char msg_buffer[128]; // For error message construction. 00483 00484 // IF BINDING HAS ALREADY BEEN COMPLETED IGNORE THIS CALL: 00485 00486 assert( m_bind_info != 0 ); 00487 if( m_bind_info->complete ) { 00488 return; 00489 } 00490 00491 // COMPLETE BINDING OF OUR PARENT PORTS SO THAT WE CAN USE THAT INFORMATION: 00492 00493 int i = first_parent(); 00494 while( i >= 0 ) { 00495 m_bind_info->vec[i]->parent->complete_binding(); 00496 insert_parent( i ); 00497 i = first_parent(); 00498 } 00499 00500 // LOOP OVER BINDING INFORMATION TO COMPLETE THE BINDING PROCESS: 00501 00502 int size; 00503 for( int j = 0; j < m_bind_info->size(); ++ j ) { 00504 sc_interface* iface = m_bind_info->vec[j]->iface; 00505 00506 // if the interface is zero this was for an unbound port. 00507 if ( iface == 0 ) continue; 00508 00509 // add (cache) the interface 00510 if( j > m_bind_info->last_add ) { 00511 add_interface( iface ); 00512 } 00513 00514 // only register "leaf" ports (ports without children) 00515 if( m_bind_info->is_leaf ) { 00516 iface->register_port( *this, if_typename() ); 00517 } 00518 00519 // complete static sensitivity for methods 00520 size = m_bind_info->method_vec.size(); 00521 for( int k = 0; k < size; ++ k ) { 00522 sc_bind_ef* p = m_bind_info->method_vec[k]; 00523 const sc_event& event = ( p->event_finder != 0 ) 00524 ? p->event_finder->find_event(iface) 00525 : iface->default_event(); 00526 p->handle->add_static_event( event ); 00527 } 00528 00529 // complete static sensitivity for threads 00530 size = m_bind_info->thread_vec.size(); 00531 for( int k = 0; k < size; ++ k ) { 00532 sc_bind_ef* p = m_bind_info->thread_vec[k]; 00533 const sc_event& event = ( p->event_finder != 0 ) 00534 ? p->event_finder->find_event(iface) 00535 : iface->default_event(); 00536 p->handle->add_static_event( event ); 00537 } 00538 00539 } 00540 00541 // MAKE SURE THE PROPER NUMBER OF BINDINGS OCCURRED: 00542 // 00543 // Make sure there are enough bindings, and not too many. 00544 00545 int actual_binds = interface_count(); 00546 00547 if ( actual_binds > m_bind_info->max_size() ) 00548 { 00549 sprintf(msg_buffer, "%d binds exceeds maximum of %d allowed", 00550 actual_binds, m_bind_info->max_size() ); 00551 report_error( SC_ID_COMPLETE_BINDING_, msg_buffer ); 00552 } 00553 switch ( m_bind_info->policy() ) 00554 { 00555 case SC_ONE_OR_MORE_BOUND: 00556 if ( actual_binds < 1 ) { 00557 report_error( SC_ID_COMPLETE_BINDING_, "port not bound" ); 00558 } 00559 break; 00560 case SC_ALL_BOUND: 00561 if ( actual_binds < m_bind_info->max_size() || actual_binds < 1 ) { 00562 sprintf(msg_buffer, "%d actual binds is less than required %d", 00563 actual_binds, m_bind_info->max_size() ); 00564 report_error( SC_ID_COMPLETE_BINDING_, msg_buffer ); 00565 } 00566 break; 00567 default: // SC_ZERO_OR_MORE_BOUND: 00568 break; 00569 } 00570 00571 00572 // CLEAN UP: FREE BINDING STORAGE: 00573 00574 size = m_bind_info->method_vec.size(); 00575 for( int k = 0; k < size; ++ k ) { 00576 delete m_bind_info->method_vec[k]; 00577 } 00578 m_bind_info->method_vec.resize(0); 00579 00580 size = m_bind_info->thread_vec.size(); 00581 for( int k = 0; k < size; ++ k ) { 00582 delete m_bind_info->thread_vec[k]; 00583 } 00584 m_bind_info->thread_vec.resize(0); 00585 00586 m_bind_info->complete = true; 00587 }
void sc_core::sc_port_base::elaboration_done | ( | ) | [private] |
sc_port.cpp の 595 行で定義されています。
00596 { 00597 assert( m_bind_info != 0 && m_bind_info->complete ); 00598 delete m_bind_info; 00599 m_bind_info = 0; 00600 00601 end_of_elaboration(); 00602 }
void sc_core::sc_port_base::start_simulation | ( | ) | [private] |
void sc_core::sc_port_base::simulation_done | ( | ) | [private] |
sc_core::sc_port_b< IF >, 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_b< sc_core::sc_signal_in_if< bool > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_fifo_out_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_fifo_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< bool > >, 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_port_registry [friend] |
friend class sc_sensitive [friend] |
sc_core::sc_port_b< IF >, sc_core::sc_port_b< sc_core::sc_signal_in_if< bool > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_fifo_out_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_fifo_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< T > >, と sc_core::sc_port_b< sc_core::sc_signal_inout_if< bool > >で再定義されています。
friend class sc_sensitive_pos [friend] |
sc_core::sc_port_b< IF >, sc_core::sc_port_b< sc_core::sc_signal_in_if< bool > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_fifo_out_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_fifo_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< T > >, と sc_core::sc_port_b< sc_core::sc_signal_inout_if< bool > >で再定義されています。
friend class sc_sensitive_neg [friend] |
sc_core::sc_port_b< IF >, sc_core::sc_port_b< sc_core::sc_signal_in_if< bool > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_logic > >, sc_core::sc_port_b< sc_core::sc_fifo_out_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< sc_dt::sc_lv< W > > >, sc_core::sc_port_b< sc_core::sc_fifo_in_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_inout_if< T > >, sc_core::sc_port_b< sc_core::sc_signal_in_if< T > >, と sc_core::sc_port_b< sc_core::sc_signal_inout_if< bool > >で再定義されています。
sc_bind_info* sc_core::sc_port_base::m_bind_info [protected] |