Ignore:
Timestamp:
Feb 19, 2009, 5:31:47 PM (15 years ago)
Author:
rosiere
Message:

1) OOO_egine : add stat to depiste low perf source
2) Commit : add stat
3) LSU_Pointer : retire - always ack (else combinatory loop). insert - max nb_inst_memory
4) TopLevel? : add debug_idle_time to stop combinatory loop.
5) Issue_queue : add reexecute_queue, new implementation (routage after issue_queue)
6) Decod / Predictor : add "can_continue"

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit
Files:
2 added
27 edited
2 moved

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/SelfTest/configuration.cfg

    r81 r110  
    552       4       *2      # size_store_queue                 [0]    [nb_load_store_queue]
    661       4       *2      # size_load_queue                  [0]    [nb_load_store_queue]
     71       4       *4      # nb_inst_memory                   [0]    [nb_load_store_queue]
    780       0       +1      # link_load_store_unit_with_thread [0][0] [nb_front_end][nb_context]
    891       4       *4      # nb_inst_insert
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/SelfTest/src/main.cpp

    r88 r110  
    1919  err (_(" * size_store_queue                 [nb_load_store_queue]     (uint32_t)\n"));
    2020  err (_(" * size_load_queue                  [nb_load_store_queue]     (uint32_t)\n"));
     21  err (_(" * nb_inst_memory                   [nb_load_store_queue]     (uint32_t)\n"));
    2122  err (_(" * link_load_store_unit_with_thread [nb_front_end][nb_context](uint32_t)\n"));
    2223  err (_(" * nb_inst_insert                                             (uint32_t)\n"));
     
    5354  uint32_t    _nb_load_store_queue              = fromString<uint32_t>(argv[x++]);
    5455 
    55   if (argc != static_cast<int>(2+NB_PARAMS+_nb_front_end+2*_nb_load_store_queue+nb_thread))
     56  if (argc != static_cast<int>(2+NB_PARAMS+_nb_front_end+3*_nb_load_store_queue+nb_thread))
    5657    usage (argc, argv);
    5758
    5859  uint32_t  * _size_store_queue                 = new uint32_t [_nb_load_store_queue];
    5960  uint32_t  * _size_load_queue                  = new uint32_t [_nb_load_store_queue];
     61  uint32_t  * _nb_inst_memory                   = new uint32_t [_nb_load_store_queue];
    6062 
    6163  for (uint32_t i=0; i<_nb_load_store_queue; i++)
     
    6365  for (uint32_t i=0; i<_nb_load_store_queue; i++)
    6466    _size_load_queue  [i] = atoi(argv[x++]);
     67  for (uint32_t i=0; i<_nb_load_store_queue; i++)
     68    _nb_inst_memory   [i] = atoi(argv[x++]);
    6569 
    6670  uint32_t ** _link_load_store_unit_with_thread = new uint32_t * [_nb_front_end];
     
    8488         _size_store_queue                ,
    8589         _size_load_queue                 ,
     90         _nb_inst_memory                  ,
    8691         _link_load_store_unit_with_thread,
    8792         _nb_inst_insert                  ,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/include/Parameters.h

    r88 r110  
    2929  public : uint32_t  * _size_store_queue                ; //[nb_load_store_queue]
    3030  public : uint32_t  * _size_load_queue                 ; //[nb_load_store_queue]
     31  public : uint32_t  * _nb_inst_memory                  ; //[nb_load_store_queue]
    3132  public : uint32_t ** _link_load_store_unit_with_thread; //[nb_front_end][nb_context]
    3233  public : uint32_t    _nb_inst_insert                  ;
    3334  public : uint32_t    _nb_inst_retire                  ;
     35
     36  public : uint32_t    _max_size_store_queue            ;
     37  public : uint32_t    _max_size_load_queue             ;
    3438
    3539//public : uint32_t    _size_front_end_id               ;
     
    5054                        uint32_t  * size_store_queue                ,
    5155                        uint32_t  * size_load_queue                 ,
     56                        uint32_t  * nb_inst_memory                  ,
    5257                        uint32_t ** link_load_store_unit_with_thread,
    5358                        uint32_t    nb_inst_insert                  ,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/src/Load_Store_pointer_unit_genMealy_insert.cpp

    r81 r110  
    2222  void Load_Store_pointer_unit::genMealy_insert (void)
    2323  {
    24     log_printf(FUNC,Load_Store_pointer_unit,FUNCTION,"Begin");
     24    log_begin(Load_Store_pointer_unit,FUNCTION);
     25    log_function(Load_Store_pointer_unit,FUNCTION,_name.c_str());
    2526
    26     bool use_lsq [_param->_nb_load_store_queue];
     27    // TODO : limité à nb_inst_memory le nombre d'accès par lsq !!!
     28
     29    uint32_t   nb_use_lsq            [_param->_nb_load_store_queue];
     30    Tlsq_ptr_t STORE_QUEUE_PTR_WRITE [_param->_nb_load_store_queue];
     31    bool       STORE_QUEUE_USE       [_param->_nb_load_store_queue][_param->_max_size_store_queue];
     32    Tlsq_ptr_t STORE_QUEUE_NB_USE    [_param->_nb_load_store_queue];
     33    Tlsq_ptr_t LOAD_QUEUE_PTR_WRITE  [_param->_nb_load_store_queue];
     34    bool       LOAD_QUEUE_USE        [_param->_nb_load_store_queue][_param->_max_size_load_queue];
     35   
    2736    for (uint32_t i=0; i<_param->_nb_load_store_queue; i++)
    28       use_lsq [i] = false;
     37      {
     38        nb_use_lsq            [i] = _param->_nb_inst_memory[i];
     39
     40        STORE_QUEUE_PTR_WRITE [i] = reg_STORE_QUEUE_PTR_WRITE [i];
     41        STORE_QUEUE_NB_USE    [i] = reg_STORE_QUEUE_NB_USE    [i];
     42        LOAD_QUEUE_PTR_WRITE  [i] = reg_LOAD_QUEUE_PTR_WRITE  [i];
     43       
     44        for (uint32_t j=0; j<_param->_size_store_queue[i]; j++)
     45          STORE_QUEUE_USE [i][j] = reg_STORE_QUEUE_USE [i][j];
     46        for (uint32_t j=0; j<_param->_size_load_queue[i]; j++)
     47          LOAD_QUEUE_USE  [i][j] = reg_LOAD_QUEUE_USE  [i][j];
     48      }
    2949
    3050    for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
    3151      {
     52        log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * INSERT [%d]",i);
     53
    3254        Tcontrol_t ack                   = false;
    33         Tlsq_ptr_t store_queue_ptr_write = 0;
    34         Tlsq_ptr_t load_queue_ptr_write  = 0;
    3555
    3656        if ( (PORT_READ(in_INSERT_VAL  [i]) == true       ) and
    3757             (PORT_READ(in_INSERT_TYPE [i]) == TYPE_MEMORY))
    3858          {
     59            log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * type is memory");
     60
    3961            Tcontext_t front_end_id = (_param->_have_port_front_end_id)?PORT_READ(in_INSERT_FRONT_END_ID [i]):0;
    4062            Tcontext_t context_id   = (_param->_have_port_context_id  )?PORT_READ(in_INSERT_CONTEXT_ID   [i]):0;
    41            
    4263            uint32_t   lsq          = _param->_link_load_store_unit_with_thread[front_end_id][context_id];
     64
     65            log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * front_end_id : %d",front_end_id);
     66            log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * context_id   : %d",context_id  );
     67            log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * lsq          : %d",lsq         );
    4368
    4469            // Test if a previous instruction use the same lsq
    4570            // Authorize once memory access by load store unit
    46             if (use_lsq [lsq] == false)
     71            if (nb_use_lsq [lsq] > 0)
    4772              {
    48                 use_lsq [lsq] = true;
     73                nb_use_lsq [lsq] --;
    4974
    5075                uint32_t   ptr;
    51                
    52                 store_queue_ptr_write   = reg_STORE_QUEUE_PTR_WRITE [lsq];
    53                 load_queue_ptr_write    = reg_LOAD_QUEUE_PTR_WRITE  [lsq];
     76
     77                PORT_WRITE(out_INSERT_STORE_QUEUE_PTR_WRITE [i], STORE_QUEUE_PTR_WRITE [lsq]);
     78                if (_param->_have_port_load_queue_ptr)
     79                PORT_WRITE(out_INSERT_LOAD_QUEUE_PTR_WRITE  [i], LOAD_QUEUE_PTR_WRITE  [lsq]);
     80
     81                log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * sq_ptr_write : %d",STORE_QUEUE_PTR_WRITE [lsq]);
     82                log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * lq_ptr_write : %d",LOAD_QUEUE_PTR_WRITE [lsq]);
    5483               
    5584                // operation became of decod_stage. Also operation is != store_head_ok and store_head_ko
    5685                if (is_operation_memory_store(PORT_READ(in_INSERT_OPERATION [i])))
    5786                  {
     87                    log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * USE_STORE_QUEUE");
     88               
    5889                    internal_INSERT_OPERATION_USE [i] = OPERATION_USE_STORE_QUEUE;
    5990                   
    60                     ptr = reg_STORE_QUEUE_PTR_WRITE [lsq];
     91                    ptr = STORE_QUEUE_PTR_WRITE [lsq];
     92                    ack = not STORE_QUEUE_USE [lsq][ptr] and (static_cast<uint32_t>(STORE_QUEUE_NB_USE [lsq]+1) < _param->_size_store_queue[lsq]);
    6193
    62                     ack = not reg_STORE_QUEUE_USE [lsq][ptr] and (static_cast<uint32_t>(reg_STORE_QUEUE_NB_USE [lsq]+1) < _param->_size_store_queue[lsq]);
     94                    if (ack)
     95                      {
     96                        STORE_QUEUE_PTR_WRITE [lsq]      = (ptr+1)%_param->_size_store_queue[lsq];
     97                        STORE_QUEUE_NB_USE    [lsq]      ++;
     98                        STORE_QUEUE_USE       [lsq][ptr] = true;
     99                      }
    63100                  }
    64101                else
    65102                  {
     103                    log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * USE_LOAD_QUEUE");
     104
    66105                    internal_INSERT_OPERATION_USE [i] = OPERATION_USE_LOAD_QUEUE;
    67106                   
    68                     ptr = reg_LOAD_QUEUE_PTR_WRITE [lsq];
     107                    ptr = LOAD_QUEUE_PTR_WRITE [lsq];
     108                    ack = (not LOAD_QUEUE_USE [lsq][ptr]);
    69109
    70                     ack = (not reg_LOAD_QUEUE_USE [lsq][ptr]);
     110                    if (ack)
     111                      {
     112                        LOAD_QUEUE_PTR_WRITE [lsq]      = (ptr+1)%_param->_size_load_queue[lsq];
     113                        LOAD_QUEUE_USE       [lsq][ptr] = true;
     114                      }
    71115                  }
     116
     117                log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * ptr          : %d",ptr         );
     118                log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * ack          : %d",ack         );
    72119               
    73120                internal_INSERT_LSQ [i] = lsq;
     
    85132        internal_INSERT_ACK [i] = ack;
    86133        PORT_WRITE(out_INSERT_ACK                   [i], ack);
    87         PORT_WRITE(out_INSERT_STORE_QUEUE_PTR_WRITE [i], store_queue_ptr_write);
    88         if (_param->_have_port_load_queue_ptr)
    89         PORT_WRITE(out_INSERT_LOAD_QUEUE_PTR_WRITE  [i], load_queue_ptr_write );
    90134      }
    91135
    92     log_printf(FUNC,Load_Store_pointer_unit,FUNCTION,"End");
     136    log_end(Load_Store_pointer_unit,FUNCTION);
    93137  };
    94138
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/src/Load_Store_pointer_unit_genMealy_retire.cpp

    r88 r110  
    2424    log_printf(FUNC,Load_Store_pointer_unit,FUNCTION,"Begin");
    2525   
    26     bool use_lsq [_param->_nb_load_store_queue];
    27     for (uint32_t i=0; i<_param->_nb_load_store_queue; i++)
    28       use_lsq [i] = false;
     26//     bool use_lsq [_param->_nb_load_store_queue];
     27//     for (uint32_t i=0; i<_param->_nb_load_store_queue; i++)
     28//       use_lsq [i] = false;
    2929
    3030    for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
    3131      {
    32         Tcontrol_t ack = false;
     32        Tcontrol_t ack = true; // always accept
    3333        Tcontrol_t use_sq  = PORT_READ(in_RETIRE_USE_STORE_QUEUE [i]);
    3434        Tcontrol_t use_lq  = PORT_READ(in_RETIRE_USE_LOAD_QUEUE  [i]);
     
    4141
    4242            // Test if a previous instruction use the same lsq
    43             // Authorize once memory access by load store unit
    44             if (use_lsq [lsq] == false)
     43//          // Authorize once memory access by load store unit
     44//          if (use_lsq [lsq] == false)
    4545              {
    46                 use_lsq [lsq] = true;
    47                 ack = true;
     46//              use_lsq [lsq] = true;
     47//              ack = true;
    4848
    4949                uint32_t   ptr;
     
    7070        else
    7171          {
    72             ack = true;
     72//          ack = true;
    7373
    7474            internal_RETIRE_OPERATION_USE [i] = OPERATION_USE_NONE;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/src/Load_Store_pointer_unit_transition.cpp

    r81 r110  
    2222  void Load_Store_pointer_unit::transition (void)
    2323  {
    24     log_printf(FUNC,Load_Store_pointer_unit,FUNCTION,"Begin");
     24    log_begin(Load_Store_pointer_unit,FUNCTION);
     25    log_function(Load_Store_pointer_unit,FUNCTION,_name.c_str());
    2526
    2627    if (PORT_READ(in_NRESET) == 0)
     
    4748          if (PORT_READ(in_INSERT_VAL [i]) and internal_INSERT_ACK [i])
    4849            {
    49 //            log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"INSERT [%d]",i);
     50              log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * INSERT [%d]",i);
    5051             
    5152              switch (internal_INSERT_OPERATION_USE [i])
     
    5354                case OPERATION_USE_STORE_QUEUE :
    5455                  {
    55 //                  log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * use STORE_QUEUE");
     56                    log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * use STORE_QUEUE");
    5657
    5758                    uint32_t   lsq = internal_INSERT_LSQ [i];
    5859                    Tlsq_ptr_t ptr = internal_INSERT_PTR [i];
    5960
    60 //                  log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * lsq : %d",lsq);
    61 //                  log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * ptr : %d",ptr);
     61                    log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * lsq : %d",lsq);
     62                    log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * ptr : %d",ptr);
    6263
    6364                    reg_STORE_QUEUE_PTR_WRITE [lsq]      = (ptr+1)%_param->_size_store_queue[lsq];
     
    6970                case OPERATION_USE_LOAD_QUEUE :
    7071                  {
    71 //                  log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * use LOAD_QUEUE");
     72                    log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * use LOAD_QUEUE");
    7273
    7374                    uint32_t   lsq = internal_INSERT_LSQ [i];
    7475                    Tlsq_ptr_t ptr = internal_INSERT_PTR [i];
    7576                   
    76 //                  log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * lsq : %d",lsq);
    77 //                  log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * ptr : %d",ptr);
     77                    log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * lsq : %d",lsq);
     78                    log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * ptr : %d",ptr);
    7879
    7980                    reg_LOAD_QUEUE_PTR_WRITE [lsq]      = (ptr+1)%_param->_size_load_queue[lsq];
     
    9596          if (PORT_READ(in_RETIRE_VAL [i]) and internal_RETIRE_ACK [i])
    9697            {
    97 //            log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"RETIRE [%d]",i);
     98              log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * RETIRE [%d]",i);
    9899
    99100              switch (internal_RETIRE_OPERATION_USE [i])
     
    101102                case OPERATION_USE_STORE_QUEUE :
    102103                  {
    103 //                  log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * use STORE_QUEUE");
     104                    log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * use STORE_QUEUE");
    104105
    105106                    uint32_t   lsq = internal_RETIRE_LSQ [i];
    106107                    Tlsq_ptr_t ptr = internal_RETIRE_PTR [i];
    107108
    108 //                  log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * lsq : %d",lsq);
    109 //                  log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * ptr : %d",ptr);
     109                    log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * lsq : %d",lsq);
     110                    log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * ptr : %d",ptr);
    110111                   
    111112//                  reg_STORE_QUEUE_PTR_WRITE [lsq]      = ((ptr==0)?_param->_size_store_queue[lsq]:ptr)-1;
     
    117118                case OPERATION_USE_LOAD_QUEUE :
    118119                  {
    119 //                  log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * use LOAD_QUEUE");
     120                    log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * use LOAD_QUEUE");
    120121
    121122                    uint32_t   lsq = internal_RETIRE_LSQ [i];
    122123                    Tlsq_ptr_t ptr = internal_RETIRE_PTR [i];
    123124                   
    124 //                  log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * lsq : %d",lsq);
    125 //                  log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * ptr : %d",ptr);
     125                    log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * lsq : %d",lsq);
     126                    log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * ptr : %d",ptr);
    126127                   
    127128//                  reg_LOAD_QUEUE_PTR_WRITE [lsq]      = ((ptr==0)?_param->_size_load_queue[lsq]:ptr)-1;
     
    138139      }
    139140
     141    // ===================================================================
     142    // =====[ OTHER ]=====================================================
     143    // ===================================================================
    140144
    141 //     for (uint32_t i=0; i<_param->_nb_load_store_queue; i++)
    142 //       {
    143 //      std::string str;
    144 
    145 //      log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"LOAD_STORE_QUEUE [%d]",i);
    146 
    147 //      log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * STORE_QUEUE_PTR_WRITE : %d",reg_STORE_QUEUE_PTR_WRITE [i]);
    148 //      log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * STORE_QUEUE_NB_USE    : %d",reg_STORE_QUEUE_NB_USE    [i]);
    149 
    150 //      str = "";
    151 //      for (uint32_t j=0; j<_param->_size_store_queue[i]; j++)
    152 //        str += toString(reg_STORE_QUEUE_USE [i][j]) + " ";
    153 //      log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * %s",str.c_str());
    154        
    155 //      log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * LOAD_QUEUE_PTR_WRITE  : %d",reg_LOAD_QUEUE_PTR_WRITE [i]);
    156 
    157 //      str = "";
    158 //      for (uint32_t j=0; j<_param->_size_load_queue[i]; j++)
    159 //        str += toString(reg_LOAD_QUEUE_USE [i][j]) + " ";
    160 //      log_printf(TRACE,Load_Store_pointer_unit,FUNCTION," * %s",str.c_str());
    161 //       }
     145#if (DEBUG >= DEBUG_TRACE) and (DEBUG_Commit_unit == true)
     146    {
     147      log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"  * Dump Load_Store_pointer Unit");
     148     
     149      for (uint32_t i=0; i<_param->_nb_load_store_queue; ++i)
     150        {
     151          log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"    * Load_Store_unit [%d]",i);
     152          log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"      * reg_STORE_QUEUE_NB_USE    : %d", reg_STORE_QUEUE_NB_USE   [i]);
     153          log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"      * reg_STORE_QUEUE_PTR_WRITE : %d", reg_STORE_QUEUE_PTR_WRITE[i]);
     154          log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"      * reg_STORE_QUEUE_USE       :");
     155          for (uint32_t j=0; j<_param->_size_store_queue [i]; ++j)
     156          log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"        [%d] %d",j,reg_STORE_QUEUE_USE [i][j]);
     157          log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"      * reg_LOAD_QUEUE_PTR_WRITE  : %d", reg_LOAD_QUEUE_PTR_WRITE [i]);
     158          log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"      * reg_LOAD_QUEUE_USE        :");
     159          for (uint32_t j=0; j<_param->_size_load_queue [i]; ++j)
     160          log_printf(TRACE,Load_Store_pointer_unit,FUNCTION,"        [%d] %d",j,reg_LOAD_QUEUE_USE [i][j]);
     161        }
     162    }
     163#endif
    162164
    163165#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
     
    165167#endif
    166168
    167     log_printf(FUNC,Load_Store_pointer_unit,FUNCTION,"End");
     169    log_end(Load_Store_pointer_unit,FUNCTION);
    168170  };
    169171
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/src/Parameters.cpp

    r88 r110  
    2222  Parameters::Parameters (uint32_t    nb_front_end                    ,
    2323                          uint32_t  * nb_context                      ,
    24 //                           uint32_t    size_front_end_id               ,
    25 //                           uint32_t    size_context_id                 ,
     24//                        uint32_t    size_front_end_id               ,
     25//                        uint32_t    size_context_id                 ,
    2626                          uint32_t    nb_load_store_queue             ,
    2727                          uint32_t  * size_store_queue                ,
    2828                          uint32_t  * size_load_queue                 ,
     29                          uint32_t  * nb_inst_memory                  ,
    2930                          uint32_t ** link_load_store_unit_with_thread,
    3031                          uint32_t    nb_inst_insert                  ,
     
    4041    _size_store_queue                 = size_store_queue                ;
    4142    _size_load_queue                  = size_load_queue                 ;
     43    _nb_inst_memory                   = nb_inst_memory                  ;
    4244    _link_load_store_unit_with_thread = link_load_store_unit_with_thread;
    4345    _nb_inst_insert                   = nb_inst_insert                  ;
    4446    _nb_inst_retire                   = nb_inst_retire                  ;
    45     
     47   
    4648    test();
     49
     50    _max_size_store_queue             = max<uint32_t>(_size_store_queue,_nb_load_store_queue);
     51    _max_size_load_queue              = max<uint32_t>(_size_load_queue ,_nb_load_store_queue);
    4752
    4853    if (is_toplevel)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Free_List_unit.h

    r109 r110  
    5555#ifdef STATISTICS
    5656  public    : Stat                           * _stat;
     57  private   : counter_t                      * _stat_nb_inst_pop     ;
     58  private   : counter_t                      * _stat_nb_inst_pop_gpr ;
     59  private   : counter_t                      * _stat_nb_inst_pop_spr ;
     60  private   : counter_t                      * _stat_nb_inst_push_gpr;
     61  private   : counter_t                      * _stat_nb_inst_push_spr;
     62  private   : counter_t                     ** _stat_bank_gpr_nb_elt ; //[nb_bank]
     63  private   : counter_t                     ** _stat_bank_spr_nb_elt ; //[nb_bank]
    5764#endif
    5865
     
    146153
    147154#ifdef STATISTICS
    148   public  : void        statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
     155  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
     156  public  : void        statistics_deallocation   (void);
    149157#endif
    150158#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit.cpp

    r88 r110  
    5858        log_printf(INFO,Free_List_unit,FUNCTION,"Allocation of statistics");
    5959
    60         statistics_declaration(param_statistics);
     60        statistics_allocation(param_statistics);
    6161      }
    6262#endif
     
    157157#ifdef STATISTICS
    158158    if (usage_is_set(_usage,USE_STATISTICS))
    159       {
    160         log_printf(INFO,Free_List_unit,FUNCTION,"Generate Statistics file");
    161        
    162         delete _stat;
    163       }
     159      statistics_deallocation ();
     160
    164161#endif
    165162
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_statistics_allocation.cpp

    r108 r110  
    2020
    2121#undef  FUNCTION
    22 #define FUNCTION "Free_List_unit::statistics_declaration"
    23   void Free_List_unit::statistics_declaration (morpheo::behavioural::Parameters_Statistics * param_statistics)
     22#define FUNCTION "Free_List_unit::statistics_allocation"
     23  void Free_List_unit::statistics_allocation (morpheo::behavioural::Parameters_Statistics * param_statistics)
    2424  {
    2525    log_printf(FUNC,Free_List_unit,FUNCTION,"Begin");
     
    2828                      "Free_List_unit",
    2929                      param_statistics);
     30
     31    std::string sum_bank_gpr_nb_elt = "0";
     32    _stat_bank_gpr_nb_elt = new counter_t * [_param->_nb_bank];
    3033   
     34    for (uint32_t i=0; i<_param->_nb_bank; ++i)
     35      {
     36        std::string str = "bank_gpr_nb_elt_"+toString(i);
     37       
     38        sum_bank_gpr_nb_elt = "+ "+str+" "+sum_bank_gpr_nb_elt;
     39       
     40        _stat_bank_gpr_nb_elt [i]  = _stat->create_variable(str);
     41       
     42        _stat->create_expr_average_by_cycle("average_occupation_bank_gpr_"+toString(i), str, "", toString(_("Average free list occupation (bank %d)"),i));
     43        _stat->create_expr_percent         ("percent_occupation_bank_gpr_"+toString(i) , "average_occupation_bank_gpr_"+toString(i), toString(_param->_bank_gpr_nb_slot), toString(_("Percent free list occupation (bank %d)"),i));
     44      }
     45
     46    _stat->create_expr_average_by_cycle("average_occupation_bank_gpr", sum_bank_gpr_nb_elt, "", _("Average free list occupation (bank all)"));
     47    _stat->create_expr_percent         ("percent_occupation_bank_gpr", "average_occupation_bank_gpr", toString(_param->_bank_gpr_nb_slot*_param->_nb_bank), _("Percent free list occupation (bank all)"));
     48   
     49    std::string sum_bank_spr_nb_elt = "0";
     50    _stat_bank_spr_nb_elt = new counter_t * [_param->_nb_bank];
     51
     52    for (uint32_t i=0; i<_param->_nb_bank; ++i)
     53      {
     54        std::string str = "bank_spr_nb_elt_"+toString(i);
     55       
     56        sum_bank_spr_nb_elt = "+ "+str+" "+sum_bank_spr_nb_elt;
     57       
     58        _stat_bank_spr_nb_elt [i]  = _stat->create_variable(str);
     59       
     60        _stat->create_expr_average_by_cycle("average_occupation_bank_spr_"+toString(i), str, "", toString(_("Average free list occupation (bank %d)"),i));
     61        _stat->create_expr_percent         ("percent_occupation_bank_spr_"+toString(i) , "average_occupation_bank_spr_"+toString(i), toString(_param->_bank_spr_nb_slot), toString(_("Percent free list occupation (bank %d)"),i));
     62      }
     63
     64    _stat->create_expr_average_by_cycle("average_occupation_bank_spr", sum_bank_spr_nb_elt, "", _("Average free list occupation (bank all)"));
     65    _stat->create_expr_percent         ("percent_occupation_bank_spr", "average_occupation_bank_spr", toString(_param->_bank_spr_nb_slot*_param->_nb_bank), _("Percent free list occupation (bank all)"));
     66
     67    _stat_nb_inst_pop      = _stat->create_variable("nb_inst_pop"     );
     68    _stat_nb_inst_pop_gpr  = _stat->create_variable("nb_inst_pop_gpr" );
     69    _stat_nb_inst_pop_spr  = _stat->create_variable("nb_inst_pop_spr" );
     70    _stat_nb_inst_push_gpr = _stat->create_variable("nb_inst_push_gpr");
     71    _stat_nb_inst_push_spr = _stat->create_variable("nb_inst_push_spr");
     72   
     73    _stat->create_expr_average_by_cycle("average_use_interface_pop"     , "nb_inst_pop"     , "", _("Average instruction per cycle on pop interface"));
     74    _stat->create_expr_average_by_cycle("average_use_interface_pop_gpr" , "nb_inst_pop_gpr" , "", _("Average instruction per cycle on pop interface for gpr"));
     75    _stat->create_expr_average_by_cycle("average_use_interface_pop_spr" , "nb_inst_pop_spr" , "", _("Average instruction per cycle on pop interface for spr"));
     76    _stat->create_expr_average_by_cycle("average_use_interface_push_gpr", "nb_inst_push_gpr", "", _("Average instruction per cycle on push_gpr interface"));
     77    _stat->create_expr_average_by_cycle("average_use_interface_push_spr", "nb_inst_push_spr", "", _("Average instruction per cycle on push_spr interface"));
     78
     79    _stat->create_expr_percent         ("percent_inst_pop_need_gpr"     , "nb_inst_pop_gpr" , "nb_inst_pop", _("Percent of pop instruction that need gpr"));
     80    _stat->create_expr_percent         ("percent_inst_pop_need_spr"     , "nb_inst_pop_spr" , "nb_inst_pop", _("Percent of pop instruction that need spr"));
     81
    3182    log_printf(FUNC,Free_List_unit,FUNCTION,"End");
    3283  };
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_transition.cpp

    r109 r110  
    5050              log_printf(TRACE,Free_List_unit,FUNCTION,"  * POP [%d]",i);
    5151
     52#ifdef STATISTICS
     53              (*_stat_nb_inst_pop) ++;
     54#endif
     55
    5256              if (PORT_READ(in_POP_GPR_VAL [i]))
    53                 _gpr_list [internal_POP_GPR_BANK[i]].pop_front();
     57                {
     58#ifdef STATISTICS
     59                  (*_stat_nb_inst_pop_gpr) ++;
     60#endif
     61                  _gpr_list [internal_POP_GPR_BANK[i]].pop_front();
     62                }
    5463         
    5564              if (PORT_READ(in_POP_SPR_VAL [i]))
    56                 _spr_list [internal_POP_SPR_BANK[i]].pop_front();
     65                {
     66#ifdef STATISTICS
     67                  (*_stat_nb_inst_pop_spr) ++;
     68#endif
     69                  _spr_list [internal_POP_SPR_BANK[i]].pop_front();
     70                }
    5771            }
    5872
     
    6781              log_printf(TRACE,Free_List_unit,FUNCTION,"    * num_reg : %d",PORT_READ(in_PUSH_GPR_NUM_REG [i]));
    6882
     83#ifdef STATISTICS
     84              (*_stat_nb_inst_push_gpr) ++;
     85#endif
     86
    6987              _gpr_list [internal_PUSH_GPR_BANK[i]].push_back(PORT_READ(in_PUSH_GPR_NUM_REG [i]));
    7088            }
     
    7997              log_printf(TRACE,Free_List_unit,FUNCTION,"    * num_reg : %d",PORT_READ(in_PUSH_SPR_NUM_REG [i]));
    8098
     99#ifdef STATISTICS
     100              (*_stat_nb_inst_push_spr) ++;
     101#endif
     102
    81103              _spr_list [internal_PUSH_SPR_BANK[i]].push_back(PORT_READ(in_PUSH_SPR_NUM_REG [i]));
    82104            }
     105
     106#ifdef STATISTICS
     107          for (uint32_t i=0; i<_param->_nb_bank; ++i)
     108            {
     109              (*(_stat_bank_gpr_nb_elt [i])) += _gpr_list[i].size();
     110              (*(_stat_bank_spr_nb_elt [i])) += _spr_list[i].size();
     111            }
     112#endif
    83113
    84114#if (DEBUG >= DEBUG_TRACE) and (DEBUG_Free_List_unit == true)
     
    140170        if (1)
    141171          for (uint32_t i=0; i<_param->_nb_bank; ++i)
    142           {
     172            {
    143173            for (std::list<Tgeneral_address_t>::iterator it1=_gpr_list[i].begin();
    144174                 it1!=_gpr_list[i].end();
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/include/Register_translation_unit_Glue.h

    r98 r110  
    5252#ifdef STATISTICS
    5353  public    : Stat                           * _stat;
     54
     55  private   : counter_t                      * _stat_nb_inst_issue_rename_select;
     56  private   : counter_t                      * _stat_nb_inst_issue_rename_select_req;
     57  private   : counter_t                      * _stat_nb_inst_issue_stall_by_commit           ;
     58  private   : counter_t                      * _stat_nb_inst_issue_stall_by_rat_rename       ;
     59  private   : counter_t                      * _stat_nb_inst_issue_stall_by_rat_insert       ;
     60  private   : counter_t                      * _stat_nb_inst_issue_stall_by_free_list        ;
     61  private   : counter_t                      * _stat_nb_inst_issue_stall_by_stat_list        ;
    5462#endif
    5563
     
    139147
    140148    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     149#ifdef STATISTICS
     150  private   : Tcontrol_t                    * internal_INSERT_RENAME_ACK; //[nb_inst_insert]
     151#endif
     152
    141153#endif
    142154
     
    186198
    187199#ifdef STATISTICS
    188   public  : void        statistics_declaration    (morpheo::behavioural::Parameters_Statistics * param_statistics);
     200  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
     201  public  : void        statistics_deallocation   (void);
    189202#endif
    190203#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/src/Register_translation_unit_Glue.cpp

    r88 r110  
    5858        log_printf(INFO,Register_translation_unit_Glue,FUNCTION,"Allocation of statistics");
    5959
    60         statistics_declaration(param_statistics);
     60        statistics_allocation(param_statistics);
    6161      }
    6262#endif
     
    199199#ifdef STATISTICS
    200200    if (usage_is_set(_usage,USE_STATISTICS))
    201       {
    202         log_printf(INFO,Register_translation_unit_Glue,FUNCTION,"Generate Statistics file");
    203        
    204         delete _stat;
    205       }
     201      statistics_deallocation ();
    206202#endif
    207203
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/src/Register_translation_unit_Glue_allocation.cpp

    r98 r110  
    136136    }
    137137
     138#ifdef STATISTICS
     139    ALLOC1(internal_INSERT_RENAME_ACK, Tcontrol_t,_param->_nb_inst_insert);
     140#endif
     141
    138142    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    139 
    140143#ifdef POSITION
    141144    if (usage_is_set(_usage,USE_POSITION))
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/src/Register_translation_unit_Glue_deallocation.cpp

    r98 r110  
    9999        DELETE1_SIGNAL( in_RETIRE_STAT_LIST_ACK,_param->_nb_inst_retire,1);
    100100
     101#ifdef STATISTICS
     102        DELETE1(internal_INSERT_RENAME_ACK, _param->_nb_inst_insert);
     103#endif
    101104      }
     105
    102106    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    103107
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/src/Register_translation_unit_Glue_genMealy_insert_valack.cpp

    r88 r110  
    7575        log_printf(TRACE,Register_translation_unit_Glue,FUNCTION,"    * stat_list_ack  (r): %d",stat_list_ack );
    7676
     77#ifdef STATISTICS
     78        internal_INSERT_RENAME_ACK [i] = rename_ack;
     79#endif
    7780
    7881        PORT_WRITE(out_INSERT_RENAME_ACK     [i], rename_ack    );
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/src/Register_translation_unit_Glue_genMealy_retire.cpp

    r88 r110  
    3232        Tcontrol_t stat_list_ack = PORT_READ(in_RETIRE_STAT_LIST_ACK [i]);
    3333
    34         PORT_WRITE(out_RETIRE_ACK           [i], rat_ack and stat_list_ack);
    35         PORT_WRITE(out_RETIRE_RAT_VAL       [i], val and stat_list_ack);
    36         PORT_WRITE(out_RETIRE_STAT_LIST_VAL [i], val and rat_ack);
     34        Tcontrol_t ack           = (true
     35//                                     and val
     36                                    and rat_ack
     37                                    and stat_list_ack
     38                                    );
     39        Tcontrol_t rat_val       = (true
     40                                    and val
     41//                                     and rat_ack
     42                                    and stat_list_ack
     43                                    );
     44        Tcontrol_t stat_list_val = (true
     45                                    and val
     46                                    and rat_ack
     47//                                     and stat_list_ack
     48                                    );
     49
     50        PORT_WRITE(out_RETIRE_ACK           [i], ack          );
     51        PORT_WRITE(out_RETIRE_RAT_VAL       [i], rat_val      );
     52        PORT_WRITE(out_RETIRE_STAT_LIST_VAL [i], stat_list_val);
     53
     54        log_printf(TRACE,Register_translation_unit_Glue,FUNCTION,"  * inst_insert [%d]",i);
     55        log_printf(TRACE,Register_translation_unit_Glue,FUNCTION,"    * val            (r): %d",val           );
     56        log_printf(TRACE,Register_translation_unit_Glue,FUNCTION,"    * ack            (w): %d",ack           );
     57        log_printf(TRACE,Register_translation_unit_Glue,FUNCTION,"    * rat_val        (w): %d",rat_val       );
     58        log_printf(TRACE,Register_translation_unit_Glue,FUNCTION,"    * rat_ack        (r): %d",rat_ack       );
     59        log_printf(TRACE,Register_translation_unit_Glue,FUNCTION,"    * stat_list_val  (w): %d",stat_list_val );
     60        log_printf(TRACE,Register_translation_unit_Glue,FUNCTION,"    * stat_list_ack  (r): %d",stat_list_ack );
    3761      }
    3862
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/src/Register_translation_unit_Glue_statistics_allocation.cpp

    r108 r110  
    2020
    2121#undef  FUNCTION
    22 #define FUNCTION "Register_translation_unit_Glue::statistics_declaration"
    23   void Register_translation_unit_Glue::statistics_declaration (morpheo::behavioural::Parameters_Statistics * param_statistics)
     22#define FUNCTION "Register_translation_unit_Glue::statistics_allocation"
     23  void Register_translation_unit_Glue::statistics_allocation (morpheo::behavioural::Parameters_Statistics * param_statistics)
    2424  {
    2525    log_printf(FUNC,Register_translation_unit_Glue,FUNCTION,"Begin");
     
    2828                      "Register_translation_unit_Glue",
    2929                      param_statistics);
     30
     31    _stat_nb_inst_issue_rename_select        = _stat->create_variable("nb_inst_issue_rename_select");
     32    _stat_nb_inst_issue_rename_select_req    = _stat->create_variable("nb_inst_issue_rename_select_req");
     33
     34    _stat_nb_inst_issue_stall_by_commit      = _stat->create_variable("nb_inst_issue_stall_by_commit");
     35    _stat_nb_inst_issue_stall_by_rat_rename  = _stat->create_variable("nb_inst_issue_stall_by_rat_rename");
     36    _stat_nb_inst_issue_stall_by_rat_insert  = _stat->create_variable("nb_inst_issue_stall_by_rat_insert");
     37    _stat_nb_inst_issue_stall_by_free_list   = _stat->create_variable("nb_inst_issue_stall_by_free_list");
     38    _stat_nb_inst_issue_stall_by_stat_list   = _stat->create_variable("nb_inst_issue_stall_by_stat_list");
     39
     40//  std::string nb_inst_issue_stall = "+ + + nb_inst_issue_stall_by_commit nb_inst_issue_stall_by_rat_rename + nb_inst_issue_stall_by_rat_insert nb_inst_issue_stall_by_free_list + nb_inst_issue_stall_by_stat_list nb_inst_issue_stall_by_rename_select";
     41    std::string nb_inst_issue_stall = "+ + + nb_inst_issue_stall_by_commit nb_inst_issue_stall_by_rat_rename + nb_inst_issue_stall_by_rat_insert nb_inst_issue_stall_by_free_list nb_inst_issue_stall_by_stat_list";
     42
     43    _stat->create_expr_average_by_cycle("average_req_interface_insert", "nb_inst_issue_rename_select_req", "", _("Average instruction by cycle on issue interface (request)"));
     44    _stat->create_expr_average_by_cycle("average_use_interface_insert", "nb_inst_issue_rename_select"    , "", _("Average instruction by cycle on issue interface"));
     45
     46//  _stat->create_expr_percent ("percent_issue_stall_by_rename_select", "nb_inst_issue_stall_by_rename_select", nb_inst_issue_stall, _("Percent of instruction stalled by Rename_Select"));
     47    _stat->create_expr_percent ("percent_issue_stall_by_commit"       , "nb_inst_issue_stall_by_commit", nb_inst_issue_stall, _("Percent of instruction stalled by Commit_unit or Issue_queue or RegisterFile"));
     48    _stat->create_expr_percent ("percent_issue_stall_by_rat_rename"   , "nb_inst_issue_stall_by_rat_rename", nb_inst_issue_stall, _("Percent of instruction stalled by Rat_Rename"));
     49    _stat->create_expr_percent ("percent_issue_stall_by_rat_insert"   , "nb_inst_issue_stall_by_rat_insert", nb_inst_issue_stall, _("Percent of instruction stalled by Rat_Insert"));
     50    _stat->create_expr_percent ("percent_issue_stall_by_free_list"    , "nb_inst_issue_stall_by_free_list", nb_inst_issue_stall, _("Percent of instruction stalled by Free_List"));
     51    _stat->create_expr_percent ("percent_issue_stall_by_stat_list"    , "nb_inst_issue_stall_by_stat_list", nb_inst_issue_stall, _("Percent of instruction stalled by Stat_List"));
    3052   
    3153    log_printf(FUNC,Register_translation_unit_Glue,FUNCTION,"End");
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/src/Register_translation_unit_Glue_transition.cpp

    r81 r110  
    2626    log_printf(FUNC,Register_translation_unit_Glue,FUNCTION,"Begin");
    2727
     28#ifdef STATISTICS
     29    if (usage_is_set(_usage,USE_STATISTICS))
     30      {
     31        for (uint32_t i=0; i<_param->_nb_inst_insert; ++i)
     32          // Test request
     33          if (PORT_READ(in_INSERT_RENAME_VAL [i]))
     34            {
     35              (* _stat_nb_inst_issue_rename_select_req) ++;
     36
     37              if (internal_INSERT_RENAME_ACK [i])
     38                (* _stat_nb_inst_issue_rename_select)++;
     39              if (PORT_READ(in_INSERT_INSERT_ACK     [i]) == 0)
     40                (*_stat_nb_inst_issue_stall_by_commit    ) ++;
     41              if (PORT_READ(in_INSERT_RAT_RENAME_ACK [i]) == 0)
     42                (*_stat_nb_inst_issue_stall_by_rat_rename) ++;
     43              if (PORT_READ(in_INSERT_RAT_INSERT_ACK [i]) == 0)
     44                (*_stat_nb_inst_issue_stall_by_rat_insert) ++;
     45              if (PORT_READ(in_INSERT_FREE_LIST_ACK  [i]) == 0)
     46                (*_stat_nb_inst_issue_stall_by_free_list ) ++;
     47              if (PORT_READ(in_INSERT_STAT_LIST_ACK  [i]) == 0)
     48                (*_stat_nb_inst_issue_stall_by_stat_list ) ++;
     49            }
     50      }
     51#endif
     52
    2853#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
    2954    end_cycle ();
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Rename_select_genMealy.cpp

    r108 r110  
    4343    for (uint32_t i=0; i<_param->_nb_inst_rename; i++)
    4444      {
    45         log_printf(TRACE,Rename_select,FUNCTION,"  * inst_rename [%d]",i);
     45        log_printf(TRACE,Rename_select,FUNCTION,"  * RENAME_OUT [%d]",i);
    4646
    4747        // Scan all instruction until find
     
    6565                log_printf(TRACE,Rename_select,FUNCTION,"      * rename_out_ack       : %d",PORT_READ(in_RENAME_OUT_ACK[i]));
    6666
    67                 Tcontext_t     front_end_id = (_param->_have_port_front_end_id)?PORT_READ(in_RENAME_IN_FRONT_END_ID [x][y]):0;
    68                 Tcontext_t     context_id   = (_param->_have_port_context_id  )?PORT_READ(in_RENAME_IN_CONTEXT_ID   [x][y]):0;
     67                Tcontext_t front_end_id = (_param->_have_port_front_end_id)?PORT_READ(in_RENAME_IN_FRONT_END_ID [x][y]):0;
     68                Tcontext_t context_id   = (_param->_have_port_context_id  )?PORT_READ(in_RENAME_IN_CONTEXT_ID   [x][y]):0;
    6969               
    70                 Tcontrol_t     no_execute   = (PORT_READ(in_RENAME_IN_NO_EXECUTE [x][y]));
    71 
    72                 Tcontrol_t read_ra  = (PORT_READ(in_RENAME_IN_READ_RA  [x][y]));
    73                 Tcontrol_t read_rb  = (PORT_READ(in_RENAME_IN_READ_RB  [x][y]));
    74                 Tcontrol_t read_rc  = (PORT_READ(in_RENAME_IN_READ_RC  [x][y]));
    75                 Tcontrol_t write_rd = (PORT_READ(in_RENAME_IN_WRITE_RD [x][y]));
    76                 Tcontrol_t write_re = (PORT_READ(in_RENAME_IN_WRITE_RE [x][y]));
     70                Tcontrol_t no_execute   = (PORT_READ(in_RENAME_IN_NO_EXECUTE [x][y]));
     71                Tcontrol_t read_ra      = (PORT_READ(in_RENAME_IN_READ_RA    [x][y]));
     72                Tcontrol_t read_rb      = (PORT_READ(in_RENAME_IN_READ_RB    [x][y]));
     73                Tcontrol_t read_rc      = (PORT_READ(in_RENAME_IN_READ_RC    [x][y]));
     74                Tcontrol_t write_rd     = (PORT_READ(in_RENAME_IN_WRITE_RD   [x][y]));
     75                Tcontrol_t write_re     = (PORT_READ(in_RENAME_IN_WRITE_RE   [x][y]));
    7776
    7877                // Attention, j'ai enlevé event_state de la liste de sensibilité
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_unit_Glue/src/Rename_unit_Glue_genMealy_insert_valack.cpp

    r88 r110  
    2525    log_function(Rename_unit_Glue,FUNCTION,_name.c_str());
    2626
    27 //     // Transaction must be in-order
     27//     // Transaction must be in-order - made in rename_select
    2828//     Tcontrol_t previous_transaction = true;
    2929   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_unit_Glue/src/Rename_unit_Glue_genMealy_retire_valack.cpp

    r88 r110  
    2525    log_function(Rename_unit_Glue,FUNCTION,_name.c_str());
    2626
    27     // Transaction must be in-order
    28     Tcontrol_t previous_transaction = true;
     27    // Transaction must be in-order - made in commit_unit
     28//     Tcontrol_t previous_transaction = true;
    2929   
    3030    for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
     
    3434        Tcontrol_t REGISTER_TRANSLATION_ACK     = PORT_READ(in_RETIRE_REGISTER_TRANSLATION_ACK     [i]);
    3535
    36         Tcontrol_t ACK                          = (previous_transaction         and
     36        Tcontrol_t ACK                          = (// previous_transaction         and
    3737                                                   LOAD_STORE_QUEUE_POINTER_ACK and
    3838                                                   REGISTER_TRANSLATION_ACK     );
    39         Tcontrol_t LOAD_STORE_QUEUE_POINTER_VAL = (previous_transaction         and
     39        Tcontrol_t LOAD_STORE_QUEUE_POINTER_VAL = (// previous_transaction         and
    4040                                                   VAL                          and
    4141                                                   REGISTER_TRANSLATION_ACK     );
    42         Tcontrol_t REGISTER_TRANSLATION_VAL     = (previous_transaction         and
     42        Tcontrol_t REGISTER_TRANSLATION_VAL     = (// previous_transaction         and
    4343                                                   VAL                          and
    4444                                                   LOAD_STORE_QUEUE_POINTER_ACK );
     
    4848        PORT_WRITE(out_RETIRE_REGISTER_TRANSLATION_VAL     [i], REGISTER_TRANSLATION_VAL    );
    4949
    50         previous_transaction = VAL and ACK;
     50//      previous_transaction = VAL and ACK;
     51
     52        log_printf(TRACE,Rename_unit_Glue,FUNCTION,"  * retire [%d]",i);
     53        log_printf(TRACE,Rename_unit_Glue,FUNCTION,"    * val (commit_unit)            (r) : %d",VAL                         );
     54        log_printf(TRACE,Rename_unit_Glue,FUNCTION,"    * ack (commit_unit)            (w) : %d",ACK                         );
     55        log_printf(TRACE,Rename_unit_Glue,FUNCTION,"    * register_translation_val     (w) : %d",REGISTER_TRANSLATION_VAL    );
     56        log_printf(TRACE,Rename_unit_Glue,FUNCTION,"    * register_translation_ack     (r) : %d",REGISTER_TRANSLATION_ACK    );
     57        log_printf(TRACE,Rename_unit_Glue,FUNCTION,"    * load_store_queue_pointer_val (w) : %d",LOAD_STORE_QUEUE_POINTER_VAL);
     58        log_printf(TRACE,Rename_unit_Glue,FUNCTION,"    * load_store_queue_pointer_ack (r) : %d",LOAD_STORE_QUEUE_POINTER_ACK);
    5159      }
    5260
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/SelfTest/config-min.cfg

    r88 r110  
    882       2       +1      # size_store_queue                 [0]    [nb_load_store_queue]
    991       1       +1      # size_load_queue                  [0]    [nb_load_store_queue]
     101       1       +1      # nb_inst_memory                   [0]    [nb_load_store_queue]
    10110       0       +1      # link_load_store_unit_with_thread [0][0] [nb_front_end][nb_context]
    11121       1       +1      # rename_select_priority           
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/SelfTest/config-thread_1a.cfg

    r88 r110  
    888       8       +1      # size_store_queue                 [0]    [nb_load_store_queue]
    998       8       +1      # size_load_queue                  [0]    [nb_load_store_queue]
     108       8       +1      # nb_inst_memory                   [0]    [nb_load_store_queue]
    10110       0       +1      # link_load_store_unit_with_thread [0][0] [nb_front_end][nb_context]
    11121       1       +1      # rename_select_priority           
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/SelfTest/config-thread_4a.cfg

    r88 r110  
    888       8       +1      # size_store_queue                 [0]    [nb_load_store_queue]
    998       8       +1      # size_load_queue                  [0]    [nb_load_store_queue]
     104       4       +1      # nb_inst_memory                   [0]    [nb_load_store_queue]
    10110       0       +1      # link_load_store_unit_with_thread [0][0] [nb_front_end][nb_context]
    11120       0       +1      # link_load_store_unit_with_thread [0][1] [nb_front_end][nb_context]
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/SelfTest/config-thread_4b.cfg

    r88 r110  
    10108       8       +1      # size_load_queue                  [0]    [nb_load_store_queue]
    11114       4       +1      # size_load_queue                  [1]    [nb_load_store_queue]
     124       4       +1      # nb_inst_memory                   [0]    [nb_load_store_queue]
     132       2       +1      # nb_inst_memory                   [1]    [nb_load_store_queue]
    12140       0       +1      # link_load_store_unit_with_thread [0][0] [nb_front_end][nb_context]
    13151       1       +1      # link_load_store_unit_with_thread [0][1] [nb_front_end][nb_context]
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/SelfTest/src/main.cpp

    r88 r110  
    2222  err (_(" * size_store_queue                  [nb_load_store_queue]      (uint32_t         )\n"));
    2323  err (_(" * size_load_queue                   [nb_load_store_queue]      (uint32_t         )\n"));
     24  err (_(" * nb_inst_memory                    [nb_load_store_queue]      (uint32_t         )\n"));
    2425  err (_(" * link_load_store_unit_with_thread  [nb_front_end][nb_context] (uint32_t         )\n"));
    2526  err (_(" * rename_select_priority                                       (Tpriority_t      )\n"));
     
    7172  uint32_t             _nb_load_store_queue               = fromString<uint32_t         >(argv[x++]);
    7273
    73   if (argc != static_cast<int>(2+NB_PARAMS+2*_nb_front_end+2*_nb_load_store_queue+_sum_nb_context))
     74  if (argc != static_cast<int>(2+NB_PARAMS+2*_nb_front_end+3*_nb_load_store_queue+_sum_nb_context))
    7475    usage (argc, argv);
    7576
    7677  uint32_t           * _size_store_queue                  = new uint32_t [_nb_load_store_queue];
    7778  uint32_t           * _size_load_queue                   = new uint32_t [_nb_load_store_queue];
     79  uint32_t           * _nb_inst_memory                    = new uint32_t [_nb_load_store_queue];
    7880
    7981  for (uint32_t i=0; i<_nb_load_store_queue; i++)
     
    8183  for (uint32_t i=0; i<_nb_load_store_queue; i++)
    8284    _size_load_queue  [i] = fromString<uint32_t>(argv[x++]);
     85  for (uint32_t i=0; i<_nb_load_store_queue; i++)
     86    _nb_inst_memory   [i] = fromString<uint32_t>(argv[x++]);
    8387
    8488  uint32_t          ** _link_load_store_unit_with_thread  = new uint32_t * [_nb_front_end];
     
    113117         _size_store_queue                 ,
    114118         _size_load_queue                  ,
     119         _nb_inst_memory                   ,
    115120         _link_load_store_unit_with_thread ,
    116121         _rename_select_priority           ,
     
    157162  delete [] _size_store_queue;
    158163  delete [] _size_load_queue ;
     164  delete [] _nb_inst_memory  ;
    159165  delete [] _nb_context      ;
    160166
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/include/Parameters.h

    r88 r110  
    3636  public : uint32_t           * _size_store_queue                 ;//[nb_load_store_queue]
    3737  public : uint32_t           * _size_load_queue                  ;//[nb_load_store_queue]
     38  public : uint32_t           * _nb_inst_memory                   ;//[nb_load_store_queue]
    3839  public : uint32_t          ** _link_load_store_unit_with_thread ;//[nb_front_end][nb_context]
    3940  public : Tpriority_t          _rename_select_priority           ;
     
    7576                        uint32_t           * size_store_queue                 ,
    7677                        uint32_t           * size_load_queue                  ,
     78                        uint32_t           * nb_inst_memory                   ,
    7779                        uint32_t          ** link_load_store_unit_with_thread ,
    7880                        Tpriority_t          rename_select_priority           ,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/src/Parameters.cpp

    r97 r110  
    2727                          uint32_t           * size_store_queue                 ,
    2828                          uint32_t           * size_load_queue                  ,
     29                          uint32_t           * nb_inst_memory                   ,
    2930                          uint32_t          ** link_load_store_unit_with_thread ,
    3031                          Tpriority_t          rename_select_priority           ,
     
    5051    _size_store_queue                  = size_store_queue                 ;
    5152    _size_load_queue                   = size_load_queue                  ;
     53    _nb_inst_memory                    = nb_inst_memory                   ;
    5254    _link_load_store_unit_with_thread  = link_load_store_unit_with_thread ;
    5355    _rename_select_priority            = rename_select_priority           ;
     
    101103       _size_store_queue                ,
    102104       _size_load_queue                 ,
     105       _nb_inst_memory                  ,
    103106       _link_load_store_unit_with_thread,
    104107       _nb_inst_insert                  ,
Note: See TracChangeset for help on using the changeset viewer.