Ignore:
Timestamp:
May 16, 2009, 4:42:39 PM (15 years ago)
Author:
rosiere
Message:

1) Platforms : add new organization for test
2) Load_Store_Unit : add array to count nb_check in store_queue
3) Issue_queue and Core_Glue : rewrite the issue network
4) Special_Register_Unit : add reset value to register CID
5) Softwares : add multicontext test
6) Softwares : add SPECINT
7) Softwares : add MiBench?
7) Read_queue : inhib access for r0
8) Change Core_Glue (network) - dont yet support priority and load balancing scheme

File:
1 edited

Legend:

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

    r115 r117  
    107107  uint32_t              * nb_reg_free                                   ,//[nb_rename_bloc]
    108108  uint32_t              * nb_rename_unit_bank                           ,//[nb_rename_bloc]
    109 //   uint32_t              * size_read_counter                             ,//[nb_rename_bloc]
     109//uint32_t              * size_read_counter                             ,//[nb_rename_bloc]
    110110
    111111  // Read bloc
     
    173173  uint32_t                nb_ooo_engine                                 ,
    174174  uint32_t              * nb_rename_unit                                ,//[nb_ooo_engine]
    175   uint32_t              * nb_inst_issue                                 ,//[nb_ooo_engine]
     175  uint32_t              * nb_inst_issue_slot                            ,//[nb_ooo_engine]
    176176  uint32_t              * nb_inst_reexecute                             ,//[nb_ooo_engine]
    177177  uint32_t              * nb_inst_commit                                ,//[nb_ooo_engine]
     
    217217  uint32_t              * link_decod_bloc_with_thread                   ,//[nb_thread]
    218218  uint32_t              * link_rename_bloc_with_front_end               ,//[nb_front_end]
    219   bool                *** table_dispatch                                ,//[nb_ooo_engine][nb_inst_issue][nb_read_bloc]
     219  bool                *** table_dispatch                                ,//[nb_ooo_engine][nb_inst_issue_slot][nb_read_bloc]
    220220  bool                 ** link_read_bloc_and_load_store_unit            ,//[nb_read_bloc][nb_load_store_unit]
    221221  bool                 ** link_read_bloc_and_functionnal_unit           ,//[nb_read_bloc][nb_functionnal_unit]
     
    319319    _nb_ooo_engine                           = nb_ooo_engine                           ;
    320320    _nb_rename_unit                          = nb_rename_unit                          ;
    321     _nb_inst_issue                           = nb_inst_issue                           ;
     321    _nb_inst_issue_slot                      = nb_inst_issue_slot                      ;
    322322    _nb_inst_reexecute                       = nb_inst_reexecute                       ;
    323323    _nb_inst_commit                          = nb_inst_commit                          ;
     
    868868      for (uint32_t i=0; i<_nb_ooo_engine; ++i)
    869869        {
    870           for (uint32_t j=0; j<_nb_inst_issue[i]; ++j)
     870          for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j)
    871871            for (uint32_t k=0; k<_nb_read_bloc; ++k)
    872872              {
     
    10031003      }
    10041004   
    1005     ALLOC4(_network_table_dispatch                        ,bool             ,_nb_ooo_engine,_nb_inst_issue[it1],_nb_execute_loop,_nb_read_unit[it3]);
    1006     ALLOC3(_ooo_engine_table_routing                      ,bool             ,_nb_ooo_engine,_nb_rename_unit[it1],_nb_inst_issue[it1]);
    1007     ALLOC3(_ooo_engine_table_issue_type                   ,bool             ,_nb_ooo_engine,_nb_inst_issue[it1],_nb_type);
     1005    ALLOC4(_network_table_dispatch                        ,bool             ,_nb_ooo_engine,_nb_inst_issue_slot[it1],_nb_execute_loop,_nb_read_unit[it3]);
     1006//  ALLOC3(_ooo_engine_table_routing                      ,bool             ,_nb_ooo_engine,_nb_rename_unit[it1],_nb_inst_issue_slot[it1]);
     1007//  ALLOC3(_ooo_engine_table_issue_type                   ,bool             ,_nb_ooo_engine,_nb_inst_issue_slot[it1],_nb_type);
    10081008    ALLOC2(_list_functionnal_unit_with_rename_unit        ,std::vector<uint32_t>,_nb_ooo_engine,_nb_rename_unit[it1]);
    10091009    ALLOC2(_list_load_store_unit_with_rename_unit         ,std::vector<uint32_t>,_nb_ooo_engine,_nb_rename_unit[it1]);
     
    10111011    for (uint32_t i=0; i<_nb_ooo_engine; ++i)
    10121012      {
    1013         log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_table_issue_type [%d]"),i);
    1014 
     1013//         log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_table_issue_type [%d]"),i);
    10151014
    10161015        // Init
    1017         for (uint32_t j=0; j<_nb_inst_issue[i]; ++j)
     1016        for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j)
    10181017          {
    10191018            for (uint32_t k=0; k<_nb_execute_loop; ++k)
    10201019              for (uint32_t l=0; l<_nb_read_unit[k]; ++l)
    10211020                _network_table_dispatch [i][j][k][l] = false;
    1022             for (uint32_t k=0; k<_nb_rename_unit[i]; ++k)
    1023               _ooo_engine_table_routing [i][k][j] = false;
    1024             for (uint32_t k=0; k<_nb_type; ++k)
    1025               _ooo_engine_table_issue_type [i][j][k] = false;
     1021//             for (uint32_t k=0; k<_nb_rename_unit[i]; ++k)
     1022//               _ooo_engine_table_routing [i][k][j] = false;
     1023//             for (uint32_t k=0; k<_nb_type; ++k)
     1024//               _ooo_engine_table_issue_type [i][j][k] = false;
    10261025          }
    10271026
    1028         std::vector<uint32_t> list_thread_with_inst_issue [_nb_inst_issue[i]];
     1027        std::vector<uint32_t> list_thread_with_inst_issue [_nb_inst_issue_slot[i]];
    10291028       
    1030         for (uint32_t j=0; j<_nb_inst_issue[i]; ++j)
     1029        for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j)
    10311030          {
    10321031            for (uint32_t k=0; k<_nb_read_bloc; ++k)
     
    10441043                        {
    10451044                          // Scan timing table, test if have an instruction
    1046                           for (uint32_t m=0; m<_nb_type; ++m)
    1047                             for (uint32_t n=0; n<_nb_operation; ++n)
    1048                               if (_timing[l][m][n]._latence > 0)
    1049                                 {
    1050                                   log_printf(TRACE,Core,FUNCTION,_("   [%d][%d] -> true"),j,m);
     1045//                           for (uint32_t m=0; m<_nb_type; ++m)
     1046//                             for (uint32_t n=0; n<_nb_operation; ++n)
     1047//                               if (_timing[l][m][n]._latence > 0)
     1048//                                 {
     1049//                                   log_printf(TRACE,Core,FUNCTION,_("   [%d][%d] -> true"),j,m);
    10511050                                 
    1052                                   _ooo_engine_table_issue_type [i][j][m] = true;
    1053                                   break;
    1054                                 }
     1051//                                   _ooo_engine_table_issue_type [i][j][m] = true;
     1052//                                   break;
     1053//                                 }
    10551054                         
    10561055                          for (uint32_t m=0; m<_nb_thread; ++m)
     
    10731072                      if (_link_read_bloc_and_load_store_unit [k][l])
    10741073                       {
    1075                           _ooo_engine_table_issue_type [i][j][TYPE_MEMORY] = true;
     1074//                        _ooo_engine_table_issue_type [i][j][TYPE_MEMORY] = true;
    10761075//                        _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);
    10771076//                        _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);
     
    11311130            }
    11321131
    1133             uint32_t num_rename_bloc = _link_rename_bloc_with_rename_unit[i][j];
    1134 
    1135             for (uint32_t k=0; k<_nb_front_end; ++k)
    1136               // test if this front_end is connected with this rename_bloc
    1137               if (_link_rename_bloc_with_front_end[k] == num_rename_bloc)
    1138                 // the front end is connected with rename_bloc. Now test all slot issue that it can accepted this front_end
    1139                 for (uint32_t l=0; l<_nb_inst_issue[i]; ++l)
    1140                   for (std::vector<uint32_t>::iterator it = list_thread_with_inst_issue [l].begin();
    1141                        it != list_thread_with_inst_issue [l].end();
    1142                        ++it)
    1143                     // Test if the this is in front_end [k]
    1144                     if (_link_context_with_thread[*it].first == k)
    1145                       {
    1146                         _ooo_engine_table_routing [i][j][l] |= true;
    1147                         log_printf(TRACE,Core,FUNCTION,_("   [%d][%d] -> true"),j,l);
    1148                       }
     1132//             uint32_t num_rename_bloc = _link_rename_bloc_with_rename_unit[i][j];
     1133
     1134//             for (uint32_t k=0; k<_nb_front_end; ++k)
     1135//               // test if this front_end is connected with this rename_bloc
     1136//               if (_link_rename_bloc_with_front_end[k] == num_rename_bloc)
     1137//                 // the front end is connected with rename_bloc. Now test all slot issue that it can accepted this front_end
     1138//                 for (uint32_t l=0; l<_nb_inst_issue_slot[i]; ++l)
     1139//                   for (std::vector<uint32_t>::iterator it = list_thread_with_inst_issue [l].begin();
     1140//                        it != list_thread_with_inst_issue [l].end();
     1141//                        ++it)
     1142//                     // Test if the this is in front_end [k]
     1143//                     if (_link_context_with_thread[*it].first == k)
     1144//                       {
     1145//                         _ooo_engine_table_routing [i][j][l] |= true;
     1146//                         log_printf(TRACE,Core,FUNCTION,_("   [%d][%d] -> true"),j,l);
     1147//                       }
    11491148          }
    11501149      }
    11511150   
    1152     log_printf(TRACE,Core,FUNCTION,_("  * network_table_dispatch [nb_ooo_engine][nb_inst_issue][nb_execute_loop][nb_read_unit]"));
     1151    log_printf(TRACE,Core,FUNCTION,_(" * network_table_dispatch [nb_ooo_engine][nb_inst_issue_slot][nb_execute_loop][nb_read_unit]"));
    11531152    for (uint32_t i=0; i<_nb_ooo_engine; ++i)
    1154       for (uint32_t j=0; j<_nb_inst_issue[i]; ++j)
     1153      for (uint32_t j=0; j<_nb_inst_issue_slot[i]; ++j)
    11551154        for (uint32_t k=0; k<_nb_execute_loop; ++k)
    11561155          for (uint32_t l=0; l<_nb_read_unit[k]; ++l)
    11571156            if (_network_table_dispatch [i][j][k][l] == true)
    11581157              log_printf(TRACE,Core,FUNCTION,_("   Issue Slot [%d][%d] is connected with Read_unit [%d][%d]"),i,j,k,l);
     1158
     1159    ALLOC3(_network_table_issue_type,bool,_nb_execute_loop,_nb_read_unit[it1],_nb_type);
     1160
     1161    log_printf(TRACE,Core,FUNCTION,_(" * network_table_issue_type"));
     1162    for (uint32_t i=0; i<_nb_execute_loop; ++i)
     1163      for (uint32_t j=0; j<_nb_read_unit[i]; ++j)
     1164        {
     1165          // init
     1166          for (uint32_t t=0; t<_nb_type; ++t)
     1167            _network_table_issue_type [i][j][t] = false;
     1168
     1169          // get number of read bloc
     1170          uint32_t num_read_bloc = _link_read_bloc_with_read_unit[i][j];
     1171
     1172          // for each functionnal unit : test if the read bloc is connected with the functionnal unit
     1173          for (uint32_t k=0; k<_nb_functionnal_unit; ++k)
     1174            if (_link_read_bloc_and_functionnal_unit [num_read_bloc][k])
     1175              // Scan timing table, test if have an instruction
     1176              for (uint32_t t=0; t<_nb_type; ++t)
     1177                for (uint32_t o=0; o<_nb_operation; ++o)
     1178                  if (_timing[k][t][o]._latence > 0)
     1179                    {
     1180                      log_printf(TRACE,Core,FUNCTION,_("   [%d][%d][%d] -> true"),i,j,t);
     1181                     
     1182                      _network_table_issue_type [i][j][t] = true;
     1183                      break; // operation
     1184                    }
     1185         
     1186          // Test load store unit connected with this read bloc
     1187          for (uint32_t k=0; k<_nb_load_store_unit; ++k)
     1188            // Test load store unit connected with this read bloc
     1189            if (_link_read_bloc_and_load_store_unit [num_read_bloc][k])
     1190              {
     1191                uint32_t t = TYPE_MEMORY;
     1192               
     1193                log_printf(TRACE,Core,FUNCTION,_("   [%d][%d][%d] -> true"),i,j,t);
     1194               
     1195                _network_table_issue_type [i][j][t] = true;
     1196                break; // load_store_unit
     1197              }
     1198        }
    11591199
    11601200    ALLOC2(_ooo_engine_nb_load_store_unit                 ,uint32_t         ,_nb_ooo_engine,_nb_rename_unit[it1]);
     
    17871827        }
    17881828
     1829    ALLOC1(_issue_queue_in_order,bool,_nb_ooo_engine);
     1830    for (uint32_t i=0; i<_nb_ooo_engine; ++i)
     1831      _issue_queue_in_order [i] = (_issue_queue_scheme [i] == core::multi_ooo_engine::ooo_engine::issue_queue::ISSUE_QUEUE_SCHEME_IN_ORDER);
     1832
    17891833    // parameters depends
    17901834    _size_ooo_engine_id                    = log2(_nb_ooo_engine);
     
    18381882    for (uint32_t i=0; i<_nb_front_end; ++i)
    18391883      _param_front_end [i]= new core::multi_front_end::front_end::Parameters
    1840        (
     1884        (
    18411885        _nb_context                             [i],
    18421886        _nb_decod_unit                          [i],
     
    18771921        );
    18781922
     1923    ALLOC1(_nb_inst_issue_queue,uint32_t,_nb_ooo_engine);
     1924
    18791925    _param_ooo_engine = new core::multi_ooo_engine::ooo_engine::Parameters * [_nb_ooo_engine];
    18801926
    18811927    for (uint32_t i=0; i<_nb_ooo_engine; ++i)
     1928      {
    18821929    _param_ooo_engine [i] = new core::multi_ooo_engine::ooo_engine::Parameters
    18831930      (
     
    18891936       _ooo_engine_nb_inst_insert                    [i],
    18901937       _ooo_engine_nb_inst_retire                    [i],
    1891        _nb_inst_issue                                [i],
     1938//        _nb_inst_issue                                [i],
    18921939       _ooo_engine_nb_inst_execute                   [i],
    18931940       _nb_inst_reexecute                            [i],
     
    19101957       _issue_priority                               [i],
    19111958       _issue_load_balancing                         [i],
    1912        _ooo_engine_table_routing                     [i],
    1913        _ooo_engine_table_issue_type                  [i],
     1959//        _ooo_engine_table_routing                     [i],
     1960//        _ooo_engine_table_issue_type                  [i],
    19141961       _size_reexecute_queue                         [i],
    19151962       _reexecute_priority                           [i],
     
    19221969       _ooo_engine_nb_reg_free                       [i],
    19231970       _ooo_engine_nb_rename_unit_bank               [i],
    1924 //        _ooo_engine_size_read_counter                 [i],
     1971//     _ooo_engine_size_read_counter                 [i],
    19251972       _ooo_engine_nb_load_store_unit                [i],
    19261973       _ooo_engine_size_store_queue                  [i],
     
    19321979       _ooo_engine_translate_num_context_to_num_thread[i]
    19331980       );
     1981    _nb_inst_issue_queue [i] = _param_ooo_engine [i]->_nb_inst_issue;
     1982      }
    19341983
    19351984    _param_execute_loop = new core::multi_execute_loop::execute_loop::Parameters * [_nb_execute_loop];
     
    20452094       _nb_inst_branch_complete              ,//[nb_ooo_engine]
    20462095       _ooo_engine_nb_inst_insert_rob        ,//[nb_ooo_engine]
    2047        _nb_inst_issue                        ,//[nb_ooo_engine]
     2096       _nb_inst_reexecute                    ,//[nb_ooo_engine]
     2097       _nb_inst_issue_queue                  ,//[nb_ooo_engine]
     2098       _nb_inst_issue_slot                   ,//[nb_ooo_engine]
    20482099       _ooo_engine_nb_inst_execute           ,//[nb_ooo_engine][ooo_engine_nb_execute_loop]
     2100       _issue_queue_in_order                 ,//[nb_ooo_engine]
    20492101       _nb_read_unit                         ,//[nb_execute_loop]
    20502102       _nb_write_unit                        ,//[nb_execute_loop]
     
    20592111       _dispatch_priority                    ,
    20602112       _dispatch_load_balancing              ,
    2061        _network_table_dispatch               ,//[nb_ooo_engine][nb_inst_issue][nb_execute_loop][nb_read_unit]
     2113       _network_table_dispatch               ,//[nb_ooo_engine][nb_inst_issue_slot][nb_execute_loop][nb_read_unit]
     2114       _network_table_issue_type             ,//                                   [nb_execute_loop][nb_read_unit][nb_type]
    20622115       _translate_ooo_engine_num_front_end   ,//[nb_ooo_engine][ooo_engine_nb_front_end]
    20632116       _translate_ooo_engine_num_execute_loop,//[nb_ooo_engine][ooo_engine_nb_execute_loop]
    2064        _translate_execute_loop_num_ooo_engine //*[nb_execute_loop][execute_loop_nb_ooo_engine]
     2117       _translate_execute_loop_num_ooo_engine //[nb_execute_loop][execute_loop_nb_ooo_engine]
    20652118       );
    20662119   
     
    21462199    DELETE2(_list_load_store_unit_with_rename_unit                  ,_nb_ooo_engine,_nb_rename_unit[it1]);
    21472200    DELETE2(_list_functionnal_unit_with_rename_unit                 ,_nb_ooo_engine,_nb_rename_unit[it1]);
    2148     DELETE3(_ooo_engine_table_issue_type                            ,_nb_ooo_engine,_nb_inst_issue[it1],_nb_type);
    2149     DELETE3(_ooo_engine_table_routing                               ,_nb_ooo_engine,_nb_rename_unit[it1],_nb_inst_issue[it1]);
    2150     DELETE4(_network_table_dispatch                                 ,_nb_ooo_engine,_nb_inst_issue[it1],_nb_execute_loop,_nb_read_unit[it3]);
    2151 //     DELETE2(_ooo_engine_size_read_counter                           ,_nb_ooo_engine,_nb_rename_unit[it1]);
     2201//  DELETE3(_ooo_engine_table_issue_type                            ,_nb_ooo_engine,_nb_inst_issue_slot[it1],_nb_type);
     2202//  DELETE3(_ooo_engine_table_routing                               ,_nb_ooo_engine,_nb_rename_unit[it1],_nb_inst_issue_slot[it1]);
     2203    DELETE3(_network_table_issue_type                                                                       ,_nb_execute_loop,_nb_read_unit[it1],_nb_type);
     2204    DELETE4(_network_table_dispatch                                 ,_nb_ooo_engine,_nb_inst_issue_slot[it1],_nb_execute_loop,_nb_read_unit[it3]);
     2205//  DELETE2(_ooo_engine_size_read_counter                           ,_nb_ooo_engine,_nb_rename_unit[it1]);
    21522206    DELETE2(_ooo_engine_nb_rename_unit_bank                         ,_nb_ooo_engine,_nb_rename_unit[it1]);
    21532207    DELETE2(_ooo_engine_nb_reg_free                                 ,_nb_ooo_engine,_nb_rename_unit[it1]);
Note: See TracChangeset for help on using the changeset viewer.