Changeset 118 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:
- May 21, 2009, 12:01:32 AM (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
r117 r118 28 28 if (PORT_READ(in_NRESET) == 0) 29 29 { 30 if (_param->_have_pipeline_in) 30 31 reg_BUSY_IN = false; 31 32 reg_BUSY_OUT = false; … … 50 51 else 51 52 { 52 // Test if pop 53 // Test if pop an instruction 53 54 if (internal_EXECUTE_OUT_VAL and PORT_READ(in_EXECUTE_OUT_ACK)) 54 55 { 55 56 log_printf(TRACE,Functionnal_unit,FUNCTION," * EXECUTE_OUT : Transaction Accepted"); 56 // transaction57 57 reg_BUSY_OUT = false; 58 58 } 59 59 60 60 // Test if can move instruction in pipeline in to pipeline out 61 if (_param->_have_pipeline_in) 61 62 if (reg_BUSY_IN and not reg_BUSY_OUT) 62 63 { … … 87 88 } 88 89 89 90 91 90 // Test if push 92 91 execute_register_t * execute_register = NULL; … … 96 95 log_printf(TRACE,Functionnal_unit,FUNCTION," * EXECUTE_IN : Transaction Accepted"); 97 96 98 reg_BUSY_IN = true; 97 execute_operation_t * execute_operation; 98 99 if (_param->_have_pipeline_in) 100 { 101 reg_BUSY_IN = true; 102 execute_operation = _execute_operation_in; 103 } 104 else 105 { 106 reg_BUSY_OUT = true; 107 execute_operation = _execute_operation_out; 108 } 99 109 100 110 Tcontext_t context_id = (_param->_have_port_context_id )?PORT_READ(in_EXECUTE_IN_CONTEXT_ID ):0; … … 104 114 Toperation_t operation = PORT_READ(in_EXECUTE_IN_OPERATION); 105 115 Ttype_t type = PORT_READ(in_EXECUTE_IN_TYPE); 106 107 _execute_operation_in->_context_id = context_id ;108 _execute_operation_in->_front_end_id = front_end_id ;109 _execute_operation_in->_ooo_engine_id = ooo_engine_id;110 _execute_operation_in->_packet_id = packet_id ;111 _execute_operation_in->_operation = operation ;112 _execute_operation_in->_type = type ;113 _execute_operation_in->_has_immediat = PORT_READ(in_EXECUTE_IN_HAS_IMMEDIAT);114 _execute_operation_in->_immediat = PORT_READ(in_EXECUTE_IN_IMMEDIAT );115 _execute_operation_in->_data_ra = PORT_READ(in_EXECUTE_IN_DATA_RA );116 _execute_operation_in->_data_rb = PORT_READ(in_EXECUTE_IN_DATA_RB );117 _execute_operation_in->_data_rc = PORT_READ(in_EXECUTE_IN_DATA_RC );118 _execute_operation_in->_write_rd = PORT_READ(in_EXECUTE_IN_WRITE_RD );119 _execute_operation_in->_num_reg_rd = PORT_READ(in_EXECUTE_IN_NUM_REG_RD );120 _execute_operation_in->_data_rd = 0; // no necessaray121 _execute_operation_in->_write_re = PORT_READ(in_EXECUTE_IN_WRITE_RE );122 _execute_operation_in->_num_reg_re = PORT_READ(in_EXECUTE_IN_NUM_REG_RE );123 _execute_operation_in->_data_re = 0; // no necessaray124 125 log_printf(TRACE,Functionnal_unit,FUNCTION," * context_id : %d", _execute_operation_in->_context_id );126 log_printf(TRACE,Functionnal_unit,FUNCTION," * front_end_id : %d", _execute_operation_in->_front_end_id );127 log_printf(TRACE,Functionnal_unit,FUNCTION," * ooo_engine_id : %d", _execute_operation_in->_ooo_engine_id);128 log_printf(TRACE,Functionnal_unit,FUNCTION," * packet_id : %d", _execute_operation_in->_packet_id );129 log_printf(TRACE,Functionnal_unit,FUNCTION," * operation : %d", _execute_operation_in->_operation );130 log_printf(TRACE,Functionnal_unit,FUNCTION," * type : %s",toString( _execute_operation_in->_type).c_str());131 log_printf(TRACE,Functionnal_unit,FUNCTION," * has_immediat : %d", _execute_operation_in->_has_immediat );132 log_printf(TRACE,Functionnal_unit,FUNCTION," * immediat : %.8x", _execute_operation_in->_immediat );133 log_printf(TRACE,Functionnal_unit,FUNCTION," * data_ra : %.8x", _execute_operation_in->_data_ra );134 log_printf(TRACE,Functionnal_unit,FUNCTION," * data_rb : %.8x", _execute_operation_in->_data_rb );135 log_printf(TRACE,Functionnal_unit,FUNCTION," * data_rc : %.8x", _execute_operation_in->_data_rc );136 log_printf(TRACE,Functionnal_unit,FUNCTION," * write_rd : %d" , _execute_operation_in->_write_rd );137 log_printf(TRACE,Functionnal_unit,FUNCTION," * num_reg_rd : %d" , _execute_operation_in->_num_reg_rd );138 log_printf(TRACE,Functionnal_unit,FUNCTION," * write_re : %d" , _execute_operation_in->_write_re );139 log_printf(TRACE,Functionnal_unit,FUNCTION," * num_reg_re : %d" , _execute_operation_in->_num_reg_re );116 117 execute_operation->_context_id = context_id ; 118 execute_operation->_front_end_id = front_end_id ; 119 execute_operation->_ooo_engine_id = ooo_engine_id; 120 execute_operation->_packet_id = packet_id ; 121 execute_operation->_operation = operation ; 122 execute_operation->_type = type ; 123 execute_operation->_has_immediat = PORT_READ(in_EXECUTE_IN_HAS_IMMEDIAT); 124 execute_operation->_immediat = PORT_READ(in_EXECUTE_IN_IMMEDIAT ); 125 execute_operation->_data_ra = PORT_READ(in_EXECUTE_IN_DATA_RA ); 126 execute_operation->_data_rb = PORT_READ(in_EXECUTE_IN_DATA_RB ); 127 execute_operation->_data_rc = PORT_READ(in_EXECUTE_IN_DATA_RC ); 128 execute_operation->_write_rd = PORT_READ(in_EXECUTE_IN_WRITE_RD ); 129 execute_operation->_num_reg_rd = PORT_READ(in_EXECUTE_IN_NUM_REG_RD ); 130 execute_operation->_data_rd = 0; // no necessaray 131 execute_operation->_write_re = PORT_READ(in_EXECUTE_IN_WRITE_RE ); 132 execute_operation->_num_reg_re = PORT_READ(in_EXECUTE_IN_NUM_REG_RE ); 133 execute_operation->_data_re = 0; // no necessaray 134 135 log_printf(TRACE,Functionnal_unit,FUNCTION," * context_id : %d",execute_operation->_context_id ); 136 log_printf(TRACE,Functionnal_unit,FUNCTION," * front_end_id : %d",execute_operation->_front_end_id ); 137 log_printf(TRACE,Functionnal_unit,FUNCTION," * ooo_engine_id : %d",execute_operation->_ooo_engine_id); 138 log_printf(TRACE,Functionnal_unit,FUNCTION," * packet_id : %d",execute_operation->_packet_id ); 139 log_printf(TRACE,Functionnal_unit,FUNCTION," * operation : %d",execute_operation->_operation ); 140 log_printf(TRACE,Functionnal_unit,FUNCTION," * type : %s",toString(execute_operation->_type).c_str()); 141 log_printf(TRACE,Functionnal_unit,FUNCTION," * has_immediat : %d",execute_operation->_has_immediat ); 142 log_printf(TRACE,Functionnal_unit,FUNCTION," * immediat : %.8x",execute_operation->_immediat ); 143 log_printf(TRACE,Functionnal_unit,FUNCTION," * data_ra : %.8x",execute_operation->_data_ra ); 144 log_printf(TRACE,Functionnal_unit,FUNCTION," * data_rb : %.8x",execute_operation->_data_rb ); 145 log_printf(TRACE,Functionnal_unit,FUNCTION," * data_rc : %.8x",execute_operation->_data_rc ); 146 log_printf(TRACE,Functionnal_unit,FUNCTION," * write_rd : %d" ,execute_operation->_write_rd ); 147 log_printf(TRACE,Functionnal_unit,FUNCTION," * num_reg_rd : %d" ,execute_operation->_num_reg_rd ); 148 log_printf(TRACE,Functionnal_unit,FUNCTION," * write_re : %d" ,execute_operation->_write_re ); 149 log_printf(TRACE,Functionnal_unit,FUNCTION," * num_reg_re : %d" ,execute_operation->_num_reg_re ); 140 150 141 151 #ifdef DEBUG_TEST … … 156 166 // ooo_engine_id,_param->_size_ooo_engine_id); 157 167 158 (*(_param->_get_custom_information()._get_custom_execute_genMoore(operation))) ( _execute_operation_in, execute_register, _execute_param);168 (*(_param->_get_custom_information()._get_custom_execute_genMoore(operation))) (execute_operation, execute_register, _execute_param); 159 169 } 160 170 else 161 (*(_function_execute[type][operation])) ( _execute_operation_in, execute_register, _execute_param);171 (*(_function_execute[type][operation])) (execute_operation, execute_register, _execute_param); 162 172 163 173 164 174 log_printf(TRACE,Functionnal_unit,FUNCTION," -----------------"); 165 log_printf(TRACE,Functionnal_unit,FUNCTION," * latence : %.8x", _execute_operation_in->_timing._latence);166 log_printf(TRACE,Functionnal_unit,FUNCTION," * delay : %.8x", _execute_operation_in->_timing._delay);167 log_printf(TRACE,Functionnal_unit,FUNCTION," * data_rd : %.8x", _execute_operation_in->_data_rd );168 log_printf(TRACE,Functionnal_unit,FUNCTION," * data_re : %.8x", _execute_operation_in->_data_re );169 log_printf(TRACE,Functionnal_unit,FUNCTION," * exception : %d" , _execute_operation_in->_exception );170 log_printf(TRACE,Functionnal_unit,FUNCTION," * no_sequence : %d" , _execute_operation_in->_no_sequence);171 log_printf(TRACE,Functionnal_unit,FUNCTION," * address : %.8x (%.8x)", _execute_operation_in->_address,_execute_operation_in->_address<<2);175 log_printf(TRACE,Functionnal_unit,FUNCTION," * latence : %.8x",execute_operation->_timing._latence); 176 log_printf(TRACE,Functionnal_unit,FUNCTION," * delay : %.8x",execute_operation->_timing._delay); 177 log_printf(TRACE,Functionnal_unit,FUNCTION," * data_rd : %.8x",execute_operation->_data_rd ); 178 log_printf(TRACE,Functionnal_unit,FUNCTION," * data_re : %.8x",execute_operation->_data_re ); 179 log_printf(TRACE,Functionnal_unit,FUNCTION," * exception : %d" ,execute_operation->_exception ); 180 log_printf(TRACE,Functionnal_unit,FUNCTION," * no_sequence : %d" ,execute_operation->_no_sequence); 181 log_printf(TRACE,Functionnal_unit,FUNCTION," * address : %.8x (%.8x)",execute_operation->_address,execute_operation->_address<<2); 172 182 173 183 #ifdef STATISTICS … … 175 185 { 176 186 (*_stat_use_functionnal_unit) ++; 177 (*_stat_sum_delay) += _execute_operation_in->_timing._delay;178 (*_stat_sum_latence) += _execute_operation_in->_timing._latence;187 (*_stat_sum_delay) += execute_operation->_timing._delay; 188 (*_stat_sum_latence) += execute_operation->_timing._latence; 179 189 } 180 190 #endif … … 213 223 if (reg_BUSY_OUT and (_execute_operation_out->_timing._latence > 0)) 214 224 _execute_operation_out->_timing._latence --; 225 226 #if defined(DEBUG) and DEBUG_Functionnal_unit and (DEBUG >= DEBUG_TRACE) 227 { 228 log_printf(TRACE,Functionnal_unit,FUNCTION," * Dump ALU (Functionnal_unit)"); 229 230 if (_param->_have_pipeline_in) 231 log_printf(TRACE,Functionnal_unit,FUNCTION," * reg_BUSY_IN : %d",reg_BUSY_IN ); 232 log_printf(TRACE,Functionnal_unit,FUNCTION," * reg_BUSY_OUT : %d",reg_BUSY_OUT); 233 } 234 #endif 215 235 } 216 236
Note: See TracChangeset
for help on using the changeset viewer.