Changeset 120 for trunk/IPs/systemC/processor/Morpheo/Behavioural
- Timestamp:
- May 26, 2009, 9:01:47 PM (15 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural
- Files:
-
- 37 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Configuration/SelfTest/src/test.cpp
r108 r120 36 36 cout << "------------------------------------------------------" << endl; 37 37 38 Instance * instance1 = new Instance ("../../../Files/Instance_ min.cfg",38 Instance * instance1 = new Instance ("../../../Files/Instance_x1_w1_0.cfg", 39 39 generator1, 40 40 _get_custom_information … … 49 49 Configuration * configuration1 = new Configuration("../../../Files/Morpheo.sim", 50 50 "../../../Files/Morpheo.gen", 51 "../../../Files/Instance_ min.cfg",51 "../../../Files/Instance_x1_w1_0.cfg", 52 52 _get_custom_information); 53 53 … … 59 59 cout << "------------------------------------------------------" << endl; 60 60 61 Instance * instance = new Instance ("../../../Files/Instance_ debug.cfg",61 Instance * instance = new Instance ("../../../Files/Instance_x2_w1_6.cfg", 62 62 generator1, 63 63 _get_custom_information -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Configuration/src/Configuration.cpp
r114 r120 46 46 fromString<uint32_t> (_simulator->getParam("debug_idle_time"))); 47 47 48 log_init(fromString<bool>(_simulator->getParam("debug_have_log_file")), 48 log_init(fromString<bool>(_simulator->getParam("debug_log_file_generate")), 49 fromString<bool>(_simulator->getParam("debug_log_file_with_pid")), 49 50 MORPHEO_LOG); 50 51 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/include/Core_Glue.h
r118 r120 209 209 210 210 // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 211 private : uint32_t reg_PRIORITY ;212 211 213 212 // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/include/Parameters.h
r117 r120 62 62 63 63 public : uint32_t ** _translate_num_execute_loop_to_ooo_engine_execute_loop_id;//[nb_execute_loop][execute_loop_nb_ooo_engine] 64 public : Tcontext_t ** _translate_num_ooo_engine_to_execute_loop_ooo_engine_id ;//[nb_ooo_engine][nb_execute_loop] 64 65 65 66 public : uint32_t ** _execute_loop_nb_inst_insert ;//[nb_execute_loop][execute_loop_nb_ooo_engine] -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue.cpp
r117 r120 77 77 for (uint32_t i=0; i<_param->_nb_front_end; ++i) 78 78 for (uint32_t j=0; j<_param->_nb_inst_decod [i]; ++j) 79 PORT_WRITE(out_RENAME_FRONT_END_ID [i][j],_param->_translate_num_front_end_to_ooo_engine_front_end_id[i]); 80 79 { 80 PORT_WRITE(out_RENAME_FRONT_END_ID [i][j],_param->_translate_num_front_end_to_ooo_engine_front_end_id[i]); 81 } 82 81 83 log_printf(INFO,Core_Glue,FUNCTION,_("<%s> : Method - transition"),_name.c_str()); 82 84 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_allocation.cpp
r117 r120 259 259 _priority_ooo_engine = new generic::priority::Priority (_name+"_priority_ooo_engine", 260 260 _param->_dispatch_priority , 261 261 // _param->_dispatch_load_balancing, 262 262 _param->_nb_ooo_engine , 263 263 // _param->_nb_inst_issue_slot , 264 264 _param->_nb_ooo_engine 265 265 ); 266 266 267 // _priority_ooo_engine = new generic::priority::Priority * [_param->_nb_execute_loop];268 267 _priority_read_unit = new generic::priority::Priority * [_param->_nb_execute_loop]; 269 270 268 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 271 {272 // _priority_ooo_engine [i] = new generic::priority::Priority (_name+"_priority_ooo_engine_"+toString(i),273 // _param->_dispatch_priority ,274 // _param->_dispatch_load_balancing,275 // _param->_execute_loop_nb_ooo_engine [i],276 // _param->_execute_loop_nb_inst_issue_slot [i],277 // _param->_execute_loop_nb_ooo_engine [i]278 // );279 280 269 _priority_read_unit [i] = new generic::priority::Priority (_name+"_priority_read_unit_"+toString(i), 281 270 // PRIORITY_STATIC, … … 284 273 _param->_nb_read_unit [i] 285 274 ); 286 }287 288 289 275 290 276 #ifdef POSITION -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_deallocation.cpp
r117 r120 159 159 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 160 160 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 161 { 162 // delete _priority_ooo_engine [i]; 163 delete _priority_read_unit [i]; 164 } 165 // delete [] _priority_ooo_engine; 161 delete _priority_read_unit [i]; 166 162 delete [] _priority_read_unit ; 167 163 delete _priority_ooo_engine; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_genMealy_issue.cpp
r118 r120 119 119 // } 120 120 121 for (uint32_t num_ooo_engine=0; num_ooo_engine<_param->_nb_ooo_engine; ++num_ooo_engine) 122 for (uint32_t num_inst_issue_queue=0; num_inst_issue_queue<_param->_nb_inst_issue_queue[num_ooo_engine]; ++num_inst_issue_queue) 123 { 124 bool find = false; 125 126 Tcontrol_t val = PORT_READ(in_ISSUE_OOO_ENGINE_VAL [num_ooo_engine][num_inst_issue_queue]); 127 Ttype_t type = PORT_READ(in_ISSUE_OOO_ENGINE_TYPE [num_ooo_engine][num_inst_issue_queue]); 128 129 log_printf(TRACE,Core_Glue,FUNCTION," * num_ooo_engine : %d",num_ooo_engine ); 130 log_printf(TRACE,Core_Glue,FUNCTION," * num_inst_issue_queue : %d",num_inst_issue_queue); 131 log_printf(TRACE,Core_Glue,FUNCTION," * val : %d",val); 132 log_printf(TRACE,Core_Glue,FUNCTION," * type : %d",type); 133 134 if (val) 135 for (uint32_t num_inst_issue_slot=0; num_inst_issue_slot<_param->_nb_inst_issue_slot[num_ooo_engine]; ++num_inst_issue_slot) 121 // for (uint32_t num_ooo_engine=0; num_ooo_engine<_param->_nb_ooo_engine; ++num_ooo_engine) 122 123 std::list<generic::priority::select_t> * select_ooo_engine = _priority_ooo_engine->select(); 124 for (std::list<generic::priority::select_t>::iterator it_ooo_engine=select_ooo_engine->begin(); 125 it_ooo_engine!=select_ooo_engine->end(); 126 ++it_ooo_engine) 127 { 128 uint32_t num_ooo_engine = it_ooo_engine->grp; 129 130 for (uint32_t num_inst_issue_queue=0; num_inst_issue_queue<_param->_nb_inst_issue_queue[num_ooo_engine]; ++num_inst_issue_queue) 131 { 132 bool find = false; 133 134 Tcontrol_t val = PORT_READ(in_ISSUE_OOO_ENGINE_VAL [num_ooo_engine][num_inst_issue_queue]); 135 Ttype_t type = PORT_READ(in_ISSUE_OOO_ENGINE_TYPE [num_ooo_engine][num_inst_issue_queue]); 136 137 log_printf(TRACE,Core_Glue,FUNCTION," * num_ooo_engine : %d",num_ooo_engine ); 138 log_printf(TRACE,Core_Glue,FUNCTION," * num_inst_issue_queue : %d",num_inst_issue_queue); 139 log_printf(TRACE,Core_Glue,FUNCTION," * val : %d",val); 140 log_printf(TRACE,Core_Glue,FUNCTION," * type : %d",type); 141 142 if (val) 143 for (uint32_t num_inst_issue_slot=0; num_inst_issue_slot<_param->_nb_inst_issue_slot[num_ooo_engine]; ++num_inst_issue_slot) 144 { 145 log_printf(TRACE,Core_Glue,FUNCTION," * num_inst_issue_slot : %d",num_inst_issue_slot); 146 147 // scan all read_unit 148 149 if (SLOT_ENABLE [num_ooo_engine][num_inst_issue_slot]) 150 for (uint32_t num_execute_loop=0; num_execute_loop<_param->_nb_execute_loop; ++num_execute_loop) 151 { 152 std::list<generic::priority::select_t> * select_read_unit = _priority_read_unit[num_execute_loop]->select(); 153 for (std::list<generic::priority::select_t>::iterator it_read_unit=select_read_unit->begin(); 154 it_read_unit!=select_read_unit->end(); 155 ++it_read_unit) 156 { 157 // get the most priotary ... 158 uint32_t num_read_unit = it_read_unit->grp; 159 Tcontrol_t ack = READ_UNIT_ENABLE [num_execute_loop][num_read_unit]; 160 161 log_printf(TRACE,Core_Glue,FUNCTION," * num_execute_loop : %d",num_execute_loop); 162 log_printf(TRACE,Core_Glue,FUNCTION," * num_read_unit : %d",num_read_unit ); 163 log_printf(TRACE,Core_Glue,FUNCTION," * read_unit_enable : %d",ack ); 164 165 // test if : 166 // * read_unit can accept an instruction (valid and no previous instruction) 167 // * slot can issue an instruction at this read_unit 168 // * read_unit can accept this type 169 if (ack and 170 _param->_table_dispatch [num_ooo_engine][num_inst_issue_slot][num_execute_loop][num_read_unit] and 171 _param->_table_issue_type [num_execute_loop][num_read_unit][type]) 172 { 173 log_printf(TRACE,Core_Glue,FUNCTION," * find !!!"); 174 175 // find ! 176 // Transaction 177 READ_UNIT_ENABLE [num_execute_loop][num_read_unit] = false; // now, this read_unit is busy 178 ISSUE_EXECUTE_LOOP_VAL [num_execute_loop][num_read_unit] = 1; // = val 179 ISSUE_OOO_ENGINE_ACK [num_ooo_engine][num_inst_issue_queue] = 1; // = ack 180 SLOT_ENABLE [num_ooo_engine][num_inst_issue_slot] = false; // now this slot is used 181 182 if (_param->_have_port_context_id) 183 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_CONTEXT_ID [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_CONTEXT_ID [num_ooo_engine][num_inst_issue_queue])); 184 if (_param->_have_port_front_end_id) 185 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_FRONT_END_ID [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_FRONT_END_ID [num_ooo_engine][num_inst_issue_queue])); 186 if (_param->_have_port_ooo_engine_id) 187 { 188 Tcontext_t ooo_engine_id = _param->_translate_num_ooo_engine_to_execute_loop_ooo_engine_id [num_ooo_engine][num_execute_loop]; 189 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID [num_execute_loop][num_read_unit],ooo_engine_id); 190 } 191 if (_param->_have_port_rob_ptr) 192 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_PACKET_ID [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_PACKET_ID [num_ooo_engine][num_inst_issue_queue])); 193 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OPERATION [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_OPERATION [num_ooo_engine][num_inst_issue_queue])); 194 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_TYPE [num_execute_loop][num_read_unit],type); 195 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_WRITE [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE [num_ooo_engine][num_inst_issue_queue])); 196 if (_param->_have_port_load_queue_ptr) 197 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_LOAD_QUEUE_PTR_WRITE [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE [num_ooo_engine][num_inst_issue_queue])); 198 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_HAS_IMMEDIAT [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT [num_ooo_engine][num_inst_issue_queue])); 199 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_IMMEDIAT [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_IMMEDIAT [num_ooo_engine][num_inst_issue_queue])); 200 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RA [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RA [num_ooo_engine][num_inst_issue_queue])); 201 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RA [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RA [num_ooo_engine][num_inst_issue_queue])); 202 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RB [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RB [num_ooo_engine][num_inst_issue_queue])); 203 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RB [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RB [num_ooo_engine][num_inst_issue_queue])); 204 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RC [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RC [num_ooo_engine][num_inst_issue_queue])); 205 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RC [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RC [num_ooo_engine][num_inst_issue_queue])); 206 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RD [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RD [num_ooo_engine][num_inst_issue_queue])); 207 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RD [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RD [num_ooo_engine][num_inst_issue_queue])); 208 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RE [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RE [num_ooo_engine][num_inst_issue_queue])); 209 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RE [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RE [num_ooo_engine][num_inst_issue_queue])); 210 211 212 find = true; 213 break; 214 } 215 //if (find) 216 // break; 217 } 218 if (find) 219 break; 220 } 221 if (find) 222 break; 223 } 224 225 if (_param->_issue_queue_in_order [num_ooo_engine] and 226 not find and 227 (num_inst_issue_queue >= _param->_nb_inst_reexecute [num_ooo_engine])) 136 228 { 137 log_printf(TRACE,Core_Glue,FUNCTION," * num_inst_issue_slot : %d",num_inst_issue_slot);229 log_printf(TRACE,Core_Glue,FUNCTION," * stop scan !!!"); 138 230 139 // scan all read_unit 140 141 if (SLOT_ENABLE [num_ooo_engine][num_inst_issue_slot]) 142 for (uint32_t num_execute_loop=0; num_execute_loop<_param->_nb_execute_loop; ++num_execute_loop) 143 { 144 for (uint32_t _num_read_unit=0; _num_read_unit<_param->_nb_read_unit[num_execute_loop]; ++_num_read_unit) 145 { 146 uint32_t num_read_unit = (_num_read_unit+reg_PRIORITY)%_param->_nb_read_unit[num_execute_loop]; 147 Tcontrol_t ack = READ_UNIT_ENABLE [num_execute_loop][num_read_unit]; 148 149 log_printf(TRACE,Core_Glue,FUNCTION," * num_execute_loop : %d",num_execute_loop); 150 log_printf(TRACE,Core_Glue,FUNCTION," * num_read_unit : %d",num_read_unit ); 151 log_printf(TRACE,Core_Glue,FUNCTION," * read_unit_enable : %d",ack ); 152 153 // test if : 154 // * read_unit can accept an instruction (valid and no previous instruction) 155 // * slot can issue an instruction at this read_unit 156 // * read_unit can accept this type 157 if (ack and 158 _param->_table_dispatch [num_ooo_engine][num_inst_issue_slot][num_execute_loop][num_read_unit] and 159 _param->_table_issue_type [num_execute_loop][num_read_unit][type]) 160 { 161 log_printf(TRACE,Core_Glue,FUNCTION," * find !!!"); 162 163 // find ! 164 // Transaction 165 READ_UNIT_ENABLE [num_execute_loop][num_read_unit] = false; // now, this read_unit is busy 166 ISSUE_EXECUTE_LOOP_VAL [num_execute_loop][num_read_unit] = 1; // = val 167 ISSUE_OOO_ENGINE_ACK [num_ooo_engine][num_inst_issue_queue] = 1; // = ack 168 SLOT_ENABLE [num_ooo_engine][num_inst_issue_slot] = false; // now this slot is used 169 170 if (_param->_have_port_context_id) 171 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_CONTEXT_ID [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_CONTEXT_ID [num_ooo_engine][num_inst_issue_queue])); 172 if (_param->_have_port_front_end_id) 173 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_FRONT_END_ID [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_FRONT_END_ID [num_ooo_engine][num_inst_issue_queue])); 174 if (_param->_have_port_ooo_engine_id) 175 { 176 Tcontext_t ooo_engine_id = 0; 177 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID [num_execute_loop][num_read_unit],ooo_engine_id); 178 } 179 if (_param->_have_port_rob_ptr) 180 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_PACKET_ID [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_PACKET_ID [num_ooo_engine][num_inst_issue_queue])); 181 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OPERATION [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_OPERATION [num_ooo_engine][num_inst_issue_queue])); 182 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_TYPE [num_execute_loop][num_read_unit],type); 183 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_WRITE [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE [num_ooo_engine][num_inst_issue_queue])); 184 if (_param->_have_port_load_queue_ptr) 185 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_LOAD_QUEUE_PTR_WRITE [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE [num_ooo_engine][num_inst_issue_queue])); 186 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_HAS_IMMEDIAT [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT [num_ooo_engine][num_inst_issue_queue])); 187 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_IMMEDIAT [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_IMMEDIAT [num_ooo_engine][num_inst_issue_queue])); 188 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RA [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RA [num_ooo_engine][num_inst_issue_queue])); 189 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RA [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RA [num_ooo_engine][num_inst_issue_queue])); 190 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RB [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RB [num_ooo_engine][num_inst_issue_queue])); 191 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RB [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RB [num_ooo_engine][num_inst_issue_queue])); 192 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RC [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RC [num_ooo_engine][num_inst_issue_queue])); 193 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RC [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RC [num_ooo_engine][num_inst_issue_queue])); 194 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RD [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RD [num_ooo_engine][num_inst_issue_queue])); 195 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RD [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RD [num_ooo_engine][num_inst_issue_queue])); 196 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RE [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RE [num_ooo_engine][num_inst_issue_queue])); 197 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RE [num_execute_loop][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RE [num_ooo_engine][num_inst_issue_queue])); 198 199 200 find = true; 201 break; 202 } 203 //if (find) 204 // break; 205 } 206 if (find) 207 break; 208 } 209 if (find) 210 break; 231 break; // stop scan 211 232 } 212 213 if (_param->_issue_queue_in_order [num_ooo_engine] and 214 not find and 215 (num_inst_issue_queue >= _param->_nb_inst_reexecute [num_ooo_engine])) 216 { 217 log_printf(TRACE,Core_Glue,FUNCTION," * stop scan !!!"); 218 219 break; // stop scan 220 } 221 } 233 } 234 } 222 235 223 236 // Write output -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_transition.cpp
r118 r120 24 24 { 25 25 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 26 { 27 // _priority_ooo_engine [i]->reset(); 28 _priority_read_unit [i]->reset(); 29 } 26 _priority_read_unit [i]->reset(); 30 27 _priority_ooo_engine->reset(); 31 32 reg_PRIORITY = 0;33 28 } 34 29 else … … 36 31 // next priority 37 32 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 38 { 39 // _priority_ooo_engine [i]->transition(); 40 _priority_read_unit [i]->transition(); 41 } 33 _priority_read_unit [i]->transition(); 42 34 _priority_ooo_engine->transition(); 43 44 reg_PRIORITY ++;45 35 } 46 36 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Parameters.cpp
r117 r120 95 95 } 96 96 97 ALLOC2(_translate_num_execute_loop_to_ooo_engine_execute_loop_id, uint32_t, _nb_execute_loop,_execute_loop_nb_ooo_engine[it1]); 97 ALLOC2(_translate_num_execute_loop_to_ooo_engine_execute_loop_id,uint32_t ,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]); 98 ALLOC2(_translate_num_ooo_engine_to_execute_loop_ooo_engine_id ,Tcontext_t,_nb_ooo_engine,_nb_execute_loop); 99 100 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 101 for (uint32_t j=0; j<_nb_execute_loop; ++j) 102 _translate_num_ooo_engine_to_execute_loop_ooo_engine_id [i][j] = _nb_ooo_engine; 103 98 104 for (uint32_t i=0; i<_nb_execute_loop; ++i) 99 105 for (uint32_t j=0; j<_execute_loop_nb_ooo_engine[i]; ++j) 100 106 { 101 107 uint32_t num_ooo_engine = _translate_execute_loop_num_ooo_engine [i][j]; 108 109 _translate_num_ooo_engine_to_execute_loop_ooo_engine_id [num_ooo_engine][i] = j; 110 102 111 uint32_t execute_loop_id; 103 112 for (execute_loop_id = 0; execute_loop_id<_ooo_engine_nb_execute_loop[num_ooo_engine]; ++execute_loop_id) … … 179 188 log_begin(Core_Glue,FUNCTION); 180 189 181 DELETE2(_execute_loop_nb_inst_issue_slot,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]); 182 DELETE2(_execute_loop_nb_inst_insert,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]); 183 DELETE2(_translate_num_execute_loop_to_ooo_engine_execute_loop_id, _nb_execute_loop,_execute_loop_nb_ooo_engine[it1]); 184 DELETE1(_translate_num_front_end_to_ooo_engine_front_end_id,_nb_front_end); 185 DELETE1(_link_ooo_engine_with_front_end,_nb_front_end); 190 DELETE2(_execute_loop_nb_inst_issue_slot ,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]); 191 DELETE2(_execute_loop_nb_inst_insert ,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]); 192 DELETE2(_translate_num_ooo_engine_to_execute_loop_ooo_engine_id ,_nb_ooo_engine,_nb_execute_loop); 193 DELETE2(_translate_num_execute_loop_to_ooo_engine_execute_loop_id,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]); 194 DELETE1(_translate_num_front_end_to_ooo_engine_front_end_id ,_nb_front_end); 195 DELETE1(_link_ooo_engine_with_front_end ,_nb_front_end); 186 196 187 197 log_end(Core_Glue,FUNCTION); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Parameters_msg_error.cpp
r88 r120 57 57 test.error(toString(_("ooo_engine[%d][%d].nb_inst_execute must be equal at execute_loop[%d].nb_write_unit.\n"),num_ooo_engine,k,i)); 58 58 } 59 60 if (_dispatch_load_balancing != LOAD_BALANCING_MAXIMUM_FOR_PRIORITY) 61 test.error(toString(_("distpatch load_balancing scheme \"%s\" is not yet supported.\n"),toString(_dispatch_load_balancing).c_str())); 62 59 63 log_end(Core_Glue,FUNCTION); 60 64 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/include/Parameters.h
r88 r120 40 40 public : bool *** _table_routing ; //[nb_execute_unit][nb_execute_unit_port][nb_write_unit] 41 41 public : bool ** _table_thread ; //[nb_write_unit][nb_thread] 42 public : bool * _num_thread_valid ; //[nb_thread] 42 43 43 44 public : uint32_t _max_nb_execute_unit_port ; … … 71 72 bool *** table_routing , 72 73 bool ** table_thread , 74 bool * num_thread_valid , //[nb_thread] 73 75 bool is_toplevel=false 74 76 ); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/src/Parameters.cpp
r97 r120 33 33 bool *** table_routing ,//[nb_execute_unit][nb_execute_unit_port][nb_write_unit] 34 34 bool ** table_thread ,//[nb_write_unit][nb_thread] 35 bool * num_thread_valid ,//[nb_thread] 35 36 bool is_toplevel ) 36 37 { … … 49 50 _table_routing = table_routing ; 50 51 _table_thread = table_thread ; 52 _num_thread_valid = num_thread_valid ; 51 53 52 54 _max_nb_execute_unit_port= max<uint32_t>(_nb_execute_unit_port, _nb_execute_unit); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/include/Parameters.h
r88 r120 44 44 public : bool ** _table_execute_type ; //[nb_execute_unit][nb_type] 45 45 public : bool ** _table_execute_thread ; //[nb_execute_unit][nb_thread] 46 public : bool * _num_thread_valid ; //[nb_thread] 46 47 47 48 public : uint32_t _max_nb_read_unit_port ; … … 83 84 bool ** table_execute_type , 84 85 bool ** table_execute_thread , 86 bool * num_thread_valid , 85 87 bool is_toplevel=false ); 86 88 // public : Parameters (Parameters & param) ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Parameters.cpp
r109 r120 38 38 bool ** table_execute_type , 39 39 bool ** table_execute_thread , 40 bool * num_thread_valid , 40 41 bool is_toplevel ) 41 42 { … … 56 57 _table_execute_type = table_execute_type ; 57 58 _table_execute_thread = table_execute_thread; 59 _num_thread_valid = num_thread_valid ; 58 60 59 61 log_printf(TRACE,Read_unit_to_Execution_unit,FUNCTION," * table_routing [nb_read_unit][nb_execute_unit][nb_execute_unit_port]"); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/src/Parameters_msg_error.cpp
r109 r120 41 41 // TYPE_BRANCH | X | | | 42 42 // TYPE_MEMORY | | | X | 43 44 43 bool type_present [_nb_thread][_nb_type]; 45 44 for (uint32_t i=0; i<_nb_thread; i++) … … 49 48 for (uint32_t i=0; i<_nb_execute_unit; i++) 50 49 for (uint32_t j=0; j<_nb_thread; j++) 51 if (_table_execute_thread [i][j] == true) 50 if (_num_thread_valid [j] and 51 (_table_execute_thread [i][j] == true)) 52 52 // this execute_unit execute this thread ! 53 53 for (Ttype_t k=0; k<_nb_type; k++) … … 66 66 if (not is_type_valid(j)) 67 67 for (uint32_t i=0; i<_nb_thread; i++) 68 if (type_present [i][j]) 68 if (_num_thread_valid [j] and 69 (type_present [i][j])) 69 70 test.error(toString(_("The thread '%d' can execute the type's operation '%s' but this type is invalid.\n"),i,toString(j).c_str())); 70 71 … … 72 73 if (is_type_valid(j) and not is_type_optionnal(j)) 73 74 for (uint32_t i=0; i<_nb_thread; i++) 74 if (not type_present [i][j]) 75 if (_num_thread_valid [i] and 76 (not type_present [i][j])) 75 77 test.error(toString(_("The thread '%d' can't access at the execute_unit to execute the type's operation '%s' (and this type is not optional !).\n"),i,toString(j).c_str())); 76 78 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/include/Parameters.h
r115 r120 103 103 public : uint32_t * _translate_num_execute_unit ; //[nb_execute_unit] 104 104 105 public : bool * _num_thread_valid ; //[nb_thread] 106 105 107 public : uint32_t _nb_execute_unit ; 106 108 public : uint32_t * _nb_execute_unit_port ; … … 198 200 uint32_t * translate_num_execute_unit ,//[nb_execute_unit] 199 201 202 bool * num_thread_valid ,//[nb_thread] 203 200 204 bool is_toplevel=false 201 205 ); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/src/Parameters.cpp
r117 r120 73 73 bool * is_load_store_unit ,//[nb_execute_unit] 74 74 uint32_t * translate_num_execute_unit ,//[nb_execute_unit] 75 76 bool * num_thread_valid ,//[nb_thread] 75 77 76 78 bool is_toplevel … … 133 135 _translate_num_execute_unit = translate_num_execute_unit; 134 136 137 _num_thread_valid = num_thread_valid; 138 135 139 _nb_execute_unit = _nb_functionnal_unit + _nb_load_store_unit; 136 140 … … 481 485 _read_unit_to_execution_unit_table_routing , 482 486 _read_unit_to_execution_unit_table_execute_type, 483 _read_unit_to_execution_unit_table_thread ); 487 _read_unit_to_execution_unit_table_thread , 488 _num_thread_valid); 484 489 485 490 log_printf(TRACE,Execute_loop,FUNCTION,"Parameters : execution_unit_to_write_unit"); … … 499 504 _execution_unit_to_write_unit_priority , 500 505 _execution_unit_to_write_unit_table_routing, 501 _execution_unit_to_write_unit_table_thread ); 506 _execution_unit_to_write_unit_table_thread , 507 _num_thread_valid); 502 508 503 509 log_printf(TRACE,Execute_loop,FUNCTION,"Parameters : register_unit"); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h
r119 r120 52 52 #ifdef STATISTICS 53 53 public : Stat * _stat; 54 private : counter_t ** _stat_nb_cycle_state_ok ; //[nb_context] 55 private : counter_t ** _stat_nb_cycle_state_ko_excep ; //[nb_context] 56 private : counter_t ** _stat_nb_cycle_state_ko_miss_branch ; //[nb_context] 57 private : counter_t ** _stat_nb_cycle_state_ko_miss_load ; //[nb_context] 58 private : counter_t ** _stat_nb_cycle_state_ko_miss_load_and_branch; //[nb_context] 59 private : counter_t ** _stat_nb_cycle_state_ko_msync ; //[nb_context] 60 private : counter_t ** _stat_nb_cycle_state_ko_psync ; //[nb_context] 61 private : counter_t ** _stat_nb_cycle_state_ko_csync ; //[nb_context] 62 private : counter_t ** _stat_nb_cycle_state_ko_spr ; //[nb_context] 54 63 #endif 55 64 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Types.h
r119 r120 29 29 CONTEXT_STATE_KO_EXCEP_ADDR , // update address manager 30 30 CONTEXT_STATE_KO_EXCEP_SPR , // update spr (epc, esr, sr[DSX]) 31 // CONTEXT_STATE_KO_MISS_BRANCH_FAST_ADDR , // update address manager32 // CONTEXT_STATE_KO_MISS_BRANCH_FAST_WAIT_UPDATE , // branch is complete, wait update by update_prediction_table33 31 CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE , // branch is complete, wait update by update_prediction_table 34 32 CONTEXT_STATE_KO_MISS_BRANCH_ADDR , // update address manager … … 68 66 case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_EXCEP_ADDR : return "context_state_ko_excep_addr" ; break; 69 67 case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_EXCEP_SPR : return "context_state_ko_excep_spr" ; break; 70 // case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_FAST_WAIT_UPDATE : return "context_state_ko_miss_branch_fast_wait_update" ; break;71 // case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_FAST_ADDR : return "context_state_ko_miss_branch_fast_addr" ; break;72 68 case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE : return "context_state_ko_miss_branch_wait_update" ; break; 73 69 case morpheo::behavioural::core::multi_front_end::front_end::context_state::CONTEXT_STATE_KO_MISS_BRANCH_ADDR : return "context_state_ko_miss_branch_addr" ; break; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_statistics_allocation.cpp
r83 r120 8 8 9 9 #include "Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h" 10 #include "Behavioural/include/Allocation.h" 10 11 11 12 namespace morpheo { … … 26 27 "Context_State", 27 28 param_statistics); 28 29 30 ALLOC1(_stat_nb_cycle_state_ok ,counter_t *,_param->_nb_context); 31 ALLOC1(_stat_nb_cycle_state_ko_excep ,counter_t *,_param->_nb_context); 32 ALLOC1(_stat_nb_cycle_state_ko_miss_branch ,counter_t *,_param->_nb_context); 33 ALLOC1(_stat_nb_cycle_state_ko_miss_load ,counter_t *,_param->_nb_context); 34 ALLOC1(_stat_nb_cycle_state_ko_miss_load_and_branch,counter_t *,_param->_nb_context); 35 ALLOC1(_stat_nb_cycle_state_ko_msync ,counter_t *,_param->_nb_context); 36 ALLOC1(_stat_nb_cycle_state_ko_psync ,counter_t *,_param->_nb_context); 37 ALLOC1(_stat_nb_cycle_state_ko_csync ,counter_t *,_param->_nb_context); 38 ALLOC1(_stat_nb_cycle_state_ko_spr ,counter_t *,_param->_nb_context); 39 40 for (uint32_t i=0; i<_param->_nb_context; ++i) 41 { 42 _stat_nb_cycle_state_ok [i] = _stat->create_counter("nb_cycle_state_ok_" +toString(i),"",toString(_("Number of cycle in state ok (context %d)"),i)); 43 _stat_nb_cycle_state_ko_excep [i] = _stat->create_counter("nb_cycle_state_ko_excep_" +toString(i),"",toString(_("Number of cycle in state ko_excep (context %d)"),i)); 44 _stat_nb_cycle_state_ko_miss_branch [i] = _stat->create_counter("nb_cycle_state_ko_miss_branch_" +toString(i),"",toString(_("Number of cycle in state ko_miss_branch (context %d)"),i)); 45 _stat_nb_cycle_state_ko_miss_load [i] = _stat->create_counter("nb_cycle_state_ko_miss_load_" +toString(i),"",toString(_("Number of cycle in state ko_miss_load (context %d)"),i)); 46 _stat_nb_cycle_state_ko_miss_load_and_branch [i] = _stat->create_counter("nb_cycle_state_ko_miss_load_and_branch_"+toString(i),"",toString(_("Number of cycle in state ko_miss_load_and_branch (context %d)"),i)); 47 _stat_nb_cycle_state_ko_msync [i] = _stat->create_counter("nb_cycle_state_ko_msync_" +toString(i),"",toString(_("Number of cycle in state ko_msync (context %d)"),i)); 48 _stat_nb_cycle_state_ko_psync [i] = _stat->create_counter("nb_cycle_state_ko_psync_" +toString(i),"",toString(_("Number of cycle in state ko_psync (context %d)"),i)); 49 _stat_nb_cycle_state_ko_csync [i] = _stat->create_counter("nb_cycle_state_ko_csync_" +toString(i),"",toString(_("Number of cycle in state ko_csync (context %d)"),i)); 50 _stat_nb_cycle_state_ko_spr [i] = _stat->create_counter("nb_cycle_state_ko_spr_" +toString(i),"",toString(_("Number of cycle in state ko_spr (context %d)"),i)); 51 52 53 _stat->create_expr_percent("percent_state_ok_" +toString(i),"nb_cycle_state_ok_" +toString(i),"cycle",toString(_("Percent of cycle in state ok (context %d)"),i)); 54 _stat->create_expr_percent("percent_state_ko_excep_" +toString(i),"nb_cycle_state_ko_excep_" +toString(i),"cycle",toString(_("Percent of cycle in state ko_excep (context %d)"),i)); 55 _stat->create_expr_percent("percent_state_ko_miss_branch_" +toString(i),"nb_cycle_state_ko_miss_branch_" +toString(i),"cycle",toString(_("Percent of cycle in state ko_miss_branch (context %d)"),i)); 56 _stat->create_expr_percent("percent_state_ko_miss_load_" +toString(i),"nb_cycle_state_ko_miss_load_" +toString(i),"cycle",toString(_("Percent of cycle in state ko_miss_load (context %d)"),i)); 57 _stat->create_expr_percent("percent_state_ko_miss_load_and_branch_"+toString(i),"nb_cycle_state_ko_miss_load_and_branch_"+toString(i),"cycle",toString(_("Percent of cycle in state ko_miss_load_and_branch (context %d)"),i)); 58 _stat->create_expr_percent("percent_state_ko_msync_" +toString(i),"nb_cycle_state_ko_msync_" +toString(i),"cycle",toString(_("Percent of cycle in state ko_msync (context %d)"),i)); 59 _stat->create_expr_percent("percent_state_ko_psync_" +toString(i),"nb_cycle_state_ko_psync_" +toString(i),"cycle",toString(_("Percent of cycle in state ko_psync (context %d)"),i)); 60 _stat->create_expr_percent("percent_state_ko_csync_" +toString(i),"nb_cycle_state_ko_csync_" +toString(i),"cycle",toString(_("Percent of cycle in state ko_csync (context %d)"),i)); 61 _stat->create_expr_percent("percent_state_ko_spr_" +toString(i),"nb_cycle_state_ko_spr_" +toString(i),"cycle",toString(_("Percent of cycle in state ko_spr (context %d)"),i)); 62 } 63 29 64 log_end(Context_State,FUNCTION); 30 65 }; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_statistics_deallocation.cpp
r83 r120 8 8 9 9 #include "Behavioural/Core/Multi_Front_end/Front_end/Context_State/include/Context_State.h" 10 #include "Behavioural/include/Allocation.h" 10 11 11 12 namespace morpheo { … … 24 25 25 26 log_printf(INFO,Context_State,FUNCTION,_("Generate Statistics file")); 26 27 27 28 delete _stat; 29 30 DELETE1(_stat_nb_cycle_state_ok ,_param->_nb_context); 31 DELETE1(_stat_nb_cycle_state_ko_excep ,_param->_nb_context); 32 DELETE1(_stat_nb_cycle_state_ko_miss_branch ,_param->_nb_context); 33 DELETE1(_stat_nb_cycle_state_ko_miss_load ,_param->_nb_context); 34 DELETE1(_stat_nb_cycle_state_ko_miss_load_and_branch,_param->_nb_context); 35 DELETE1(_stat_nb_cycle_state_ko_msync ,_param->_nb_context); 36 DELETE1(_stat_nb_cycle_state_ko_psync ,_param->_nb_context); 37 DELETE1(_stat_nb_cycle_state_ko_csync ,_param->_nb_context); 38 DELETE1(_stat_nb_cycle_state_ko_spr ,_param->_nb_context); 28 39 29 40 log_end(Context_State,FUNCTION); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Context_State/src/Context_State_transition.cpp
r119 r120 678 678 } 679 679 680 681 #ifdef STATISTICS 682 if (usage_is_set(_usage,USE_STATISTICS)) 683 for (uint32_t i=0; i<_param->_nb_context; ++i) 684 switch(reg_STATE[i]) 685 { 686 case CONTEXT_STATE_OK : (*_stat_nb_cycle_state_ok [i])++; break; 687 688 case CONTEXT_STATE_KO_EXCEP : 689 case CONTEXT_STATE_KO_EXCEP_ADDR : 690 case CONTEXT_STATE_KO_EXCEP_SPR : (*_stat_nb_cycle_state_ko_excep [i])++; break; 691 692 case CONTEXT_STATE_KO_MISS_BRANCH_WAIT_UPDATE : 693 case CONTEXT_STATE_KO_MISS_BRANCH_ADDR : 694 case CONTEXT_STATE_KO_MISS_BRANCH_WAITEND : (*_stat_nb_cycle_state_ko_miss_branch [i])++; break; 695 696 case CONTEXT_STATE_KO_MISS_LOAD_ADDR : 697 case CONTEXT_STATE_KO_MISS_LOAD_WAITEND : (*_stat_nb_cycle_state_ko_miss_load [i])++; break; 698 699 case CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAIT_UPDATE: 700 case CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_ADDR : 701 case CONTEXT_STATE_KO_MISS_LOAD_AND_BRANCH_WAITEND : (*_stat_nb_cycle_state_ko_miss_load_and_branch [i])++; break; 702 703 // case CONTEXT_STATE_KO_MSYNC : 704 // case CONTEXT_STATE_KO_MSYNC_ISSUE : 705 case CONTEXT_STATE_KO_MSYNC_EXEC : (*_stat_nb_cycle_state_ko_msync [i])++; break; 706 707 // case CONTEXT_STATE_KO_PSYNC : 708 case CONTEXT_STATE_KO_PSYNC_FLUSH : 709 case CONTEXT_STATE_KO_PSYNC_ADDR : (*_stat_nb_cycle_state_ko_psync [i])++; break; 710 711 // case CONTEXT_STATE_KO_CSYNC : 712 case CONTEXT_STATE_KO_CSYNC_FLUSH : 713 case CONTEXT_STATE_KO_CSYNC_ADDR : (*_stat_nb_cycle_state_ko_csync [i])++; break; 714 715 // case CONTEXT_STATE_KO_SPR : 716 // case CONTEXT_STATE_KO_SPR_ISSUE : 717 case CONTEXT_STATE_KO_SPR_EXEC : (*_stat_nb_cycle_state_ko_spr [i])++; break; 718 } 719 #endif 720 721 722 680 723 #if DEBUG >= DEBUG_TRACE 681 724 for (uint32_t i=0; i<_param->_nb_context; i++) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Decod_genMealy.cpp
r119 r120 202 202 203 203 // can_continue [x] = false; // one branch per context, the DS don't execute 204 204 can_continue [x]&= PORT_READ(in_PREDICT_CAN_CONTINUE [i]); // one branch per context, the DS don't execute 205 205 have_decod_branch [x] = true; 206 } 206 207 log_printf(TRACE,Decod,FUNCTION," * predict_can_continue : %d",PORT_READ(in_PREDICT_CAN_CONTINUE [i])); 208 } 207 209 208 210 Tevent_type_t event_type = _decod_instruction->_event_type; … … 245 247 246 248 can_continue [x] &= have_transaction; // to have a in order decod !!! if a previous instruction can decod, also next instruction can't decod. 249 250 log_printf(TRACE,Decod,FUNCTION," * have_transaction : %d",have_transaction); 251 247 252 } 248 253 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Parameters.h
r111 r120 34 34 public : uint32_t _size_history ; 35 35 public : uint32_t * _size_ras_index ; // [nb_context] 36 public : const bool _not_accurate_block_predict;37 36 public : uint32_t _nb_thread ; 38 37 public : uint32_t * _translate_num_context_to_num_thread;//[nb_context] 38 public : const bool _accurate_block_predict ; 39 public : const bool _accurate_block_decod ; 39 40 40 41 //public : uint32_t _size_context_id ; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters.cpp
r111 r120 34 34 uint32_t * translate_num_context_to_num_thread ,//[nb_context] 35 35 bool is_toplevel): 36 _not_accurate_block_predict (false) 36 _accurate_block_predict (false), 37 _accurate_block_decod (false) 37 38 { 38 39 log_printf(FUNC,Update_Prediction_Table,FUNCTION,"Begin"); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp
r119 r120 8 8 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h" 9 9 #include "Behavioural/include/Allocation.h" 10 #include "Common/include/Filename.h" 10 11 11 12 namespace morpheo { … … 250 251 if (_param->_have_thread [i]) 251 252 { 252 std::string filename = MORPHEO_LOG+"/"+toString(getpid())+"-Branchement_prediction-thread_"+toString(i)+".log"; 253 std::string filename = morpheo::filename(MORPHEO_LOG, 254 "Branchement_prediction-thread_"+toString(i), 255 "", 256 "log", 257 false, 258 log_with_pid, 259 false); 253 260 254 261 branchement_log_file [i] .open(filename.c_str() ,std::ios::out | std::ios::trunc); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_decod.cpp
r110 r120 33 33 34 34 Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0; 35 bool is_accurate = reg_IS_ACCURATE [context];35 bool is_accurate = _param->_accurate_block_decod or reg_IS_ACCURATE [context]; 36 36 event_state_t event_state = reg_EVENT_STATE [context]; 37 37 uint32_t ptr_write = reg_UPT_TOP [context]; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_predict.cpp
r88 r120 45 45 PORT_WRITE(out_PREDICT_UPDATE_PREDICTION_ID [i], internal_PREDICT_UPDATE_PREDICTION_ID [i]); 46 46 47 bool is_accurate = not _param->_not_accurate_block_predict or reg_IS_ACCURATE[context];47 bool is_accurate = _param->_accurate_block_predict or reg_IS_ACCURATE[context]; 48 48 49 49 // Ack if : … … 52 52 // * is_accurate 53 53 internal_PREDICT_ACK [i] = ((reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._state == UPDATE_FETCH_PREDICTION_STATE_EMPTY) and 54 // PORT_READ(in_PREDICT_BTB_IS_ACCURATE [i]) and55 (reg_EVENT_STATE [context] == EVENT_STATE_OK) and54 (reg_EVENT_STATE [context] == EVENT_STATE_OK) and 55 // (reg_UFPT_NB_UPDATE [context] == 0) and 56 56 is_accurate); 57 57 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp
r119 r120 203 203 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._state = UPDATE_FETCH_PREDICTION_STATE_WAIT_DECOD; 204 204 205 Tbranch_condition_t condition = PORT_READ(in_PREDICT_BTB_CONDITION [i]);206 205 Tbranch_condition_t condition = PORT_READ(in_PREDICT_BTB_CONDITION [i]); 206 bool is_accurate = _param->_accurate_block_predict or PORT_READ(in_PREDICT_BTB_IS_ACCURATE [i]); 207 207 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._condition = condition; 208 208 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._address_src = PORT_READ(in_PREDICT_BTB_ADDRESS_SRC [i]); 209 209 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._address_dest = PORT_READ(in_PREDICT_BTB_ADDRESS_DEST [i]); 210 210 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._last_take = PORT_READ(in_PREDICT_BTB_LAST_TAKE [i]); 211 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._is_accurate = PORT_READ(in_PREDICT_BTB_IS_ACCURATE [i]);211 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._is_accurate = is_accurate; 212 212 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._history = (_param->_have_port_history)?PORT_READ(in_PREDICT_DIR_HISTORY [i]):0; 213 213 reg_UPDATE_FETCH_PREDICTION_TABLE [context][top]._address_ras = PORT_READ(in_PREDICT_RAS_ADDRESS [i]); … … 263 263 // Have a miss !!! 264 264 condition = PORT_READ(in_DECOD_BTB_CONDITION [i]); 265 is_accurate = PORT_READ(in_DECOD_IS_ACCURATE [i]);265 is_accurate = _param->_accurate_block_decod or PORT_READ(in_DECOD_IS_ACCURATE [i]); 266 266 267 267 // if can_continue else don't wait the end of all instruction -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_allocation.cpp
r118 r120 9 9 #include "Behavioural/include/Allocation.h" 10 10 #include "Common/include/Max.h" 11 #include "Common/include/Filename.h" 11 12 12 13 namespace morpheo { … … 342 343 if (_param->_have_thread [i]) 343 344 { 344 std::string filename = MORPHEO_LOG+"/"+toString(getpid())+"-Instruction_flow-thread_"+toString(i)+".log"; 345 std::string filename = morpheo::filename(MORPHEO_LOG, 346 "Instruction_flow-thread_"+toString(i), 347 "", 348 "log", 349 false, 350 log_with_pid, 351 false); 345 352 346 353 instruction_log_file [i] .open(filename.c_str() ,std::ios::out | std::ios::trunc); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/OOO_Engine_Glue/src/OOO_Engine_Glue_genMealy_rename.cpp
r88 r120 24 24 log_function(OOO_Engine_Glue,FUNCTION,_name.c_str()); 25 25 26 for (uint32_t i=0; i<_param->_nb_ rename_unit; ++i)26 for (uint32_t i=0; i<_param->_nb_front_end; ++i) 27 27 for (uint32_t j=0; j<_param->_nb_inst_decod[i]; ++j) 28 // if have not front_end_id port, this function is not use 29 PORT_WRITE(out_RENAME_RENAME_UNIT_FRONT_END_ID [i][j],_param->_translate_front_end_id_to_rename_unit [PORT_READ(in_RENAME_FRONT_END_ID [i][j])]); 30 28 { 29 // if have not front_end_id port, this function is not use 30 PORT_WRITE(out_RENAME_RENAME_UNIT_FRONT_END_ID [i][j],_param->_translate_front_end_id_to_rename_unit [PORT_READ(in_RENAME_FRONT_END_ID [i][j])]); 31 } 32 31 33 log_end(OOO_Engine_Glue,FUNCTION); 32 34 }; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/src/OOO_Engine_allocation.cpp
r117 r120 411 411 uint32_t x = 0; 412 412 for (uint32_t j=0; j<_param->_nb_front_end; j++) 413 if ( i== *it)413 if (j == *it) 414 414 { 415 415 // this front end is link with this rename_unit … … 486 486 if (_param->_have_port_front_end_id) 487 487 COMPONENT_MAP(_component,src , "in_RENAME_IN_"+toString(x)+"_"+toString(k)+ "_FRONT_END_ID" , 488 dest, "in_RENAME_" +toString(j)+"_"+toString(k)+"_RENAME_UNIT_FRONT_END_ID" );488 dest,"out_RENAME_" +toString(j)+"_"+toString(k)+"_RENAME_UNIT_FRONT_END_ID" ); 489 489 } 490 490 … … 658 658 uint32_t x = 0; 659 659 for (uint32_t j=0; j<_param->_nb_front_end; j++) 660 if ( i== (*it))660 if (j == (*it)) 661 661 { 662 662 for (uint32_t k=0; k<_param->_nb_context[i]; k++) … … 685 685 uint32_t x = 0; 686 686 for (uint32_t j=0; j<_param->_nb_front_end; j++) 687 if ( i== *it)687 if (j == *it) 688 688 { 689 689 for (uint32_t k=0; k<_param->_nb_context[j]; k++) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/src/Parameters.cpp
r117 r120 132 132 test(); 133 133 134 log_printf(TRACE,OOO_Engine,FUNCTION," * link_front_end_with_rename_unit"); 134 135 _link_front_end_with_rename_unit = new std::vector<uint32_t> [_nb_rename_unit]; 135 136 for (uint32_t i=0; i<_nb_front_end; i++) 136 _link_front_end_with_rename_unit[_link_rename_unit_with_front_end[i]].push_back(i); 137 137 { 138 uint32_t num_rename_unit = _link_rename_unit_with_front_end[i]; 139 140 log_printf(TRACE,OOO_Engine,FUNCTION," front_end %d is link with rename_unit %d with id %d",i,num_rename_unit,_link_front_end_with_rename_unit[num_rename_unit].size()); 141 142 _link_front_end_with_rename_unit[num_rename_unit].push_back(i); 143 } 138 144 _rename_unit_size_front_end_id = new uint32_t [_nb_rename_unit]; 139 145 _rename_unit_size_context_id = new uint32_t [_nb_rename_unit]; … … 172 178 for (uint32_t i=0; i<_nb_rename_unit; i++) 173 179 { 174 log_printf(TRACE,OOO_Engine,FUNCTION," Rename_unit [%d]",i);175 log_printf(TRACE,OOO_Engine,FUNCTION," * front_end : %d",_rename_unit_nb_front_end[i]);180 log_printf(TRACE,OOO_Engine,FUNCTION," * Rename_unit [%d]",i); 181 log_printf(TRACE,OOO_Engine,FUNCTION," * front_end : %d",_rename_unit_nb_front_end[i]); 176 182 177 183 for (uint32_t j=0; j<_rename_unit_nb_front_end[i]; j++) 178 184 { 179 log_printf(TRACE,OOO_Engine,FUNCTION," * [%d] nb_context : %d, nb_inst_decod : %d",j,_rename_unit_nb_context[i][j],_rename_unit_nb_inst_decod[i][j]);185 log_printf(TRACE,OOO_Engine,FUNCTION," * [%d] nb_context : %d, nb_inst_decod : %d",j,_rename_unit_nb_context[i][j],_rename_unit_nb_inst_decod[i][j]); 180 186 181 187 for (uint32_t k=0; k<_rename_unit_nb_context[i][j]; ++k) 182 log_printf(TRACE,OOO_Engine,FUNCTION," * [%d][%d] link_lsq : %d",j,k,_rename_unit_link_load_store_unit_with_thread[i][j][k]);188 log_printf(TRACE,OOO_Engine,FUNCTION," * [%d][%d] link_lsq : %d",j,k,_rename_unit_link_load_store_unit_with_thread[i][j][k]); 183 189 } 184 190 } … … 203 209 _sum_inst_retire += _nb_inst_retire [i]; 204 210 205 log_printf(TRACE,OOO_Engine,FUNCTION," rename_unit [%d] - nb_inst_insert %d, nb_inst_retire %d", i,_nb_inst_insert [i],_nb_inst_retire [i]);211 log_printf(TRACE,OOO_Engine,FUNCTION," * rename_unit [%d] - nb_inst_insert %d, nb_inst_retire %d", i,_nb_inst_insert [i],_nb_inst_retire [i]); 206 212 } 207 213 208 log_printf(TRACE,OOO_Engine,FUNCTION," sum_inst_insert %d, sum_inst_retire %d",_sum_inst_insert,_sum_inst_retire);214 log_printf(TRACE,OOO_Engine,FUNCTION," * sum_inst_insert %d, sum_inst_retire %d",_sum_inst_insert,_sum_inst_retire); 209 215 210 216 // _have_port_front_end_id = _size_front_end_id > 0; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/include/Parameters.h
r117 r120 303 303 public : bool ** _execute_loop_is_load_store_unit ;//[nb_execute_loop][nb_execute_unit] 304 304 public : uint32_t ** _execute_loop_translate_num_execute_unit ;//[nb_execute_loop][nb_execute_unit] 305 public : bool ** _execute_loop_num_thread_valid ;//[nb_execute_loop][execute_loop_nb_thread] 305 306 306 307 // translate for icache_access -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src/Parameters.cpp
r117 r120 20 20 uint32_t num_thread) 21 21 { 22 log_printf(TRACE,Core,FUNCTION,_("execute_loop_get_num_thread")); 23 log_printf(TRACE,Core,FUNCTION,_(" * Parameters :")); 22 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_get_num_thread")); 24 23 log_printf(TRACE,Core,FUNCTION,_(" * num_execute_loop : %d"),num_execute_loop); 25 24 log_printf(TRACE,Core,FUNCTION,_(" * num_thread : %d"),num_thread); … … 38 37 uint32_t front_end_id ; 39 38 uint32_t ooo_engine_id; 40 39 41 40 // * compute 42 41 for (ooo_engine_id=0; ooo_engine_id<_execute_loop_nb_ooo_engine [num_execute_loop]; ++ooo_engine_id) … … 44 43 break; 45 44 46 #ifdef DEBUG_TEST47 45 if (ooo_engine_id == _execute_loop_nb_ooo_engine [num_execute_loop]) 48 throw ERRORMORPHEO(FUNCTION,toString(_("execute_loop [%d] : ooo_engine [%d] is not find."),num_execute_loop,num_ooo_engine)); 49 #endif 46 return static_cast<Tcontext_t>(-1); 50 47 51 48 log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_id : %d"),ooo_engine_id); … … 55 52 break; 56 53 57 #ifdef DEBUG_TEST58 54 if (front_end_id == _execute_loop_nb_front_end [num_execute_loop]) 59 throw ERRORMORPHEO(FUNCTION,toString(_("execute_loop [%d] : front_end [%d] is not find."),num_execute_loop,num_front_end)); 60 #endif 55 return static_cast<Tcontext_t>(-1); 61 56 62 57 log_printf(TRACE,Core,FUNCTION,_(" * front_end_id : %d"),front_end_id ); 63 58 59 Tcontext_t _return = get_num_thread(context_id , log2(_execute_loop_nb_context [num_execute_loop]), 60 front_end_id , log2(_execute_loop_nb_front_end [num_execute_loop]), 61 ooo_engine_id, log2(_execute_loop_nb_ooo_engine [num_execute_loop])); 62 63 log_printf(TRACE,Core,FUNCTION,_(" * return : %d"),_return); 64 64 65 // compute the thread number 65 return get_num_thread(context_id , (1<<_execute_loop_nb_context [num_execute_loop]), 66 front_end_id , (1<<_execute_loop_nb_front_end [num_execute_loop]), 67 ooo_engine_id, (1<<_execute_loop_nb_ooo_engine [num_execute_loop])); 66 return _return; 68 67 } 69 68 … … 376 375 377 376 log_printf(TRACE,Core,FUNCTION,_("Core parameters :")); 377 378 log_printf(TRACE,Core,FUNCTION,_(" * nb_thread : %d"),_nb_thread); 378 379 379 380 // inverse link … … 436 437 for (uint32_t j=0; j<_nb_execute_unit[i]; ++j) 437 438 { 438 log_printf(TRACE,Core,FUNCTION,_(" * execute_unit [%d][%d] : functionnal_unit [%d] - load_store_unit [%d]"),i,j,_link_functionnal_unit_with_execute_unit [i][j],_link_load_store_unit_with_execute_unit [i][j]);439 log_printf(TRACE,Core,FUNCTION,_(" * execute_unit [%d][%d] : functionnal_unit [%d] - load_store_unit [%d]"),i,j,_link_functionnal_unit_with_execute_unit [i][j],_link_load_store_unit_with_execute_unit [i][j]); 439 440 440 441 … … 742 743 } 743 744 744 // log_printf(TRACE,Core,FUNCTION,_(" * front_end_instruction_implemeted"));745 // log_printf(TRACE,Core,FUNCTION,_(" * front_end_instruction_implemeted")); 745 746 // for (uint32_t i=0; i<_nb_front_end; ++i) 746 747 // for (uint32_t j=0; j<_nb_context[i]; ++j) … … 824 825 825 826 ALLOC1(_ooo_engine_nb_front_end ,uint32_t ,_nb_ooo_engine); 827 828 log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_nb_front_end")); 826 829 827 830 { … … 837 840 uint32_t num_rename_bloc = _link_rename_bloc_with_front_end [i]; 838 841 uint32_t num_ooo_engine = _link_rename_unit_with_rename_bloc [num_rename_bloc].first; 839 842 843 log_printf(TRACE,Core,FUNCTION,_(" * num_front_end : %d"),i); 844 log_printf(TRACE,Core,FUNCTION,_(" * num_rename_bloc : %d"),num_rename_bloc); 845 log_printf(TRACE,Core,FUNCTION,_(" * num_ooo_engine : %d"),num_ooo_engine ); 846 log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_nb_front_end : %d"),_ooo_engine_nb_front_end [num_ooo_engine]); 840 847 // insert a new front_end 841 848 _ooo_engine_nb_front_end [num_ooo_engine] ++; // === list_front_end.size() … … 843 850 } 844 851 845 log_printf(TRACE,Core,FUNCTION,_(" * translate_ooo_engine_num_front_end"));852 log_printf(TRACE,Core,FUNCTION,_(" * translate_ooo_engine_num_front_end")); 846 853 847 854 ALLOC2(_translate_ooo_engine_num_front_end ,uint32_t ,_nb_ooo_engine,_ooo_engine_nb_front_end[it1]); 848 855 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 849 for (uint32_t j=0; j<_ooo_engine_nb_front_end[i];++j) 850 { 851 uint32_t num_front_end = list_front_end[i][j]; 856 { 857 // log_printf(TRACE,Core,FUNCTION,_(" %d -> %d"),i,_ooo_engine_nb_front_end[i]); 858 859 for (uint32_t j=0; j<_ooo_engine_nb_front_end[i] ;++j) 860 { 861 uint32_t num_front_end = list_front_end[i][j]; 852 862 853 log_printf(TRACE,Core,FUNCTION,_(" [%d][%d] -> %d"),i,j,num_front_end); 854 _translate_ooo_engine_num_front_end [i][j++] = num_front_end; 855 } 863 log_printf(TRACE,Core,FUNCTION,_(" [%d][%d] -> %d"),i,j,num_front_end); 864 865 _translate_ooo_engine_num_front_end [i][j] = num_front_end; 866 } 867 } 856 868 } 857 869 … … 891 903 } 892 904 893 log_printf(TRACE,Core,FUNCTION,_(" * translate_ooo_engine_num_execute_loop"));905 log_printf(TRACE,Core,FUNCTION,_(" * translate_ooo_engine_num_execute_loop")); 894 906 895 907 ALLOC2(_translate_ooo_engine_num_execute_loop ,uint32_t ,_nb_ooo_engine,_ooo_engine_nb_execute_loop[it1]); … … 1011 1023 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 1012 1024 { 1013 // log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_table_issue_type [%d]"),i);1025 // log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_table_issue_type [%d]"),i); 1014 1026 1015 1027 // Init … … 1111 1123 } 1112 1124 1113 log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_table_routing [%d]"),i);1125 log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_table_routing [%d]"),i); 1114 1126 for (uint32_t j=0; j<_nb_rename_unit[i]; ++j) 1115 1127 { … … 1149 1161 } 1150 1162 1151 log_printf(TRACE,Core,FUNCTION,_(" * network_table_dispatch [nb_ooo_engine][nb_inst_issue_slot][nb_execute_loop][nb_read_unit]"));1163 log_printf(TRACE,Core,FUNCTION,_(" * network_table_dispatch [nb_ooo_engine][nb_inst_issue_slot][nb_execute_loop][nb_read_unit]")); 1152 1164 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 1153 1165 for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j) … … 1159 1171 ALLOC3(_network_table_issue_type,bool,_nb_execute_loop,_nb_read_unit[it1],_nb_type); 1160 1172 1161 log_printf(TRACE,Core,FUNCTION,_(" * network_table_issue_type"));1173 log_printf(TRACE,Core,FUNCTION,_(" * network_table_issue_type")); 1162 1174 for (uint32_t i=0; i<_nb_execute_loop; ++i) 1163 1175 for (uint32_t j=0; j<_nb_read_unit[i]; ++j) … … 1383 1395 _execute_loop_nb_ooo_engine [i] = _list_ooo_engine_with_execute_loop[i].size(); 1384 1396 1385 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_ooo_engine : %d"),_execute_loop_nb_ooo_engine [i]);1397 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_ooo_engine : %d"),_execute_loop_nb_ooo_engine [i]); 1386 1398 1387 1399 uint32_t max_nb_front_end = 0; … … 1409 1421 _execute_loop_nb_packet [i] = max_size_rob ; 1410 1422 1411 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_front_end : %d"),_execute_loop_nb_front_end [i]);1412 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_context : %d"),_execute_loop_nb_context [i]);1413 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_packet : %d"),_execute_loop_nb_packet [i]);1423 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_front_end : %d"),_execute_loop_nb_front_end [i]); 1424 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_context : %d"),_execute_loop_nb_context [i]); 1425 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_packet : %d"),_execute_loop_nb_packet [i]); 1414 1426 1415 1427 _execute_loop_nb_thread [i] = get_nb_thread(_execute_loop_nb_context [i], … … 1417 1429 _execute_loop_nb_ooo_engine [i]); 1418 1430 1419 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_thread : %d"),_execute_loop_nb_thread [i]);1431 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_thread : %d"),_execute_loop_nb_thread [i]); 1420 1432 } 1421 1433 … … 1431 1443 ALLOC2(_execute_loop_nb_inst_retire ,uint32_t,_nb_execute_loop,_nb_read_unit[it1]); 1432 1444 1433 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop - Read_unit"));1445 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop - Read_unit")); 1434 1446 for (uint32_t i=0; i<_nb_execute_loop; ++i) 1435 1447 { 1436 log_printf(TRACE,Core,FUNCTION,_(" * [%d] nb_read_unit : %d"),i,_nb_read_unit[i]);1448 log_printf(TRACE,Core,FUNCTION,_(" * [%d] nb_read_unit : %d"),i,_nb_read_unit[i]); 1437 1449 1438 1450 for (uint32_t j=0; j<_nb_read_unit[i]; ++j) … … 1440 1452 uint32_t num_read_bloc = _link_read_bloc_with_read_unit [i][j]; 1441 1453 1442 log_printf(TRACE,Core,FUNCTION,_(" * num_read_bloc : %d"),num_read_bloc);1454 log_printf(TRACE,Core,FUNCTION,_(" * num_read_bloc : %d"),num_read_bloc); 1443 1455 1444 1456 _execute_loop_size_read_queue [i][j] = _size_read_queue [num_read_bloc]; … … 1494 1506 _execute_loop_nb_inst_functionnal_unit [i][num_fu] = _nb_inst_functionnal_unit [num_functionnal_unit]; 1495 1507 1496 log_printf(TRACE,Core,FUNCTION, " * _execute_loop_nb_inst_functionnal_unit [%d][%d] = _nb_inst_functionnal_unit [%d] = %d",i,num_fu,num_functionnal_unit,_nb_inst_functionnal_unit [num_functionnal_unit]);1508 log_printf(TRACE,Core,FUNCTION,_(" * _execute_loop_nb_inst_functionnal_unit [%d][%d] = _nb_inst_functionnal_unit [%d] = %d"),i,num_fu,num_functionnal_unit,_nb_inst_functionnal_unit [num_functionnal_unit]); 1497 1509 1498 1510 for (uint32_t k=0; k<_nb_type; ++k) … … 1527 1539 uint32_t num_load_store_unit = _list_load_store_unit_with_execute_unit [i][j]; 1528 1540 1529 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_load_store_unit [%d][%d] : %d"),i,j,num_load_store_unit);1530 log_printf(TRACE,Core,FUNCTION,_(" * nb_bypass_memory : %d"),_nb_bypass_memory[num_load_store_unit]);1541 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_nb_load_store_unit [%d][%d] : %d"),i,j,num_load_store_unit); 1542 log_printf(TRACE,Core,FUNCTION,_(" * nb_bypass_memory : %d"),_nb_bypass_memory[num_load_store_unit]); 1531 1543 1532 1544 _execute_loop_size_store_queue [i][j] = _size_store_queue [num_load_store_unit]; … … 1619 1631 ALLOC4(_execute_loop_read_unit_to_execution_unit_table_routing ,bool ,_nb_execute_loop,_nb_read_unit[it1],_nb_execute_unit[it1],_execute_loop_nb_execute_unit_port[it1][it2]); 1620 1632 1621 log_printf(TRACE,Core,FUNCTION,_(" execute_loop_read_unit_to_execution_unit_table_routing [execute_loop][read_unit][execute_unit][execute_unit_port]"));1633 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_read_unit_to_execution_unit_table_routing [execute_loop][read_unit][execute_unit][execute_unit_port]")); 1622 1634 for (uint32_t i=0; i<_nb_execute_loop; ++i) 1623 1635 for (uint32_t j=0; j<_nb_execute_unit[i]; ++j) … … 1647 1659 ALLOC4(_execute_loop_execution_unit_to_write_unit_table_routing,bool ,_nb_execute_loop,_nb_execute_unit[it1],_execute_loop_nb_execute_unit_port[it1][it2],_nb_write_unit[it1]); 1648 1660 1649 log_printf(TRACE,Core,FUNCTION,_(" execute_loop_execution_unit_to_write_unit_table_routing [execute_loop][execute_unit][execute_unit_port][write_unit]"));1661 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_execution_unit_to_write_unit_table_routing [execute_loop][execute_unit][execute_unit_port][write_unit]")); 1650 1662 1651 1663 for (uint32_t i=0; i<_nb_execute_loop; ++i) … … 1677 1689 ALLOC3(_execute_loop_execution_unit_to_write_unit_table_thread ,bool ,_nb_execute_loop,_nb_write_unit[it1],_execute_loop_nb_thread [it1]); 1678 1690 1679 log_printf(TRACE,Core,FUNCTION,_(" execute_loop_read_unit_to_execution_unit_table_thread"));1691 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_read_unit_to_execution_unit_table_thread")); 1680 1692 for (uint32_t i=0; i<_nb_execute_loop; ++i) 1681 1693 { … … 1704 1716 { 1705 1717 uint32_t num_thread = execute_loop_get_num_thread (i,k); 1718 1719 #ifdef DEBUG_TEST 1720 if (num_thread == static_cast<Tcontext_t>(-1)) 1721 throw ERRORMORPHEO(FUNCTION,toString(_("execute_loop [%d] : thread %d is invalid."),i,k)); 1722 #endif 1723 1706 1724 _execute_loop_read_unit_to_execution_unit_table_thread [i][j][num_thread] = true; 1707 1725 log_printf(TRACE,Core,FUNCTION,_(" [%d][%d][%d] -> Ok"),i,j,num_thread); … … 1722 1740 } 1723 1741 1742 ALLOC2(_execute_loop_num_thread_valid ,bool ,_nb_execute_loop,_execute_loop_nb_thread[it1]); 1743 1744 log_printf(TRACE,Core,FUNCTION,_(" * execute_loop_num_thread_valid")); 1745 1746 for (uint32_t i=0; i<_nb_execute_loop; ++i) 1747 { 1748 for (uint32_t j=0; j<_execute_loop_nb_thread[i]; ++j) 1749 _execute_loop_num_thread_valid [i][j] = false; 1750 1751 for (uint32_t j=0; j<_nb_thread; ++j) 1752 { 1753 uint32_t num_thread = execute_loop_get_num_thread (i,j); 1754 1755 if (num_thread != static_cast<Tcontext_t>(-1)) 1756 { 1757 log_printf(TRACE,Core,FUNCTION,_(" [%d][%d] -> valid"),i,num_thread); 1758 1759 _execute_loop_num_thread_valid [i][num_thread] = true; 1760 } 1761 } 1762 } 1763 1764 1724 1765 ALLOC2(_icache_access_size_packet_id,uint32_t,_nb_front_end,_nb_context[it1]); 1725 1766 ALLOC2(_icache_access_table_routing ,uint32_t,_nb_front_end,_nb_context[it1]); … … 2041 2082 2042 2083 _execute_loop_is_load_store_unit [i], 2043 _execute_loop_translate_num_execute_unit [i] 2084 _execute_loop_translate_num_execute_unit [i], 2085 2086 _execute_loop_num_thread_valid [i] 2044 2087 ); 2045 2088 … … 2153 2196 DELETE2(_icache_access_table_routing ,_nb_front_end,_nb_context[it1]); 2154 2197 DELETE2(_icache_access_size_packet_id ,_nb_front_end,_nb_context[it1]); 2198 DELETE2(_execute_loop_num_thread_valid ,_nb_execute_loop,_execute_loop_nb_thread[it1]); 2155 2199 DELETE3(_execute_loop_execution_unit_to_write_unit_table_thread ,_nb_execute_loop,_nb_write_unit[it1],_execute_loop_nb_thread [it1]); 2156 2200 DELETE3(_execute_loop_read_unit_to_execution_unit_table_thread ,_nb_execute_loop,_nb_execute_unit[it1],_execute_loop_nb_thread[it1]); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Version.h
r119 r120 10 10 #define MORPHEO_MAJOR_VERSION "0" 11 11 #define MORPHEO_MINOR_VERSION "2" 12 #define MORPHEO_REVISION "1 19"12 #define MORPHEO_REVISION "120" 13 13 #define MORPHEO_CODENAME "Castor" 14 14 15 #define MORPHEO_DATE_DAY "2 5"15 #define MORPHEO_DATE_DAY "26" 16 16 #define MORPHEO_DATE_MONTH "05" 17 17 #define MORPHEO_DATE_YEAR "2009"
Note: See TracChangeset
for help on using the changeset viewer.