- Timestamp:
- Feb 27, 2009, 7:37:40 PM (15 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/include/Core_Glue.h
r105 r111 204 204 205 205 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 206 private : generic::priority::Priority ** _priority; //[nb_execute_loop] 206 private : generic::priority::Priority ** _priority_ooo_engine; //[nb_execute_loop] 207 private : generic::priority::Priority ** _priority_read_unit ; //[nb_execute_loop] 207 208 208 209 // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_allocation.cpp
r105 r111 234 234 235 235 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 236 _priority = new generic::priority::Priority * [_param->_nb_execute_loop]; 236 _priority_ooo_engine = new generic::priority::Priority * [_param->_nb_execute_loop]; 237 _priority_read_unit = new generic::priority::Priority * [_param->_nb_execute_loop]; 237 238 238 239 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 239 _priority [i] = new generic::priority::Priority (_name+"_priority_"+toString(i), 240 _param->_dispatch_priority , 241 _param->_dispatch_load_balancing, 242 _param->_execute_loop_nb_ooo_engine [i], 243 _param->_execute_loop_nb_inst_issue [i], 244 _param->_execute_loop_nb_ooo_engine [i] 245 ); 240 { 241 _priority_ooo_engine [i] = new generic::priority::Priority (_name+"_priority_ooo_engine_"+toString(i), 242 _param->_dispatch_priority , 243 _param->_dispatch_load_balancing, 244 _param->_execute_loop_nb_ooo_engine [i], 245 _param->_execute_loop_nb_inst_issue [i], 246 _param->_execute_loop_nb_ooo_engine [i] 247 ); 248 249 _priority_read_unit [i] = new generic::priority::Priority (_name+"_priority_read_unit_"+toString(i), 250 // PRIORITY_STATIC, 251 PRIORITY_ROUND_ROBIN, 252 _param->_nb_read_unit [i], 253 _param->_nb_read_unit [i] 254 ); 255 } 256 246 257 247 258 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_deallocation.cpp
r105 r111 159 159 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 160 160 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 161 delete _priority [i]; 162 delete [] _priority; 161 { 162 delete _priority_ooo_engine [i]; 163 delete _priority_read_unit [i]; 164 } 165 delete [] _priority_ooo_engine; 166 delete [] _priority_read_unit ; 163 167 164 168 delete _component; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_genMealy_issue.cpp
r88 r111 42 42 log_printf(TRACE,Core_Glue,FUNCTION," * execute_loop [%d]",i); 43 43 44 std::list<generic::priority::select_t> * select = _priority[i]->select();45 for (std::list<generic::priority::select_t>::iterator it =select->begin();46 it !=select->end();47 ++it )44 std::list<generic::priority::select_t> * select_ooo_engine = _priority_ooo_engine[i]->select(); 45 for (std::list<generic::priority::select_t>::iterator it_ooo_engine=select_ooo_engine->begin(); 46 it_ooo_engine!=select_ooo_engine->end(); 47 ++it_ooo_engine) 48 48 { 49 const uint32_t ooo_engine_id = it ->grp;49 const uint32_t ooo_engine_id = it_ooo_engine->grp; 50 50 const uint32_t num_ooo_engine = _param->_translate_execute_loop_num_ooo_engine [i][ooo_engine_id]; 51 const uint32_t num_inst_issue = it ->elt;51 const uint32_t num_inst_issue = it_ooo_engine->elt; 52 52 53 53 log_printf(TRACE,Core_Glue,FUNCTION," * num_ooo_engine [%d] (id : %d)",num_ooo_engine, ooo_engine_id); … … 56 56 57 57 // have request ? 58 if (PORT_READ(in_ISSUE_OOO_ENGINE_VAL [num_ooo_engine][num_inst_issue])) 58 Tcontrol_t ooo_engine_val = PORT_READ(in_ISSUE_OOO_ENGINE_VAL [num_ooo_engine][num_inst_issue]); 59 60 // if (ooo_engine_val) 59 61 { 60 62 // // If ooo_engine can issue instruction on multiple execute_loop 61 63 // if (not ISSUE_OOO_ENGINE_ACK [num_ooo_engine][num_inst_issue]) 62 for (uint32_t j=0; j<_param->_nb_read_unit[i]; ++j) 64 65 std::list<generic::priority::select_t> * select_read_unit = _priority_read_unit[i]->select(); 66 for (std::list<generic::priority::select_t>::iterator it_read_unit=select_read_unit->begin(); 67 it_read_unit!=select_read_unit->end(); 68 ++it_read_unit) 69 { 70 uint32_t num_read_unit = it_read_unit->grp; 71 63 72 // Test if have an link and read unit is enable 64 { 65 log_printf(TRACE,Core_Glue,FUNCTION," * read_unit : %d",j); 66 log_printf(TRACE,Core_Glue,FUNCTION," * READ_UNIT_ENABLE : %d",READ_UNIT_ENABLE [i][j]); 67 log_printf(TRACE,Core_Glue,FUNCTION," * table_dispatch : %d",_param->_table_dispatch [num_ooo_engine][num_inst_issue][i][j]); 73 log_printf(TRACE,Core_Glue,FUNCTION," * read_unit : %d",num_read_unit); 74 log_printf(TRACE,Core_Glue,FUNCTION," * READ_UNIT_ENABLE : %d",READ_UNIT_ENABLE [i][num_read_unit]); 75 log_printf(TRACE,Core_Glue,FUNCTION," * table_dispatch : %d",_param->_table_dispatch [num_ooo_engine][num_inst_issue][i][num_read_unit]); 68 76 69 if (READ_UNIT_ENABLE [i][j] and 70 _param->_table_dispatch [num_ooo_engine][num_inst_issue][i][j]) 77 Tcontrol_t read_unit_enable = READ_UNIT_ENABLE [i][num_read_unit]; 78 if (read_unit_enable and 79 _param->_table_dispatch [num_ooo_engine][num_inst_issue][i][num_read_unit]) 71 80 { 72 81 // Transaction 73 ISSUE_EXECUTE_LOOP_VAL [i][ j] = 1;74 ISSUE_OOO_ENGINE_ACK [num_ooo_engine][num_inst_issue] = 1;75 READ_UNIT_ENABLE [i][ j] = false; // now, this read_unit is busy82 ISSUE_EXECUTE_LOOP_VAL [i][num_read_unit] = ooo_engine_val; 83 ISSUE_OOO_ENGINE_ACK [num_ooo_engine][num_inst_issue] = read_unit_enable; // = 1 84 READ_UNIT_ENABLE [i][num_read_unit] = false; // now, this read_unit is busy 76 85 77 86 if (_param->_have_port_context_id) 78 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_CONTEXT_ID [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_CONTEXT_ID [num_ooo_engine][num_inst_issue]));87 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_CONTEXT_ID [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_CONTEXT_ID [num_ooo_engine][num_inst_issue])); 79 88 if (_param->_have_port_front_end_id) 80 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_FRONT_END_ID [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_FRONT_END_ID [num_ooo_engine][num_inst_issue]));89 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_FRONT_END_ID [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_FRONT_END_ID [num_ooo_engine][num_inst_issue])); 81 90 if (_param->_have_port_ooo_engine_id) 82 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID [i][ j],ooo_engine_id);91 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID [i][num_read_unit],ooo_engine_id); 83 92 if (_param->_have_port_rob_ptr) 84 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_PACKET_ID [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_PACKET_ID [num_ooo_engine][num_inst_issue]));85 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OPERATION [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_OPERATION [num_ooo_engine][num_inst_issue]));86 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_TYPE [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_TYPE [num_ooo_engine][num_inst_issue]));87 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_WRITE [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE [num_ooo_engine][num_inst_issue]));93 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_PACKET_ID [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_PACKET_ID [num_ooo_engine][num_inst_issue])); 94 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OPERATION [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_OPERATION [num_ooo_engine][num_inst_issue])); 95 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_TYPE [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_TYPE [num_ooo_engine][num_inst_issue])); 96 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_WRITE [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE [num_ooo_engine][num_inst_issue])); 88 97 if (_param->_have_port_load_queue_ptr) 89 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_LOAD_QUEUE_PTR_WRITE [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE [num_ooo_engine][num_inst_issue]));90 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_HAS_IMMEDIAT [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT [num_ooo_engine][num_inst_issue]));91 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_IMMEDIAT [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_IMMEDIAT [num_ooo_engine][num_inst_issue]));92 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RA [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RA [num_ooo_engine][num_inst_issue]));93 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RA [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RA [num_ooo_engine][num_inst_issue]));94 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RB [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RB [num_ooo_engine][num_inst_issue]));95 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RB [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RB [num_ooo_engine][num_inst_issue]));96 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RC [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RC [num_ooo_engine][num_inst_issue]));97 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RC [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RC [num_ooo_engine][num_inst_issue]));98 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RD [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RD [num_ooo_engine][num_inst_issue]));99 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RD [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RD [num_ooo_engine][num_inst_issue]));100 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RE [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RE [num_ooo_engine][num_inst_issue]));101 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RE [i][ j],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RE [num_ooo_engine][num_inst_issue]));98 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_LOAD_QUEUE_PTR_WRITE [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE [num_ooo_engine][num_inst_issue])); 99 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_HAS_IMMEDIAT [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT [num_ooo_engine][num_inst_issue])); 100 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_IMMEDIAT [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_IMMEDIAT [num_ooo_engine][num_inst_issue])); 101 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RA [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RA [num_ooo_engine][num_inst_issue])); 102 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RA [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RA [num_ooo_engine][num_inst_issue])); 103 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RB [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RB [num_ooo_engine][num_inst_issue])); 104 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RB [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RB [num_ooo_engine][num_inst_issue])); 105 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_READ_RC [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_READ_RC [num_ooo_engine][num_inst_issue])); 106 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RC [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RC [num_ooo_engine][num_inst_issue])); 107 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RD [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RD [num_ooo_engine][num_inst_issue])); 108 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RD [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RD [num_ooo_engine][num_inst_issue])); 109 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_WRITE_RE [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_WRITE_RE [num_ooo_engine][num_inst_issue])); 110 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_NUM_REG_RE [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_NUM_REG_RE [num_ooo_engine][num_inst_issue])); 102 111 } 103 112 } -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_transition.cpp
r88 r111 24 24 { 25 25 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 26 _priority [i]->reset(); 26 { 27 _priority_ooo_engine [i]->reset(); 28 _priority_read_unit [i]->reset(); 29 } 27 30 } 28 31 else … … 30 33 // next priority 31 34 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 32 _priority [i]->transition(); 35 { 36 _priority_ooo_engine [i]->transition(); 37 _priority_read_unit [i]->transition(); 38 } 33 39 } 34 40
Note: See TracChangeset
for help on using the changeset viewer.