Changeset 138 for trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src
- Timestamp:
- May 12, 2010, 7:34:01 PM (14 years ago)
- Location:
- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src/Parameters.cpp
r136 r138 67 67 } 68 68 69 #undef FUNCTION 70 #define FUNCTION "Core::sort_and_unique" 71 //template <typename T> 72 std::vector<uint32_t> sort_and_unique (std::vector<uint32_t> v) 73 { 74 sort (v.begin(), v.end()); 75 std::vector<uint32_t>::iterator it=std::unique(v.begin(), v.end()); 76 v.erase(it,v.end()); 77 78 return v; 79 } 69 80 70 81 #undef FUNCTION … … 112 123 // Read bloc 113 124 uint32_t nb_read_bloc ,// 125 uint32_t * nb_inst_read ,//[nb_read_bloc] 114 126 uint32_t * size_read_queue ,//[nb_read_bloc] 115 127 uint32_t * size_reservation_station ,//[nb_read_bloc] … … 118 130 // Write bloc 119 131 uint32_t nb_write_bloc ,// 132 uint32_t * nb_inst_write ,//[nb_write_bloc] 120 133 uint32_t * size_write_queue ,//[nb_write_bloc] 121 134 uint32_t * size_execute_queue ,//[nb_write_bloc] … … 128 141 uint32_t * size_load_queue ,//[nb_load_store_unit] 129 142 uint32_t * size_speculative_access_queue ,//[nb_load_store_unit] 143 uint32_t * nb_store_queue_bank ,//[nb_load_store_unit] 144 uint32_t * nb_load_queue_bank ,//[nb_load_store_unit] 130 145 uint32_t * nb_port_check ,//[nb_load_store_unit] 131 146 multi_execute_loop::execute_loop::Tspeculative_load_t 132 147 * speculative_load ,//[nb_load_store_unit] 148 Tpredictor_t * speculative_commit_predictor_scheme ,//[nb_load_store_unit] 149 uint32_t ** lsu_pht_size_counter ,//[nb_load_store_unit][1] 150 uint32_t ** lsu_pht_nb_counter ,//[nb_load_store_unit][1] 133 151 uint32_t * nb_bypass_memory ,//[nb_load_store_unit] 134 152 uint32_t * nb_cache_port ,//[nb_load_store_unit] … … 174 192 uint32_t nb_ooo_engine , 175 193 uint32_t * nb_rename_unit ,//[nb_ooo_engine] 176 194 //uint32_t * nb_inst_issue_slot ,//[nb_ooo_engine] 177 195 uint32_t * nb_inst_reexecute ,//[nb_ooo_engine] 178 196 uint32_t * nb_inst_commit ,//[nb_ooo_engine] … … 182 200 uint32_t * size_re_order_buffer ,//[nb_ooo_engine] 183 201 uint32_t * nb_re_order_buffer_bank ,//[nb_ooo_engine] 202 multi_ooo_engine::ooo_engine::commit_unit::Tretire_ooo_scheme_t 203 * retire_ooo_scheme ,//[nb_ooo_engine] 184 204 Tpriority_t * commit_priority ,//[nb_ooo_engine] 185 205 Tload_balancing_t * commit_load_balancing ,//[nb_ooo_engine] … … 191 211 Tload_balancing_t * issue_load_balancing ,//[nb_ooo_engine] 192 212 uint32_t * size_reexecute_queue ,//[nb_ooo_engine] 193 Tpriority_t * reexecute_priority ,//[nb_ooo_engine]194 Tload_balancing_t * reexecute_load_balancing ,//[nb_ooo_engine]195 213 196 214 //Execute_loop … … 218 236 uint32_t * link_decod_bloc_with_thread ,//[nb_thread] 219 237 uint32_t * link_rename_bloc_with_front_end ,//[nb_front_end] 220 221 bool ** link_read_bloc_and_load_store_unit ,//[nb_read_bloc][nb_load_store_unit]238 //bool *** table_dispatch ,//[nb_ooo_engine][nb_inst_issue_slot][nb_read_bloc] 239 uint32_t * link_read_bloc_with_load_store_unit ,//[nb_load_store_unit] 222 240 bool ** link_read_bloc_and_functionnal_unit ,//[nb_read_bloc][nb_functionnal_unit] 223 bool ** link_write_bloc_and_load_store_unit ,//[nb_write_bloc][nb_load_store_unit]241 uint32_t * link_write_bloc_with_load_store_unit ,//[nb_load_store_unit] 224 242 bool ** link_write_bloc_and_functionnal_unit ,//[nb_write_bloc][nb_functionnal_unit] 225 243 uint32_t * link_load_store_unit_with_thread ,//[nb_thread] … … 268 286 269 287 _nb_read_bloc = nb_read_bloc ; 288 _nb_inst_read = nb_inst_read ; 270 289 _size_read_queue = size_read_queue ; 271 290 _size_reservation_station = size_reservation_station ; … … 273 292 274 293 _nb_write_bloc = nb_write_bloc ; 294 _nb_inst_write = nb_inst_write ; 275 295 _size_write_queue = size_write_queue ; 276 296 _size_execute_queue = size_execute_queue ; … … 282 302 _size_load_queue = size_load_queue ; 283 303 _size_speculative_access_queue = size_speculative_access_queue ; 304 _nb_store_queue_bank = nb_store_queue_bank ; 305 _nb_load_queue_bank = nb_load_queue_bank ; 284 306 _nb_port_check = nb_port_check ; 285 307 _speculative_load = speculative_load ; 308 _speculative_commit_predictor_scheme = speculative_commit_predictor_scheme ; 309 _lsu_pht_size_counter = lsu_pht_size_counter ; 310 _lsu_pht_nb_counter = lsu_pht_nb_counter ; 286 311 _nb_bypass_memory = nb_bypass_memory ; 287 312 _nb_cache_port = nb_cache_port ; … … 321 346 _nb_ooo_engine = nb_ooo_engine ; 322 347 _nb_rename_unit = nb_rename_unit ; 323 348 // _nb_inst_issue_slot = nb_inst_issue_slot ; 324 349 _nb_inst_reexecute = nb_inst_reexecute ; 325 350 _nb_inst_commit = nb_inst_commit ; … … 329 354 _size_re_order_buffer = size_re_order_buffer ; 330 355 _nb_re_order_buffer_bank = nb_re_order_buffer_bank ; 356 _retire_ooo_scheme = retire_ooo_scheme ; 331 357 _commit_priority = commit_priority ; 332 358 _commit_load_balancing = commit_load_balancing ; … … 337 363 _issue_load_balancing = issue_load_balancing ; 338 364 _size_reexecute_queue = size_reexecute_queue ; 339 _reexecute_priority = reexecute_priority ;340 _reexecute_load_balancing = reexecute_load_balancing ;341 365 342 366 _nb_execute_loop = nb_execute_loop ; … … 362 386 _link_decod_bloc_with_thread = link_decod_bloc_with_thread ; 363 387 _link_rename_bloc_with_front_end = link_rename_bloc_with_front_end ; 364 365 _link_read_bloc_ and_load_store_unit = link_read_bloc_and_load_store_unit;388 // _table_dispatch = table_dispatch ; 389 _link_read_bloc_with_load_store_unit = link_read_bloc_with_load_store_unit ; 366 390 _link_read_bloc_and_functionnal_unit = link_read_bloc_and_functionnal_unit ; 367 _link_write_bloc_ and_load_store_unit = link_write_bloc_and_load_store_unit;391 _link_write_bloc_with_load_store_unit = link_write_bloc_with_load_store_unit ; 368 392 _link_write_bloc_and_functionnal_unit = link_write_bloc_and_functionnal_unit ; 369 393 _link_load_store_unit_with_thread = link_load_store_unit_with_thread ; … … 885 909 886 910 { 887 std::vector<uint32_t> list_execute_loop [_nb_ooo_engine];888 889 911 // initialization counter 890 912 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 891 913 _ooo_engine_nb_execute_loop [i] = 0; 892 893 // scan the dispatch table 914 915 std::vector<uint32_t> list_execute_loop [_nb_ooo_engine]; 916 917 for (uint32_t i=0; i<_nb_thread; ++i) 918 { 919 uint32_t num_front_end = _link_context_with_thread [i].first; 920 uint32_t num_rename_bloc = _link_rename_bloc_with_front_end [num_front_end]; 921 uint32_t num_ooo_engine = _link_rename_unit_with_rename_bloc [num_rename_bloc].first; 922 uint32_t num_execute_loop = _link_execute_unit_with_load_store_unit [i].first; 923 list_execute_loop[num_ooo_engine].push_back(num_execute_loop); 924 925 // One execute per ooo_engine 926 // for (uint32_t j=0; j<_nb_functionnal_unit; ++j) 927 // if (_link_thread_and_functionnal_unit [i][j]) 928 // { 929 // uint32_t num_execute_loop = _link_execute_unit_with_functionnal_unit [i].first; 930 // list_execute_loop[num_ooo_engine].push_back(num_execute_loop); 931 // } 932 } 933 934 // Sort and erase duplicate value 894 935 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 895 936 { 896 for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j) 897 for (uint32_t k=0; k<_nb_read_bloc; ++k) 898 { 899 // have route between this slot's ooo_engine and an read_bloc 900 if (_table_dispatch [i][j][k]) 901 { 902 uint32_t num_execute_loop = _link_read_unit_with_read_bloc [k].first; 903 904 list_execute_loop[i].push_back(num_execute_loop); 905 } 906 } 907 908 { 909 sort (list_execute_loop[i].begin(), 910 list_execute_loop[i].end()); 911 std::vector<uint32_t>::iterator it=std::unique(list_execute_loop[i].begin(), 912 list_execute_loop[i].end()); 913 list_execute_loop[i].erase(it,list_execute_loop[i].end()); 914 } 915 937 list_execute_loop[i] = sort_and_unique (list_execute_loop[i]); 938 939 // { 940 // sort (list_execute_loop[i].begin(), 941 // list_execute_loop[i].end()); 942 // std::vector<uint32_t>::iterator it=std::unique(list_execute_loop[i].begin(), 943 // list_execute_loop[i].end()); 944 // list_execute_loop[i].erase(it,list_execute_loop[i].end()); 945 // } 946 916 947 _ooo_engine_nb_execute_loop [i] = list_execute_loop[i].size(); 917 948 } 949 950 #if 0 951 // // scan the dispatch table 952 // for (uint32_t i=0; i<_nb_ooo_engine; ++i) 953 // { 954 // for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j) 955 // for (uint32_t k=0; k<_nb_read_bloc; ++k) 956 // { 957 // // have route between this slot's ooo_engine and an read_bloc 958 // if (_table_dispatch [i][j][k]) 959 // { 960 // uint32_t num_execute_loop = _link_read_unit_with_read_bloc [k].first; 961 962 // list_execute_loop[i].push_back(num_execute_loop); 963 // } 964 // } 965 966 // { 967 // sort (list_execute_loop[i].begin(), 968 // list_execute_loop[i].end()); 969 // std::vector<uint32_t>::iterator it=std::unique(list_execute_loop[i].begin(), 970 // list_execute_loop[i].end()); 971 // list_execute_loop[i].erase(it,list_execute_loop[i].end()); 972 // } 973 974 // _ooo_engine_nb_execute_loop [i] = list_execute_loop[i].size(); 975 // } 976 #endif 918 977 919 978 log_printf(TRACE,Core,FUNCTION,_(" * translate_ooo_engine_num_execute_loop")); … … 1029 1088 } 1030 1089 1031 1090 // ALLOC4(_network_table_dispatch ,bool ,_nb_ooo_engine,_nb_inst_issue_slot[it1],_nb_execute_loop,_nb_read_unit[it3]); 1032 1091 // ALLOC3(_ooo_engine_table_routing ,bool ,_nb_ooo_engine,_nb_rename_unit[it1],_nb_inst_issue_slot[it1]); 1033 1092 // ALLOC3(_ooo_engine_table_issue_type ,bool ,_nb_ooo_engine,_nb_inst_issue_slot[it1],_nb_type); … … 1035 1094 ALLOC2(_list_load_store_unit_with_rename_unit ,std::vector<uint32_t>,_nb_ooo_engine,_nb_rename_unit[it1]); 1036 1095 1096 for (uint32_t num_thread=0; num_thread<_nb_thread; ++num_thread) 1097 { 1098 uint32_t num_front_end = _link_context_with_thread [num_thread].first; 1099 uint32_t num_rename_bloc = _link_rename_bloc_with_front_end [num_front_end]; 1100 uint32_t num_ooo_engine = _link_rename_unit_with_rename_bloc [num_rename_bloc].first; 1101 uint32_t num_rename_unit = _link_rename_unit_with_rename_bloc [num_rename_bloc].second; 1102 1103 { 1104 uint32_t num_load_store_unit = _link_load_store_unit_with_thread [num_thread]; 1105 1106 log_printf(TRACE,Core,FUNCTION,_(" * list_load_store_unit_with_rename_unit [%d][%d] = %d"), 1107 num_ooo_engine, 1108 num_rename_unit, 1109 num_load_store_unit); 1110 1111 _list_load_store_unit_with_rename_unit [num_ooo_engine][num_rename_unit].push_back(num_load_store_unit); 1112 } 1113 1114 for (uint32_t num_functionnal_unit=0; 1115 num_functionnal_unit<_nb_functionnal_unit; 1116 ++num_functionnal_unit) 1117 if (_link_thread_and_functionnal_unit[num_thread][num_functionnal_unit]) 1118 { 1119 log_printf(TRACE,Core,FUNCTION,_(" * list_functionnal_unit_with_rename_unit [%d][%d] = %d"), 1120 num_ooo_engine, 1121 num_rename_unit, 1122 num_functionnal_unit); 1123 1124 _list_functionnal_unit_with_rename_unit [num_ooo_engine][num_rename_unit].push_back(num_functionnal_unit); 1125 } 1126 } 1127 1037 1128 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 1038 1129 { 1039 // log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_table_issue_type [%d]"),i); 1040 1041 // Init 1042 for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j) 1043 { 1044 for (uint32_t k=0; k<_nb_execute_loop; ++k) 1045 for (uint32_t l=0; l<_nb_read_unit[k]; ++l) 1046 _network_table_dispatch [i][j][k][l] = false; 1047 // for (uint32_t k=0; k<_nb_rename_unit[i]; ++k) 1048 // _ooo_engine_table_routing [i][k][j] = false; 1049 // for (uint32_t k=0; k<_nb_type; ++k) 1050 // _ooo_engine_table_issue_type [i][j][k] = false; 1051 } 1052 1053 std::vector<uint32_t> list_thread_with_inst_issue [_nb_inst_issue_slot[i]]; 1130 #if 0 1131 // // log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_table_issue_type [%d]"),i); 1132 1133 // // Init 1134 // for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j) 1135 // { 1136 // for (uint32_t k=0; k<_nb_execute_loop; ++k) 1137 // for (uint32_t l=0; l<_nb_read_unit[k]; ++l) 1138 // _network_table_dispatch [i][j][k][l] = false; 1139 // // for (uint32_t k=0; k<_nb_rename_unit[i]; ++k) 1140 // // _ooo_engine_table_routing [i][k][j] = false; 1141 // // for (uint32_t k=0; k<_nb_type; ++k) 1142 // // _ooo_engine_table_issue_type [i][j][k] = false; 1143 // } 1144 1145 // std::vector<uint32_t> list_thread_with_inst_issue [_nb_inst_issue_slot[i]]; 1054 1146 1055 for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j)1056 {1057 for (uint32_t k=0; k<_nb_read_bloc; ++k)1058 // Test if the issue slot is linked with the read_bloc1059 if (_table_dispatch[i][j][k])1060 {1061 pair_dual x = _link_read_unit_with_read_bloc[k];1062 _network_table_dispatch [i][j][x.first][x.second] = true;1063 1064 // Test functional unit connected with this read bloc1065 for (uint32_t l=0; l<_nb_functionnal_unit; ++l)1066 {1067 // the issue slot [j] is connected with the read bloc [k] and it's connected with the functionnal_unit [l]1068 if (_link_read_bloc_and_functionnal_unit [k][l])1069 {1070 // Scan timing table, test if have an instruction1071 // for (uint32_t m=0; m<_nb_type; ++m)1072 // for (uint32_t n=0; n<_nb_operation; ++n)1073 // if (_timing[l][m][n]._latence > 0)1074 // {1075 // log_printf(TRACE,Core,FUNCTION,_(" [%d][%d] -> true"),j,m);1147 // for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j) 1148 // { 1149 // for (uint32_t k=0; k<_nb_read_bloc; ++k) 1150 // // Test if the issue slot is linked with the read_bloc 1151 // if (_table_dispatch[i][j][k]) 1152 // { 1153 // pair_dual x = _link_read_unit_with_read_bloc[k]; 1154 // _network_table_dispatch [i][j][x.first][x.second] = true; 1155 1156 // // Test functional unit connected with this read bloc 1157 // for (uint32_t l=0; l<_nb_functionnal_unit; ++l) 1158 // { 1159 // // the issue slot [j] is connected with the read bloc [k] and it's connected with the functionnal_unit [l] 1160 // if (_link_read_bloc_and_functionnal_unit [k][l]) 1161 // { 1162 // // Scan timing table, test if have an instruction 1163 // // for (uint32_t m=0; m<_nb_type; ++m) 1164 // // for (uint32_t n=0; n<_nb_operation; ++n) 1165 // // if (_timing[l][m][n]._latence > 0) 1166 // // { 1167 // // log_printf(TRACE,Core,FUNCTION,_(" [%d][%d] -> true"),j,m); 1076 1168 1077 // _ooo_engine_table_issue_type [i][j][m] = true;1078 // break;1079 // }1169 // // _ooo_engine_table_issue_type [i][j][m] = true; 1170 // // break; 1171 // // } 1080 1172 1081 for (uint32_t m=0; m<_nb_thread; ++m)1082 {1083 list_thread_with_inst_issue [j].push_back(m);1173 // for (uint32_t m=0; m<_nb_thread; ++m) 1174 // { 1175 // list_thread_with_inst_issue [j].push_back(m); 1084 1176 1085 uint32_t num_front_end = _link_context_with_thread [m].first;1086 uint32_t num_rename_bloc = _link_rename_bloc_with_front_end[num_front_end];1087 uint32_t num_rename_unit = _link_rename_unit_with_rename_bloc [num_rename_bloc].second;1177 // uint32_t num_front_end = _link_context_with_thread [m].first; 1178 // uint32_t num_rename_bloc = _link_rename_bloc_with_front_end[num_front_end]; 1179 // uint32_t num_rename_unit = _link_rename_unit_with_rename_bloc [num_rename_bloc].second; 1088 1180 1089 _list_functionnal_unit_with_rename_unit [i][num_rename_unit].push_back(l);1090 }1091 }1092 }1093 1094 // Test load store unit connected with this read bloc1095 for (uint32_t l=0; l<_nb_load_store_unit; ++l)1096 {1097 // Test load store unit connected with this read bloc1098 if (_link_read_bloc_and_load_store_unit [k][l])1099 {1100 // _ooo_engine_table_issue_type [i][j][TYPE_MEMORY] = true;1101 // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_LBS)._type] |= (_timing[l][instruction_information(INSTRUCTION_L_LBS)._type][instruction_information(INSTRUCTION_L_LBS)._operation]._latence > 0);1102 // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_LBZ)._type] |= (_timing[l][instruction_information(INSTRUCTION_L_LBZ)._type][instruction_information(INSTRUCTION_L_LBZ)._operation]._latence > 0);1103 // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_LD )._type] |= (_timing[l][instruction_information(INSTRUCTION_L_LD )._type][instruction_information(INSTRUCTION_L_LD )._operation]._latence > 0);1104 // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_LHS)._type] |= (_timing[l][instruction_information(INSTRUCTION_L_LHS)._type][instruction_information(INSTRUCTION_L_LHS)._operation]._latence > 0);1105 // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_LHZ)._type] |= (_timing[l][instruction_information(INSTRUCTION_L_LHZ)._type][instruction_information(INSTRUCTION_L_LHZ)._operation]._latence > 0);1106 // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_LWS)._type] |= (_timing[l][instruction_information(INSTRUCTION_L_LWS)._type][instruction_information(INSTRUCTION_L_LWS)._operation]._latence > 0);1107 // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_LWZ)._type] |= (_timing[l][instruction_information(INSTRUCTION_L_LWZ)._type][instruction_information(INSTRUCTION_L_LWZ)._operation]._latence > 0);1108 // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_SB )._type] |= (_timing[l][instruction_information(INSTRUCTION_L_SB )._type][instruction_information(INSTRUCTION_L_SB )._operation]._latence > 0);1109 // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_SD )._type] |= (_timing[l][instruction_information(INSTRUCTION_L_SD )._type][instruction_information(INSTRUCTION_L_SD )._operation]._latence > 0);1110 // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_SH )._type] |= (_timing[l][instruction_information(INSTRUCTION_L_SH )._type][instruction_information(INSTRUCTION_L_SH )._operation]._latence > 0);1111 // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_SW )._type] |= (_timing[l][instruction_information(INSTRUCTION_L_SW )._type][instruction_information(INSTRUCTION_L_SW )._operation]._latence > 0);1112 1113 // the issue slot [j] is connected with the read bloc [k] and it's connected with the load_store_unit [l]1114 for (uint32_t m=0; m<_nb_thread; ++m)1115 {1116 list_thread_with_inst_issue [j].push_back(m);1181 // _list_functionnal_unit_with_rename_unit [i][num_rename_unit].push_back(l); 1182 // } 1183 // } 1184 // } 1185 1186 // // Test load store unit connected with this read bloc 1187 // for (uint32_t l=0; l<_nb_load_store_unit; ++l) 1188 // { 1189 // // Test load store unit connected with this read bloc 1190 // if (_link_read_bloc_and_load_store_unit [k][l]) 1191 // { 1192 // // _ooo_engine_table_issue_type [i][j][TYPE_MEMORY] = true; 1193 // // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_LBS)._type] |= (_timing[l][instruction_information(INSTRUCTION_L_LBS)._type][instruction_information(INSTRUCTION_L_LBS)._operation]._latence > 0); 1194 // // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_LBZ)._type] |= (_timing[l][instruction_information(INSTRUCTION_L_LBZ)._type][instruction_information(INSTRUCTION_L_LBZ)._operation]._latence > 0); 1195 // // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_LD )._type] |= (_timing[l][instruction_information(INSTRUCTION_L_LD )._type][instruction_information(INSTRUCTION_L_LD )._operation]._latence > 0); 1196 // // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_LHS)._type] |= (_timing[l][instruction_information(INSTRUCTION_L_LHS)._type][instruction_information(INSTRUCTION_L_LHS)._operation]._latence > 0); 1197 // // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_LHZ)._type] |= (_timing[l][instruction_information(INSTRUCTION_L_LHZ)._type][instruction_information(INSTRUCTION_L_LHZ)._operation]._latence > 0); 1198 // // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_LWS)._type] |= (_timing[l][instruction_information(INSTRUCTION_L_LWS)._type][instruction_information(INSTRUCTION_L_LWS)._operation]._latence > 0); 1199 // // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_LWZ)._type] |= (_timing[l][instruction_information(INSTRUCTION_L_LWZ)._type][instruction_information(INSTRUCTION_L_LWZ)._operation]._latence > 0); 1200 // // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_SB )._type] |= (_timing[l][instruction_information(INSTRUCTION_L_SB )._type][instruction_information(INSTRUCTION_L_SB )._operation]._latence > 0); 1201 // // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_SD )._type] |= (_timing[l][instruction_information(INSTRUCTION_L_SD )._type][instruction_information(INSTRUCTION_L_SD )._operation]._latence > 0); 1202 // // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_SH )._type] |= (_timing[l][instruction_information(INSTRUCTION_L_SH )._type][instruction_information(INSTRUCTION_L_SH )._operation]._latence > 0); 1203 // // _ooo_engine_table_issue_type [i][j][instruction_information(INSTRUCTION_L_SW )._type] |= (_timing[l][instruction_information(INSTRUCTION_L_SW )._type][instruction_information(INSTRUCTION_L_SW )._operation]._latence > 0); 1204 1205 // // the issue slot [j] is connected with the read bloc [k] and it's connected with the load_store_unit [l] 1206 // for (uint32_t m=0; m<_nb_thread; ++m) 1207 // { 1208 // list_thread_with_inst_issue [j].push_back(m); 1117 1209 1118 uint32_t num_front_end = _link_context_with_thread [m].first;1119 uint32_t num_rename_bloc = _link_rename_bloc_with_front_end[num_front_end];1120 uint32_t num_rename_unit = _link_rename_unit_with_rename_bloc [num_rename_bloc].second;1210 // uint32_t num_front_end = _link_context_with_thread [m].first; 1211 // uint32_t num_rename_bloc = _link_rename_bloc_with_front_end[num_front_end]; 1212 // uint32_t num_rename_unit = _link_rename_unit_with_rename_bloc [num_rename_bloc].second; 1121 1213 1122 log_printf(TRACE,Core,FUNCTION,_(" * list_load_store_unit_with_rename_unit [%d][%d][%d] = %d"),i,num_rename_unit,_list_load_store_unit_with_rename_unit [i][num_rename_unit].size(),l); 1123 1124 _list_load_store_unit_with_rename_unit [i][num_rename_unit].push_back(l); 1125 } 1126 } 1127 } 1128 } 1129 // sort and erase duplicate value 1130 { 1131 sort (list_thread_with_inst_issue [j].begin(), 1132 list_thread_with_inst_issue [j].end()); 1133 std::vector<uint32_t>::iterator it=unique(list_thread_with_inst_issue [j].begin(), 1134 list_thread_with_inst_issue [j].end()); 1135 list_thread_with_inst_issue [j].erase(it,list_thread_with_inst_issue [j].end()); 1136 } 1137 } 1214 // log_printf(TRACE,Core,FUNCTION,_(" * list_load_store_unit_with_rename_unit [%d][%d][%d] = %d"),i,num_rename_unit,_list_load_store_unit_with_rename_unit [i][num_rename_unit].size(),l); 1215 1216 // _list_load_store_unit_with_rename_unit [i][num_rename_unit].push_back(l); 1217 // } 1218 // } 1219 // } 1220 // } 1221 // // sort and erase duplicate value 1222 // list_thread_with_inst_issue [j] = sort_and_unique (list_thread_with_inst_issue [j]); 1223 1224 // // { 1225 // // sort (list_thread_with_inst_issue [j].begin(), 1226 // // list_thread_with_inst_issue [j].end()); 1227 // // std::vector<uint32_t>::iterator it=unique(list_thread_with_inst_issue [j].begin(), 1228 // // list_thread_with_inst_issue [j].end()); 1229 // // list_thread_with_inst_issue [j].erase(it,list_thread_with_inst_issue [j].end()); 1230 // // } 1231 // } 1232 #endif 1138 1233 1139 1234 log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_table_routing [%d]"),i); … … 1141 1236 { 1142 1237 // sort and erase duplicate value 1143 { 1144 sort (_list_load_store_unit_with_rename_unit [i][j].begin(), 1145 _list_load_store_unit_with_rename_unit [i][j].end()); 1146 std::vector<uint32_t>::iterator it=unique(_list_load_store_unit_with_rename_unit [i][j].begin(), 1147 _list_load_store_unit_with_rename_unit [i][j].end()); 1148 _list_load_store_unit_with_rename_unit [i][j].erase(it,_list_load_store_unit_with_rename_unit [i][j].end()); 1149 } 1150 { 1151 sort (_list_functionnal_unit_with_rename_unit [i][j].begin(), 1152 _list_functionnal_unit_with_rename_unit [i][j].end()); 1153 std::vector<uint32_t>::iterator it=unique(_list_functionnal_unit_with_rename_unit [i][j].begin(), 1154 _list_functionnal_unit_with_rename_unit [i][j].end()); 1155 _list_functionnal_unit_with_rename_unit [i][j].erase(it,_list_functionnal_unit_with_rename_unit [i][j].end()); 1156 } 1238 _list_load_store_unit_with_rename_unit [i][j] = sort_and_unique (_list_load_store_unit_with_rename_unit [i][j]); 1239 1240 // { 1241 // sort (_list_load_store_unit_with_rename_unit [i][j].begin(), 1242 // _list_load_store_unit_with_rename_unit [i][j].end()); 1243 // std::vector<uint32_t>::iterator it=unique(_list_load_store_unit_with_rename_unit [i][j].begin(), 1244 // _list_load_store_unit_with_rename_unit [i][j].end()); 1245 // _list_load_store_unit_with_rename_unit [i][j].erase(it,_list_load_store_unit_with_rename_unit [i][j].end()); 1246 // } 1247 1248 _list_functionnal_unit_with_rename_unit [i][j] = sort_and_unique (_list_functionnal_unit_with_rename_unit [i][j]); 1249 1250 // { 1251 // sort (_list_functionnal_unit_with_rename_unit [i][j].begin(), 1252 // _list_functionnal_unit_with_rename_unit [i][j].end()); 1253 // std::vector<uint32_t>::iterator it=unique(_list_functionnal_unit_with_rename_unit [i][j].begin(), 1254 // _list_functionnal_unit_with_rename_unit [i][j].end()); 1255 // _list_functionnal_unit_with_rename_unit [i][j].erase(it,_list_functionnal_unit_with_rename_unit [i][j].end()); 1256 // } 1157 1257 1158 1258 // uint32_t num_rename_bloc = _link_rename_bloc_with_rename_unit[i][j]; … … 1175 1275 } 1176 1276 1177 log_printf(TRACE,Core,FUNCTION,_(" * network_table_dispatch [nb_ooo_engine][nb_inst_issue_slot][nb_execute_loop][nb_read_unit]")); 1178 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 1179 for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j) 1180 for (uint32_t k=0; k<_nb_execute_loop; ++k) 1181 for (uint32_t l=0; l<_nb_read_unit[k]; ++l) 1182 if (_network_table_dispatch [i][j][k][l] == true) 1183 log_printf(TRACE,Core,FUNCTION,_(" Issue Slot [%d][%d] is connected with Read_unit [%d][%d]"),i,j,k,l); 1184 1185 ALLOC3(_network_table_issue_type,bool,_nb_execute_loop,_nb_read_unit[it1],_nb_type); 1186 1187 log_printf(TRACE,Core,FUNCTION,_(" * network_table_issue_type")); 1277 ALLOC3(_network_table_issue_type ,bool,_nb_execute_loop,_nb_read_unit[it1],_nb_type); 1278 ALLOC3(_network_table_issue_thread,bool,_nb_execute_loop,_nb_read_unit[it1],_nb_thread); 1279 1280 log_printf(TRACE,Core,FUNCTION,_(" * network_table_issue_type and network_table_issue_thread")); 1188 1281 for (uint32_t i=0; i<_nb_execute_loop; ++i) 1189 1282 for (uint32_t j=0; j<_nb_read_unit[i]; ++j) … … 1191 1284 // init 1192 1285 for (uint32_t t=0; t<_nb_type; ++t) 1193 _network_table_issue_type [i][j][t] = false; 1286 _network_table_issue_type [i][j][t] = false; 1287 for (uint32_t t=0; t<_nb_thread; ++t) 1288 _network_table_issue_thread [i][j][t] = false; 1194 1289 1195 1290 // get number of read bloc … … 1199 1294 for (uint32_t k=0; k<_nb_functionnal_unit; ++k) 1200 1295 if (_link_read_bloc_and_functionnal_unit [num_read_bloc][k]) 1201 // Scan timing table, test if have an instruction 1202 for (uint32_t t=0; t<_nb_type; ++t) 1203 for (uint32_t o=0; o<_nb_operation; ++o) 1204 if (_timing[k][t][o]._latence > 0) 1296 { 1297 // Scan timing table, test if have an instruction 1298 for (uint32_t t=0; t<_nb_type; ++t) 1299 for (uint32_t o=0; o<_nb_operation; ++o) 1300 if (_timing[k][t][o]._latence > 0) 1301 { 1302 log_printf(TRACE,Core,FUNCTION,_(" * network_table_issue_type [%d][%d][%d] -> true"),i,j,t); 1303 1304 _network_table_issue_type [i][j][t] = true; 1305 break; // operation 1306 } 1307 1308 for (uint32_t t=0; t<_nb_thread; ++t) 1309 if (_link_thread_and_functionnal_unit [t][k]) 1205 1310 { 1206 log_printf(TRACE,Core,FUNCTION,_(" [%d][%d][%d] -> true"),i,j,t);1311 log_printf(TRACE,Core,FUNCTION,_(" * network_table_issue_thread [%d][%d][%d] -> true"),i,j,t); 1207 1312 1208 _network_table_issue_type [i][j][t] = true; 1209 break; // operation 1313 _network_table_issue_thread [i][j][t] = true; 1210 1314 } 1315 } 1211 1316 1212 1317 // Test load store unit connected with this read bloc 1213 1318 for (uint32_t k=0; k<_nb_load_store_unit; ++k) 1214 1319 // Test load store unit connected with this read bloc 1215 if (_link_read_bloc_ and_load_store_unit [num_read_bloc][k])1320 if (_link_read_bloc_with_load_store_unit [k] == num_read_bloc) 1216 1321 { 1217 uint32_t t = TYPE_MEMORY; 1218 1219 log_printf(TRACE,Core,FUNCTION,_(" [%d][%d][%d] -> true"),i,j,t); 1220 1221 _network_table_issue_type [i][j][t] = true; 1222 break; // load_store_unit 1322 { 1323 uint32_t t = TYPE_MEMORY; 1324 1325 log_printf(TRACE,Core,FUNCTION,_(" * network_table_issue_type [%d][%d][%d] -> true"),i,j,t); 1326 1327 _network_table_issue_type [i][j][t] = true; 1328 } 1329 1330 for (uint32_t t=0; t<_nb_thread; ++t) 1331 if (_link_load_store_unit_with_thread[t] == k) 1332 { 1333 log_printf(TRACE,Core,FUNCTION,_(" * network_table_issue_thread [%d][%d][%d] -> true"),i,j,t); 1334 1335 _network_table_issue_thread [i][j][t] = true; 1336 } 1223 1337 } 1224 1338 } … … 1346 1460 ALLOC1(_list_ooo_engine_with_execute_loop ,std::vector<uint32_t>,_nb_execute_loop); 1347 1461 ALLOC1(_list_front_end_with_execute_loop ,std::vector<uint32_t>,_nb_execute_loop); 1348 1462 1349 1463 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 1350 1464 { … … 1366 1480 for (uint32_t i=0; i<_nb_execute_loop; ++i) 1367 1481 { 1368 { 1369 sort (_list_ooo_engine_with_execute_loop[i].begin(), 1370 _list_ooo_engine_with_execute_loop[i].end()); 1371 std::vector<uint32_t>::iterator it=unique(_list_ooo_engine_with_execute_loop[i].begin(), 1372 _list_ooo_engine_with_execute_loop[i].end()); 1373 _list_ooo_engine_with_execute_loop[i].erase(it,_list_ooo_engine_with_execute_loop[i].end()); 1374 } 1375 { 1376 sort (_list_front_end_with_execute_loop[i].begin(), 1377 _list_front_end_with_execute_loop[i].end()); 1378 std::vector<uint32_t>::iterator it=unique(_list_front_end_with_execute_loop[i].begin(), 1379 _list_front_end_with_execute_loop[i].end()); 1380 _list_front_end_with_execute_loop[i].erase(it,_list_front_end_with_execute_loop[i].end()); 1381 } 1482 _list_ooo_engine_with_execute_loop[i] = sort_and_unique (_list_ooo_engine_with_execute_loop[i]); 1483 1484 // { 1485 // sort (_list_ooo_engine_with_execute_loop[i].begin(), 1486 // _list_ooo_engine_with_execute_loop[i].end()); 1487 // std::vector<uint32_t>::iterator it=unique(_list_ooo_engine_with_execute_loop[i].begin(), 1488 // _list_ooo_engine_with_execute_loop[i].end()); 1489 // _list_ooo_engine_with_execute_loop[i].erase(it,_list_ooo_engine_with_execute_loop[i].end()); 1490 // } 1491 1492 _list_front_end_with_execute_loop[i] = sort_and_unique (_list_front_end_with_execute_loop[i]); 1493 1494 // { 1495 // sort (_list_front_end_with_execute_loop[i].begin(), 1496 // _list_front_end_with_execute_loop[i].end()); 1497 // std::vector<uint32_t>::iterator it=unique(_list_front_end_with_execute_loop[i].begin(), 1498 // _list_front_end_with_execute_loop[i].end()); 1499 // _list_front_end_with_execute_loop[i].erase(it,_list_front_end_with_execute_loop[i].end()); 1500 // } 1382 1501 } 1383 1502 … … 1402 1521 ALLOC1(_execute_loop_nb_packet ,uint32_t,_nb_execute_loop); 1403 1522 ALLOC1(_execute_loop_nb_thread ,uint32_t,_nb_execute_loop); 1404 1523 1405 1524 for (uint32_t i=0; i<_nb_execute_loop; ++i) 1406 1525 { … … 1453 1572 } 1454 1573 1574 ALLOC2(_execute_loop_nb_inst_read ,uint32_t,_nb_execute_loop,_nb_read_unit[it1]); 1455 1575 ALLOC2(_execute_loop_size_read_queue ,uint32_t,_nb_execute_loop,_nb_read_unit[it1]); 1456 1576 ALLOC2(_execute_loop_size_reservation_station ,uint32_t,_nb_execute_loop,_nb_read_unit[it1]); … … 1468 1588 log_printf(TRACE,Core,FUNCTION,_(" * num_read_bloc : %d"),num_read_bloc); 1469 1589 1590 _execute_loop_nb_inst_read [i][j] = _nb_inst_read [num_read_bloc]; 1470 1591 _execute_loop_size_read_queue [i][j] = _size_read_queue [num_read_bloc]; 1471 1592 _execute_loop_size_reservation_station [i][j] = _size_reservation_station [num_read_bloc]; … … 1538 1659 } 1539 1660 1540 ALLOC2(_execute_loop_size_store_queue ,uint32_t,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1541 ALLOC2(_execute_loop_size_load_queue ,uint32_t,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1542 ALLOC2(_execute_loop_size_speculative_access_queue ,uint32_t,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1543 ALLOC2(_execute_loop_nb_port_check ,uint32_t,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1661 ALLOC2(_execute_loop_size_store_queue ,uint32_t ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1662 ALLOC2(_execute_loop_size_load_queue ,uint32_t ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1663 ALLOC2(_execute_loop_size_speculative_access_queue ,uint32_t ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1664 ALLOC2(_execute_loop_nb_store_queue_bank ,uint32_t ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1665 ALLOC2(_execute_loop_nb_load_queue_bank ,uint32_t ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1666 ALLOC2(_execute_loop_nb_port_check ,uint32_t ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1544 1667 ALLOC2(_execute_loop_speculative_load ,multi_execute_loop::execute_loop::Tspeculative_load_t 1545 ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1546 ALLOC2(_execute_loop_nb_bypass_memory ,uint32_t,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1547 ALLOC2(_execute_loop_nb_cache_port ,uint32_t,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1548 ALLOC2(_execute_loop_nb_inst_memory ,uint32_t,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1668 ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1669 ALLOC2(_execute_loop_speculative_commit_predictor_scheme ,Tpredictor_t,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1670 ALLOC3(_execute_loop_lsu_pht_size_counter ,uint32_t ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1],1); 1671 ALLOC3(_execute_loop_lsu_pht_nb_counter ,uint32_t ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1],1); 1672 ALLOC2(_execute_loop_nb_bypass_memory ,uint32_t ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1673 ALLOC2(_execute_loop_nb_cache_port ,uint32_t ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1674 ALLOC2(_execute_loop_nb_inst_memory ,uint32_t ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 1549 1675 1550 1676 for (uint32_t i=0; i<_nb_execute_loop; ++i) … … 1556 1682 log_printf(TRACE,Core,FUNCTION,_(" * nb_bypass_memory : %d"),_nb_bypass_memory[num_load_store_unit]); 1557 1683 1558 _execute_loop_size_store_queue [i][j] = _size_store_queue [num_load_store_unit]; 1559 _execute_loop_size_load_queue [i][j] = _size_load_queue [num_load_store_unit]; 1560 _execute_loop_size_speculative_access_queue [i][j] = _size_speculative_access_queue [num_load_store_unit]; 1561 _execute_loop_nb_port_check [i][j] = _nb_port_check [num_load_store_unit]; 1562 _execute_loop_speculative_load [i][j] = _speculative_load [num_load_store_unit]; 1563 _execute_loop_nb_bypass_memory [i][j] = _nb_bypass_memory [num_load_store_unit]; 1564 _execute_loop_nb_cache_port [i][j] = _nb_cache_port [num_load_store_unit]; 1565 _execute_loop_nb_inst_memory [i][j] = _nb_inst_memory [num_load_store_unit]; 1684 _execute_loop_size_store_queue [i][j] = _size_store_queue [num_load_store_unit]; 1685 _execute_loop_size_load_queue [i][j] = _size_load_queue [num_load_store_unit]; 1686 _execute_loop_size_speculative_access_queue [i][j] = _size_speculative_access_queue [num_load_store_unit]; 1687 _execute_loop_nb_store_queue_bank [i][j] = _nb_store_queue_bank [num_load_store_unit]; 1688 _execute_loop_nb_load_queue_bank [i][j] = _nb_load_queue_bank [num_load_store_unit]; 1689 _execute_loop_nb_port_check [i][j] = _nb_port_check [num_load_store_unit]; 1690 _execute_loop_speculative_load [i][j] = _speculative_load [num_load_store_unit]; 1691 _execute_loop_speculative_commit_predictor_scheme [i][j] = _speculative_commit_predictor_scheme [num_load_store_unit]; 1692 for (uint32_t k=0; k<1; ++k) 1693 { 1694 _execute_loop_lsu_pht_size_counter [i][j][k] = _lsu_pht_size_counter [num_load_store_unit][k]; 1695 _execute_loop_lsu_pht_nb_counter [i][j][k] = _lsu_pht_nb_counter [num_load_store_unit][k]; 1696 } 1697 _execute_loop_nb_bypass_memory [i][j] = _nb_bypass_memory [num_load_store_unit]; 1698 _execute_loop_nb_cache_port [i][j] = _nb_cache_port [num_load_store_unit]; 1699 _execute_loop_nb_inst_memory [i][j] = _nb_inst_memory [num_load_store_unit]; 1566 1700 } 1567 1701 1702 ALLOC2(_execute_loop_nb_inst_write ,uint32_t,_nb_execute_loop,_nb_write_unit[it1]); 1568 1703 ALLOC2(_execute_loop_size_write_queue ,uint32_t,_nb_execute_loop,_nb_write_unit[it1]); 1569 1704 ALLOC2(_execute_loop_size_execute_queue ,uint32_t,_nb_execute_loop,_nb_write_unit[it1]); … … 1576 1711 uint32_t num_write_bloc = _link_write_bloc_with_write_unit [i][j]; 1577 1712 1713 _execute_loop_nb_inst_write [i][j] = _nb_inst_write [num_write_bloc]; 1578 1714 _execute_loop_size_write_queue [i][j] = _size_write_queue [num_write_bloc]; 1579 1715 _execute_loop_size_execute_queue [i][j] = _size_execute_queue [num_write_bloc]; … … 1660 1796 1661 1797 if (is_lsu) 1662 link = _link_read_bloc_and_load_store_unit [num_read_bloc][num_load_store_unit];1798 link = (_link_read_bloc_with_load_store_unit [num_load_store_unit] == num_read_bloc); 1663 1799 else 1664 1800 link = _link_read_bloc_and_functionnal_unit [num_read_bloc][num_functionnal_unit]; … … 1689 1825 1690 1826 if (is_lsu) 1691 link = _link_write_bloc_and_load_store_unit [num_write_bloc][num_load_store_unit];1827 link = (_link_write_bloc_with_load_store_unit [num_load_store_unit] == num_write_bloc); 1692 1828 else 1693 1829 link = _link_write_bloc_and_functionnal_unit [num_write_bloc][num_functionnal_unit]; … … 1745 1881 { 1746 1882 uint32_t num_write_bloc = _link_write_bloc_with_write_unit[i][k]; 1747 bool have_link = (is_lsu)?(_link_write_bloc_ and_load_store_unit [num_write_bloc][num_load_store_unit]):(_link_write_bloc_and_functionnal_unit [num_write_bloc][num_functionnal_unit]);1883 bool have_link = (is_lsu)?(_link_write_bloc_with_load_store_unit [num_load_store_unit]==num_write_bloc):(_link_write_bloc_and_functionnal_unit [num_write_bloc][num_functionnal_unit]); 1748 1884 1749 1885 if (have_link) … … 1997 2133 _ooo_engine_nb_inst_insert [i], 1998 2134 _ooo_engine_nb_inst_retire [i], 1999 // 2135 // _nb_inst_issue [i], 2000 2136 _ooo_engine_nb_inst_execute [i], 2001 2137 _nb_inst_reexecute [i], … … 2011 2147 _size_re_order_buffer [i], 2012 2148 _nb_re_order_buffer_bank [i], 2149 _retire_ooo_scheme [i], 2013 2150 _commit_priority [i], 2014 2151 _commit_load_balancing [i], … … 2021 2158 // _ooo_engine_table_issue_type [i], 2022 2159 _size_reexecute_queue [i], 2023 _reexecute_priority [i],2024 _reexecute_load_balancing [i],2025 2160 _ooo_engine_rename_select_priority [i], 2026 2161 _ooo_engine_rename_select_load_balancing [i], … … 2060 2195 _size_special_data , 2061 2196 2197 _execute_loop_nb_inst_read [i], 2062 2198 _execute_loop_size_read_queue [i], 2063 2199 _execute_loop_size_reservation_station [i], … … 2071 2207 _execute_loop_size_load_queue [i], 2072 2208 _execute_loop_size_speculative_access_queue [i], 2209 _execute_loop_nb_store_queue_bank [i], 2210 _execute_loop_nb_load_queue_bank [i], 2073 2211 _execute_loop_nb_port_check [i], 2074 2212 _execute_loop_speculative_load [i], 2213 _execute_loop_speculative_commit_predictor_scheme [i], 2214 _execute_loop_lsu_pht_size_counter [i], 2215 _execute_loop_lsu_pht_nb_counter [i], 2075 2216 _execute_loop_nb_bypass_memory [i], 2076 2217 _execute_loop_nb_cache_port [i], 2077 2218 _execute_loop_nb_inst_memory [i], 2078 2219 2220 _execute_loop_nb_inst_write [i], 2079 2221 _execute_loop_size_write_queue [i], 2080 2222 _execute_loop_size_execute_queue [i], … … 2146 2288 _param_glue = new core::core_glue::Parameters 2147 2289 ( 2148 _nb_front_end , 2149 _nb_context ,//[nb_front_end] 2150 _nb_ooo_engine , 2151 _nb_execute_loop , 2152 _ooo_engine_nb_front_end ,//[nb_ooo_engine] 2153 _ooo_engine_nb_execute_loop ,//[nb_ooo_engine] 2154 _execute_loop_nb_ooo_engine ,//[nb_execute_loop] 2155 _front_end_sum_inst_decod ,//[nb_front_end] -> [sum_inst_decod] 2156 _front_end_nb_inst_branch_complete ,//[nb_front_end] 2157 _nb_inst_branch_complete ,//[nb_ooo_engine] 2158 // _ooo_engine_nb_inst_insert_rob ,//[nb_ooo_engine] 2159 _nb_inst_reexecute ,//[nb_ooo_engine] 2160 _nb_inst_issue_queue ,//[nb_ooo_engine] 2161 _nb_inst_issue_slot ,//[nb_ooo_engine] 2162 _ooo_engine_nb_inst_execute ,//[nb_ooo_engine][ooo_engine_nb_execute_loop] 2163 _issue_queue_in_order ,//[nb_ooo_engine] 2164 _nb_read_unit ,//[nb_execute_loop] 2165 _nb_write_unit ,//[nb_execute_loop] 2166 _size_depth , 2167 _size_rob_ptr , 2168 _size_load_queue_ptr , 2169 _size_store_queue_ptr , 2170 _size_general_data , 2171 _size_special_data , 2172 _size_general_register , 2173 _size_special_register , 2174 _dispatch_priority , 2175 _dispatch_load_balancing , 2176 _network_table_dispatch ,//[nb_ooo_engine][nb_inst_issue_slot][nb_execute_loop][nb_read_unit] 2177 _network_table_issue_type ,// [nb_execute_loop][nb_read_unit][nb_type] 2178 _translate_ooo_engine_num_front_end ,//[nb_ooo_engine][ooo_engine_nb_front_end] 2179 _translate_ooo_engine_num_execute_loop,//[nb_ooo_engine][ooo_engine_nb_execute_loop] 2180 _translate_execute_loop_num_ooo_engine //[nb_execute_loop][execute_loop_nb_ooo_engine] 2290 _nb_front_end , 2291 _nb_context ,//[nb_front_end] 2292 _nb_ooo_engine , 2293 _nb_execute_loop , 2294 _ooo_engine_nb_front_end ,//[nb_ooo_engine] 2295 _ooo_engine_nb_execute_loop ,//[nb_ooo_engine] 2296 _execute_loop_nb_ooo_engine ,//[nb_execute_loop] 2297 _front_end_sum_inst_decod ,//[nb_front_end] -> [sum_inst_decod] 2298 _front_end_nb_inst_branch_complete ,//[nb_front_end] 2299 _nb_inst_branch_complete ,//[nb_ooo_engine] 2300 // _ooo_engine_nb_inst_insert_rob ,//[nb_ooo_engine] 2301 _nb_inst_reexecute ,//[nb_ooo_engine] 2302 _nb_inst_issue_queue ,//[nb_ooo_engine] 2303 // _nb_inst_issue_slot ,//[nb_ooo_engine] 2304 _ooo_engine_nb_inst_execute ,//[nb_ooo_engine][ooo_engine_nb_execute_loop] 2305 _issue_queue_in_order ,//[nb_ooo_engine] 2306 _nb_read_unit ,//[nb_execute_loop] 2307 _nb_write_unit ,//[nb_execute_loop] 2308 _size_depth , 2309 _size_rob_ptr , 2310 _size_load_queue_ptr , 2311 _size_store_queue_ptr , 2312 _size_general_data , 2313 _size_special_data , 2314 _size_general_register , 2315 _size_special_register , 2316 _dispatch_priority , 2317 _dispatch_load_balancing , 2318 // _network_table_dispatch ,//[nb_ooo_engine][nb_inst_issue_slot][nb_execute_loop][nb_read_unit] 2319 _network_table_issue_type ,// [nb_execute_loop][nb_read_unit][nb_type] 2320 _network_table_issue_thread ,// [nb_execute_loop][nb_read_unit][nb_thread] 2321 _translate_ooo_engine_num_front_end ,//[nb_ooo_engine][ooo_engine_nb_front_end] 2322 _translate_ooo_engine_num_execute_loop ,//[nb_ooo_engine][ooo_engine_nb_execute_loop] 2323 _translate_execute_loop_num_ooo_engine ,//[nb_execute_loop][execute_loop_nb_ooo_engine] 2324 _ooo_engine_translate_num_context_to_num_thread //[nb_ooo_engine][ooo_engine_nb_front_end][nb_context] 2181 2325 ); 2182 2326 … … 2238 2382 DELETE2(_execute_loop_size_execute_queue ,_nb_execute_loop,_nb_write_unit[it1]); 2239 2383 DELETE2(_execute_loop_size_write_queue ,_nb_execute_loop,_nb_write_unit[it1]); 2384 DELETE2(_execute_loop_nb_inst_write ,_nb_execute_loop,_nb_write_unit[it1]); 2240 2385 DELETE2(_execute_loop_nb_inst_memory ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 2241 2386 DELETE2(_execute_loop_nb_cache_port ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 2242 2387 DELETE2(_execute_loop_nb_bypass_memory ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 2388 DELETE3(_execute_loop_lsu_pht_nb_counter ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1],1); 2389 DELETE3(_execute_loop_lsu_pht_size_counter ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1],1); 2390 DELETE2(_execute_loop_speculative_commit_predictor_scheme ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 2243 2391 DELETE2(_execute_loop_speculative_load ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 2244 2392 DELETE2(_execute_loop_nb_port_check ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 2393 DELETE2(_execute_loop_nb_load_queue_bank ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 2394 DELETE2(_execute_loop_nb_store_queue_bank ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 2245 2395 DELETE2(_execute_loop_size_speculative_access_queue ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); 2246 2396 DELETE2(_execute_loop_size_load_queue ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]); … … 2253 2403 DELETE2(_execute_loop_size_reservation_station ,_nb_execute_loop,_nb_read_unit[it1]); 2254 2404 DELETE2(_execute_loop_size_read_queue ,_nb_execute_loop,_nb_read_unit[it1]); 2405 DELETE2(_execute_loop_nb_inst_read ,_nb_execute_loop,_nb_read_unit[it1]); 2255 2406 DELETE2(_translate_execute_loop_num_ooo_engine ,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]); 2256 2407 DELETE1(_execute_loop_nb_thread ,_nb_execute_loop); … … 2273 2424 // DELETE3(_ooo_engine_table_issue_type ,_nb_ooo_engine,_nb_inst_issue_slot[it1],_nb_type); 2274 2425 // DELETE3(_ooo_engine_table_routing ,_nb_ooo_engine,_nb_rename_unit[it1],_nb_inst_issue_slot[it1]); 2426 DELETE3(_network_table_issue_thread ,_nb_execute_loop,_nb_read_unit[it1],_nb_thread); 2275 2427 DELETE3(_network_table_issue_type ,_nb_execute_loop,_nb_read_unit[it1],_nb_type); 2276 2428 // DELETE4(_network_table_dispatch ,_nb_ooo_engine,_nb_inst_issue_slot[it1],_nb_execute_loop,_nb_read_unit[it3]); 2277 2429 // DELETE2(_ooo_engine_size_read_counter ,_nb_ooo_engine,_nb_rename_unit[it1]); 2278 2430 DELETE2(_ooo_engine_nb_rename_unit_bank ,_nb_ooo_engine,_nb_rename_unit[it1]); -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src/Parameters_msg_error.cpp
r128 r138 24 24 Parameters_test test ("Core"); 25 25 26 // TESTER SI LES VALEURS NE DEPASSE PAS DE L'INTERVALLE AUTORISE 27 26 // Test if value is valid 28 27 { 29 28 // initialisation … … 191 190 uint32_t num_execute_loop = _link_execute_unit_with_load_store_unit [i].first; 192 191 uint32_t num_execute_unit = _link_execute_unit_with_load_store_unit [i].second; 192 193 log_printf(TRACE,Core,FUNCTION," * _link_execute_unit_with_load_store_unit [%d] = %d.%d",i,num_execute_loop,num_execute_unit); 193 194 194 195 nb_link_execute_unit [num_execute_loop][num_execute_unit] ++; … … 224 225 225 226 { 226 // initialisation 227 uint32_t nb_link_slot [_nb_ooo_engine][max<uint32_t>(_nb_inst_issue_slot,_nb_ooo_engine)]; 228 uint32_t nb_link_read_bloc [_nb_read_bloc]; 229 230 // initialisation 231 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 232 for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j) 233 nb_link_slot [i][j] = 0; 227 bool read_bloc_link_with_load_store_unit [_nb_read_bloc]; 228 bool read_bloc_link_with_functionnal_unit [_nb_read_bloc]; 229 uint32_t nb_link_functionnal_unit [_nb_functionnal_unit]; 230 234 231 for (uint32_t i=0; i<_nb_read_bloc; ++i) 235 nb_link_read_bloc [i] = 0; 236 237 // set link 238 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 239 for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j) 240 for (uint32_t k=0; k<_nb_read_bloc; ++k) 241 if (_table_dispatch [i][j][k]) 242 { 243 nb_link_slot [i][j] ++; 244 nb_link_read_bloc [k] ++; 245 } 246 247 // test 248 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 249 for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j) 250 if (nb_link_slot [i][j] == 0) 251 test.error(toString(_("In Out Of Order Engine [%d], the slot issue [%d] is not link with a read_bloc.\n"),i,j)); 232 { 233 read_bloc_link_with_load_store_unit [i] = false; 234 read_bloc_link_with_functionnal_unit [i] = false; 235 } 236 for (uint32_t i=0; i<_nb_functionnal_unit; ++i) 237 nb_link_functionnal_unit [i] = 0; 238 239 for (uint32_t i=0; i<_nb_load_store_unit; ++i) 240 read_bloc_link_with_load_store_unit [_link_read_bloc_with_load_store_unit[i]] = true; 241 252 242 for (uint32_t i=0; i<_nb_read_bloc; ++i) 253 if (nb_link_read_bloc [i] == 0) 254 test.error(toString(_("Read_bloc [%d] is not link with a issue's slot.\n"),i)); 255 } 256 257 { 258 uint32_t nb_link_read_bloc [_nb_read_bloc]; 259 uint32_t nb_link_load_store_unit [_nb_load_store_unit]; 260 uint32_t nb_link_functionnal_unit [_nb_functionnal_unit]; 243 for (uint32_t j=0; j<_nb_functionnal_unit; ++j) 244 if (_link_read_bloc_and_functionnal_unit [i][j]) 245 { 246 nb_link_functionnal_unit [j] ++; 247 read_bloc_link_with_functionnal_unit [i] = true; 248 } 261 249 262 250 for (uint32_t i=0; i<_nb_read_bloc; ++i) 263 nb_link_read_bloc [i] = 0; 264 for (uint32_t i=0; i<_nb_load_store_unit; ++i) 265 nb_link_load_store_unit [i] = 0; 266 for (uint32_t i=0; i<_nb_functionnal_unit; ++i) 267 nb_link_functionnal_unit [i] = 0; 268 269 for (uint32_t i=0; i<_nb_read_bloc; ++i) 270 { 271 for (uint32_t j=0; j<_nb_load_store_unit; ++j) 272 if (_link_read_bloc_and_load_store_unit [i][j]) 273 { 274 nb_link_read_bloc [i] ++; 275 nb_link_load_store_unit [j] ++; 276 } 277 for (uint32_t j=0; j<_nb_functionnal_unit; ++j) 278 if (_link_read_bloc_and_functionnal_unit [i][j]) 279 { 280 nb_link_read_bloc [i] ++; 281 nb_link_functionnal_unit [j] ++; 282 } 283 } 284 285 for (uint32_t i=0; i<_nb_read_bloc; ++i) 286 if (nb_link_read_bloc [i] == 0) 287 test.error(toString(_("Read_bloc [%d] is not link with an execute_unit.\n"),i)); 288 for (uint32_t i=0; i<_nb_load_store_unit; ++i) 289 if (nb_link_load_store_unit [i] == 0) 290 test.error(toString(_("load_store_unit [%d] is not link with a read_bloc.\n"),i)); 251 { 252 if (not read_bloc_link_with_load_store_unit [i] and 253 not read_bloc_link_with_functionnal_unit [i]) 254 test.error(toString(_("Read_bloc [%d] is not link with an execute_unit.\n"),i)); 255 if ( read_bloc_link_with_load_store_unit [i] and 256 read_bloc_link_with_functionnal_unit [i]) 257 test.error(toString(_("Read_bloc [%d] is linked with an load store unit and functionnal unit.\n"),i)); 258 } 291 259 for (uint32_t i=0; i<_nb_functionnal_unit; ++i) 292 260 if (nb_link_functionnal_unit [i] == 0) … … 296 264 { 297 265 uint32_t nb_link_write_bloc [_nb_write_bloc]; 298 uint32_t nb_link_load_store_unit [_nb_load_store_unit];299 266 uint32_t nb_link_functionnal_unit [_nb_functionnal_unit]; 300 267 301 268 for (uint32_t i=0; i<_nb_write_bloc; ++i) 302 269 nb_link_write_bloc [i] = 0; 303 for (uint32_t i=0; i<_nb_load_store_unit; ++i)304 nb_link_load_store_unit [i] = 0;305 270 for (uint32_t i=0; i<_nb_functionnal_unit; ++i) 306 271 nb_link_functionnal_unit [i] = 0; 307 272 273 for (uint32_t i=0; i<_nb_load_store_unit; ++i) 274 nb_link_write_bloc [_link_write_bloc_with_load_store_unit[i]] = true; 275 308 276 for (uint32_t i=0; i<_nb_write_bloc; ++i) 309 { 310 for (uint32_t j=0; j<_nb_load_store_unit; ++j) 311 if (_link_write_bloc_and_load_store_unit [i][j]) 312 { 313 nb_link_write_bloc [i] ++; 314 nb_link_load_store_unit [j] ++; 315 } 316 for (uint32_t j=0; j<_nb_functionnal_unit; ++j) 317 if (_link_write_bloc_and_functionnal_unit [i][j]) 318 { 319 nb_link_write_bloc [i] ++; 320 nb_link_functionnal_unit [j] ++; 321 } 322 } 277 for (uint32_t j=0; j<_nb_functionnal_unit; ++j) 278 if (_link_write_bloc_and_functionnal_unit [i][j]) 279 { 280 nb_link_write_bloc [i] ++; 281 nb_link_functionnal_unit [j] ++; 282 } 323 283 324 284 for (uint32_t i=0; i<_nb_write_bloc; ++i) 325 285 if (nb_link_write_bloc [i] == 0) 326 286 test.error(toString(_("Write_bloc [%d] is not link with an execute_unit.\n"),i)); 327 for (uint32_t i=0; i<_nb_load_store_unit; ++i)328 if (nb_link_load_store_unit [i] == 0)329 test.error(toString(_("load_store_unit [%d] is not link with a write_bloc.\n"),i));330 287 for (uint32_t i=0; i<_nb_functionnal_unit; ++i) 331 288 if (nb_link_functionnal_unit [i] == 0) … … 334 291 335 292 { 336 uint32_t nb_link_thread [_nb_thread]; 337 uint32_t nb_link_load_store_unit [_nb_load_store_unit]; 338 uint32_t nb_link_functionnal_unit [_nb_functionnal_unit]; 293 uint32_t nb_link_thread [_nb_thread]; 294 uint32_t nb_link_load_store_unit [_nb_load_store_unit]; 295 uint32_t nb_link_functionnal_unit [_nb_functionnal_unit]; 296 bool link_front_end_with_execute_loop [_nb_front_end][_nb_execute_loop]; 297 uint32_t nb_link_front_end_with_execute_loop [_nb_front_end]; 339 298 340 299 for (uint32_t i=0; i<_nb_thread; ++i) … … 344 303 for (uint32_t i=0; i<_nb_functionnal_unit; ++i) 345 304 nb_link_functionnal_unit [i] = 0; 346 347 for (uint32_t i=0; i<_nb_thread; ++i) 348 { 305 for (uint32_t i=0; i<_nb_front_end; ++i) 306 { 307 nb_link_front_end_with_execute_loop [i] = 0; 308 for (uint32_t j=0; j<_nb_execute_loop; ++j) 309 link_front_end_with_execute_loop [i][j] = false; 310 } 311 312 for (uint32_t i=0; i<_nb_thread; ++i) 313 { 314 uint32_t num_front_end = _link_context_with_thread [i].first; 315 349 316 { 350 317 uint32_t num_load_store_unit = _link_load_store_unit_with_thread [i]; 318 uint32_t num_execute_loop = _link_execute_unit_with_load_store_unit [i].first; 351 319 352 320 nb_link_thread [i] ++; 353 321 nb_link_load_store_unit [num_load_store_unit] ++; 322 323 if (not link_front_end_with_execute_loop [num_front_end][num_execute_loop]) 324 nb_link_front_end_with_execute_loop [num_front_end] ++; 325 link_front_end_with_execute_loop [num_front_end][num_execute_loop] = true; 354 326 } 355 327 … … 357 329 if (_link_thread_and_functionnal_unit [i][j]) 358 330 { 331 uint32_t num_execute_loop = _link_execute_unit_with_functionnal_unit [i].first; 332 359 333 nb_link_thread [i] ++; 360 334 nb_link_functionnal_unit [j] ++; 335 336 if (not link_front_end_with_execute_loop [num_front_end][num_execute_loop]) 337 nb_link_front_end_with_execute_loop [num_front_end] ++; 338 link_front_end_with_execute_loop [num_front_end][num_execute_loop] = true; 361 339 } 362 340 } … … 371 349 if (nb_link_functionnal_unit [i] == 0) 372 350 test.error(toString(_("Functionnal_unit [%d] is not link with a thread.\n"),i)); 351 for (uint32_t i=0; i<_nb_front_end; ++i) 352 if (nb_link_front_end_with_execute_loop [i] != 1) 353 test.error(toString(_("Front end [%d] is link with many execute_loop.\n"),i)); 373 354 } 374 355 … … 395 376 for (uint32_t i=0; i<_nb_load_store_unit; ++i) 396 377 for (uint32_t j=0; j<_nb_cache_port[i]; ++j) 397 nb_link_dcache_port [_link_dcache_port_with_load_store_unit[i][j]] ++;378 nb_link_dcache_port [_link_dcache_port_with_load_store_unit[i][j]] ++; 398 379 399 380 for (uint32_t i=0; i<_nb_dcache_port; ++i) … … 402 383 } 403 384 404 405 // public : pair_dual * _link_context_with_thread ;//[nb_thread]406 // public : pair_dual * _link_decod_unit_with_decod_bloc ;//[nb_decod_bloc]407 // public : pair_dual * _link_rename_unit_with_rename_bloc ;//[nb_rename_bloc]408 // public : pair_dual * _link_read_unit_with_read_bloc ;//[nb_read_bloc]409 // public : pair_dual * _link_write_unit_with_write_bloc ;//[nb_write_bloc]410 // public : pair_dual * _link_execute_unit_with_functionnal_unit ;//[nb_functionnal_unit]411 // public : pair_dual * _link_execute_unit_with_load_store_unit ;//[nb_load_store_unit]412 // public : uint32_t * _link_decod_bloc_with_thread ;//[nb_thread]413 // public : uint32_t * _link_rename_bloc_with_front_end ;//[nb_front_end]414 // public : bool *** _table_dispatch ;//[nb_ooo_engine][nb_inst_issue][nb_read_bloc]415 // public : bool ** _link_read_bloc_and_load_store_unit ;//[nb_read_bloc][nb_load_store_unit]416 // public : bool ** _link_read_bloc_and_functionnal_unit ;//[nb_read_bloc][nb_functionnal_unit]417 // public : bool ** _link_write_bloc_and_load_store_unit ;//[nb_write_bloc][nb_load_store_unit]418 // public : bool ** _link_write_bloc_and_functionnal_unit ;//[nb_write_bloc][nb_functionnal_unit]419 // public : uint32_t * _link_load_store_unit_with_thread ;//[nb_thread]420 // public : bool ** _link_thread_and_functionnal_unit ;//[nb_thread][nb_functionnal_unit]421 // public : uint32_t * _link_icache_port_with_thread ;//[nb_thread]422 // public : uint32_t ** _link_dcache_port_with_load_store_unit ;//[nb_load_store_unit][nb_cache_port]423 424 385 log_end(Core,FUNCTION); 425 386 -
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src/Parameters_print.cpp
r136 r138 176 176 str+= toString(MSG_INFORMATION)+" * nb_rename_unit : "+toString<uint32_t >(_nb_rename_unit [i])+"\n"; 177 177 str+= toString(MSG_INFORMATION)+" * nb_inst_issue_queue : "+toString<uint32_t >(_nb_inst_issue_queue [i])+"\n"; 178 str+= toString(MSG_INFORMATION)+" * nb_inst_issue_slot : "+toString<uint32_t >(_nb_inst_issue_slot [i])+"\n";179 178 str+= toString(MSG_INFORMATION)+" * nb_inst_reexecute : "+toString<uint32_t >(_nb_inst_reexecute [i])+"\n"; 180 179 str+= toString(MSG_INFORMATION)+" * nb_inst_commit : "+toString<uint32_t >(_nb_inst_commit [i])+"\n"; … … 193 192 str+= toString(MSG_INFORMATION)+" * issue_load_balancing : "+toString<Tload_balancing_t>(_issue_load_balancing [i])+"\n"; 194 193 str+= toString(MSG_INFORMATION)+" * size_reexecute_queue : "+toString<uint32_t >(_size_reexecute_queue [i])+"\n"; 195 str+= toString(MSG_INFORMATION)+" * reexecute_priority : "+toString<Tpriority_t >(_reexecute_priority [i])+"\n";196 str+= toString(MSG_INFORMATION)+" * reexecute_load_balancing : "+toString<Tload_balancing_t>(_reexecute_load_balancing[i])+"\n";197 194 } 198 195 … … 245 242 246 243 247 for (uint32_t i=0; i<_nb_read_bloc; ++i) 248 for (uint32_t j=0; j<_nb_load_store_unit; ++j) 249 str+= toString(MSG_INFORMATION)+" * link_read_bloc_and_load_store_unit ["+toString(i)+"]["+toString(j)+"] : "+toString(_link_read_bloc_and_load_store_unit [i][j])+"\n";//[nb_read_bloc][nb_load_store_unit] 244 for (uint32_t i=0; i<_nb_load_store_unit; ++i) 245 str+= toString(MSG_INFORMATION)+" * link_read_bloc_with_load_store_unit ["+toString(i)+"] : "+toString(_link_read_bloc_with_load_store_unit [i])+"\n";//[nb_load_store_unit] 250 246 for (uint32_t i=0; i<_nb_read_bloc; ++i) 251 247 for (uint32_t j=0; j<_nb_functionnal_unit; ++j) 252 248 str+= toString(MSG_INFORMATION)+" * link_read_bloc_and_functionnal_unit ["+toString(i)+"]["+toString(j)+"] : "+toString(_link_read_bloc_and_functionnal_unit [i][j])+"\n";//[nb_read_bloc][nb_functionnal_unit] 253 for (uint32_t i=0; i<_nb_write_bloc; ++i) 254 for (uint32_t j=0; j<_nb_load_store_unit; ++j) 255 str+= toString(MSG_INFORMATION)+" * link_write_bloc_and_load_store_unit ["+toString(i)+"]["+toString(j)+"] : "+toString(_link_write_bloc_and_load_store_unit [i][j])+"\n";//[nb_write_bloc][nb_load_store_unit] 249 for (uint32_t i=0; i<_nb_load_store_unit; ++i) 250 str+= toString(MSG_INFORMATION)+" * link_write_bloc_with_load_store_unit ["+toString(i)+"] : "+toString(_link_write_bloc_with_load_store_unit [i])+"\n";//[nb_load_store_unit] 256 251 for (uint32_t i=0; i<_nb_write_bloc; ++i) 257 252 for (uint32_t j=0; j<_nb_functionnal_unit; ++j) … … 262 257 263 258 str+= toString(MSG_INFORMATION)+" -----[ Dispatch ]---------------------------------\n"; 264 265 for (uint32_t i=0; i<_nb_ooo_engine; ++i)266 for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j)267 for (uint32_t k=0; k<_nb_read_bloc; ++k)268 str+= toString(MSG_INFORMATION)+" * table_dispatch ["+toString(i)+"]["+toString(j)+"]["+toString(k)+"] : "+toString(_table_dispatch [i][j][k])+"\n";//[nb_ooo_engine][nb_inst_issue][nb_read_bloc]269 270 259 str+= toString(MSG_INFORMATION)+" * dispatch_priority : "+toString<Tpriority_t >(_dispatch_priority )+"\n"; 271 260 str+= toString(MSG_INFORMATION)+" * dispatch_load_balancing : "+toString<Tload_balancing_t>(_dispatch_load_balancing);
Note: See TracChangeset
for help on using the changeset viewer.