Changeset 88 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_transition.cpp
- Timestamp:
- Dec 10, 2008, 7:31:39 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_transition.cpp
r81 r88 23 23 void Functionnal_unit::transition (void) 24 24 { 25 log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin"); 25 log_begin(Functionnal_unit,FUNCTION); 26 log_function(Functionnal_unit,FUNCTION,_name.c_str()); 26 27 27 28 if (PORT_READ(in_NRESET) == 0) 28 29 { 29 reg_BUSY = false; 30 reg_BUSY_IN = false; 31 reg_BUSY_OUT = false; 30 32 31 33 for (uint32_t i=0; i<_param->_nb_context; i++) … … 33 35 for (uint32_t k=0; k<_param->_nb_ooo_engine; k++) 34 36 { 35 uint32_t num_thread = get_num_thread(i,_param->_size_context_id,36 j,_param->_size_front_end_id,37 k,_param->_size_ooo_engine_id);37 // uint32_t num_thread = get_num_thread(i,_param->_size_context_id, 38 // j,_param->_size_front_end_id, 39 // k,_param->_size_ooo_engine_id); 38 40 39 41 for (uint32_t x=GROUP_CUSTOM_1; x<GROUP_CUSTOM_8; x++) 40 42 { 41 function_execute_end_cycle_t * fct = (_param->_get_custom_information( num_thread)._get_custom_execute_reset(x));43 function_execute_end_cycle_t * fct = (_param->_get_custom_information()._get_custom_execute_reset(x)); 42 44 43 45 if (fct != NULL) … … 51 53 if (internal_EXECUTE_OUT_VAL and PORT_READ(in_EXECUTE_OUT_ACK)) 52 54 { 55 log_printf(TRACE,Functionnal_unit,FUNCTION," * EXECUTE_OUT : Transaction Accepted"); 53 56 // transaction 54 reg_BUSY = false;57 reg_BUSY_OUT = false; 55 58 } 56 59 … … 60 63 if (PORT_READ(in_EXECUTE_IN_VAL) and internal_EXECUTE_IN_ACK) 61 64 { 62 reg_BUSY = true; 65 log_printf(TRACE,Functionnal_unit,FUNCTION," * EXECUTE_IN : Transaction Accepted"); 66 67 reg_BUSY_IN = true; 63 68 64 69 Tcontext_t context_id = (_param->_have_port_context_id )?PORT_READ(in_EXECUTE_IN_CONTEXT_ID ):0; 65 70 Tcontext_t front_end_id = (_param->_have_port_front_end_id )?PORT_READ(in_EXECUTE_IN_FRONT_END_ID ):0; 66 71 Tcontext_t ooo_engine_id = (_param->_have_port_ooo_engine_id)?PORT_READ(in_EXECUTE_IN_OOO_ENGINE_ID):0; 67 Tcontext_t packet_id = (_param->_have_port_ packet_id)?PORT_READ(in_EXECUTE_IN_PACKET_ID ):0;72 Tcontext_t packet_id = (_param->_have_port_rob_ptr )?PORT_READ(in_EXECUTE_IN_PACKET_ID ):0; 68 73 Toperation_t operation = PORT_READ(in_EXECUTE_IN_OPERATION); 69 74 Ttype_t type = PORT_READ(in_EXECUTE_IN_TYPE); 70 75 71 _execute_operation->_context_id = context_id ; 72 _execute_operation->_front_end_id = front_end_id ; 73 _execute_operation->_ooo_engine_id = ooo_engine_id; 74 _execute_operation->_packet_id = packet_id ; 75 _execute_operation->_operation = operation ; 76 _execute_operation->_type = type ; 77 _execute_operation->_has_immediat = PORT_READ(in_EXECUTE_IN_HAS_IMMEDIAT); 78 _execute_operation->_immediat = PORT_READ(in_EXECUTE_IN_IMMEDIAT ); 79 _execute_operation->_data_ra = PORT_READ(in_EXECUTE_IN_DATA_RA ); 80 _execute_operation->_data_rb = PORT_READ(in_EXECUTE_IN_DATA_RB ); 81 _execute_operation->_data_rc = PORT_READ(in_EXECUTE_IN_DATA_RC ); 82 _execute_operation->_write_rd = PORT_READ(in_EXECUTE_IN_WRITE_RD ); 83 _execute_operation->_num_reg_rd = PORT_READ(in_EXECUTE_IN_NUM_REG_RD ); 84 _execute_operation->_write_re = PORT_READ(in_EXECUTE_IN_WRITE_RE ); 85 _execute_operation->_num_reg_re = PORT_READ(in_EXECUTE_IN_NUM_REG_RE ); 86 76 _execute_operation_in->_context_id = context_id ; 77 _execute_operation_in->_front_end_id = front_end_id ; 78 _execute_operation_in->_ooo_engine_id = ooo_engine_id; 79 _execute_operation_in->_packet_id = packet_id ; 80 _execute_operation_in->_operation = operation ; 81 _execute_operation_in->_type = type ; 82 _execute_operation_in->_has_immediat = PORT_READ(in_EXECUTE_IN_HAS_IMMEDIAT); 83 _execute_operation_in->_immediat = PORT_READ(in_EXECUTE_IN_IMMEDIAT ); 84 _execute_operation_in->_data_ra = PORT_READ(in_EXECUTE_IN_DATA_RA ); 85 _execute_operation_in->_data_rb = PORT_READ(in_EXECUTE_IN_DATA_RB ); 86 _execute_operation_in->_data_rc = PORT_READ(in_EXECUTE_IN_DATA_RC ); 87 _execute_operation_in->_write_rd = PORT_READ(in_EXECUTE_IN_WRITE_RD ); 88 _execute_operation_in->_num_reg_rd = PORT_READ(in_EXECUTE_IN_NUM_REG_RD ); 89 _execute_operation_in->_write_re = PORT_READ(in_EXECUTE_IN_WRITE_RE ); 90 _execute_operation_in->_num_reg_re = PORT_READ(in_EXECUTE_IN_NUM_REG_RE ); 91 92 log_printf(TRACE,Functionnal_unit,FUNCTION," * context_id : %d",_execute_operation_in->_context_id ); 93 log_printf(TRACE,Functionnal_unit,FUNCTION," * front_end_id : %d",_execute_operation_in->_front_end_id ); 94 log_printf(TRACE,Functionnal_unit,FUNCTION," * ooo_engine_id : %d",_execute_operation_in->_ooo_engine_id); 95 log_printf(TRACE,Functionnal_unit,FUNCTION," * packet_id : %d",_execute_operation_in->_packet_id ); 96 log_printf(TRACE,Functionnal_unit,FUNCTION," * operation : %d",_execute_operation_in->_operation ); 97 log_printf(TRACE,Functionnal_unit,FUNCTION," * type : %s",toString_type(_execute_operation_in->_type).c_str()); 98 log_printf(TRACE,Functionnal_unit,FUNCTION," * has_immediat : %d",_execute_operation_in->_has_immediat ); 99 log_printf(TRACE,Functionnal_unit,FUNCTION," * immediat : %.8x",_execute_operation_in->_immediat ); 100 log_printf(TRACE,Functionnal_unit,FUNCTION," * data_ra : %.8x",_execute_operation_in->_data_ra ); 101 log_printf(TRACE,Functionnal_unit,FUNCTION," * data_rb : %.8x",_execute_operation_in->_data_rb ); 102 log_printf(TRACE,Functionnal_unit,FUNCTION," * data_rc : %.8x",_execute_operation_in->_data_rc ); 103 log_printf(TRACE,Functionnal_unit,FUNCTION," * write_rd : %d" ,_execute_operation_in->_write_rd ); 104 log_printf(TRACE,Functionnal_unit,FUNCTION," * num_reg_rd : %d" ,_execute_operation_in->_num_reg_rd ); 105 log_printf(TRACE,Functionnal_unit,FUNCTION," * write_re : %d" ,_execute_operation_in->_write_re ); 106 log_printf(TRACE,Functionnal_unit,FUNCTION," * num_reg_re : %d" ,_execute_operation_in->_num_reg_re ); 107 87 108 #ifdef DEBUG_TEST 88 109 if (type >= _param->_nb_type) … … 98 119 if (type == TYPE_CUSTOM) 99 120 { 100 uint32_t num_thread = get_num_thread(context_id ,_param->_size_context_id,101 front_end_id ,_param->_size_front_end_id,102 ooo_engine_id,_param->_size_ooo_engine_id);103 104 (*(_param->_get_custom_information( num_thread)._get_custom_execute_genMoore(operation))) (_execute_operation, execute_register, _execute_param);121 // uint32_t num_thread = get_num_thread(context_id ,_param->_size_context_id, 122 // front_end_id ,_param->_size_front_end_id, 123 // ooo_engine_id,_param->_size_ooo_engine_id); 124 125 (*(_param->_get_custom_information()._get_custom_execute_genMoore(operation))) (_execute_operation_in, execute_register, _execute_param); 105 126 } 106 127 else 107 (*(_function_execute[type][operation])) (_execute_operation, execute_register, _execute_param); 108 128 (*(_function_execute[type][operation])) (_execute_operation_in, execute_register, _execute_param); 129 130 131 log_printf(TRACE,Functionnal_unit,FUNCTION," -----------------"); 132 log_printf(TRACE,Functionnal_unit,FUNCTION," * latence : %.8x",_execute_operation_in->_timing._latence); 133 log_printf(TRACE,Functionnal_unit,FUNCTION," * delay : %.8x",_execute_operation_in->_timing._delay); 134 log_printf(TRACE,Functionnal_unit,FUNCTION," * data_rd : %.8x",_execute_operation_in->_data_rd ); 135 log_printf(TRACE,Functionnal_unit,FUNCTION," * data_re : %.8x",_execute_operation_in->_data_re ); 136 log_printf(TRACE,Functionnal_unit,FUNCTION," * exception : %d" ,_execute_operation_in->_exception ); 137 log_printf(TRACE,Functionnal_unit,FUNCTION," * no_sequence : %d" ,_execute_operation_in->_no_sequence); 138 log_printf(TRACE,Functionnal_unit,FUNCTION," * address : %.8x",_execute_operation_in->_address ); 109 139 110 140 #ifdef STATISTICS 111 (*_stat_use_functionnal_unit) ++; 112 (*_stat_sum_delay) += _execute_operation->_timing._delay; 113 (*_stat_sum_latence) += _execute_operation->_timing._latence; 141 if (usage_is_set(_usage,USE_STATISTICS)) 142 { 143 (*_stat_use_functionnal_unit) ++; 144 (*_stat_sum_delay) += _execute_operation_in->_timing._delay; 145 (*_stat_sum_latence) += _execute_operation_in->_timing._latence; 146 } 114 147 #endif 115 148 } … … 121 154 for (uint32_t k=0; k<_param->_nb_ooo_engine; k++) 122 155 { 123 uint32_t num_thread = get_num_thread(i,_param->_size_context_id,124 j,_param->_size_front_end_id,125 k,_param->_size_ooo_engine_id);156 // uint32_t num_thread = get_num_thread(i,_param->_size_context_id, 157 // j,_param->_size_front_end_id, 158 // k,_param->_size_ooo_engine_id); 126 159 127 160 for (uint32_t x=GROUP_CUSTOM_1; x<GROUP_CUSTOM_8; x++) 128 161 { 129 function_execute_end_cycle_t * fct = (_param->_get_custom_information( num_thread)._get_custom_execute_transition(x));162 function_execute_end_cycle_t * fct = (_param->_get_custom_information()._get_custom_execute_transition(x)); 130 163 131 164 if (fct != NULL) … … 142 175 } 143 176 } 177 178 if (reg_BUSY_IN and not reg_BUSY_OUT) 179 { 180 reg_BUSY_OUT = reg_BUSY_IN; 181 reg_BUSY_IN = false; 182 183 _execute_operation_out->_timing = _execute_operation_in->_timing ; 184 _execute_operation_out->_context_id = _execute_operation_in->_context_id ; 185 _execute_operation_out->_front_end_id = _execute_operation_in->_front_end_id ; 186 _execute_operation_out->_ooo_engine_id = _execute_operation_in->_ooo_engine_id; 187 _execute_operation_out->_packet_id = _execute_operation_in->_packet_id ; 188 _execute_operation_out->_operation = _execute_operation_in->_operation ; 189 _execute_operation_out->_type = _execute_operation_in->_type ; 190 _execute_operation_out->_has_immediat = _execute_operation_in->_has_immediat ; 191 _execute_operation_out->_immediat = _execute_operation_in->_immediat ; 192 _execute_operation_out->_data_ra = _execute_operation_in->_data_ra ; 193 _execute_operation_out->_data_rb = _execute_operation_in->_data_rb ; 194 _execute_operation_out->_data_rc = _execute_operation_in->_data_rc ; 195 _execute_operation_out->_data_rd = _execute_operation_in->_data_rd ; 196 _execute_operation_out->_data_re = _execute_operation_in->_data_re ; 197 _execute_operation_out->_write_rd = _execute_operation_in->_write_rd ; 198 _execute_operation_out->_num_reg_rd = _execute_operation_in->_num_reg_rd ; 199 _execute_operation_out->_write_re = _execute_operation_in->_write_re ; 200 _execute_operation_out->_num_reg_re = _execute_operation_in->_num_reg_re ; 201 _execute_operation_out->_exception = _execute_operation_in->_exception ; 202 _execute_operation_out->_no_sequence = _execute_operation_in->_no_sequence ; 203 _execute_operation_out->_address = _execute_operation_in->_address ; 204 } 205 206 // each cycle : decrease the latence 207 if (reg_BUSY_OUT and (_execute_operation_out->_timing._latence > 0)) 208 _execute_operation_out->_timing._latence --; 144 209 } 145 146 // each cycle : decrease the latence147 if (reg_BUSY and (_execute_operation->_timing._latence > 0))148 _execute_operation->_timing._latence --;149 210 150 211 #if defined(STATISTICS) or defined(VHDL_TESTBENCH) … … 152 213 #endif 153 214 154 log_ printf(FUNC,Functionnal_unit,FUNCTION,"End");215 log_end(Functionnal_unit,FUNCTION); 155 216 }; 156 217
Note: See TracChangeset
for help on using the changeset viewer.