Ignore:
Timestamp:
Dec 10, 2008, 7:31:39 PM (16 years ago)
Author:
rosiere
Message:

Almost complete design
with Test and test platform

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/SelfTest/src/main.cpp

    r81 r88  
    1414  err (_("<Usage> %s name_instance list_params.\n"),argv[0]);
    1515  err (_("list_params is :\n"));
    16   err (_(" * nb_read_unit                                                               (uint32_t           )\n"));
    17   err (_(" * nb_functionnal_unit                                                        (uint32_t           )\n"));
    18   err (_(" * nb_load_store_unit                                                         (uint32_t           )\n"));
    19   err (_(" * nb_write_unit                                                              (uint32_t           )\n"));
    20   err (_(" * nb_context                                                                 (uint32_t           )\n"));
    21   err (_(" * nb_front_end                                                               (uint32_t           )\n"));
    22   err (_(" * nb_ooo_engine                                                              (uint32_t           )\n"));
    23   err (_(" * nb_packet                                                                  (uint32_t           )\n"));
    24   err (_(" * size_general_data                                                          (uint32_t           )\n"));
    25   err (_(" * size_special_data                                                          (uint32_t           )\n"));
    26   err (_(" * size_read_queue                           [read_unit]                      (uint32_t           )\n"));
    27   err (_(" * size_reservation_station                  [read_unit]                      (uint32_t           )\n"));
    28   err (_(" * nb_inst_retire                            [read_unit]                      (uint32_t           )\n"));
    29   err (_(" * size_store_queue                          [load_store_unit]                (uint32_t           )\n"));
    30   err (_(" * size_load_queue                           [load_store_unit]                (uint32_t           )\n"));
    31   err (_(" * size_speculative_access_queue             [load_store_unit]                (uint32_t           )\n"));
    32   err (_(" * nb_port_check                             [load_store_unit]                (uint32_t           )\n"));
    33   err (_(" * speculative_load                          [load_store_unit]                (Tspeculative_load_t)\n"));
    34   err (_(" * nb_bypass_memory                          [load_store_unit]                (uint32_t           )\n"));
    35   err (_(" * size_write_queue                          [write_unit]                     (uint32_t           )\n"));
    36   err (_(" * size_execute_queue                        [write_unit]                     (uint32_t           )\n"));
    37   err (_(" * nb_bypass_write                           [write_unit]                     (uint32_t           )\n"));
    38   err (_(" * nb_gpr_bank                                                                (uint32_t           )\n"));
    39   err (_(" * nb_gpr_port_read_by_bank                                                   (uint32_t           )\n"));
    40   err (_(" * nb_gpr_port_write_by_bank                                                  (uint32_t           )\n"));
    41   err (_(" * nb_spr_bank                                                                (uint32_t           )\n"));
    42   err (_(" * nb_spr_port_read_by_bank                                                   (uint32_t           )\n"));
    43   err (_(" * nb_spr_port_write_by_bank                                                  (uint32_t           )\n"));
    44   err (_(" * nb_general_register                       [nb_ooo_engine]                  (uint32_t           )\n"));
    45   err (_(" * nb_special_register                       [nb_ooo_engine]                  (uint32_t           )\n"));
    46   err (_(" * nb_inst_insert_rob                        [nb_ooo_engine]                  (uint32_t           )\n"));
    47   err (_(" * nb_inst_retire_rob                        [nb_ooo_engine]                  (uint32_t           )\n"));
    48   err (_(" * execution_unit_to_write_unit_priority                                      (Tpriority_t        )\n"));
    49   err (_(" * execution_unit_to_write_unit_table_routing[nb_execute_unit][nb_write_unit] (bool               )\n"));
    50   err (_(" * execution_unit_to_write_unit_table_thread [nb_write_unit][nb_thread]       (bool               )\n"));
    51   err (_(" * read_unit_to_execution_unit_priority                                       (Tpriority_t        )\n"));
    52   err (_(" * read_unit_to_execution_unit_table_routing [nb_read_unit][nb_execute_unit]  (bool               )\n"));
    53   err (_(" * read_unit_to_execution_unit_table_thread  [nb_execute_unit][nb_thread]     (bool               )\n"));
     16  err (_(" * nb_read_unit                                                                                     (uint32_t           )\n"));
     17  err (_(" * nb_functionnal_unit                                                                              (uint32_t           )\n"));
     18  err (_(" * nb_load_store_unit                                                                               (uint32_t           )\n"));
     19  err (_(" * nb_write_unit                                                                                    (uint32_t           )\n"));
     20  err (_(" * nb_context                                                                                       (uint32_t           )\n"));
     21  err (_(" * nb_front_end                                                                                     (uint32_t           )\n"));
     22  err (_(" * nb_ooo_engine                                                                                    (uint32_t           )\n"));
     23  err (_(" * nb_packet                                                                                        (uint32_t           )\n"));
     24  err (_(" * size_general_data                                                                                (uint32_t           )\n"));
     25  err (_(" * size_special_data                                                                                (uint32_t           )\n"));
     26  err (_(" * size_read_queue                           [nb_read_unit]                                         (uint32_t           )\n"));
     27  err (_(" * size_reservation_station                  [nb_read_unit]                                         (uint32_t           )\n"));
     28  err (_(" * nb_inst_retire                            [nb_read_unit]                                         (uint32_t           )\n"));
     29  err (_(" * nb_inst_functionnal_unit                  [nb_functionnal_unit]                                  (uint32_t           )\n"));
     30  err (_(" * size_store_queue                          [nb_load_store_unit]                                   (uint32_t           )\n"));
     31  err (_(" * size_load_queue                           [nb_load_store_unit]                                   (uint32_t           )\n"));
     32  err (_(" * size_speculative_access_queue             [nb_load_store_unit]                                   (uint32_t           )\n"));
     33  err (_(" * nb_port_check                             [nb_load_store_unit]                                   (uint32_t           )\n"));
     34  err (_(" * speculative_load                          [nb_load_store_unit]                                   (Tspeculative_load_t)\n"));
     35  err (_(" * nb_bypass_memory                          [nb_load_store_unit]                                   (uint32_t           )\n"));
     36  err (_(" * nb_cache_port                             [nb_load_store_unit]                                   (uint32_t           )\n"));
     37  err (_(" * nb_inst_memory                            [nb_load_store_unit]                                   (uint32_t           )\n"));
     38  err (_(" * size_write_queue                          [nb_write_unit]                                        (uint32_t           )\n"));
     39  err (_(" * size_execute_queue                        [nb_write_unit]                                        (uint32_t           )\n"));
     40  err (_(" * nb_bypass_write                           [nb_write_unit]                                        (uint32_t           )\n"));
     41  err (_(" * nb_gpr_bank                                                                                      (uint32_t           )\n"));
     42  err (_(" * nb_gpr_port_read_by_bank                                                                         (uint32_t           )\n"));
     43  err (_(" * nb_gpr_port_write_by_bank                                                                        (uint32_t           )\n"));
     44  err (_(" * nb_spr_bank                                                                                      (uint32_t           )\n"));
     45  err (_(" * nb_spr_port_read_by_bank                                                                         (uint32_t           )\n"));
     46  err (_(" * nb_spr_port_write_by_bank                                                                        (uint32_t           )\n"));
     47  err (_(" * nb_general_register                       [nb_ooo_engine]                                        (uint32_t           )\n"));
     48  err (_(" * nb_special_register                       [nb_ooo_engine]                                        (uint32_t           )\n"));
     49  err (_(" * nb_inst_insert_rob                        [nb_ooo_engine]                                        (uint32_t           )\n"));
     50  err (_(" * nb_inst_retire_rob                        [nb_ooo_engine]                                        (uint32_t           )\n"));
     51  err (_(" * execution_unit_to_write_unit_priority                                                            (Tpriority_t        )\n"));
     52  err (_(" * execution_unit_to_write_unit_table_routing[nb_execute_unit][nb_execute_unit_port][nb_write_unit] (bool               )\n"));
     53  err (_(" * execution_unit_to_write_unit_table_thread [nb_write_unit][nb_thread]                             (bool               )\n"));
     54  err (_(" * read_unit_to_execution_unit_priority                                                             (Tpriority_t        )\n"));
     55  err (_(" * read_unit_to_execution_unit_table_routing [nb_read_unit][nb_execute_unit][nb_execute_unit_port]  (bool               )\n"));
     56  err (_(" * read_unit_to_execution_unit_table_thread  [nb_execute_unit][nb_thread]                           (bool               )\n"));
     57  err (_(" * is_load_store_unit                        [nb_execute_unit]                                      (bool               )\n"));
     58  err (_(" * translate_num_execute_unit                [nb_execute_unit]                                      (uint32_t           )\n"));
     59
    5460
    5561  exit (1);
     
    6268#endif
    6369{
     70  // Command
     71  for (int32_t i=0; i<argc; ++i)
     72    msg("%s ",argv[i]);
     73  msg("\n");
     74 
    6475  if (argc < 2+NB_PARAMS)
    6576    usage (argc, argv);
     
    8495  int32_t nb_params = (2+NB_PARAMS+
    8596                       3*nb_read_unit+
    86                        6*nb_load_store_unit+
     97                       1*nb_functionnal_unit+
     98                       8*nb_load_store_unit+
    8799                       3*nb_write_unit+
    88100                       4*nb_ooo_engine+
    89                        nb_execute_unit*nb_write_unit+
     101//                     sum_execute_unit_port*nb_write_unit+
    90102                       nb_write_unit*nb_thread+
    91                        nb_read_unit*nb_execute_unit+
    92                        nb_execute_unit*nb_thread);
    93  
    94  
    95  
    96   if (argc != nb_params)
    97     {
    98       msg(_("Need %d parameters."),nb_params);
    99       usage (argc, argv);
    100     }
     103//                     nb_read_unit*sum_execute_unit_port+
     104                       nb_execute_unit*nb_thread+
     105                       2*nb_execute_unit);
     106 
     107  if (argc <= nb_params)
     108    usage (argc, argv);
     109 
    101110  uint32_t            * size_read_queue          = new uint32_t [nb_read_unit];
    102111  for (uint32_t i=0; i<nb_read_unit; i++)
     
    111120    nb_inst_retire [i] = atoi(argv[x++]);
    112121
     122  uint32_t            * nb_inst_functionnal_unit = new uint32_t [nb_functionnal_unit];
     123  for (uint32_t i=0; i<nb_functionnal_unit; i++)
     124    nb_inst_functionnal_unit [i] = atoi(argv[x++]);
     125
    113126  uint32_t          * size_store_queue              = new uint32_t [nb_load_store_unit];
    114127  for (uint32_t i=0; i<nb_load_store_unit; i++)
     
    134147  for (uint32_t i=0; i<nb_load_store_unit; i++)
    135148    nb_bypass_memory              [i] = atoi(argv[x++]);
     149
     150  uint32_t          * nb_cache_port                 = new uint32_t [nb_load_store_unit];
     151  for (uint32_t i=0; i<nb_load_store_unit; i++)
     152    nb_cache_port                 [i] = atoi(argv[x++]);
     153
     154  uint32_t          * nb_inst_memory                = new uint32_t [nb_load_store_unit];
     155  for (uint32_t i=0; i<nb_load_store_unit; i++)
     156    nb_inst_memory                [i] = atoi(argv[x++]);
     157
     158
     159  uint32_t sum_execute_unit_port = 0;
     160  for (uint32_t i=0; i<nb_load_store_unit; i++)
     161    sum_execute_unit_port += nb_inst_memory[i];
     162  for (uint32_t i=0; i<nb_functionnal_unit; i++)
     163    sum_execute_unit_port += nb_inst_functionnal_unit[i];
     164
     165  nb_params = (2+NB_PARAMS+
     166               3*nb_read_unit+
     167               1*nb_functionnal_unit+
     168               8*nb_load_store_unit+
     169               3*nb_write_unit+
     170               4*nb_ooo_engine+
     171               sum_execute_unit_port*nb_write_unit+
     172               nb_write_unit*nb_thread+
     173               nb_read_unit*sum_execute_unit_port+
     174               nb_execute_unit*nb_thread+
     175               2*nb_execute_unit);
     176 
     177  if (argc != nb_params)
     178    {
     179      msg("nb_functionnal_unit   : %d\n",nb_functionnal_unit);
     180      msg("nb_load_store_unit    : %d\n",nb_load_store_unit );
     181      msg("sum_execute_unit_port : %d.\n",sum_execute_unit_port);
     182      msg(_("Have %d parameters.\n"),argc     );
     183      msg(_("Need %d parameters.\n"),nb_params);
     184      usage (argc, argv);
     185    }
    136186
    137187  uint32_t * size_write_queue   = new uint32_t [nb_write_unit];
     
    172222  Tpriority_t execution_unit_to_write_unit_priority = fromString<Tpriority_t>(argv[x++]);
    173223
    174   bool ** execution_unit_to_write_unit_table_routing = new bool * [nb_execute_unit];
     224  bool *** execution_unit_to_write_unit_table_routing = new bool ** [nb_execute_unit];
    175225  for (uint32_t i=0; i<nb_execute_unit; i++)
    176226    {
    177       execution_unit_to_write_unit_table_routing [i] = new bool [nb_write_unit];
    178       for (uint32_t j=0; j<nb_write_unit; j++)
    179         execution_unit_to_write_unit_table_routing [i][j] = atoi(argv[x++]);
    180     }
     227      uint32_t nb_execute_unit_port = (i<nb_load_store_unit)?nb_inst_memory[i]:nb_inst_functionnal_unit[i-nb_load_store_unit];
     228
     229      execution_unit_to_write_unit_table_routing [i] = new bool * [nb_execute_unit_port];
     230     
     231      for (uint32_t j=0; j<nb_execute_unit_port; j++)
     232        {
     233          execution_unit_to_write_unit_table_routing [i][j] = new bool [nb_write_unit];
     234         
     235          for (uint32_t k=0; k<nb_write_unit; k++)
     236            execution_unit_to_write_unit_table_routing [i][j][k] = atoi(argv[x++]);
     237        }
     238    }
     239
    181240  bool ** execution_unit_to_write_unit_table_thread = new bool * [nb_write_unit];
    182241  for (uint32_t i=0; i<nb_write_unit; i++)
     
    188247  Tpriority_t read_unit_to_execution_unit_priority  = fromString<Tpriority_t>(argv[x++]);
    189248
    190   bool ** read_unit_to_execution_unit_table_routing = new bool * [nb_read_unit];
     249  bool *** read_unit_to_execution_unit_table_routing = new bool ** [nb_read_unit];
    191250  for (uint32_t i=0; i<nb_read_unit; i++)
    192251    {
    193       read_unit_to_execution_unit_table_routing [i] = new bool [nb_execute_unit];
     252      read_unit_to_execution_unit_table_routing [i] = new bool * [nb_execute_unit];
    194253      for (uint32_t j=0; j<nb_execute_unit; j++)
    195         read_unit_to_execution_unit_table_routing [i][j] = atoi(argv[x++]);
    196     }
     254        {
     255          uint32_t nb_execute_unit_port = (j<nb_load_store_unit)?nb_inst_memory[j]:nb_inst_functionnal_unit[j-nb_load_store_unit];
     256          read_unit_to_execution_unit_table_routing [i][j] = new bool [nb_execute_unit_port];
     257
     258          for (uint32_t k=0; k<nb_execute_unit_port; k++)
     259            read_unit_to_execution_unit_table_routing [i][j][k] = atoi(argv[x++]);
     260        }
     261    }
     262
    197263  bool ** read_unit_to_execution_unit_table_thread = new bool * [nb_execute_unit];
    198264  for (uint32_t i=0; i<nb_execute_unit; i++)
     
    202268        read_unit_to_execution_unit_table_thread [i][j] =  atoi(argv[x++]);
    203269    }
    204   execute_timing_t *** timing = new execute_timing_t ** [nb_execute_unit];
    205  
     270
     271  bool * is_load_store_unit = new bool [nb_execute_unit];
     272  for (uint32_t i=0; i<nb_execute_unit; i++)
     273    is_load_store_unit [i] = fromString<bool>(argv[x++]);
     274
     275  uint32_t * translate_num_execute_unit = new uint32_t [nb_execute_unit];
     276  for (uint32_t i=0; i<nb_execute_unit; i++)
     277    translate_num_execute_unit [i] = fromString<uint32_t>(argv[x++]);
     278
     279  execute_timing_t *** timing = new execute_timing_t ** [nb_functionnal_unit];
    206280  // alloc and reset timing array
    207   for (uint32_t i=0; i< nb_execute_unit; i++)
     281  for (uint32_t i=0; i< nb_functionnal_unit; i++)
    208282    {
    209283      timing [i] = new execute_timing_t * [MAX_TYPE];
     
    218292    }
    219293 
    220   for (uint32_t i=0; i< nb_load_store_unit; i++)
    221     for (uint32_t k=0; k< MAX_OPERATION; k++)
    222       timing[i][TYPE_MEMORY][k]._delay = timing[i][TYPE_MEMORY][k]._latence = 1;
    223294  for (uint32_t i=0; i< nb_functionnal_unit; i++)
    224295    for (uint32_t j=0; j< MAX_TYPE; j++)
    225       if (j != TYPE_MEMORY)
    226         for (uint32_t k=0; k< MAX_OPERATION; k++)
    227           timing[i+nb_load_store_unit][j][k]._delay = timing[i+nb_load_store_unit][j][k]._latence = 1;
    228 
    229   morpheo::behavioural::custom::custom_information_t (*get_custom_information) (uint32_t) = &(morpheo::behavioural::custom::default_get_custom_information);
     296      {
     297        if ( (j != TYPE_MEMORY) and
     298             not ((i!=0) and ((j == TYPE_SPECIAL) or
     299                              (j == TYPE_CUSTOM))))
     300          for (uint32_t k=0; k< MAX_OPERATION; k++)
     301            timing[i][j][k]._delay = timing[i][j][k]._latence = 1;
     302      }
     303
     304  morpheo::behavioural::custom::custom_information_t (*get_custom_information) (void) = &(morpheo::behavioural::custom::default_get_custom_information);
    230305
    231306  try
     
    247322         size_reservation_station                      ,
    248323         nb_inst_retire                                ,
    249          
     324
     325         nb_inst_functionnal_unit                      ,
    250326         timing                                        ,
    251327         get_custom_information                        ,
     
    256332         nb_port_check                                 ,
    257333         speculative_load                              ,
    258          
    259334         nb_bypass_memory                              ,
     335         nb_cache_port                                 ,
     336         nb_inst_memory                                ,
     337
    260338         size_write_queue                              ,
    261339         size_execute_queue                            ,
     
    279357         read_unit_to_execution_unit_priority          ,
    280358         read_unit_to_execution_unit_table_routing     ,
    281          read_unit_to_execution_unit_table_thread      );
    282      
    283       msg(_("%s"),param->print(1).c_str());
     359         read_unit_to_execution_unit_table_thread      ,
     360
     361         is_load_store_unit                            , //[nb_execute_unit]
     362         translate_num_execute_unit                    , //[nb_execute_unit]
     363         true // is_toplevel
     364         );
    284365     
    285366      test (name,param);
     
    287368  catch (morpheo::ErrorMorpheo & error)
    288369    {
    289       msg (_("<%s> : %s.\n"),name.c_str(), error.what ());
     370      msg (_("%s\n"),error.what ());
    290371      exit (EXIT_FAILURE);
    291372    }
    292373  catch (...)
    293374    {
    294       err (_("<%s> : This test must generate a error.\n"),name.c_str());
     375      err (_("This test must generate a error.\n"));
    295376      exit (EXIT_FAILURE);
    296377    }
Note: See TracChangeset for help on using the changeset viewer.