Changeset 118 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src
- Timestamp:
- May 21, 2009, 12:01:32 AM (15 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src
- Files:
-
- 5 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_allocation.cpp
r112 r118 104 104 if (usage_is_set(_usage,USE_SYSTEMC)) 105 105 { 106 if (_param->_have_pipeline_in) 106 107 _execute_operation_in = new execute_operation_t; 107 108 _execute_operation_out = new execute_operation_t; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_deallocation.cpp
r115 r118 77 77 DELETE3(_execute_register,_param->_nb_context,_param->_nb_front_end,_param->_nb_ooo_engine); 78 78 DELETE0(_execute_param); 79 if (_param->_have_pipeline_in) 79 80 DELETE0(_execute_operation_in); 80 81 DELETE0(_execute_operation_out); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Functionnal_unit_genMealy.cpp
r117 r118 29 29 { 30 30 { 31 // Can out if : have an instruction and is finish (latence == 0) 31 32 internal_EXECUTE_OUT_VAL = (reg_BUSY_OUT and (_execute_operation_out->_timing._latence == 0)); 32 33 33 PORT_WRITE(out_EXECUTE_OUT_VAL 34 PORT_WRITE(out_EXECUTE_OUT_VAL, internal_EXECUTE_OUT_VAL); 34 35 } 35 36 36 37 { 38 // Can accept an instruction if : 39 // * pipeline in is not busy (not previous instruction) 40 // * pipeline in is busy ( previous instruction) and the instruction go to pipeline out 41 if (_param->_have_pipeline_in) 42 { 37 43 internal_EXECUTE_IN_ACK = (not reg_BUSY_IN or 38 44 (reg_BUSY_IN and (not reg_BUSY_OUT or 39 45 (internal_EXECUTE_OUT_VAL and PORT_READ(in_EXECUTE_OUT_ACK))))); 40 41 PORT_WRITE(out_EXECUTE_IN_ACK , internal_EXECUTE_IN_ACK); 46 } 47 else 48 { 49 internal_EXECUTE_IN_ACK = (not reg_BUSY_OUT or 50 (internal_EXECUTE_OUT_VAL and PORT_READ(in_EXECUTE_OUT_ACK))); 51 } 52 53 PORT_WRITE(out_EXECUTE_IN_ACK , internal_EXECUTE_IN_ACK); 42 54 } 43 55 } -
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 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/src/Parameters.cpp
r116 r118 33 33 morpheo::behavioural::custom::custom_information_t (*get_custom_information) (void), 34 34 bool is_toplevel): 35 _functionnal_unit_scheme (FUNCTIONNAL_UNIT_SCHEME_GLOBAL_REGISTERFILE) 35 _functionnal_unit_scheme (FUNCTIONNAL_UNIT_SCHEME_GLOBAL_REGISTERFILE), 36 _have_pipeline_in (false) 36 37 { 37 38 log_printf(FUNC,Functionnal_unit,FUNCTION,"Begin");
Note: See TracChangeset
for help on using the changeset viewer.