- Timestamp:
- Feb 16, 2009, 9:28:31 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src/Parameters.cpp
r108 r109 734 734 } 735 735 736 // log_printf(TRACE,Core,FUNCTION,_(" * front_end_instruction_implemeted")); 737 // for (uint32_t i=0; i<_nb_front_end; ++i) 738 // for (uint32_t j=0; j<_nb_context[i]; ++j) 739 // for (uint32_t k=0; k<NB_INSTRUCTION; ++k) 740 // log_printf(TRACE,Core,FUNCTION,_(" [%d][%d][%d] = %d - type : %d, operation : %d, size_data : %d, latence : %d") 741 // ,i,j,k,_front_end_instruction_implemeted[i][j][k] 742 // ,instruction_information(k)._type 743 // ,instruction_information(k)._operation 744 // ,instruction_size_data(k) 745 // ,_timing[0][instruction_information(k)._type][instruction_information(k)._operation]._latence); 746 736 747 // Reedit timing 737 748 { … … 976 987 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 977 988 { 989 log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_table_issue_type [%d]"),i); 990 991 978 992 // Init 979 993 for (uint32_t j=0; j<_nb_inst_issue[i]; ++j) … … 996 1010 if (_table_dispatch[i][j][k]) 997 1011 { 998 pair_dual x = _link_read_unit_with_read_bloc[ i];1012 pair_dual x = _link_read_unit_with_read_bloc[k]; 999 1013 _network_table_dispatch [i][j][x.first][x.second] = true; 1000 1014 1001 1015 // Test functional unit connected with this read bloc 1002 1016 for (uint32_t l=0; l<_nb_functionnal_unit; ++l) 1003 // the issue slot [j] is connected with the read bloc [k] and it's connected with the functionnal_unit [l] 1004 if (_link_read_bloc_and_functionnal_unit [k][l]) 1005 { 1006 // Scan timing table, test if have an instruction 1007 for (uint32_t m=0; m<_nb_type; ++m) 1008 for (uint32_t n=0; n<_nb_operation; ++n) 1009 if (_timing[l][m][n]._latence > 0) 1010 { 1011 _ooo_engine_table_issue_type [i][j][m] = true; 1012 break; 1013 } 1014 1015 for (uint32_t m=0; m<_nb_thread; ++m) 1016 { 1017 list_thread_with_inst_issue [j].push_back(m); 1018 1019 uint32_t num_front_end = _link_context_with_thread [m].first; 1020 uint32_t num_rename_bloc = _link_rename_bloc_with_front_end[num_front_end]; 1021 uint32_t num_rename_unit = _link_rename_unit_with_rename_bloc [num_rename_bloc].second; 1022 1023 _list_functionnal_unit_with_rename_unit [i][num_rename_unit].push_back(l); 1024 } 1025 } 1026 1017 { 1018 // the issue slot [j] is connected with the read bloc [k] and it's connected with the functionnal_unit [l] 1019 if (_link_read_bloc_and_functionnal_unit [k][l]) 1020 { 1021 // Scan timing table, test if have an instruction 1022 for (uint32_t m=0; m<_nb_type; ++m) 1023 for (uint32_t n=0; n<_nb_operation; ++n) 1024 if (_timing[l][m][n]._latence > 0) 1025 { 1026 log_printf(TRACE,Core,FUNCTION,_(" [%d][%d] -> true"),j,m); 1027 1028 _ooo_engine_table_issue_type [i][j][m] = true; 1029 break; 1030 } 1031 1032 for (uint32_t m=0; m<_nb_thread; ++m) 1033 { 1034 list_thread_with_inst_issue [j].push_back(m); 1035 1036 uint32_t num_front_end = _link_context_with_thread [m].first; 1037 uint32_t num_rename_bloc = _link_rename_bloc_with_front_end[num_front_end]; 1038 uint32_t num_rename_unit = _link_rename_unit_with_rename_bloc [num_rename_bloc].second; 1039 1040 _list_functionnal_unit_with_rename_unit [i][num_rename_unit].push_back(l); 1041 } 1042 } 1043 } 1044 1027 1045 // Test load store unit connected with this read bloc 1028 1046 for (uint32_t l=0; l<_nb_load_store_unit; ++l) 1029 1047 { 1030 _ooo_engine_table_issue_type [i][j][TYPE_MEMORY] = true; 1031 // _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); 1032 // _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); 1033 // _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); 1034 // _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); 1035 // _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); 1036 // _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); 1037 // _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); 1038 // _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); 1039 // _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); 1040 // _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); 1041 // _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); 1042 1048 // Test load store unit connected with this read bloc 1043 1049 if (_link_read_bloc_and_load_store_unit [k][l]) 1044 // the issue slot [j] is connected with the read bloc [k] and it's connected with the load_store_unit [l] 1045 for (uint32_t m=0; m<_nb_thread; ++m) 1046 { 1047 list_thread_with_inst_issue [j].push_back(m); 1048 1049 1050 uint32_t num_front_end = _link_context_with_thread [m].first; 1051 uint32_t num_rename_bloc = _link_rename_bloc_with_front_end[num_front_end]; 1052 uint32_t num_rename_unit = _link_rename_unit_with_rename_bloc [num_rename_bloc].second; 1053 1054 _list_load_store_unit_with_rename_unit [i][num_rename_unit].push_back(l); 1055 } 1050 { 1051 _ooo_engine_table_issue_type [i][j][TYPE_MEMORY] = true; 1052 // _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); 1053 // _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); 1054 // _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); 1055 // _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); 1056 // _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); 1057 // _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); 1058 // _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); 1059 // _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); 1060 // _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); 1061 // _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); 1062 // _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); 1063 1064 // the issue slot [j] is connected with the read bloc [k] and it's connected with the load_store_unit [l] 1065 for (uint32_t m=0; m<_nb_thread; ++m) 1066 { 1067 list_thread_with_inst_issue [j].push_back(m); 1068 1069 uint32_t num_front_end = _link_context_with_thread [m].first; 1070 uint32_t num_rename_bloc = _link_rename_bloc_with_front_end[num_front_end]; 1071 uint32_t num_rename_unit = _link_rename_unit_with_rename_bloc [num_rename_bloc].second; 1072 1073 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); 1074 1075 _list_load_store_unit_with_rename_unit [i][num_rename_unit].push_back(l); 1076 } 1077 } 1056 1078 } 1057 1079 } … … 1104 1126 } 1105 1127 1128 log_printf(TRACE,Core,FUNCTION,_(" * network_table_dispatch [nb_ooo_engine][nb_inst_issue][nb_execute_loop][nb_read_unit]")); 1129 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 1130 for (uint32_t j=0; j<_nb_inst_issue[i]; ++j) 1131 for (uint32_t k=0; k<_nb_execute_loop; ++k) 1132 for (uint32_t l=0; l<_nb_read_unit[k]; ++l) 1133 if (_network_table_dispatch [i][j][k][l] == true) 1134 log_printf(TRACE,Core,FUNCTION,_(" Issue Slot [%d][%d] is connected with Read_unit [%d][%d]"),i,j,k,l); 1135 1106 1136 ALLOC2(_ooo_engine_nb_load_store_unit ,uint32_t ,_nb_ooo_engine,_nb_rename_unit[it1]); 1107 1137 1138 log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_nb_load_store_unit [nb_ooo_engine][nb_rename_unit]")); 1108 1139 for (uint32_t i=0; i<_nb_ooo_engine; ++i) 1109 1140 for (uint32_t j=0; j<_nb_rename_unit[i]; ++j) 1110 _ooo_engine_nb_load_store_unit [i][j] = _list_load_store_unit_with_rename_unit [i][j].size(); 1141 { 1142 _ooo_engine_nb_load_store_unit [i][j] = _list_load_store_unit_with_rename_unit [i][j].size(); 1143 log_printf(TRACE,Core,FUNCTION,_(" [%d][%d] = %d"),i,j,_ooo_engine_nb_load_store_unit [i][j]); 1144 } 1111 1145 1112 1146 ALLOC3(_ooo_engine_size_store_queue ,uint32_t ,_nb_ooo_engine,_nb_rename_unit[it1],_ooo_engine_nb_load_store_unit[it1][it2]); … … 1390 1424 // update translation 1391 1425 _execute_loop_translate_num_execute_unit [i][j] = num_fu; 1392 num_fu ++;1393 1426 1394 1427 // timing information 1395 _execute_loop_nb_inst_functionnal_unit [i][ j] = _nb_inst_functionnal_unit [num_functionnal_unit];1428 _execute_loop_nb_inst_functionnal_unit [i][num_fu] = _nb_inst_functionnal_unit [num_functionnal_unit]; 1396 1429 1430 log_printf(TRACE,Core,FUNCTION," * _execute_loop_nb_inst_functionnal_unit [%d][%d] = _nb_inst_functionnal_unit [%d] = %d",i,num_fu,num_functionnal_unit,_nb_inst_functionnal_unit [num_functionnal_unit]); 1431 1397 1432 for (uint32_t k=0; k<_nb_type; ++k) 1398 1433 for (uint32_t l=0; l<_nb_operation; ++l) 1399 1434 { 1400 //log_printf(TRACE,Core,FUNCTION,_("execute_loop_timing [%d][%d][%d][%d] = timing [%d][%d][%d]"),i,j,k,l,num_functionnal_unit,k,l);1401 _execute_loop_timing [i][ j][k][l] = _timing [num_functionnal_unit][k][l];1435 // log_printf(TRACE,Core,FUNCTION,_("execute_loop_timing [%d][%d][%d][%d] = timing [%d][%d][%d]"),i,num_fu,k,l,num_functionnal_unit,k,l); 1436 _execute_loop_timing [i][num_fu][k][l] = _timing [num_functionnal_unit][k][l]; 1402 1437 } 1403 1438 … … 1405 1440 // for (uint32_t k=0; k<_nb_operation; ++k) 1406 1441 // _execute_loop_timing [i][j][TYPE_MEMORY][k]._delay = _execute_loop_timing [i][j][TYPE_MEMORY][k]._latence = 0; 1442 1443 num_fu ++; 1407 1444 } 1408 1445 } … … 1533 1570 link = _link_read_bloc_and_functionnal_unit [num_read_bloc][num_functionnal_unit]; 1534 1571 1535 log_printf(TRACE,Core,FUNCTION,_(" [%d][%d][%d][all ] -> %d"),i,l,j,link);1572 log_printf(TRACE,Core,FUNCTION,_(" [%d][%d][%d][all (%d)] -> %d"),i,l,j,_execute_loop_nb_execute_unit_port [i][j],link); 1536 1573 1537 1574 for (uint32_t k=0; k<_execute_loop_nb_execute_unit_port [i][j]; ++k) … … 1562 1599 link = _link_write_bloc_and_functionnal_unit [num_write_bloc][num_functionnal_unit]; 1563 1600 1564 log_printf(TRACE,Core,FUNCTION,_(" [%d][%d][all ][%d] -> %d"),i,j,l,link);1601 log_printf(TRACE,Core,FUNCTION,_(" [%d][%d][all (%d)][%d] -> %d"),i,j,_execute_loop_nb_execute_unit_port [i][j],l,link); 1565 1602 1566 1603 for (uint32_t k=0; k<_execute_loop_nb_execute_unit_port [i][j]; ++k)
Note: See TracChangeset
for help on using the changeset viewer.