- Timestamp:
- May 16, 2009, 4:42:39 PM (15 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/SelfTest/config-min.cfg
r88 r117 1 1 Core_Glue 2 2 1 1 +1 # nb_front_end 3 1 1 +1 # nb_context [0] [nb_front_end]4 1 1 +1 # nb_ooo_engine 5 1 1 +1 # nb_execute_loop 6 1 1 +1 # ooo_engine_nb_front_end [0] [nb_ooo_engine]7 1 1 +1 # ooo_engine_nb_execute_loop [0] [nb_ooo_engine]8 1 1 +1 # execute_loop_nb_ooo_engine [0] [nb_execute_loop]9 1 1 +1 # nb_inst_decod [0] [nb_front_end]10 1 1 +1 # front_end_nb_inst_branch_complete [0] [nb_front_end]11 1 1 +1 # ooo_engine_nb_inst_branch_complete [0] [nb_ooo_engine]12 1 1 +1 # nb_inst_insert [0] [nb_ooo_engine]13 1 1 +1 # nb_inst_issue [0] [nb_ooo_engine]14 1 1 +1 # nb_inst_execute [0][0] [nb_ooo_engine][ooo_engine_nb_execute_loop]15 1 1 +1 # nb_read_unit [0] [nb_execute_loop]16 1 1 +1 # nb_write_unit [0] [nb_execute_loop]3 1 1 +1 # nb_context [0] [nb_front_end] 4 1 1 +1 # nb_ooo_engine 5 1 1 +1 # nb_execute_loop 6 1 1 +1 # ooo_engine_nb_front_end [0] [nb_ooo_engine] 7 1 1 +1 # ooo_engine_nb_execute_loop [0] [nb_ooo_engine] 8 1 1 +1 # execute_loop_nb_ooo_engine [0] [nb_execute_loop] 9 1 1 +1 # nb_inst_decod [0] [nb_front_end] 10 1 1 +1 # front_end_nb_inst_branch_complete [0] [nb_front_end] 11 1 1 +1 # ooo_engine_nb_inst_branch_complete [0] [nb_ooo_engine] 12 1 1 +1 # nb_inst_insert [0] [nb_ooo_engine] 13 1 1 +1 # nb_inst_issue [0] [nb_ooo_engine] 14 1 1 +1 # nb_inst_execute [0][0] [nb_ooo_engine][ooo_engine_nb_execute_loop] 15 1 1 +1 # nb_read_unit [0] [nb_execute_loop] 16 1 1 +1 # nb_write_unit [0] [nb_execute_loop] 17 17 1 1 +1 # size_depth 18 18 1 1 +1 # size_rob_ptr … … 25 25 1 1 +1 # dispatch_priority 26 26 1 1 +1 # dispatch_load_balancing 27 1 1 +1 # table_dispatch [0][0][0][0] [nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit]28 0 0 +1 # translate_ooo_engine_num_front_end [0][0] [nb_ooo_engine][ooo_engine_nb_front_end]29 0 0 +1 # translate_ooo_engine_num_execute_loop [0][0] [nb_ooo_engine][ooo_engine_nb_execute_loop]30 0 0 +1 # translate_execute_loop_num_ooo_engine [0][0] [nb_execute_loop][execute_loop_nb_ooo_engine]27 1 1 +1 # table_dispatch [0][0][0][0] [nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit] 28 0 0 +1 # translate_ooo_engine_num_front_end [0][0] [nb_ooo_engine][ooo_engine_nb_front_end] 29 0 0 +1 # translate_ooo_engine_num_execute_loop [0][0] [nb_ooo_engine][ooo_engine_nb_execute_loop] 30 0 0 +1 # translate_execute_loop_num_ooo_engine [0][0] [nb_execute_loop][execute_loop_nb_ooo_engine] -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/SelfTest/src/main.cpp
r88 r117 25 25 err (_(" * ooo_engine_nb_inst_branch_complete [nb_ooo_engine] (uint32_t )\n")); 26 26 err (_(" * nb_inst_insert [nb_ooo_engine] (uint32_t )\n")); 27 err (_(" * nb_inst_issue [nb_ooo_engine] (uint32_t )\n")); 27 //err (_(" * nb_inst_issue_queue [nb_ooo_engine] (uint32_t )\n")); 28 err (_(" * nb_inst_issue_slot [nb_ooo_engine] (uint32_t )\n")); 28 29 err (_(" * nb_inst_execute [nb_ooo_engine][ooo_engine_nb_execute_loop] (uint32_t )\n")); 29 30 err (_(" * nb_read_unit [nb_execute_loop] (uint32_t )\n")); … … 40 41 err (_(" * dispatch_load_balancing (Tload_balancing_t)\n")); 41 42 err (_(" * table_dispatch [nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit] (bool )\n")); 43 // err (_(" * table_issue_type [execute_loop][nb_read_unit][MAX_TYPE] (bool )\n")); 44 // err (_(" * TYPE_ALU \n")); 45 // err (_(" * TYPE_SHIFT \n")); 46 // err (_(" * TYPE_MOVE \n")); 47 // err (_(" * TYPE_TEST \n")); 48 // err (_(" * TYPE_MUL \n")); 49 // err (_(" * TYPE_DIV \n")); 50 // err (_(" * TYPE_EXTEND \n")); 51 // err (_(" * TYPE_FIND \n")); 52 // err (_(" * TYPE_SPECIAL\n")); 53 // err (_(" * TYPE_CUSTOM \n")); 54 // err (_(" * TYPE_BRANCH \n")); 55 // err (_(" * TYPE_MEMORY \n")); 42 56 err (_(" * translate_ooo_engine_num_front_end [nb_ooo_engine][ooo_engine_nb_front_end] (uint32_t )\n")); 43 57 err (_(" * translate_ooo_engine_num_execute_loop [nb_ooo_engine][ooo_engine_nb_execute_loop] (uint32_t )\n")); … … 72 86 uint32_t * ooo_engine_nb_inst_branch_complete ;//[nb_ooo_engine] 73 87 uint32_t * nb_inst_insert ;//[nb_ooo_engine] 74 uint32_t * nb_inst_issue 88 uint32_t * nb_inst_issue_slot ;//[nb_ooo_engine] 75 89 uint32_t ** nb_inst_execute ;//[nb_ooo_engine][ooo_engine_nb_execute_loop] 76 90 uint32_t * nb_read_unit ;//[nb_execute_loop] … … 86 100 Tpriority_t dispatch_priority ; 87 101 Tload_balancing_t dispatch_load_balancing ; 88 bool **** table_dispatch ;//[nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit] 102 bool **** table_dispatch ;//[nb_ooo_engine][nb_inst_issue_slot][execute_loop][nb_read_unit] 103 bool *** table_issue_type ;// [execute_loop][nb_read_unit][MAX_TYPE] 89 104 uint32_t ** translate_ooo_engine_num_front_end ;//[nb_ooo_engine][ooo_engine_nb_front_end] 90 105 uint32_t ** translate_ooo_engine_num_execute_loop;//[nb_ooo_engine][ooo_engine_nb_execute_loop] … … 119 134 SELFTEST1(ooo_engine_nb_inst_branch_complete ,uint32_t ,argv,x,nb_ooo_engine); 120 135 SELFTEST1(nb_inst_insert ,uint32_t ,argv,x,nb_ooo_engine); 121 SELFTEST1(nb_inst_issue 136 SELFTEST1(nb_inst_issue_slot ,uint32_t ,argv,x,nb_ooo_engine); 122 137 123 138 uint32_t sum_ooo_engine_nb_front_end = 0; … … 129 144 sum_ooo_engine_nb_front_end += ooo_engine_nb_front_end [i]; 130 145 sum_ooo_engine_nb_execute_loop += ooo_engine_nb_execute_loop [i]; 131 sum_nb_inst_issue += nb_inst_issue 146 sum_nb_inst_issue += nb_inst_issue_slot [i]; 132 147 } 133 148 … … 177 192 SELFTEST0(dispatch_load_balancing ,Tload_balancing_t,argv,x); 178 193 179 SELFTEST4(table_dispatch ,bool ,argv,x,nb_ooo_engine,nb_inst_issue[it1],nb_execute_loop,nb_read_unit[it3]); 194 SELFTEST4(table_dispatch ,bool ,argv,x,nb_ooo_engine,nb_inst_issue_slot[it1],nb_execute_loop,nb_read_unit[it3]); 195 196 ALLOC3 (table_issue_type ,bool ,nb_execute_loop,nb_read_unit[it1],MAX_TYPE); 197 198 for (uint32_t i=0; i<nb_execute_loop; ++i) 199 for (uint32_t j=0; j<nb_read_unit[i]; ++j) 200 for (uint32_t k=0; k<MAX_TYPE; ++k) 201 // table_issue_type [i][j][k] = false; 202 table_issue_type [i][j][k] = true; 203 204 // for (uint32_t i=0; i<nb_execute_loop; ++i) 205 // for (uint32_t j=0; j<nb_read_unit[i]; ++j) 206 // { 207 // table_issue_type [i][j][TYPE_ALU ] = fromString<bool>(argv[x++]); 208 // table_issue_type [i][j][TYPE_SHIFT ] = fromString<bool>(argv[x++]); 209 // table_issue_type [i][j][TYPE_MOVE ] = fromString<bool>(argv[x++]); 210 // table_issue_type [i][j][TYPE_TEST ] = fromString<bool>(argv[x++]); 211 // table_issue_type [i][j][TYPE_MUL ] = fromString<bool>(argv[x++]); 212 // table_issue_type [i][j][TYPE_DIV ] = fromString<bool>(argv[x++]); 213 // table_issue_type [i][j][TYPE_EXTEND ] = fromString<bool>(argv[x++]); 214 // table_issue_type [i][j][TYPE_FIND ] = fromString<bool>(argv[x++]); 215 // table_issue_type [i][j][TYPE_SPECIAL] = fromString<bool>(argv[x++]); 216 // table_issue_type [i][j][TYPE_CUSTOM ] = fromString<bool>(argv[x++]); 217 // table_issue_type [i][j][TYPE_BRANCH ] = fromString<bool>(argv[x++]); 218 // table_issue_type [i][j][TYPE_MEMORY ] = fromString<bool>(argv[x++]); 219 // } 220 180 221 SELFTEST2(translate_ooo_engine_num_front_end ,uint32_t ,argv,x,nb_ooo_engine,ooo_engine_nb_front_end[it1]); 181 222 SELFTEST2(translate_ooo_engine_num_execute_loop,uint32_t ,argv,x,nb_ooo_engine,ooo_engine_nb_execute_loop[it1]); … … 198 239 ooo_engine_nb_inst_branch_complete ,//[nb_ooo_engine] 199 240 nb_inst_insert ,//[nb_ooo_engine] 200 nb_inst_issue ,//[nb_ooo_engine] 241 nb_inst_issue_slot ,//[nb_ooo_engine] 242 nb_inst_issue_slot ,//[nb_ooo_engine] 201 243 nb_inst_execute ,//[nb_ooo_engine][ooo_engine_nb_execute_loop] 202 244 nb_read_unit ,//[nb_execute_loop] … … 212 254 dispatch_priority , 213 255 dispatch_load_balancing , 214 table_dispatch ,//[nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit] 256 table_dispatch ,//[nb_ooo_engine][nb_inst_issue_slot][execute_loop][nb_read_unit] 257 table_issue_type ,// [execute_loop][nb_read_unit][MAX_TYPE] 215 258 translate_ooo_engine_num_front_end ,//[nb_ooo_engine][ooo_engine_nb_front_end] 216 259 translate_ooo_engine_num_execute_loop,//[nb_ooo_engine][ooo_engine_nb_execute_loop] … … 245 288 DELETE2(translate_ooo_engine_num_execute_loop,nb_ooo_engine,ooo_engine_nb_execute_loop[it1]); 246 289 DELETE2(translate_ooo_engine_num_front_end ,nb_ooo_engine,ooo_engine_nb_front_end[it1]); 247 DELETE4(table_dispatch ,nb_ooo_engine,nb_inst_issue[it1],nb_execute_loop,nb_read_unit[it2]); 290 DELETE3(table_issue_type ,nb_execute_loop,nb_read_unit[it1],MAX_TYPE); 291 DELETE4(table_dispatch ,nb_ooo_engine,nb_inst_issue_slot[it1],nb_execute_loop,nb_read_unit[it2]); 248 292 DELETE1(nb_write_unit ,nb_execute_loop); 249 293 DELETE1(nb_read_unit ,nb_execute_loop); 250 294 DELETE2(nb_inst_execute ,nb_ooo_engine,ooo_engine_nb_execute_loop[it1]); 251 DELETE1(nb_inst_issue 295 DELETE1(nb_inst_issue_slot ,nb_ooo_engine); 252 296 DELETE1(ooo_engine_nb_inst_branch_complete ,nb_ooo_engine); 253 297 DELETE1(front_end_nb_inst_branch_complete ,nb_front_end); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/SelfTest/src/test.cpp
r105 r117 48 48 sc_clock * in_CLOCK = new sc_clock ("clock", 1.0, 0.5); 49 49 sc_signal<Tcontrol_t> * in_NRESET = new sc_signal<Tcontrol_t> ("NRESET"); 50 51 sc_signal<Tcontext_t > *** out_RENAME_FRONT_END_ID ; 52 sc_signal<Tcontrol_t > *** out_BRANCH_COMPLETE_FRONT_END_VAL ; 53 sc_signal<Tcontrol_t > *** in_BRANCH_COMPLETE_FRONT_END_ACK ; 54 sc_signal<Tcontext_t > *** out_BRANCH_COMPLETE_FRONT_END_CONTEXT_ID ; 55 sc_signal<Tdepth_t > *** out_BRANCH_COMPLETE_FRONT_END_DEPTH ; 56 sc_signal<Taddress_t > *** out_BRANCH_COMPLETE_FRONT_END_ADDRESS ; 57 sc_signal<Tcontrol_t > *** out_BRANCH_COMPLETE_FRONT_END_NO_SEQUENCE ; 58 sc_signal<Tcontrol_t > *** in_BRANCH_COMPLETE_FRONT_END_MISS_PREDICTION ; 59 sc_signal<Tcontrol_t > *** in_BRANCH_COMPLETE_OOO_ENGINE_VAL ; 60 sc_signal<Tcontrol_t > *** out_BRANCH_COMPLETE_OOO_ENGINE_ACK ; 61 sc_signal<Tcontext_t > *** in_BRANCH_COMPLETE_OOO_ENGINE_FRONT_END_ID ; 62 sc_signal<Tcontext_t > *** in_BRANCH_COMPLETE_OOO_ENGINE_CONTEXT_ID ; 63 sc_signal<Tdepth_t > *** in_BRANCH_COMPLETE_OOO_ENGINE_DEPTH ; 64 sc_signal<Taddress_t > *** in_BRANCH_COMPLETE_OOO_ENGINE_ADDRESS ; 65 sc_signal<Tcontrol_t > *** in_BRANCH_COMPLETE_OOO_ENGINE_NO_SEQUENCE ; 66 sc_signal<Tcontrol_t > *** out_BRANCH_COMPLETE_OOO_ENGINE_MISS_PREDICTION; 67 sc_signal<Tcontrol_t > ** out_COMMIT_EVENT_FRONT_END_VAL ; 68 sc_signal<Tcontrol_t > ** in_COMMIT_EVENT_FRONT_END_ACK ; 69 sc_signal<Tcontext_t > ** out_COMMIT_EVENT_FRONT_END_CONTEXT_ID ; 70 sc_signal<Tdepth_t > ** out_COMMIT_EVENT_FRONT_END_DEPTH ; 71 sc_signal<Tevent_type_t > ** out_COMMIT_EVENT_FRONT_END_TYPE ; 72 sc_signal<Tcontrol_t > ** out_COMMIT_EVENT_FRONT_END_IS_DELAY_SLOT ; 73 sc_signal<Taddress_t > ** out_COMMIT_EVENT_FRONT_END_ADDRESS ; 74 sc_signal<Tcontrol_t > ** out_COMMIT_EVENT_FRONT_END_ADDRESS_EPCR_VAL ; 75 sc_signal<Taddress_t > ** out_COMMIT_EVENT_FRONT_END_ADDRESS_EPCR ; 76 sc_signal<Tcontrol_t > ** out_COMMIT_EVENT_FRONT_END_ADDRESS_EEAR_VAL ; 77 sc_signal<Tgeneral_data_t > ** out_COMMIT_EVENT_FRONT_END_ADDRESS_EEAR ; 78 sc_signal<Tcontrol_t > ** in_COMMIT_EVENT_OOO_ENGINE_VAL ; 79 sc_signal<Tcontrol_t > ** out_COMMIT_EVENT_OOO_ENGINE_ACK ; 80 sc_signal<Tcontext_t > ** in_COMMIT_EVENT_OOO_ENGINE_FRONT_END_ID ; 81 sc_signal<Tcontext_t > ** in_COMMIT_EVENT_OOO_ENGINE_CONTEXT_ID ; 82 sc_signal<Tdepth_t > ** in_COMMIT_EVENT_OOO_ENGINE_DEPTH ; 83 sc_signal<Tevent_type_t > ** in_COMMIT_EVENT_OOO_ENGINE_TYPE ; 84 sc_signal<Tcontrol_t > ** in_COMMIT_EVENT_OOO_ENGINE_IS_DELAY_SLOT ; 85 sc_signal<Taddress_t > ** in_COMMIT_EVENT_OOO_ENGINE_ADDRESS ; 86 sc_signal<Tcontrol_t > ** in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EPCR_VAL ; 87 sc_signal<Taddress_t > ** in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EPCR ; 88 sc_signal<Tcontrol_t > ** in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR_VAL ; 89 sc_signal<Tgeneral_data_t > ** in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR ; 90 sc_signal<Tcontrol_t > *** in_ISSUE_OOO_ENGINE_VAL ; 91 sc_signal<Tcontrol_t > *** out_ISSUE_OOO_ENGINE_ACK ; 92 sc_signal<Tcontext_t > *** in_ISSUE_OOO_ENGINE_FRONT_END_ID ; 93 sc_signal<Tcontext_t > *** in_ISSUE_OOO_ENGINE_CONTEXT_ID ; 94 sc_signal<Tpacket_t > *** in_ISSUE_OOO_ENGINE_PACKET_ID ; 95 sc_signal<Ttype_t > *** in_ISSUE_OOO_ENGINE_TYPE ; 96 sc_signal<Toperation_t > *** in_ISSUE_OOO_ENGINE_OPERATION ; 97 sc_signal<Tlsq_ptr_t > *** in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE ; 98 sc_signal<Tlsq_ptr_t > *** in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE ; 99 sc_signal<Tcontrol_t > *** in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT ; 100 sc_signal<Tgeneral_data_t > *** in_ISSUE_OOO_ENGINE_IMMEDIAT ; 101 sc_signal<Tcontrol_t > *** in_ISSUE_OOO_ENGINE_READ_RA ; 102 sc_signal<Tgeneral_address_t> *** in_ISSUE_OOO_ENGINE_NUM_REG_RA ; 103 sc_signal<Tcontrol_t > *** in_ISSUE_OOO_ENGINE_READ_RB ; 104 sc_signal<Tgeneral_address_t> *** in_ISSUE_OOO_ENGINE_NUM_REG_RB ; 105 sc_signal<Tcontrol_t > *** in_ISSUE_OOO_ENGINE_READ_RC ; 106 sc_signal<Tspecial_address_t> *** in_ISSUE_OOO_ENGINE_NUM_REG_RC ; 107 sc_signal<Tcontrol_t > *** in_ISSUE_OOO_ENGINE_WRITE_RD ; 108 sc_signal<Tgeneral_address_t> *** in_ISSUE_OOO_ENGINE_NUM_REG_RD ; 109 sc_signal<Tcontrol_t > *** in_ISSUE_OOO_ENGINE_WRITE_RE ; 110 sc_signal<Tspecial_address_t> *** in_ISSUE_OOO_ENGINE_NUM_REG_RE ; 111 sc_signal<Tcontrol_t > *** out_ISSUE_EXECUTE_LOOP_VAL ; 112 sc_signal<Tcontrol_t > *** in_ISSUE_EXECUTE_LOOP_ACK ; 113 sc_signal<Tcontext_t > *** out_ISSUE_EXECUTE_LOOP_CONTEXT_ID ; 114 sc_signal<Tcontext_t > *** out_ISSUE_EXECUTE_LOOP_FRONT_END_ID ; 115 sc_signal<Tcontext_t > *** out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID ; 116 sc_signal<Tpacket_t > *** out_ISSUE_EXECUTE_LOOP_PACKET_ID ; 117 sc_signal<Toperation_t > *** out_ISSUE_EXECUTE_LOOP_OPERATION ; 118 sc_signal<Ttype_t > *** out_ISSUE_EXECUTE_LOOP_TYPE ; 119 sc_signal<Tlsq_ptr_t > *** out_ISSUE_EXECUTE_LOOP_STORE_QUEUE_PTR_WRITE ; 120 sc_signal<Tlsq_ptr_t > *** out_ISSUE_EXECUTE_LOOP_LOAD_QUEUE_PTR_WRITE ; 121 sc_signal<Tcontrol_t > *** out_ISSUE_EXECUTE_LOOP_HAS_IMMEDIAT ; 122 sc_signal<Tgeneral_data_t > *** out_ISSUE_EXECUTE_LOOP_IMMEDIAT ; 123 sc_signal<Tcontrol_t > *** out_ISSUE_EXECUTE_LOOP_READ_RA ; 124 sc_signal<Tgeneral_address_t> *** out_ISSUE_EXECUTE_LOOP_NUM_REG_RA ; 125 sc_signal<Tcontrol_t > *** out_ISSUE_EXECUTE_LOOP_READ_RB ; 126 sc_signal<Tgeneral_address_t> *** out_ISSUE_EXECUTE_LOOP_NUM_REG_RB ; 127 sc_signal<Tcontrol_t > *** out_ISSUE_EXECUTE_LOOP_READ_RC ; 128 sc_signal<Tspecial_address_t> *** out_ISSUE_EXECUTE_LOOP_NUM_REG_RC ; 129 sc_signal<Tcontrol_t > *** out_ISSUE_EXECUTE_LOOP_WRITE_RD ; 130 sc_signal<Tgeneral_address_t> *** out_ISSUE_EXECUTE_LOOP_NUM_REG_RD ; 131 sc_signal<Tcontrol_t > *** out_ISSUE_EXECUTE_LOOP_WRITE_RE ; 132 sc_signal<Tspecial_address_t> *** out_ISSUE_EXECUTE_LOOP_NUM_REG_RE ; 133 sc_signal<Tcontrol_t > **** out_EXECUTE_OOO_ENGINE_VAL ; 134 sc_signal<Tcontrol_t > **** in_EXECUTE_OOO_ENGINE_ACK ; 135 sc_signal<Tcontext_t > **** out_EXECUTE_OOO_ENGINE_FRONT_END_ID ; 136 sc_signal<Tcontext_t > **** out_EXECUTE_OOO_ENGINE_CONTEXT_ID ; 137 sc_signal<Tpacket_t > **** out_EXECUTE_OOO_ENGINE_PACKET_ID ; 138 //sc_signal<Ttype_t > **** out_EXECUTE_OOO_ENGINE_TYPE ; 139 //sc_signal<Toperation_t > **** out_EXECUTE_OOO_ENGINE_OPERATION ; 140 sc_signal<Tspecial_data_t > **** out_EXECUTE_OOO_ENGINE_FLAGS ; 141 sc_signal<Texception_t > **** out_EXECUTE_OOO_ENGINE_EXCEPTION ; 142 sc_signal<Tcontrol_t > **** out_EXECUTE_OOO_ENGINE_NO_SEQUENCE ; 143 sc_signal<Taddress_t > **** out_EXECUTE_OOO_ENGINE_ADDRESS ; 144 sc_signal<Tgeneral_data_t > **** out_EXECUTE_OOO_ENGINE_DATA ; 145 sc_signal<Tcontrol_t > *** in_EXECUTE_EXECUTE_LOOP_VAL ; 146 sc_signal<Tcontrol_t > *** out_EXECUTE_EXECUTE_LOOP_ACK ; 147 sc_signal<Tcontext_t > *** in_EXECUTE_EXECUTE_LOOP_CONTEXT_ID ; 148 sc_signal<Tcontext_t > *** in_EXECUTE_EXECUTE_LOOP_FRONT_END_ID ; 149 sc_signal<Tcontext_t > *** in_EXECUTE_EXECUTE_LOOP_OOO_ENGINE_ID ; 150 sc_signal<Tpacket_t > *** in_EXECUTE_EXECUTE_LOOP_PACKET_ID ; 151 //sc_signal<Toperation_t > *** in_EXECUTE_EXECUTE_LOOP_OPERATION ; 152 //sc_signal<Ttype_t > *** in_EXECUTE_EXECUTE_LOOP_TYPE ; 153 sc_signal<Tspecial_data_t > *** in_EXECUTE_EXECUTE_LOOP_FLAGS ; 154 sc_signal<Texception_t > *** in_EXECUTE_EXECUTE_LOOP_EXCEPTION ; 155 sc_signal<Tcontrol_t > *** in_EXECUTE_EXECUTE_LOOP_NO_SEQUENCE ; 156 sc_signal<Taddress_t > *** in_EXECUTE_EXECUTE_LOOP_ADDRESS ; 157 sc_signal<Tgeneral_data_t > *** in_EXECUTE_EXECUTE_LOOP_DATA ; 158 sc_signal<Tcontrol_t > *** in_INSERT_OOO_ENGINE_VAL ; 159 sc_signal<Tcontrol_t > *** out_INSERT_OOO_ENGINE_ACK ; 160 sc_signal<Tcontrol_t > *** in_INSERT_OOO_ENGINE_RD_USE ; 161 sc_signal<Tgeneral_address_t> *** in_INSERT_OOO_ENGINE_RD_NUM_REG ; 162 sc_signal<Tcontrol_t > *** in_INSERT_OOO_ENGINE_RE_USE ; 163 sc_signal<Tspecial_address_t> *** in_INSERT_OOO_ENGINE_RE_NUM_REG ; 164 sc_signal<Tcontrol_t > **** out_INSERT_EXECUTE_LOOP_VAL ; 165 sc_signal<Tcontrol_t > **** in_INSERT_EXECUTE_LOOP_ACK ; 166 sc_signal<Tcontrol_t > **** out_INSERT_EXECUTE_LOOP_RD_USE ; 167 sc_signal<Tgeneral_address_t> **** out_INSERT_EXECUTE_LOOP_RD_NUM_REG ; 168 sc_signal<Tcontrol_t > **** out_INSERT_EXECUTE_LOOP_RE_USE ; 169 sc_signal<Tspecial_address_t> **** out_INSERT_EXECUTE_LOOP_RE_NUM_REG ; 50 170 51 171 ALLOC2_SC_SIGNAL(out_RENAME_FRONT_END_ID ,"out_RENAME_FRONT_END_ID ",Tcontext_t ,_param->_nb_front_end,_param->_nb_inst_decod[it1]); … … 88 208 ALLOC1_SC_SIGNAL( in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR_VAL ," in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR_VAL ",Tcontrol_t ,_param->_nb_ooo_engine); 89 209 ALLOC1_SC_SIGNAL( in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR ," in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR ",Tgeneral_data_t ,_param->_nb_ooo_engine); 90 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_VAL ," in_ISSUE_OOO_ENGINE_VAL ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);91 ALLOC2_SC_SIGNAL(out_ISSUE_OOO_ENGINE_ACK ,"out_ISSUE_OOO_ENGINE_ACK ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);92 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_FRONT_END_ID ," in_ISSUE_OOO_ENGINE_FRONT_END_ID ",Tcontext_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);93 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_CONTEXT_ID ," in_ISSUE_OOO_ENGINE_CONTEXT_ID ",Tcontext_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);94 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_PACKET_ID ," in_ISSUE_OOO_ENGINE_PACKET_ID ",Tpacket_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);95 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_TYPE ," in_ISSUE_OOO_ENGINE_TYPE ",Ttype_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);96 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_OPERATION ," in_ISSUE_OOO_ENGINE_OPERATION ",Toperation_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);97 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE ," in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE ",Tlsq_ptr_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);98 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE ," in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE ",Tlsq_ptr_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);99 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT ," in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);100 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_IMMEDIAT ," in_ISSUE_OOO_ENGINE_IMMEDIAT ",Tgeneral_data_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);101 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RA ," in_ISSUE_OOO_ENGINE_READ_RA ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);102 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RA ," in_ISSUE_OOO_ENGINE_NUM_REG_RA ",Tgeneral_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);103 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RB ," in_ISSUE_OOO_ENGINE_READ_RB ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);104 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RB ," in_ISSUE_OOO_ENGINE_NUM_REG_RB ",Tgeneral_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);105 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RC ," in_ISSUE_OOO_ENGINE_READ_RC ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);106 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RC ," in_ISSUE_OOO_ENGINE_NUM_REG_RC ",Tspecial_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);107 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RD ," in_ISSUE_OOO_ENGINE_WRITE_RD ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);108 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RD ," in_ISSUE_OOO_ENGINE_NUM_REG_RD ",Tgeneral_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);109 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RE ," in_ISSUE_OOO_ENGINE_WRITE_RE ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);110 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RE ," in_ISSUE_OOO_ENGINE_NUM_REG_RE ",Tspecial_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);210 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_VAL ," in_ISSUE_OOO_ENGINE_VAL ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 211 ALLOC2_SC_SIGNAL(out_ISSUE_OOO_ENGINE_ACK ,"out_ISSUE_OOO_ENGINE_ACK ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 212 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_FRONT_END_ID ," in_ISSUE_OOO_ENGINE_FRONT_END_ID ",Tcontext_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 213 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_CONTEXT_ID ," in_ISSUE_OOO_ENGINE_CONTEXT_ID ",Tcontext_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 214 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_PACKET_ID ," in_ISSUE_OOO_ENGINE_PACKET_ID ",Tpacket_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 215 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_TYPE ," in_ISSUE_OOO_ENGINE_TYPE ",Ttype_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 216 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_OPERATION ," in_ISSUE_OOO_ENGINE_OPERATION ",Toperation_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 217 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE ," in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE ",Tlsq_ptr_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 218 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE ," in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE ",Tlsq_ptr_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 219 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT ," in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 220 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_IMMEDIAT ," in_ISSUE_OOO_ENGINE_IMMEDIAT ",Tgeneral_data_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 221 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RA ," in_ISSUE_OOO_ENGINE_READ_RA ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 222 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RA ," in_ISSUE_OOO_ENGINE_NUM_REG_RA ",Tgeneral_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 223 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RB ," in_ISSUE_OOO_ENGINE_READ_RB ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 224 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RB ," in_ISSUE_OOO_ENGINE_NUM_REG_RB ",Tgeneral_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 225 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RC ," in_ISSUE_OOO_ENGINE_READ_RC ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 226 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RC ," in_ISSUE_OOO_ENGINE_NUM_REG_RC ",Tspecial_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 227 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RD ," in_ISSUE_OOO_ENGINE_WRITE_RD ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 228 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RD ," in_ISSUE_OOO_ENGINE_NUM_REG_RD ",Tgeneral_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 229 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RE ," in_ISSUE_OOO_ENGINE_WRITE_RE ",Tcontrol_t ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 230 ALLOC2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RE ," in_ISSUE_OOO_ENGINE_NUM_REG_RE ",Tspecial_address_t,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 111 231 ALLOC2_SC_SIGNAL(out_ISSUE_EXECUTE_LOOP_VAL ,"out_ISSUE_EXECUTE_LOOP_VAL ",Tcontrol_t ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]); 112 232 ALLOC2_SC_SIGNAL( in_ISSUE_EXECUTE_LOOP_ACK ," in_ISSUE_EXECUTE_LOOP_ACK ",Tcontrol_t ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]); … … 168 288 ALLOC3_SC_SIGNAL(out_INSERT_EXECUTE_LOOP_RE_USE ,"out_INSERT_EXECUTE_LOOP_RE_USE ",Tcontrol_t ,_param->_nb_execute_loop,_param->_execute_loop_nb_ooo_engine[it1],_param->_execute_loop_nb_inst_insert[it1][it2]); 169 289 ALLOC3_SC_SIGNAL(out_INSERT_EXECUTE_LOOP_RE_NUM_REG ,"out_INSERT_EXECUTE_LOOP_RE_NUM_REG ",Tspecial_address_t ,_param->_nb_execute_loop,_param->_execute_loop_nb_ooo_engine[it1],_param->_execute_loop_nb_inst_insert[it1][it2]); 170 171 290 172 291 /******************************************************** … … 229 348 INSTANCE1_SC_SIGNAL(_Core_Glue, in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR_VAL ,_param->_nb_ooo_engine); 230 349 INSTANCE1_SC_SIGNAL(_Core_Glue, in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR ,_param->_nb_ooo_engine); 231 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_VAL ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);232 INSTANCE2_SC_SIGNAL(_Core_Glue,out_ISSUE_OOO_ENGINE_ACK ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);350 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_VAL ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 351 INSTANCE2_SC_SIGNAL(_Core_Glue,out_ISSUE_OOO_ENGINE_ACK ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 233 352 if (_param->_have_port_front_end_id) 234 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_FRONT_END_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);353 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_FRONT_END_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 235 354 if (_param->_have_port_context_id) 236 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_CONTEXT_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);355 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_CONTEXT_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 237 356 if (_param->_have_port_rob_ptr) 238 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_PACKET_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);239 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_TYPE ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);240 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_OPERATION ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);241 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);357 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_PACKET_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 358 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_TYPE ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 359 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_OPERATION ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 360 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 242 361 if (_param->_have_port_load_queue_ptr) 243 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);244 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);245 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_IMMEDIAT ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);246 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_READ_RA ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);247 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RA ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);248 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_READ_RB ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);249 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RB ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);250 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_READ_RC ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);251 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RC ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);252 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_WRITE_RD ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);253 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RD ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);254 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_WRITE_RE ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);255 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RE ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);362 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 363 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 364 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_IMMEDIAT ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 365 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_READ_RA ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 366 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RA ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 367 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_READ_RB ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 368 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RB ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 369 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_READ_RC ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 370 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RC ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 371 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_WRITE_RD ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 372 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RD ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 373 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_WRITE_RE ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 374 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_OOO_ENGINE_NUM_REG_RE ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 256 375 INSTANCE2_SC_SIGNAL(_Core_Glue,out_ISSUE_EXECUTE_LOOP_VAL ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]); 257 376 INSTANCE2_SC_SIGNAL(_Core_Glue, in_ISSUE_EXECUTE_LOOP_ACK ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]); … … 476 595 477 596 for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i) 478 for (uint32_t j=0; j<_param->_nb_inst_issue [i]; ++j)597 for (uint32_t j=0; j<_param->_nb_inst_issue_queue[i]; ++j) 479 598 { 480 599 Tcontext_t front_end_id = rand() % _param->_ooo_engine_nb_front_end [i]; … … 714 833 DELETE1_SC_SIGNAL( in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR_VAL ,_param->_nb_ooo_engine); 715 834 DELETE1_SC_SIGNAL( in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR ,_param->_nb_ooo_engine); 716 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_VAL ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);717 DELETE2_SC_SIGNAL(out_ISSUE_OOO_ENGINE_ACK ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);718 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_FRONT_END_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);719 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_CONTEXT_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);720 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_PACKET_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);721 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_TYPE ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);722 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_OPERATION ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);723 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);724 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);725 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);726 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_IMMEDIAT ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);727 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RA ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);728 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RA ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);729 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RB ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);730 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RB ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);731 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RC ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);732 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RC ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);733 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RD ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);734 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RD ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);735 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RE ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);736 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RE ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);835 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_VAL ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 836 DELETE2_SC_SIGNAL(out_ISSUE_OOO_ENGINE_ACK ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 837 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_FRONT_END_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 838 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_CONTEXT_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 839 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_PACKET_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 840 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_TYPE ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 841 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_OPERATION ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 842 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 843 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 844 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 845 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_IMMEDIAT ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 846 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RA ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 847 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RA ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 848 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RB ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 849 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RB ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 850 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RC ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 851 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RC ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 852 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RD ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 853 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RD ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 854 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RE ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 855 DELETE2_SC_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RE ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 737 856 DELETE2_SC_SIGNAL(out_ISSUE_EXECUTE_LOOP_VAL ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]); 738 857 DELETE2_SC_SIGNAL( in_ISSUE_EXECUTE_LOOP_ACK ,_param->_nb_execute_loop,_param->_nb_read_unit[it1]); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/include/Core_Glue.h
r111 r117 204 204 205 205 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 206 private : generic::priority::Priority ** _priority_ooo_engine; //[nb_execute_loop] 206 //private : generic::priority::Priority ** _priority_ooo_engine; //[nb_execute_loop] 207 private : generic::priority::Priority * _priority_ooo_engine; 207 208 private : generic::priority::Priority ** _priority_read_unit ; //[nb_execute_loop] 208 209 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/include/Parameters.h
r88 r117 18 18 namespace core_glue { 19 19 20 21 20 class Parameters : public morpheo::behavioural::Parameters 22 21 { … … 33 32 public : uint32_t * _ooo_engine_nb_inst_branch_complete ;//[nb_ooo_engine] 34 33 public : uint32_t * _nb_inst_insert ;//[nb_ooo_engine] 35 public : uint32_t * _nb_inst_issue ;//[nb_ooo_engine] 34 public : uint32_t * _nb_inst_reexecute ;//[nb_ooo_engine] 35 public : uint32_t * _nb_inst_issue_queue ;//[nb_ooo_engine] 36 public : uint32_t * _nb_inst_issue_slot ;//[nb_ooo_engine] 36 37 public : uint32_t ** _nb_inst_execute ;//[nb_ooo_engine][ooo_engine_nb_execute_loop] 38 public : bool * _issue_queue_in_order ;//[nb_ooo_engine] 37 39 public : uint32_t * _nb_read_unit ;//[nb_execute_loop] 38 40 public : uint32_t * _nb_write_unit ;//[nb_execute_loop] … … 50 52 public : Tpriority_t _dispatch_priority ; 51 53 public : Tload_balancing_t _dispatch_load_balancing ; 52 public : bool **** _table_dispatch ;//[nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit] 54 public : bool **** _table_dispatch ;//[nb_ooo_engine][nb_inst_issue_slot][execute_loop][nb_read_unit] 55 public : bool *** _table_issue_type ;// [execute_loop][nb_read_unit][nb_type] 53 56 public : uint32_t ** _translate_ooo_engine_num_front_end ;//[nb_ooo_engine][ooo_engine_nb_front_end] 54 57 public : uint32_t ** _translate_ooo_engine_num_execute_loop;//[nb_ooo_engine][ooo_engine_nb_execute_loop] … … 61 64 62 65 public : uint32_t ** _execute_loop_nb_inst_insert ;//[nb_execute_loop][execute_loop_nb_ooo_engine] 63 public : uint32_t ** _execute_loop_nb_inst_issue 66 public : uint32_t ** _execute_loop_nb_inst_issue_slot ;//[nb_execute_loop][execute_loop_nb_ooo_engine] 64 67 //public : uint32_t * _link_execute_loop_with_ooo_engine ;//[nb_ooo_engine] 65 68 … … 70 73 public : uint32_t _max_nb_write_unit ; 71 74 public : uint32_t _max_nb_inst_insert ; 72 public : uint32_t _max_nb_inst_issue ; 75 public : uint32_t _max_nb_inst_issue_queue ; 76 public : uint32_t _max_nb_inst_issue_slot ; 73 77 public : uint32_t _max_nb_read_unit ; 74 78 … … 86 90 uint32_t * ooo_engine_nb_inst_branch_complete ,//[nb_ooo_engine] 87 91 uint32_t * nb_inst_insert ,//[nb_ooo_engine] 88 uint32_t * nb_inst_issue ,//[nb_ooo_engine] 92 uint32_t * nb_inst_reexecute ,//[nb_ooo_engine] 93 uint32_t * nb_inst_issue_queue ,//[nb_ooo_engine] 94 uint32_t * nb_inst_issue_slot ,//[nb_ooo_engine] 89 95 uint32_t ** nb_inst_execute ,//[nb_ooo_engine][ooo_engine_nb_execute_loop] 96 bool * issue_queue_in_order ,//[nb_ooo_engine] 90 97 uint32_t * nb_read_unit ,//[nb_execute_loop] 91 98 uint32_t * nb_write_unit ,//[nb_execute_loop] … … 100 107 Tpriority_t dispatch_priority , 101 108 Tload_balancing_t dispatch_load_balancing , 102 bool **** table_dispatch ,//[nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit] 109 bool **** table_dispatch ,//[nb_ooo_engine][nb_inst_issue_slot][execute_loop][nb_read_unit] 110 bool *** table_issue_type ,// [execute_loop][nb_read_unit][nb_type] 111 // bool *** table_issue_thread ,// [execute_loop][nb_read_unit][nb_thread] 103 112 uint32_t ** translate_ooo_engine_num_front_end ,//[nb_ooo_engine][ooo_engine_nb_front_end] 104 113 uint32_t ** translate_ooo_engine_num_execute_loop,//[nb_ooo_engine][ooo_engine_nb_execute_loop] -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue.cpp
r105 r117 160 160 161 161 for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i) 162 for (uint32_t j=0; j<_param->_nb_inst_issue [i]; ++j)162 for (uint32_t j=0; j<_param->_nb_inst_issue_queue [i]; ++j) 163 163 { 164 164 sensitive << (*(in_ISSUE_OOO_ENGINE_VAL [i][j])) -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_allocation.cpp
r112 r117 133 133 // ~~~~~[ Interface : "issue" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 134 134 { 135 ALLOC2_INTERFACE_BEGIN("issue_ooo_engine",SOUTH,IN ,_("Issue : request between rename unit and execute loop"),_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);136 137 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_VAL ,"VAL" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);138 _ALLOC2_SIGNAL_OUT(out_ISSUE_OOO_ENGINE_ACK ,"ACK" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);139 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_FRONT_END_ID ,"FRONT_END_ID" ,Tcontext_t ,_param->_size_front_end_id ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);140 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_CONTEXT_ID ,"CONTEXT_ID" ,Tcontext_t ,_param->_size_context_id ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);141 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_PACKET_ID ,"PACKET_ID" ,Tpacket_t ,_param->_size_rob_ptr ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);142 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_TYPE ,"TYPE" ,Ttype_t ,_param->_size_type ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);143 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_OPERATION ,"OPERATION" ,Toperation_t ,_param->_size_operation ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);144 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE ,"STORE_QUEUE_PTR_WRITE",Tlsq_ptr_t ,_param->_size_store_queue_ptr ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);145 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE ,"LOAD_QUEUE_PTR_WRITE" ,Tlsq_ptr_t ,_param->_size_load_queue_ptr ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);146 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT ,"HAS_IMMEDIAT" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);147 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_IMMEDIAT ,"IMMEDIAT" ,Tgeneral_data_t ,_param->_size_general_data ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);148 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_READ_RA ,"READ_RA" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);149 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RA ,"NUM_REG_RA" ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);150 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_READ_RB ,"READ_RB" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);151 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RB ,"NUM_REG_RB" ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);152 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_READ_RC ,"READ_RC" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);153 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RC ,"NUM_REG_RC" ,Tspecial_address_t,_param->_size_special_register,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);154 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_WRITE_RD ,"WRITE_RD" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);155 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RD ,"NUM_REG_RD" ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);156 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_WRITE_RE ,"WRITE_RE" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);157 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RE ,"NUM_REG_RE" ,Tspecial_address_t,_param->_size_special_register,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);158 159 ALLOC2_INTERFACE_END(_param->_nb_ooo_engine,_param->_nb_inst_issue [it1]);135 ALLOC2_INTERFACE_BEGIN("issue_ooo_engine",SOUTH,IN ,_("Issue : request between rename unit and execute loop"),_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 136 137 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_VAL ,"VAL" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 138 _ALLOC2_SIGNAL_OUT(out_ISSUE_OOO_ENGINE_ACK ,"ACK" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 139 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_FRONT_END_ID ,"FRONT_END_ID" ,Tcontext_t ,_param->_size_front_end_id ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 140 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_CONTEXT_ID ,"CONTEXT_ID" ,Tcontext_t ,_param->_size_context_id ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 141 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_PACKET_ID ,"PACKET_ID" ,Tpacket_t ,_param->_size_rob_ptr ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 142 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_TYPE ,"TYPE" ,Ttype_t ,_param->_size_type ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 143 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_OPERATION ,"OPERATION" ,Toperation_t ,_param->_size_operation ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 144 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE ,"STORE_QUEUE_PTR_WRITE",Tlsq_ptr_t ,_param->_size_store_queue_ptr ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 145 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE ,"LOAD_QUEUE_PTR_WRITE" ,Tlsq_ptr_t ,_param->_size_load_queue_ptr ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 146 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT ,"HAS_IMMEDIAT" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 147 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_IMMEDIAT ,"IMMEDIAT" ,Tgeneral_data_t ,_param->_size_general_data ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 148 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_READ_RA ,"READ_RA" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 149 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RA ,"NUM_REG_RA" ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 150 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_READ_RB ,"READ_RB" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 151 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RB ,"NUM_REG_RB" ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 152 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_READ_RC ,"READ_RC" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 153 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RC ,"NUM_REG_RC" ,Tspecial_address_t,_param->_size_special_register,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 154 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_WRITE_RD ,"WRITE_RD" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 155 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RD ,"NUM_REG_RD" ,Tgeneral_address_t,_param->_size_general_register,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 156 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_WRITE_RE ,"WRITE_RE" ,Tcontrol_t ,1 ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 157 _ALLOC2_SIGNAL_IN ( in_ISSUE_OOO_ENGINE_NUM_REG_RE ,"NUM_REG_RE" ,Tspecial_address_t,_param->_size_special_register,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 158 159 ALLOC2_INTERFACE_END(_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1]); 160 160 } 161 161 … … 257 257 258 258 // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 259 _priority_ooo_engine = new generic::priority::Priority * [_param->_nb_execute_loop]; 259 _priority_ooo_engine = new generic::priority::Priority (_name+"_priority_ooo_engine", 260 _param->_dispatch_priority , 261 _param->_dispatch_load_balancing, 262 _param->_nb_ooo_engine , 263 _param->_nb_inst_issue_slot , 264 _param->_nb_ooo_engine 265 ); 266 267 // _priority_ooo_engine = new generic::priority::Priority * [_param->_nb_execute_loop]; 260 268 _priority_read_unit = new generic::priority::Priority * [_param->_nb_execute_loop]; 261 269 262 270 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 263 271 { 264 _priority_ooo_engine [i] = new generic::priority::Priority (_name+"_priority_ooo_engine_"+toString(i),265 _param->_dispatch_priority ,266 _param->_dispatch_load_balancing,267 _param->_execute_loop_nb_ooo_engine[i],268 _param->_execute_loop_nb_inst_issue[i],269 _param->_execute_loop_nb_ooo_engine[i]270 );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 // ); 271 279 272 280 _priority_read_unit [i] = new generic::priority::Priority (_name+"_priority_read_unit_"+toString(i), -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_deallocation.cpp
r111 r117 70 70 DELETE1_SIGNAL( in_COMMIT_EVENT_OOO_ENGINE_ADDRESS_EEAR ,_param->_nb_ooo_engine,_param->_size_spr); 71 71 72 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_VAL ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],1);73 DELETE2_SIGNAL(out_ISSUE_OOO_ENGINE_ACK ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],1);74 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_FRONT_END_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],_param->_size_front_end_id);75 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_CONTEXT_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],_param->_size_context_id);76 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_PACKET_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],_param->_size_rob_ptr);77 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_TYPE ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],_param->_size_type);78 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_OPERATION ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],_param->_size_operation);79 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],_param->_size_store_queue_ptr);80 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],_param->_size_load_queue_ptr);81 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],1);82 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_IMMEDIAT ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],_param->_size_general_data);83 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RA ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],1);84 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RA ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],_param->_size_general_register);85 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RB ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],1);86 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RB ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],_param->_size_general_register);87 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RC ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],1);88 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RC ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],_param->_size_special_register);89 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RD ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],1);90 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RD ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],_param->_size_general_register);91 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RE ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],1);92 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RE ,_param->_nb_ooo_engine,_param->_nb_inst_issue [it1],_param->_size_special_register);72 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_VAL ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1); 73 DELETE2_SIGNAL(out_ISSUE_OOO_ENGINE_ACK ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1); 74 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_FRONT_END_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_front_end_id); 75 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_CONTEXT_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_context_id); 76 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_PACKET_ID ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_rob_ptr); 77 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_TYPE ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_type); 78 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_OPERATION ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_operation); 79 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_STORE_QUEUE_PTR_WRITE ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_store_queue_ptr); 80 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_LOAD_QUEUE_PTR_WRITE ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_load_queue_ptr); 81 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_HAS_IMMEDIAT ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1); 82 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_IMMEDIAT ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_general_data); 83 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RA ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1); 84 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RA ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_general_register); 85 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RB ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1); 86 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RB ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_general_register); 87 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_READ_RC ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1); 88 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RC ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_special_register); 89 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RD ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1); 90 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RD ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_general_register); 91 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_WRITE_RE ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],1); 92 DELETE2_SIGNAL( in_ISSUE_OOO_ENGINE_NUM_REG_RE ,_param->_nb_ooo_engine,_param->_nb_inst_issue_queue[it1],_param->_size_special_register); 93 93 94 94 DELETE2_SIGNAL(out_ISSUE_EXECUTE_LOOP_VAL ,_param->_nb_execute_loop,_param->_nb_read_unit[it1],1); … … 160 160 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 161 161 { 162 162 // delete _priority_ooo_engine [i]; 163 163 delete _priority_read_unit [i]; 164 164 } 165 165 // delete [] _priority_ooo_engine; 166 166 delete [] _priority_read_unit ; 167 delete _priority_ooo_engine; 167 168 168 169 delete _component; -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_genMealy_issue.cpp
r115 r117 15 15 namespace core_glue { 16 16 17 /* 18 OOO SLOT Execute Loop 19 ---+ +----- 20 | +-----+ +-----+ | 21 -+->| | | |-+-> 22 | | |-()->| | | 23 -+->| _ _ | | |-+-> 24 | | _X_ |-()->| | | 25 -+->| | | | +----- 26 | | |-()->| | 27 -+->| | | | +----- 28 | +-----+ | | | 29 ---+ crossbar | _ _ |-+-> 30 | _X_ | | 31 ---+ | |-+-> 32 | +-----+ | | | 33 -+->| | | | +----- 34 | | |-()->| | 35 -+->| _ _ | | | +----- 36 | | _X_ |-()->| | | 37 -+->| | | |-+-> 38 | | |-()->| | | 39 -+->| | | |-+-> 40 | +-----+ +-----+ | 41 ---+ crossbar dispatch +----- 42 */ 43 44 45 // class num_read_unit_t 46 // { 47 // public : const uint32_t num_execute_loop; 48 // public : const uint32_t num_read_unit; 49 50 // public : num_read_unit_t (uint32_t num_execute_loop, 51 // uint32_t num_read_unit) : 52 // this->num_execute_loop (num_execute_loop), 53 // this->num_read_unit (num_read_unit ) 54 // {}; 55 // } 17 56 18 57 #undef FUNCTION … … 23 62 log_function(Core_Glue,FUNCTION,_name.c_str()); 24 63 25 Tcontrol_t ISSUE_OOO_ENGINE_ACK [_param->_nb_ooo_engine ][_param->_max_nb_inst_issue]; 26 Tcontrol_t ISSUE_EXECUTE_LOOP_VAL [_param->_nb_execute_loop][_param->_max_nb_read_unit ]; 27 bool READ_UNIT_ENABLE [_param->_nb_execute_loop][_param->_max_nb_read_unit ]; 28 64 Tcontrol_t ISSUE_OOO_ENGINE_ACK [_param->_nb_ooo_engine ][_param->_max_nb_inst_issue_queue]; 65 Tcontrol_t ISSUE_EXECUTE_LOOP_VAL [_param->_nb_execute_loop][_param->_max_nb_read_unit]; 66 Tcontrol_t READ_UNIT_ENABLE [_param->_nb_execute_loop][_param->_max_nb_read_unit]; 67 Tcontrol_t SLOT_ENABLE [_param->_nb_ooo_engine ][_param->_max_nb_inst_issue_slot]; 68 29 69 // Init -> all at 0 30 70 for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i) 31 for (uint32_t j=0; j<_param->_nb_inst_issue[i]; ++j) 32 ISSUE_OOO_ENGINE_ACK [i][j] = 0; 71 { 72 for (uint32_t j=0; j<_param->_nb_inst_issue_queue[i]; ++j) 73 ISSUE_OOO_ENGINE_ACK [i][j] = 0; 74 for (uint32_t j=0; j<_param->_nb_inst_issue_slot[i]; ++j) 75 SLOT_ENABLE [i][j] = 1; 76 } 77 33 78 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 34 79 for (uint32_t j=0; j<_param->_nb_read_unit[i]; ++j) 35 80 { 36 81 ISSUE_EXECUTE_LOOP_VAL [i][j] = 0; 82 37 83 // Read unit is enable is signal ack is set 38 84 READ_UNIT_ENABLE [i][j] = (PORT_READ(in_ISSUE_EXECUTE_LOOP_ACK [i][j]) == 1); 39 log_printf(TRACE,Core_Glue,FUNCTION," * Read_unit [%d][%d] : %d",i,j,READ_UNIT_ENABLE[i][j]);85 log_printf(TRACE,Core_Glue,FUNCTION," * Read_unit [%d][%d].enable : %d",i,j,READ_UNIT_ENABLE[i][j]); 40 86 } 41 87 88 // std::list<num_read_unit_t> SLOT_TYPE [_param->_nb_ooo_engine][_param->_max_nb_inst_issue_slot][_param->_nb_type]; 89 90 // // for each read_unit 91 // for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 92 // for (uint32_t j=0; j<_param->_nb_read_unit[i]; ++j) 93 // // test if this read_unit can receive an instruction 94 // if (PORT_READ(in_ISSUE_EXECUTE_LOOP_ACK [i][j]) == 1) 95 // for (uint32_t x=0; x<_nb_ooo_engine; ++x) 96 // for (uint32_t y=0; y<_nb_inst_issue_slot[y]; ++y) 97 // // test if can dispatch 98 // if (_param->_table_dispatch [x][y][i][j]) 99 // for (uint32_t k=0;k<_param->_nb_type; ++k) 100 // // Can receive this type 101 // if (_param->_table_dispatch [i][j][k]) 102 // SLOT_TYPE[x][y][k].push_back(num_read_unit_t(i,j)); 103 104 // // Select an issue_slot of an ooo_engine 105 // std::list<generic::priority::select_t> * select_ooo_engine = _priority_ooo_engine->select(); 106 // for (std::list<generic::priority::select_t>::iterator it_ooo_engine=select_ooo_engine->begin(); 107 // it_ooo_engine!=select_ooo_engine->end(); 108 // ++it_ooo_engine) 109 // { 110 // // ... get id of the most priotary 111 // const uint32_t num_ooo_engine = it_ooo_engine->grp; 112 // const uint32_t num_inst_issue_slot = it_ooo_engine->elt; 113 114 // // Test if this ooo_engine is enable (can be desable if issue in_order) 115 // if (OOO_ENGINE_ENABLE[num_ooo_engine]) 116 // { 117 118 // } 119 // } 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) 136 { 137 log_printf(TRACE,Core_Glue,FUNCTION," * num_inst_issue_slot : %d",num_inst_issue_slot); 138 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 Tcontrol_t ack = READ_UNIT_ENABLE [num_execute_loop][num_read_unit]; 147 148 log_printf(TRACE,Core_Glue,FUNCTION," * num_execute_loop : %d",num_execute_loop); 149 log_printf(TRACE,Core_Glue,FUNCTION," * num_read_unit : %d",num_read_unit ); 150 log_printf(TRACE,Core_Glue,FUNCTION," * read_unit_enable : %d",ack ); 151 152 // test if : 153 // * read_unit can accept an instruction (valid and no previous instruction) 154 // * slot can issue an instruction at this read_unit 155 // * read_unit can accept this type 156 if (ack and 157 _param->_table_dispatch [num_ooo_engine][num_inst_issue_slot][num_execute_loop][num_read_unit] and 158 _param->_table_issue_type [num_execute_loop][num_read_unit][type]) 159 { 160 log_printf(TRACE,Core_Glue,FUNCTION," * find !!!"); 161 162 // find ! 163 // Transaction 164 READ_UNIT_ENABLE [num_execute_loop][num_read_unit] = false; // now, this read_unit is busy 165 ISSUE_EXECUTE_LOOP_VAL [num_execute_loop][num_read_unit] = 1; // = val 166 ISSUE_OOO_ENGINE_ACK [num_ooo_engine][num_inst_issue_queue] = 1; // = ack 167 SLOT_ENABLE [num_ooo_engine][num_inst_issue_slot] = false; // now this slot is used 168 169 if (_param->_have_port_context_id) 170 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])); 171 if (_param->_have_port_front_end_id) 172 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])); 173 if (_param->_have_port_ooo_engine_id) 174 { 175 Tcontext_t ooo_engine_id = 0; 176 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID [num_execute_loop][num_read_unit],ooo_engine_id); 177 } 178 if (_param->_have_port_rob_ptr) 179 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])); 180 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])); 181 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_TYPE [num_execute_loop][num_read_unit],type); 182 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])); 183 if (_param->_have_port_load_queue_ptr) 184 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])); 185 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])); 186 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])); 187 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])); 188 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])); 189 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])); 190 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])); 191 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])); 192 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])); 193 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])); 194 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])); 195 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])); 196 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])); 197 198 199 find = true; 200 break; 201 } 202 //if (find) 203 // break; 204 } 205 if (find) 206 break; 207 } 208 if (find) 209 break; 210 } 211 212 if (_param->_issue_queue_in_order [num_ooo_engine] and 213 not find and 214 (num_inst_issue_queue >= _param->_nb_inst_reexecute [num_ooo_engine])) 215 { 216 log_printf(TRACE,Core_Glue,FUNCTION," * stop scan !!!"); 217 218 break; // stop scan 219 } 220 } 221 222 // Write output 223 for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i) 224 for (uint32_t j=0; j<_param->_nb_inst_issue_queue[i]; ++j) 225 PORT_WRITE(out_ISSUE_OOO_ENGINE_ACK [i][j], ISSUE_OOO_ENGINE_ACK [i][j]); 226 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 227 for (uint32_t j=0; j<_param->_nb_read_unit[i]; ++j) 228 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_VAL [i][j], ISSUE_EXECUTE_LOOP_VAL [i][j]); 229 230 log_end(Core_Glue,FUNCTION); 231 }; 232 233 }; // end namespace core_glue 234 }; // end namespace core 235 236 }; // end namespace behavioural 237 }; // end namespace morpheo 238 #endif 239 240 /* 241 bool OOO_ENGINE_ENABLE [_param->_nb_ooo_engine ]; 242 Tcontrol_t SLOT_ENABLE [_param->_nb_ooo_engine ][_param->_max_nb_inst_issue_slot]; 243 bool READ_UNIT_ENABLE [_param->_nb_execute_loop][_param->_max_nb_read_unit]; 244 245 // Init -> all at 0 246 for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i) 247 { 248 OOO_ENGINE_ENABLE [i] = true; 249 250 for (uint32_t j=0; j<_param->_nb_inst_issue_slot[i]; ++j) 251 SLOT_ENABLE [i][j] = 1; 252 } 253 254 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 255 for (uint32_t j=0; j<_param->_nb_read_unit[i]; ++j) 256 { 257 // Read unit is enable is signal ack is set 258 READ_UNIT_ENABLE [i][j] = (PORT_READ(in_ISSUE_EXECUTE_LOOP_ACK [i][j]) == 1); 259 log_printf(TRACE,Core_Glue,FUNCTION," * Read_unit [%d][%d].enable : %d",i,j,READ_UNIT_ENABLE[i][j]); 260 } 261 262 263 // for each execute_loop 42 264 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 43 265 { 44 log_printf(TRACE,Core_Glue,FUNCTION," * execute_loop [%d]",i); 45 46 // for each issue of each ooo_engine ... 47 std::list<generic::priority::select_t> * select_ooo_engine = _priority_ooo_engine[i]->select(); 48 for (std::list<generic::priority::select_t>::iterator it_ooo_engine=select_ooo_engine->begin(); 49 it_ooo_engine!=select_ooo_engine->end(); 50 ++it_ooo_engine) 266 // Scan all read_unit 267 std::list<generic::priority::select_t> * select_read_unit = _priority_read_unit[i]->select(); 268 for (std::list<generic::priority::select_t>::iterator it_read_unit=select_read_unit->begin(); 269 it_read_unit!=select_read_unit->end(); 270 ++it_read_unit) 51 271 { 52 // get id 53 const uint32_t ooo_engine_id = it_ooo_engine->grp; 54 const uint32_t num_ooo_engine = _param->_translate_execute_loop_num_ooo_engine [i][ooo_engine_id]; 55 const uint32_t num_inst_issue = it_ooo_engine->elt; 56 57 log_printf(TRACE,Core_Glue,FUNCTION," * num_ooo_engine [%d] (id -> %d)",num_ooo_engine, ooo_engine_id); 58 log_printf(TRACE,Core_Glue,FUNCTION," * num_inst_issue : %d",num_inst_issue); 59 60 Tcontrol_t ooo_engine_val = PORT_READ(in_ISSUE_OOO_ENGINE_VAL [num_ooo_engine][num_inst_issue]); 61 62 log_printf(TRACE,Core_Glue,FUNCTION," * ISSUE_OOO_ENGINE_VAL : %d",ooo_engine_val); 63 64 // test if have a request ? 65 // if (ooo_engine_val) 272 // get the most priotary ... 273 uint32_t num_read_unit = it_read_unit->grp; 274 275 log_printf(TRACE,Core_Glue,FUNCTION," * read_unit [%d][%d]",i,num_read_unit); 276 277 // ... and test if this read_unit is valid 278 if (READ_UNIT_ENABLE [i][num_read_unit]) 66 279 { 67 // // If ooo_engine can issue instruction on multiple execute_loop 68 // if (not ISSUE_OOO_ENGINE_ACK [num_ooo_engine][num_inst_issue]) 69 70 // Scan all read_unit 71 std::list<generic::priority::select_t> * select_read_unit = _priority_read_unit[i]->select(); 72 for (std::list<generic::priority::select_t>::iterator it_read_unit=select_read_unit->begin(); 73 it_read_unit!=select_read_unit->end(); 74 ++it_read_unit) 75 { 76 uint32_t num_read_unit = it_read_unit->grp; 77 78 // Test if have an link and read unit is enable 79 log_printf(TRACE,Core_Glue,FUNCTION," * read_unit : %d",num_read_unit); 80 log_printf(TRACE,Core_Glue,FUNCTION," * READ_UNIT_ENABLE : %d",READ_UNIT_ENABLE [i][num_read_unit]); 81 log_printf(TRACE,Core_Glue,FUNCTION," * table_dispatch : %d",_param->_table_dispatch [num_ooo_engine][num_inst_issue][i][num_read_unit]); 82 83 Tcontrol_t read_unit_enable = READ_UNIT_ENABLE [i][num_read_unit]; 84 85 // Test if the read_unit is not busy and if an link is between the issue slot and read_unit 86 if (read_unit_enable and 87 _param->_table_dispatch [num_ooo_engine][num_inst_issue][i][num_read_unit]) 88 { 89 log_printf(TRACE,Core_Glue,FUNCTION," * find !!!"); 90 91 // Transaction 92 READ_UNIT_ENABLE [i][num_read_unit] = false; // now, this read_unit is busy 93 ISSUE_EXECUTE_LOOP_VAL [i][num_read_unit] = ooo_engine_val; // = 1 94 ISSUE_OOO_ENGINE_ACK [num_ooo_engine][num_inst_issue] = read_unit_enable; // = 1 95 96 if (_param->_have_port_context_id) 97 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])); 98 if (_param->_have_port_front_end_id) 99 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])); 100 if (_param->_have_port_ooo_engine_id) 101 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID [i][num_read_unit],ooo_engine_id); 102 if (_param->_have_port_rob_ptr) 103 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])); 104 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OPERATION [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_OPERATION [num_ooo_engine][num_inst_issue])); 105 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_TYPE [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_TYPE [num_ooo_engine][num_inst_issue])); 106 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])); 107 if (_param->_have_port_load_queue_ptr) 108 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])); 109 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])); 110 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_IMMEDIAT [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_IMMEDIAT [num_ooo_engine][num_inst_issue])); 111 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])); 112 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])); 113 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])); 114 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])); 115 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])); 116 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])); 117 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])); 118 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])); 119 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])); 120 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])); 121 122 break; // find : stop scan read_unit 123 } 280 bool find = false; 281 282 // This read_unit is valid, now find an valid instruction 283 // for each issue of each ooo_engine ... 284 std::list<generic::priority::select_t> * select_ooo_engine = _priority_ooo_engine[i]->select(); 285 for (std::list<generic::priority::select_t>::iterator it_ooo_engine=select_ooo_engine->begin(); 286 it_ooo_engine!=select_ooo_engine->end(); 287 ++it_ooo_engine) 288 { 289 // ... get id of the most priotary 290 const uint32_t ooo_engine_id = it_ooo_engine->grp; 291 const uint32_t num_ooo_engine = _param->_translate_execute_loop_num_ooo_engine [i][ooo_engine_id]; 292 const uint32_t num_inst_issue_slot = it_ooo_engine->elt; 293 294 log_printf(TRACE,Core_Glue,FUNCTION," * num_ooo_engine [%d (%d)][%d]",num_ooo_engine, ooo_engine_id,num_inst_issue_slot); 295 296 if (OOO_ENGINE_ENABLE [num_ooo_engine] and SLOT_ENABLE [num_ooo_engine][num_inst_issue_slot]) 297 { 298 uint32_t num_inst_issue_queue = 0; 299 for (; num_inst_issue_queue < _param->_nb_inst_issue_queue [num_ooo_engine]; num_inst_issue_queue ++) 300 { 301 // Test if this instruction is not previously send at a read_unit 302 if (not ISSUE_OOO_ENGINE_ACK [num_ooo_engine][num_inst_issue_queue]) 303 { 304 Tcontrol_t ooo_engine_val = PORT_READ(in_ISSUE_OOO_ENGINE_VAL [num_ooo_engine][num_inst_issue_queue]); 305 Ttype_t type = PORT_READ(in_ISSUE_OOO_ENGINE_TYPE [num_ooo_engine][num_inst_issue_queue]); 306 // Test if have an link and read unit is enable 307 bool can_dispatch = _param->_table_dispatch [num_ooo_engine][num_inst_issue_slot][i][num_read_unit]; 308 bool can_issue_type = _param->_table_issue_type [i][num_read_unit][type]; 309 310 log_printf(TRACE,Core_Glue,FUNCTION," * num_ooo_engine_queue : %d",num_inst_issue_queue); 311 log_printf(TRACE,Core_Glue,FUNCTION," * type : %s",toString(type).c_str()); 312 log_printf(TRACE,Core_Glue,FUNCTION," * ISSUE_OOO_ENGINE_VAL : %d",ooo_engine_val); 313 log_printf(TRACE,Core_Glue,FUNCTION," * table_dispatch : %d",can_dispatch); 314 log_printf(TRACE,Core_Glue,FUNCTION," * table_issue_type : %d",can_issue_type); 315 316 317 // test if have a request ? 318 // and test if have a link between the issue slot and read_unit 319 // and if the read_unit accept this instruction's type 320 if (ooo_engine_val and 321 can_dispatch and 322 can_issue_type) 323 { 324 // log_printf(TRACE,Core_Glue,FUNCTION," * find !!!"); 325 326 // Transaction 327 READ_UNIT_ENABLE [i][num_read_unit] = false; // now, this read_unit is busy 328 ISSUE_EXECUTE_LOOP_VAL [i][num_read_unit] = ooo_engine_val; 329 ISSUE_OOO_ENGINE_ACK [num_ooo_engine][num_inst_issue_queue] = 1; 330 SLOT_ENABLE [num_ooo_engine][num_inst_issue_slot] = 0; // now this slot is used 331 332 if (_param->_have_port_context_id) 333 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_queue])); 334 if (_param->_have_port_front_end_id) 335 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_queue])); 336 if (_param->_have_port_ooo_engine_id) 337 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OOO_ENGINE_ID [i][num_read_unit],ooo_engine_id); 338 if (_param->_have_port_rob_ptr) 339 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_queue])); 340 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_OPERATION [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_OPERATION [num_ooo_engine][num_inst_issue_queue])); 341 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_TYPE [i][num_read_unit],type); 342 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_queue])); 343 if (_param->_have_port_load_queue_ptr) 344 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_queue])); 345 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_queue])); 346 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_IMMEDIAT [i][num_read_unit],PORT_READ(in_ISSUE_OOO_ENGINE_IMMEDIAT [num_ooo_engine][num_inst_issue_queue])); 347 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_queue])); 348 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_queue])); 349 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_queue])); 350 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_queue])); 351 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_queue])); 352 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_queue])); 353 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_queue])); 354 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_queue])); 355 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_queue])); 356 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_queue])); 357 358 find = true;// find : stop scan read_unit 359 } 360 } 361 if (find) 362 break; 363 } 364 365 if (find) 366 { 367 log_printf(TRACE,Core_Glue,FUNCTION," * find !!!"); 368 break; 369 } 370 else 371 { 372 log_printf(TRACE,Core_Glue,FUNCTION," * not find !!!"); 373 log_printf(TRACE,Core_Glue,FUNCTION," * issue_queue_in_order: %d",_param->_issue_queue_in_order [num_ooo_engine]); 374 log_printf(TRACE,Core_Glue,FUNCTION," * num_inst_issue_queue: %d",num_inst_issue_queue); 375 log_printf(TRACE,Core_Glue,FUNCTION," * nb_inst_reexecute : %d",_param->_nb_inst_reexecute [num_ooo_engine]); 376 377 if (_param->_issue_queue_in_order [num_ooo_engine] and 378 (num_inst_issue_queue >= _param->_nb_inst_reexecute [num_ooo_engine])) 379 OOO_ENGINE_ENABLE [num_ooo_engine] = false; 380 } 381 } 124 382 } 125 383 } 126 384 } 127 385 } 128 129 // Write output 130 for (uint32_t i=0; i<_param->_nb_ooo_engine; ++i) 131 for (uint32_t j=0; j<_param->_nb_inst_issue[i]; ++j) 132 PORT_WRITE(out_ISSUE_OOO_ENGINE_ACK [i][j], ISSUE_OOO_ENGINE_ACK [i][j]); 133 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 134 for (uint32_t j=0; j<_param->_nb_read_unit[i]; ++j) 135 PORT_WRITE(out_ISSUE_EXECUTE_LOOP_VAL [i][j], ISSUE_EXECUTE_LOOP_VAL [i][j]); 136 137 log_end(Core_Glue,FUNCTION); 138 }; 139 140 }; // end namespace core_glue 141 }; // end namespace core 142 143 }; // end namespace behavioural 144 }; // end namespace morpheo 145 #endif 386 */ 387 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Core_Glue_transition.cpp
r111 r117 25 25 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 26 26 { 27 27 // _priority_ooo_engine [i]->reset(); 28 28 _priority_read_unit [i]->reset(); 29 29 } 30 _priority_ooo_engine->reset(); 31 30 32 } 31 33 else … … 34 36 for (uint32_t i=0; i<_param->_nb_execute_loop; ++i) 35 37 { 36 38 // _priority_ooo_engine [i]->transition(); 37 39 _priority_read_unit [i]->transition(); 38 40 } 41 _priority_ooo_engine->transition(); 39 42 } 40 43 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Core_Glue/src/Parameters.cpp
r88 r117 30 30 uint32_t * ooo_engine_nb_inst_branch_complete ,//[nb_ooo_engine] 31 31 uint32_t * nb_inst_insert ,//[nb_ooo_engine] 32 uint32_t * nb_inst_issue ,//[nb_ooo_engine] 32 uint32_t * nb_inst_reexecute ,//[nb_ooo_engine] 33 uint32_t * nb_inst_issue_queue ,//[nb_ooo_engine] 34 uint32_t * nb_inst_issue_slot ,//[nb_ooo_engine] 33 35 uint32_t ** nb_inst_execute ,//[nb_ooo_engine][ooo_engine_nb_execute_loop] 36 bool * issue_queue_in_order ,//[nb_ooo_engine] 34 37 uint32_t * nb_read_unit ,//[nb_execute_loop] 35 38 uint32_t * nb_write_unit ,//[nb_execute_loop] … … 44 47 Tpriority_t dispatch_priority , 45 48 Tload_balancing_t dispatch_load_balancing , 46 bool **** table_dispatch ,//[nb_ooo_engine][nb_inst_issue][execute_loop][nb_read_unit] 49 bool **** table_dispatch ,//[nb_ooo_engine][nb_inst_issue_slot][execute_loop][nb_read_unit] 50 bool *** table_issue_type ,// [execute_loop][nb_read_unit][nb_type] 47 51 uint32_t ** translate_ooo_engine_num_front_end ,//[nb_ooo_engine][ooo_engine_nb_front_end] 48 52 uint32_t ** translate_ooo_engine_num_execute_loop,//[nb_ooo_engine][ooo_engine_nb_execute_loop] … … 63 67 _ooo_engine_nb_inst_branch_complete = ooo_engine_nb_inst_branch_complete ; 64 68 _nb_inst_insert = nb_inst_insert ; 65 _nb_inst_issue = nb_inst_issue ; 69 _nb_inst_reexecute = nb_inst_reexecute ; 70 _nb_inst_issue_queue = nb_inst_issue_queue ; 71 _nb_inst_issue_slot = nb_inst_issue_slot ; 66 72 _nb_inst_execute = nb_inst_execute ; 73 _issue_queue_in_order = issue_queue_in_order ; 67 74 _nb_read_unit = nb_read_unit ; 68 75 _nb_write_unit = nb_write_unit ; … … 70 77 _dispatch_load_balancing = dispatch_load_balancing ; 71 78 _table_dispatch = table_dispatch ; 79 _table_issue_type = table_issue_type ; 72 80 _translate_ooo_engine_num_front_end = translate_ooo_engine_num_front_end ; 73 81 _translate_ooo_engine_num_execute_loop = translate_ooo_engine_num_execute_loop; … … 78 86 ALLOC1(_link_ooo_engine_with_front_end,uint32_t,_nb_front_end); 79 87 ALLOC1(_translate_num_front_end_to_ooo_engine_front_end_id,uint32_t,_nb_front_end); 80 81 88 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 82 89 for (uint32_t j=0; j<_ooo_engine_nb_front_end[i]; ++j) … … 102 109 103 110 ALLOC2(_execute_loop_nb_inst_insert,uint32_t,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]); 104 ALLOC2(_execute_loop_nb_inst_issue ,uint32_t,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);111 ALLOC2(_execute_loop_nb_inst_issue_slot ,uint32_t,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]); 105 112 106 113 for (uint32_t i=0; i<_nb_execute_loop; ++i) … … 108 115 { 109 116 uint32_t num_ooo_engine = _translate_execute_loop_num_ooo_engine [i][j]; 110 _execute_loop_nb_inst_issue [i][j] = _nb_inst_issue[num_ooo_engine];111 _execute_loop_nb_inst_insert [i][j] = _nb_inst_insert[num_ooo_engine];117 _execute_loop_nb_inst_issue_slot [i][j] = _nb_inst_issue_slot [num_ooo_engine]; 118 _execute_loop_nb_inst_insert [i][j] = _nb_inst_insert [num_ooo_engine]; 112 119 } 113 120 … … 118 125 _max_nb_write_unit = max<uint32_t>(_nb_write_unit ,_nb_execute_loop); 119 126 _max_nb_inst_insert = max<uint32_t>(_nb_inst_insert ,_nb_ooo_engine); 120 _max_nb_inst_issue = max<uint32_t>(_nb_inst_issue ,_nb_ooo_engine); 127 _max_nb_inst_issue_queue = max<uint32_t>(_nb_inst_issue_queue ,_nb_ooo_engine); 128 _max_nb_inst_issue_slot = max<uint32_t>(_nb_inst_issue_slot ,_nb_ooo_engine); 121 129 _max_nb_read_unit = max<uint32_t>(_nb_read_unit ,_nb_execute_loop); 122 130 … … 171 179 log_begin(Core_Glue,FUNCTION); 172 180 173 DELETE2(_execute_loop_nb_inst_issue ,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);181 DELETE2(_execute_loop_nb_inst_issue_slot,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]); 174 182 DELETE2(_execute_loop_nb_inst_insert,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]); 175 183 DELETE2(_translate_num_execute_loop_to_ooo_engine_execute_loop_id, _nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
Note: See TracChangeset
for help on using the changeset viewer.