Ignore:
Timestamp:
Feb 16, 2009, 9:28:31 PM (15 years ago)
Author:
rosiere
Message:

1) Configuration : instance configuration file : regroup similar instance
2) Configuration : timing default = 0
3) Debug/Commit_unit : Add watch dog timer
4) Issue_queue : Test parameters : add test if type is optionnal
5) Cor_glue : Fix insert index
6) Free_list : remove bank_by_pop (else deadlock)
7) Update Free List : add register to source event

File:
1 edited

Legend:

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

    r108 r109  
    734734      }
    735735
     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
    736747    // Reedit timing
    737748    {
     
    976987    for (uint32_t i=0; i<_nb_ooo_engine; ++i)
    977988      {
     989        log_printf(TRACE,Core,FUNCTION,_(" * ooo_engine_table_issue_type [%d]"),i);
     990
     991
    978992        // Init
    979993        for (uint32_t j=0; j<_nb_inst_issue[i]; ++j)
     
    9961010              if (_table_dispatch[i][j][k])
    9971011                {
    998                   pair_dual x = _link_read_unit_with_read_bloc[i];
     1012                  pair_dual x = _link_read_unit_with_read_bloc[k];
    9991013                  _network_table_dispatch [i][j][x.first][x.second] = true;
    10001014
    10011015                  // Test functional unit connected with this read bloc
    10021016                  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
    10271045                  // Test load store unit connected with this read bloc
    10281046                  for (uint32_t l=0; l<_nb_load_store_unit; ++l)
    10291047                    {
    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
    10431049                      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                        }
    10561078                    }
    10571079                }
     
    11041126      }
    11051127   
     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
    11061136    ALLOC2(_ooo_engine_nb_load_store_unit                 ,uint32_t         ,_nb_ooo_engine,_nb_rename_unit[it1]);
    11071137
     1138    log_printf(TRACE,Core,FUNCTION,_("  * ooo_engine_nb_load_store_unit [nb_ooo_engine][nb_rename_unit]"));
    11081139    for (uint32_t i=0; i<_nb_ooo_engine; ++i)
    11091140      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        }
    11111145
    11121146    ALLOC3(_ooo_engine_size_store_queue                   ,uint32_t         ,_nb_ooo_engine,_nb_rename_unit[it1],_ooo_engine_nb_load_store_unit[it1][it2]);
     
    13901424                // update translation
    13911425                _execute_loop_translate_num_execute_unit [i][j] = num_fu;
    1392                 num_fu ++;
    13931426
    13941427                // 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];
    13961429               
     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
    13971432                for (uint32_t k=0; k<_nb_type; ++k)
    13981433                  for (uint32_t l=0; l<_nb_operation; ++l)
    13991434                    {
    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];
    14021437                    }
    14031438               
     
    14051440//               for (uint32_t k=0; k<_nb_operation; ++k)
    14061441//                 _execute_loop_timing [i][j][TYPE_MEMORY][k]._delay = _execute_loop_timing [i][j][TYPE_MEMORY][k]._latence = 0;
     1442
     1443                num_fu ++;
    14071444              }
    14081445          }
     
    15331570                link = _link_read_bloc_and_functionnal_unit [num_read_bloc][num_functionnal_unit];
    15341571             
    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);
    15361573             
    15371574              for (uint32_t k=0; k<_execute_loop_nb_execute_unit_port [i][j]; ++k)
     
    15621599                link = _link_write_bloc_and_functionnal_unit [num_write_bloc][num_functionnal_unit];
    15631600             
    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);
    15651602             
    15661603              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.