sc_module.cpp
来自「基于4个mips核的noc设计」· C++ 代码 · 共 584 行 · 第 1/2 页
CPP
584 行
switch( cpi->kind ) { case SC_METHOD_PROC_: { RCAST<sc_method_handle>( cpi->process_handle )->do_initialize( false ); break; } case SC_THREAD_PROC_: { RCAST<sc_thread_handle>( cpi->process_handle )->do_initialize( false ); break; } default: SC_REPORT_WARNING( SC_ID_DONT_INITIALIZE_, 0 ); break; }}// to generate unique names for objects in an MT-Safe wayconst char*sc_module::gen_unique_name( const char* basename_ ){ return m_name_gen->gen_unique_name( basename_ );}// called by elaboration_done (does nothing by default)voidsc_module::end_of_elaboration(){}voidsc_module::elaboration_done( bool& error_ ){ if( ! m_end_module_called ) { char msg[BUFSIZ]; sprintf( msg, "module '%s'", name() ); SC_REPORT_WARNING( SC_ID_END_MODULE_NOT_CALLED_, msg ); if( error_ ) { SC_REPORT_WARNING( SC_ID_HIER_NAME_INCORRECT_, 0 ); } error_ = true; } end_of_elaboration();}voidsc_module::set_stack_size( size_t size ){ sc_curr_proc_handle cpi = simcontext()->get_curr_proc_info(); switch( cpi->kind ) { case SC_THREAD_PROC_: case SC_CTHREAD_PROC_: { sc_thread_handle thread_h = (sc_thread_handle) cpi->process_handle; thread_h->set_stack_size( size ); break; } default: SC_REPORT_WARNING( SC_ID_SET_STACK_SIZE_, 0 ); break; }}intsc_module::append_port( sc_port_base* port_ ){ int index = m_port_vec->size(); m_port_vec->push_back( port_ ); return index;}// positional binding methodssc_module&sc_module::operator << ( sc_interface& interface_ ){ if( m_port_index == m_port_vec->size() ) { char msg[BUFSIZ]; if( m_port_index == 0 ) { sprintf( msg, "module `%s' has no ports", name() ); } else { sprintf( msg, "all ports of module `%s' are bound", name() ); } SC_REPORT_ERROR( SC_ID_BIND_IF_TO_PORT_, msg ); } int status = (*m_port_vec)[m_port_index]->pbind( interface_ ); if( status != 0 ) { char msg[BUFSIZ]; switch( status ) { case 1: sprintf( msg, "port %d of module `%s' is already bound", m_port_index, name() ); break; case 2: sprintf( msg, "type mismatch on port %d of module `%s'", m_port_index, name() ); break; default: sprintf( msg, "unknown error" ); break; } SC_REPORT_ERROR( SC_ID_BIND_IF_TO_PORT_, msg ); } ++ m_port_index; return *this;}sc_module&sc_module::operator << ( sc_port_base& port_ ){ if( m_port_index == m_port_vec->size() ) { char msg[BUFSIZ]; if( m_port_index == 0 ) { sprintf( msg, "module `%s' has no ports", name() ); } else { sprintf( msg, "all ports of module `%s' are bound", name() ); } SC_REPORT_ERROR( SC_ID_BIND_PORT_TO_PORT_, msg ); } int status = (*m_port_vec)[m_port_index]->pbind( port_ ); if( status != 0 ) { char msg[BUFSIZ]; switch( status ) { case 1: sprintf( msg, "port %d of module `%s' is already bound", m_port_index, name() ); break; case 2: sprintf( msg, "type mismatch on port %d of module `%s'", m_port_index, name() ); break; default: sprintf( msg, "unknown error" ); break; } SC_REPORT_ERROR( SC_ID_BIND_PORT_TO_PORT_, msg ); } ++ m_port_index; return *this;}#define TRY_BIND( p ) \ if( (p).iface != 0 ) { \ operator << ( *(p).iface ); \ } else if( (p).port != 0 ) { \ operator << ( *(p).port ); \ } else { \ return; \ }voidsc_module::operator () ( const sc_bind_proxy& p001, const sc_bind_proxy& p002, const sc_bind_proxy& p003, const sc_bind_proxy& p004, const sc_bind_proxy& p005, const sc_bind_proxy& p006, const sc_bind_proxy& p007, const sc_bind_proxy& p008, const sc_bind_proxy& p009, const sc_bind_proxy& p010, const sc_bind_proxy& p011, const sc_bind_proxy& p012, const sc_bind_proxy& p013, const sc_bind_proxy& p014, const sc_bind_proxy& p015, const sc_bind_proxy& p016, const sc_bind_proxy& p017, const sc_bind_proxy& p018, const sc_bind_proxy& p019, const sc_bind_proxy& p020, const sc_bind_proxy& p021, const sc_bind_proxy& p022, const sc_bind_proxy& p023, const sc_bind_proxy& p024, const sc_bind_proxy& p025, const sc_bind_proxy& p026, const sc_bind_proxy& p027, const sc_bind_proxy& p028, const sc_bind_proxy& p029, const sc_bind_proxy& p030, const sc_bind_proxy& p031, const sc_bind_proxy& p032, const sc_bind_proxy& p033, const sc_bind_proxy& p034, const sc_bind_proxy& p035, const sc_bind_proxy& p036, const sc_bind_proxy& p037, const sc_bind_proxy& p038, const sc_bind_proxy& p039, const sc_bind_proxy& p040, const sc_bind_proxy& p041, const sc_bind_proxy& p042, const sc_bind_proxy& p043, const sc_bind_proxy& p044, const sc_bind_proxy& p045, const sc_bind_proxy& p046, const sc_bind_proxy& p047, const sc_bind_proxy& p048, const sc_bind_proxy& p049, const sc_bind_proxy& p050, const sc_bind_proxy& p051, const sc_bind_proxy& p052, const sc_bind_proxy& p053, const sc_bind_proxy& p054, const sc_bind_proxy& p055, const sc_bind_proxy& p056, const sc_bind_proxy& p057, const sc_bind_proxy& p058, const sc_bind_proxy& p059, const sc_bind_proxy& p060, const sc_bind_proxy& p061, const sc_bind_proxy& p062, const sc_bind_proxy& p063, const sc_bind_proxy& p064 ){ TRY_BIND( p001 ); TRY_BIND( p002 ); TRY_BIND( p003 ); TRY_BIND( p004 ); TRY_BIND( p005 ); TRY_BIND( p006 ); TRY_BIND( p007 ); TRY_BIND( p008 ); TRY_BIND( p009 ); TRY_BIND( p010 ); TRY_BIND( p011 ); TRY_BIND( p012 ); TRY_BIND( p013 ); TRY_BIND( p014 ); TRY_BIND( p015 ); TRY_BIND( p016 ); TRY_BIND( p017 ); TRY_BIND( p018 ); TRY_BIND( p019 ); TRY_BIND( p020 ); TRY_BIND( p021 ); TRY_BIND( p022 ); TRY_BIND( p023 ); TRY_BIND( p024 ); TRY_BIND( p025 ); TRY_BIND( p026 ); TRY_BIND( p027 ); TRY_BIND( p028 ); TRY_BIND( p029 ); TRY_BIND( p030 ); TRY_BIND( p031 ); TRY_BIND( p032 ); TRY_BIND( p033 ); TRY_BIND( p034 ); TRY_BIND( p035 ); TRY_BIND( p036 ); TRY_BIND( p037 ); TRY_BIND( p038 ); TRY_BIND( p039 ); TRY_BIND( p040 ); TRY_BIND( p041 ); TRY_BIND( p042 ); TRY_BIND( p043 ); TRY_BIND( p044 ); TRY_BIND( p045 ); TRY_BIND( p046 ); TRY_BIND( p047 ); TRY_BIND( p048 ); TRY_BIND( p049 ); TRY_BIND( p050 ); TRY_BIND( p051 ); TRY_BIND( p052 ); TRY_BIND( p053 ); TRY_BIND( p054 ); TRY_BIND( p055 ); TRY_BIND( p056 ); TRY_BIND( p057 ); TRY_BIND( p058 ); TRY_BIND( p059 ); TRY_BIND( p060 ); TRY_BIND( p061 ); TRY_BIND( p062 ); TRY_BIND( p063 ); TRY_BIND( p064 );}// Taf!
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?