Ignore:
Timestamp:
May 12, 2010, 7:34:01 PM (14 years ago)
Author:
rosiere
Message:

1) add counters_t type for interface
2) fix in check load in load_store_unit
3) add parameters (but not yet implemented)
4) change environment and add script (distcc_env.sh ...)
5) add warning if an unser change rename flag with l.mtspr instruction
6) ...

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/src/Parameters.cpp

    r136 r138  
    6767  }
    6868
     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  }
    6980
    7081#undef  FUNCTION
     
    112123  // Read bloc
    113124  uint32_t                nb_read_bloc                                  ,//
     125  uint32_t              * nb_inst_read                                  ,//[nb_read_bloc]
    114126  uint32_t              * size_read_queue                               ,//[nb_read_bloc]
    115127  uint32_t              * size_reservation_station                      ,//[nb_read_bloc]
     
    118130  // Write bloc
    119131  uint32_t                nb_write_bloc                                 ,//
     132  uint32_t              * nb_inst_write                                 ,//[nb_write_bloc]
    120133  uint32_t              * size_write_queue                              ,//[nb_write_bloc]
    121134  uint32_t              * size_execute_queue                            ,//[nb_write_bloc]
     
    128141  uint32_t              * size_load_queue                               ,//[nb_load_store_unit]
    129142  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]
    130145  uint32_t              * nb_port_check                                 ,//[nb_load_store_unit]
    131146  multi_execute_loop::execute_loop::Tspeculative_load_t 
    132147                        * 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]
    133151  uint32_t              * nb_bypass_memory                              ,//[nb_load_store_unit]
    134152  uint32_t              * nb_cache_port                                 ,//[nb_load_store_unit]
     
    174192  uint32_t                nb_ooo_engine                                 ,
    175193  uint32_t              * nb_rename_unit                                ,//[nb_ooo_engine]
    176   uint32_t              * nb_inst_issue_slot                            ,//[nb_ooo_engine]
     194//uint32_t              * nb_inst_issue_slot                            ,//[nb_ooo_engine]
    177195  uint32_t              * nb_inst_reexecute                             ,//[nb_ooo_engine]
    178196  uint32_t              * nb_inst_commit                                ,//[nb_ooo_engine]
     
    182200  uint32_t              * size_re_order_buffer                          ,//[nb_ooo_engine]
    183201  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]
    184204  Tpriority_t           * commit_priority                               ,//[nb_ooo_engine]
    185205  Tload_balancing_t     * commit_load_balancing                         ,//[nb_ooo_engine]
     
    191211  Tload_balancing_t     * issue_load_balancing                          ,//[nb_ooo_engine]
    192212  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]
    195213
    196214  //Execute_loop
     
    218236  uint32_t              * link_decod_bloc_with_thread                   ,//[nb_thread]
    219237  uint32_t              * link_rename_bloc_with_front_end               ,//[nb_front_end]
    220   bool                *** table_dispatch                                ,//[nb_ooo_engine][nb_inst_issue_slot][nb_read_bloc]
    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]
    222240  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]
    224242  bool                 ** link_write_bloc_and_functionnal_unit          ,//[nb_write_bloc][nb_functionnal_unit]
    225243  uint32_t              * link_load_store_unit_with_thread              ,//[nb_thread]
     
    268286
    269287    _nb_read_bloc                            = nb_read_bloc                            ;
     288    _nb_inst_read                            = nb_inst_read                            ;
    270289    _size_read_queue                         = size_read_queue                         ;
    271290    _size_reservation_station                = size_reservation_station                ;
     
    273292
    274293    _nb_write_bloc                           = nb_write_bloc                           ;
     294    _nb_inst_write                           = nb_inst_write                           ;
    275295    _size_write_queue                        = size_write_queue                        ;
    276296    _size_execute_queue                      = size_execute_queue                      ;
     
    282302    _size_load_queue                         = size_load_queue                         ;
    283303    _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                      ;
    284306    _nb_port_check                           = nb_port_check                           ;
    285307    _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                      ;
    286311    _nb_bypass_memory                        = nb_bypass_memory                        ;
    287312    _nb_cache_port                           = nb_cache_port                           ;
     
    321346    _nb_ooo_engine                           = nb_ooo_engine                           ;
    322347    _nb_rename_unit                          = nb_rename_unit                          ;
    323     _nb_inst_issue_slot                      = nb_inst_issue_slot                      ;
     348//  _nb_inst_issue_slot                      = nb_inst_issue_slot                      ;
    324349    _nb_inst_reexecute                       = nb_inst_reexecute                       ;
    325350    _nb_inst_commit                          = nb_inst_commit                          ;
     
    329354    _size_re_order_buffer                    = size_re_order_buffer                    ;
    330355    _nb_re_order_buffer_bank                 = nb_re_order_buffer_bank                 ;
     356    _retire_ooo_scheme                       = retire_ooo_scheme                       ;
    331357    _commit_priority                         = commit_priority                         ;
    332358    _commit_load_balancing                   = commit_load_balancing                   ;
     
    337363    _issue_load_balancing                    = issue_load_balancing                    ;
    338364    _size_reexecute_queue                    = size_reexecute_queue                    ;
    339     _reexecute_priority                      = reexecute_priority                      ;
    340     _reexecute_load_balancing                = reexecute_load_balancing                ;
    341365
    342366    _nb_execute_loop                         = nb_execute_loop                         ;
     
    362386    _link_decod_bloc_with_thread             = link_decod_bloc_with_thread             ;
    363387    _link_rename_bloc_with_front_end         = link_rename_bloc_with_front_end         ;
    364     _table_dispatch                          = table_dispatch                          ;
    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     ;
    366390    _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    ;
    368392    _link_write_bloc_and_functionnal_unit    = link_write_bloc_and_functionnal_unit    ;
    369393    _link_load_store_unit_with_thread        = link_load_store_unit_with_thread        ;
     
    885909
    886910    {
    887       std::vector<uint32_t> list_execute_loop [_nb_ooo_engine];
    888 
    889911      // initialization counter
    890912      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
    891913        _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
    894935      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
    895936        {
    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         
    916947          _ooo_engine_nb_execute_loop [i] = list_execute_loop[i].size();
    917948        }
     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
    918977
    919978      log_printf(TRACE,Core,FUNCTION,_("  * translate_ooo_engine_num_execute_loop"));
     
    10291088      }
    10301089   
    1031     ALLOC4(_network_table_dispatch                        ,bool             ,_nb_ooo_engine,_nb_inst_issue_slot[it1],_nb_execute_loop,_nb_read_unit[it3]);
     1090//  ALLOC4(_network_table_dispatch                        ,bool             ,_nb_ooo_engine,_nb_inst_issue_slot[it1],_nb_execute_loop,_nb_read_unit[it3]);
    10321091//  ALLOC3(_ooo_engine_table_routing                      ,bool             ,_nb_ooo_engine,_nb_rename_unit[it1],_nb_inst_issue_slot[it1]);
    10331092//  ALLOC3(_ooo_engine_table_issue_type                   ,bool             ,_nb_ooo_engine,_nb_inst_issue_slot[it1],_nb_type);
     
    10351094    ALLOC2(_list_load_store_unit_with_rename_unit         ,std::vector<uint32_t>,_nb_ooo_engine,_nb_rename_unit[it1]);
    10361095
     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
    10371128    for (uint32_t i=0; i<_nb_ooo_engine; ++i)
    10381129      {
    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]];
    10541146       
    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_bloc
    1059               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 bloc
    1065                   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 instruction
    1071 //                           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);
    10761168                                 
    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// //                                 }
    10801172                         
    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);
    10841176                             
    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;
    10881180                             
    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 bloc
    1095                   for (uint32_t l=0; l<_nb_load_store_unit; ++l)
    1096                     {
    1097                       // Test load store unit connected with this read bloc
    1098                       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);
    11171209                             
    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;
    11211213                             
    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
    11381233
    11391234        log_printf(TRACE,Core,FUNCTION,_("  * ooo_engine_table_routing [%d]"),i);
     
    11411236          {
    11421237            // 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            // }
    11571257
    11581258//             uint32_t num_rename_bloc = _link_rename_bloc_with_rename_unit[i][j];
     
    11751275      }
    11761276   
    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"));
    11881281    for (uint32_t i=0; i<_nb_execute_loop; ++i)
    11891282      for (uint32_t j=0; j<_nb_read_unit[i]; ++j)
     
    11911284          // init
    11921285          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;
    11941289
    11951290          // get number of read bloc
     
    11991294          for (uint32_t k=0; k<_nb_functionnal_unit; ++k)
    12001295            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])
    12051310                    {
    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);
    12071312                     
    1208                       _network_table_issue_type [i][j][t] = true;
    1209                       break; // operation
     1313                      _network_table_issue_thread [i][j][t] = true;
    12101314                    }
     1315              }
    12111316         
    12121317          // Test load store unit connected with this read bloc
    12131318          for (uint32_t k=0; k<_nb_load_store_unit; ++k)
    12141319            // 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)
    12161321              {
    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                    }
    12231337              }
    12241338        }
     
    13461460    ALLOC1(_list_ooo_engine_with_execute_loop                      ,std::vector<uint32_t>,_nb_execute_loop);
    13471461    ALLOC1(_list_front_end_with_execute_loop                       ,std::vector<uint32_t>,_nb_execute_loop);
    1348    
     1462
    13491463    for (uint32_t i=0; i<_nb_ooo_engine; ++i)
    13501464      {
     
    13661480    for (uint32_t i=0; i<_nb_execute_loop; ++i)
    13671481      {
    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        // }
    13821501      }
    13831502
     
    14021521    ALLOC1(_execute_loop_nb_packet                                 ,uint32_t,_nb_execute_loop);
    14031522    ALLOC1(_execute_loop_nb_thread                                 ,uint32_t,_nb_execute_loop);
    1404    
     1523
    14051524    for (uint32_t i=0; i<_nb_execute_loop; ++i)
    14061525      {
     
    14531572        } 
    14541573   
     1574    ALLOC2(_execute_loop_nb_inst_read                              ,uint32_t,_nb_execute_loop,_nb_read_unit[it1]);
    14551575    ALLOC2(_execute_loop_size_read_queue                           ,uint32_t,_nb_execute_loop,_nb_read_unit[it1]);
    14561576    ALLOC2(_execute_loop_size_reservation_station                  ,uint32_t,_nb_execute_loop,_nb_read_unit[it1]);
     
    14681588            log_printf(TRACE,Core,FUNCTION,_("      * num_read_bloc : %d"),num_read_bloc);
    14691589           
     1590            _execute_loop_nb_inst_read             [i][j] = _nb_inst_read             [num_read_bloc];
    14701591            _execute_loop_size_read_queue          [i][j] = _size_read_queue          [num_read_bloc];
    14711592            _execute_loop_size_reservation_station [i][j] = _size_reservation_station [num_read_bloc];
     
    15381659      }
    15391660   
    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]);
    15441667    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]);
    15491675   
    15501676    for (uint32_t i=0; i<_nb_execute_loop; ++i)
     
    15561682          log_printf(TRACE,Core,FUNCTION,_("    * nb_bypass_memory : %d"),_nb_bypass_memory[num_load_store_unit]);
    15571683
    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];
    15661700        }
    15671701
     1702    ALLOC2(_execute_loop_nb_inst_write                             ,uint32_t,_nb_execute_loop,_nb_write_unit[it1]);
    15681703    ALLOC2(_execute_loop_size_write_queue                          ,uint32_t,_nb_execute_loop,_nb_write_unit[it1]);
    15691704    ALLOC2(_execute_loop_size_execute_queue                        ,uint32_t,_nb_execute_loop,_nb_write_unit[it1]);
     
    15761711          uint32_t num_write_bloc = _link_write_bloc_with_write_unit [i][j];
    15771712   
     1713          _execute_loop_nb_inst_write      [i][j] = _nb_inst_write      [num_write_bloc];
    15781714          _execute_loop_size_write_queue   [i][j] = _size_write_queue   [num_write_bloc];
    15791715          _execute_loop_size_execute_queue [i][j] = _size_execute_queue [num_write_bloc];
     
    16601796             
    16611797              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);
    16631799              else
    16641800                link = _link_read_bloc_and_functionnal_unit [num_read_bloc][num_functionnal_unit];
     
    16891825             
    16901826              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);
    16921828              else
    16931829                link = _link_write_bloc_and_functionnal_unit [num_write_bloc][num_functionnal_unit];
     
    17451881              {
    17461882                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]);
    17481884                 
    17491885                if (have_link)
     
    19972133       _ooo_engine_nb_inst_insert                    [i],
    19982134       _ooo_engine_nb_inst_retire                    [i],
    1999 //        _nb_inst_issue                                [i],
     2135//     _nb_inst_issue                                [i],
    20002136       _ooo_engine_nb_inst_execute                   [i],
    20012137       _nb_inst_reexecute                            [i],
     
    20112147       _size_re_order_buffer                         [i],
    20122148       _nb_re_order_buffer_bank                      [i],
     2149       _retire_ooo_scheme                            [i],
    20132150       _commit_priority                              [i],
    20142151       _commit_load_balancing                        [i],
     
    20212158//        _ooo_engine_table_issue_type                  [i],
    20222159       _size_reexecute_queue                         [i],
    2023        _reexecute_priority                           [i],
    2024        _reexecute_load_balancing                     [i],
    20252160       _ooo_engine_rename_select_priority            [i],
    20262161       _ooo_engine_rename_select_load_balancing      [i],
     
    20602195         _size_special_data                                          ,
    20612196
     2197         _execute_loop_nb_inst_read                               [i],
    20622198         _execute_loop_size_read_queue                            [i],
    20632199         _execute_loop_size_reservation_station                   [i],
     
    20712207         _execute_loop_size_load_queue                            [i],
    20722208         _execute_loop_size_speculative_access_queue              [i],
     2209         _execute_loop_nb_store_queue_bank                        [i],
     2210         _execute_loop_nb_load_queue_bank                         [i],
    20732211         _execute_loop_nb_port_check                              [i],
    20742212         _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],
    20752216         _execute_loop_nb_bypass_memory                           [i],
    20762217         _execute_loop_nb_cache_port                              [i],
    20772218         _execute_loop_nb_inst_memory                             [i],
    20782219
     2220         _execute_loop_nb_inst_write                              [i],
    20792221         _execute_loop_size_write_queue                           [i],
    20802222         _execute_loop_size_execute_queue                         [i],
     
    21462288    _param_glue          = new core::core_glue::Parameters
    21472289      (
    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]
    21812325       );
    21822326   
     
    22382382    DELETE2(_execute_loop_size_execute_queue                        ,_nb_execute_loop,_nb_write_unit[it1]);
    22392383    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]);
    22402385    DELETE2(_execute_loop_nb_inst_memory                            ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]);
    22412386    DELETE2(_execute_loop_nb_cache_port                             ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]);
    22422387    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]);
    22432391    DELETE2(_execute_loop_speculative_load                          ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]);
    22442392    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]);
    22452395    DELETE2(_execute_loop_size_speculative_access_queue             ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]);
    22462396    DELETE2(_execute_loop_size_load_queue                           ,_nb_execute_loop,_execute_loop_nb_load_store_unit[it1]);
     
    22532403    DELETE2(_execute_loop_size_reservation_station                  ,_nb_execute_loop,_nb_read_unit[it1]);
    22542404    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]);
    22552406    DELETE2(_translate_execute_loop_num_ooo_engine                  ,_nb_execute_loop,_execute_loop_nb_ooo_engine[it1]);
    22562407    DELETE1(_execute_loop_nb_thread                                 ,_nb_execute_loop);
     
    22732424//  DELETE3(_ooo_engine_table_issue_type                            ,_nb_ooo_engine,_nb_inst_issue_slot[it1],_nb_type);
    22742425//  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);
    22752427    DELETE3(_network_table_issue_type                                                                       ,_nb_execute_loop,_nb_read_unit[it1],_nb_type);
    2276     DELETE4(_network_table_dispatch                                 ,_nb_ooo_engine,_nb_inst_issue_slot[it1],_nb_execute_loop,_nb_read_unit[it3]);
     2428//  DELETE4(_network_table_dispatch                                 ,_nb_ooo_engine,_nb_inst_issue_slot[it1],_nb_execute_loop,_nb_read_unit[it3]);
    22772429//  DELETE2(_ooo_engine_size_read_counter                           ,_nb_ooo_engine,_nb_rename_unit[it1]);
    22782430    DELETE2(_ooo_engine_nb_rename_unit_bank                         ,_nb_ooo_engine,_nb_rename_unit[it1]);
Note: See TracChangeset for help on using the changeset viewer.