Ignore:
Timestamp:
Feb 12, 2009, 12:55:06 PM (15 years ago)
Author:
rosiere
Message:

1) decod_queue : add reg_LAST_SLOT.
2) Commit : insert on event -> to pop decod_queue. Head test : add information (speculative or not)
3) Context State / UPT : Branch miss and Load miss in same cycle.
4) Free List : Bank is on LSB not MSB.
5) Platforms : move data

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine
Files:
36 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/SelfTest/config_min.cfg

    r88 r108  
    11111       1       +1      # nb_inst_branch_complete
    12120       0       +1      # nb_branch_speculated    [0][0] [nb_front_end][nb_context]
     131       1       +1      # size_nb_inst_decod
    131432      32      +1      # size_general_data       
    14151       1       +1      # size_store_queue_ptr   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/SelfTest/config_mono_rename_unit.cfg

    r88 r108  
    11111       1       +1      # nb_inst_branch_complete
    12120       0       +1      # nb_branch_speculated    [0][0] [nb_front_end][nb_context]
     131       1       +1      # size_nb_inst_decod
    131432      32      +1      # size_general_data       
    14151       1       +1      # size_store_queue_ptr   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/SelfTest/src/main.cpp

    r88 r108  
    88#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/SelfTest/include/test.h"
    99
    10 #define NB_PARAMS 15
     10#define NB_PARAMS 16
    1111
    1212void usage (int argc, char * argv[])
     
    2525  err (_(" * nb_inst_branch_complete                            (uint32_t         )\n"));
    2626  err (_(" * nb_branch_speculated    [nb_front_end][nb_context] (uint32_t         )\n"));
     27  err (_(" * size_nb_inst_decod                                 (uint32_t         )\n"));
    2728  err (_(" * size_general_data                                  (uint32_t         )\n"));
    2829  err (_(" * size_store_queue_ptr                               (uint32_t         )\n"));
     
    8889    }
    8990
     91  uint32_t          _size_nb_inst_decod      = fromString<uint32_t         >(argv[x++]);
    9092  uint32_t          _size_general_data       = fromString<uint32_t         >(argv[x++]);
    9193  uint32_t          _size_store_queue_ptr    = fromString<uint32_t         >(argv[x++]);
     
    112114         _nb_inst_branch_complete ,
    113115         _nb_branch_speculated    ,
     116         _size_nb_inst_decod      ,
    114117         _size_general_data       ,
    115118         _size_store_queue_ptr    ,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/SelfTest/src/test.cpp

    r105 r108  
    6868  ALLOC2_SC_SIGNAL( in_INSERT_NO_EXECUTE              ," in_INSERT_NO_EXECUTE              ",Tcontrol_t        ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
    6969  ALLOC2_SC_SIGNAL( in_INSERT_IS_DELAY_SLOT           ," in_INSERT_IS_DELAY_SLOT           ",Tcontrol_t        ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
     70#ifdef DEBUG
     71  ALLOC2_SC_SIGNAL( in_INSERT_ADDRESS                 ," in_INSERT_ADDRESS                 ",Taddress_t        ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
     72#endif
    7073  ALLOC2_SC_SIGNAL( in_INSERT_ADDRESS_NEXT            ," in_INSERT_ADDRESS_NEXT            ",Taddress_t        ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
    7174  ALLOC2_SC_SIGNAL( in_INSERT_EXCEPTION               ," in_INSERT_EXCEPTION               ",Texception_t      ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
     
    167170  ALLOC2_SC_SIGNAL(out_NB_INST_COMMIT_ALL             ,"out_NB_INST_COMMIT_ALL             ",Tcounter_t        ,_param->_nb_front_end,_param->_nb_context[it1]);
    168171  ALLOC2_SC_SIGNAL(out_NB_INST_COMMIT_MEM             ,"out_NB_INST_COMMIT_MEM             ",Tcounter_t        ,_param->_nb_front_end,_param->_nb_context[it1]);
     172  ALLOC2_SC_SIGNAL( in_NB_INST_DECOD_ALL              ," in_NB_INST_DECOD_ALL              ",Tcounter_t        ,_param->_nb_front_end,_param->_nb_context[it1]);
    169173  ALLOC2_SC_SIGNAL( in_DEPTH_MIN                      ," in_DEPTH_MIN                      ",Tdepth_t          ,_param->_nb_front_end,_param->_nb_context[it1]);
    170174  ALLOC2_SC_SIGNAL( in_DEPTH_MAX                      ," in_DEPTH_MAX                      ",Tdepth_t          ,_param->_nb_front_end,_param->_nb_context[it1]);
     
    206210  INSTANCE2_SC_SIGNAL(_Commit_unit, in_INSERT_IS_DELAY_SLOT           ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
    207211  INSTANCE2_SC_SIGNAL(_Commit_unit, in_INSERT_NO_EXECUTE              ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
     212#ifdef DEBUG
     213  INSTANCE2_SC_SIGNAL(_Commit_unit, in_INSERT_ADDRESS                 ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
     214#endif
    208215  INSTANCE2_SC_SIGNAL(_Commit_unit, in_INSERT_ADDRESS_NEXT            ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
    209216  INSTANCE2_SC_SIGNAL(_Commit_unit, in_INSERT_EXCEPTION               ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
     
    317324  INSTANCE2_SC_SIGNAL(_Commit_unit,out_NB_INST_COMMIT_ALL             ,_param->_nb_front_end,_param->_nb_context[it1]);
    318325  INSTANCE2_SC_SIGNAL(_Commit_unit,out_NB_INST_COMMIT_MEM             ,_param->_nb_front_end,_param->_nb_context[it1]);
     326  INSTANCE2_SC_SIGNAL(_Commit_unit, in_NB_INST_DECOD_ALL              ,_param->_nb_front_end,_param->_nb_context[it1]);
    319327 
    320328  if (_param->_have_port_depth)
     
    617625  DELETE2_SC_SIGNAL( in_INSERT_NO_EXECUTE              ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
    618626  DELETE2_SC_SIGNAL( in_INSERT_IS_DELAY_SLOT           ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
     627#ifdef DEBUG
     628  DELETE2_SC_SIGNAL( in_INSERT_ADDRESS                 ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
     629#endif
    619630  DELETE2_SC_SIGNAL( in_INSERT_ADDRESS_NEXT            ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
    620631  DELETE2_SC_SIGNAL( in_INSERT_EXCEPTION               ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
     
    714725  DELETE2_SC_SIGNAL(out_NB_INST_COMMIT_ALL             ,_param->_nb_front_end,_param->_nb_context[it1]);
    715726  DELETE2_SC_SIGNAL(out_NB_INST_COMMIT_MEM             ,_param->_nb_front_end,_param->_nb_context[it1]);
     727  DELETE2_SC_SIGNAL( in_NB_INST_DECOD_ALL              ,_param->_nb_front_end,_param->_nb_context[it1]);
    716728  DELETE2_SC_SIGNAL( in_DEPTH_MIN                      ,_param->_nb_front_end,_param->_nb_context[it1]);
    717729  DELETE2_SC_SIGNAL( in_DEPTH_MAX                      ,_param->_nb_front_end,_param->_nb_context[it1]);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Commit_unit.h

    r105 r108  
    8383  public    : SC_IN (Tcontrol_t         ) ***  in_INSERT_NO_EXECUTE                ;//[nb_rename_unit][nb_inst_insert]
    8484  public    : SC_IN (Tcontrol_t         ) ***  in_INSERT_IS_DELAY_SLOT             ;//[nb_rename_unit][nb_inst_insert]
     85#ifdef DEBUG
     86  public    : SC_IN (Taddress_t         ) ***  in_INSERT_ADDRESS                   ;//[nb_rename_unit][nb_inst_insert]
     87#endif
    8588  public    : SC_IN (Taddress_t         ) ***  in_INSERT_ADDRESS_NEXT              ;//[nb_rename_unit][nb_inst_insert]
    8689  public    : SC_IN (Texception_t       ) ***  in_INSERT_EXCEPTION                 ;//[nb_rename_unit][nb_inst_insert]
     
    195198  public    : SC_OUT(Tcounter_t         ) *** out_NB_INST_COMMIT_ALL               ;//[nb_front_end][nb_context]
    196199  public    : SC_OUT(Tcounter_t         ) *** out_NB_INST_COMMIT_MEM               ;//[nb_front_end][nb_context]
     200  public    : SC_IN (Tcounter_t         ) ***  in_NB_INST_DECOD_ALL                ;//[nb_front_end][nb_context]
    197201                                                                                   
    198202    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Parameters.h

    r88 r108  
    8181                        uint32_t            nb_inst_branch_complete ,
    8282                        uint32_t         ** nb_branch_speculated    ,
     83                        uint32_t            size_nb_inst_decod      ,
    8384                        uint32_t            size_general_data       ,
    8485                        uint32_t            size_store_queue_ptr    ,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/include/Types.h

    r105 r108  
    9090  public  : Tspecial_data_t    flags                   ;
    9191  public  : Tcontrol_t         no_sequence             ;
     92  public  : Tcontrol_t         speculative             ;
    9293//public  : Tgeneral_data_t    data_commit             ; // branch's destination
     94#ifdef DEBUG
     95  public  : Taddress_t         address                 ;
     96#endif
    9397  public  : Taddress_t         address_next            ;
    9498
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_allocation.cpp

    r105 r108  
    7171      _ALLOC2_SIGNAL_IN ( in_INSERT_NO_EXECUTE              ,"no_execute"           ,Tcontrol_t        ,1                                   ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
    7272      _ALLOC2_SIGNAL_IN ( in_INSERT_IS_DELAY_SLOT           ,"is_delay_slot"        ,Tcontrol_t        ,1                                   ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
     73#ifdef DEBUG
     74      _ALLOC2_SIGNAL_IN ( in_INSERT_ADDRESS                 ,"address"              ,Taddress_t        ,_param->_size_instruction_address   ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
     75#endif
    7376      _ALLOC2_SIGNAL_IN ( in_INSERT_ADDRESS_NEXT            ,"address_next"         ,Taddress_t        ,_param->_size_instruction_address   ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
    7477      _ALLOC2_SIGNAL_IN ( in_INSERT_EXCEPTION               ,"exception"            ,Texception_t      ,_param->_size_exception             ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1]);
     
    216219      _ALLOC2_SIGNAL_OUT(out_NB_INST_COMMIT_ALL             ,"commit_all",Tcounter_t         ,_param->_size_nb_inst_commit,_param->_nb_front_end, _param->_nb_context[it1]);
    217220      _ALLOC2_SIGNAL_OUT(out_NB_INST_COMMIT_MEM             ,"commit_mem",Tcounter_t         ,_param->_size_nb_inst_commit,_param->_nb_front_end, _param->_nb_context[it1]);
     221      _ALLOC2_SIGNAL_IN ( in_NB_INST_DECOD_ALL              ,"decod_all" ,Tcounter_t         ,_param->_size_nb_inst_decod ,_param->_nb_front_end, _param->_nb_context[it1]);
    218222    }
    219223
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_deallocation.cpp

    r105 r108  
    3939        DELETE2_SIGNAL( in_INSERT_NO_EXECUTE              ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1],1                                   );
    4040        DELETE2_SIGNAL( in_INSERT_IS_DELAY_SLOT           ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1],1                                   );
     41#ifdef DEBUG
     42        DELETE2_SIGNAL( in_INSERT_ADDRESS                 ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1],_param->_size_instruction_address               );
     43#endif
    4144        DELETE2_SIGNAL( in_INSERT_ADDRESS_NEXT            ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1],_param->_size_instruction_address               );
    4245        DELETE2_SIGNAL( in_INSERT_EXCEPTION               ,_param->_nb_rename_unit,_param->_nb_inst_insert[it1],_param->_size_exception             );
     
    143146        DELETE2_SIGNAL(out_NB_INST_COMMIT_ALL             ,_param->_nb_front_end, _param->_nb_context[it1],_param->_size_nb_inst_commit);
    144147        DELETE2_SIGNAL(out_NB_INST_COMMIT_MEM             ,_param->_nb_front_end, _param->_nb_context[it1],_param->_size_nb_inst_commit);
     148        DELETE2_SIGNAL( in_NB_INST_DECOD_ALL              ,_param->_nb_front_end, _param->_nb_context[it1],_param->_size_nb_inst_decod);
    145149
    146150        DELETE2_SIGNAL( in_DEPTH_MIN                      ,_param->_nb_front_end, _param->_nb_context[it1],_param->_size_depth);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_transition.cpp

    r106 r108  
    7777              case EVENT_STATE_WAITEND  :
    7878                {
    79                   if (reg_NB_INST_COMMIT_ALL [i][j] == 0)
     79                  Tcounter_t nb_inst_all = PORT_READ(in_NB_INST_DECOD_ALL [i][j]) + reg_NB_INST_COMMIT_ALL [i][j];
     80                  if (nb_inst_all == 0)
    8081                    {
    8182                      reg_EVENT_STATE [i][j] = EVENT_STATE_END;
     
    163164                  entry->num_reg_re_phy_new      = PORT_READ(in_INSERT_NUM_REG_RE_PHY_NEW    [x][y]);
    164165                  entry->no_sequence             = type == TYPE_BRANCH;
     166                  entry->speculative             = true;
     167#ifdef DEBUG
     168                  entry->address                 = PORT_READ(in_INSERT_ADDRESS               [x][y]);
     169#endif
    165170                  entry->address_next            = PORT_READ(in_INSERT_ADDRESS_NEXT          [x][y]);
    166171
     
    173178                  //                       other -> wait end of instruction
    174179                  //            * OTHER
    175                   if (exception == EXCEPTION_NONE)
    176                     {
    177                       Tcontrol_t no_execute = PORT_READ(in_INSERT_NO_EXECUTE [x][y]);
    178                       // no_execute : l.j, l.nop, l.rfe
    179 
    180                       log_printf(TRACE,Commit_unit,FUNCTION,"    * no_execute     : %d",no_execute);
    181 
    182                       switch (type)
    183                         {
    184                         case TYPE_BRANCH : {entry->state=(no_execute==1)?ROB_BRANCH_COMPLETE:ROB_BRANCH_WAIT_END; break;}
    185                         case TYPE_MEMORY : {entry->state=(is_store  ==1)?ROB_STORE_WAIT_HEAD_OK:ROB_OTHER_WAIT_END; break;}
    186                         default          : {entry->state=(no_execute==1)?ROB_END_OK_SPECULATIVE:ROB_OTHER_WAIT_END; break;}
    187                         }
    188                     }
    189                   else
    190                     {
    191                       // Have an exception : wait head of ROB
    192 
    193                       // in_INSERT_NO_EXECUTE [x][y] : l.sys, l.trap
    194 
    195                       entry->state = ROB_END_EXCEPTION_WAIT_HEAD;
    196                     }
     180
     181//                   bool       flush      = reg_EVENT_FLUSH [front_end_id][context_id];
     182
     183//                   log_printf(TRACE,Commit_unit,FUNCTION,"    * flush          : %d",flush);
     184
     185//                   if (flush)
     186//                     {
     187//                       entry->state    = ROB_END_MISS; // All type (branch, memory and others), because, is not execute
     188//                     }
     189//                   else
     190                    {
     191                      if (exception == EXCEPTION_NONE)
     192                        {
     193                          Tcontrol_t no_execute = PORT_READ(in_INSERT_NO_EXECUTE [x][y]);
     194                          // no_execute : l.j, l.nop, l.rfe
     195                         
     196                          log_printf(TRACE,Commit_unit,FUNCTION,"    * no_execute     : %d",no_execute);
     197                         
     198                          switch (type)
     199                            {
     200                            case TYPE_BRANCH : {entry->state=(no_execute==1)?ROB_BRANCH_COMPLETE:ROB_BRANCH_WAIT_END  ; break;}
     201                            case TYPE_MEMORY : {entry->state=(is_store  ==1)?ROB_STORE_WAIT_HEAD_OK:ROB_OTHER_WAIT_END; break;}
     202                            default          : {entry->state=(no_execute==1)?ROB_END_OK_SPECULATIVE:ROB_OTHER_WAIT_END; break;}
     203                            }
     204                        }
     205                      else
     206                        {
     207                          // Have an exception : wait head of ROB
     208                         
     209                          // in_INSERT_NO_EXECUTE [x][y] : l.sys, l.trap
     210                         
     211                          entry->state = ROB_END_EXCEPTION_WAIT_HEAD;
     212                        }
     213                    }
    197214
    198215                  // Push in rob
     
    351368              Ttype_t    type         = entry->type        ;
    352369
    353               if ((state == ROB_END_OK         ) or // LOAD_MISS
     370              if ((state == ROB_END_OK         ) or
    354371//                (state == ROB_END_KO         ) or
    355                   (state == ROB_END_BRANCH_MISS)// or
    356 //                (state == ROB_END_LOAD_MISS  ) or
     372                  (state == ROB_END_BRANCH_MISS) or
     373                  (state == ROB_END_LOAD_MISS  )// or
    357374//                (state == ROB_END_MISS       ) or
    358375//                (state == ROB_END_EXCEPTION  )
     
    468485        // =====[ EVENT ]=====================================================
    469486        // ===================================================================
    470         {
    471           // Not yet implemented
    472         }
     487//         for (uint32_t i=0; i < _param->_nb_front_end; ++i)
     488//           for (uint32_t j=0; j < _param->_nb_context[i]; ++j)
     489//             if (PORT_READ(in_EVENT_VAL [i][j]) and internal_EVENT_ACK [i][j])
     490//               {
     491//                 log_printf(TRACE,Commit_unit,FUNCTION,"  * EVENT [%d][%d]",i,j);
     492
     493//                 reg_PC_CURRENT            [i][j] = PORT_READ(in_EVENT_ADDRESS      [i][j]);
     494//                 reg_PC_CURRENT_IS_DS      [i][j] = PORT_READ(in_EVENT_IS_DS_TAKE   [i][j]); // ??
     495//                 reg_PC_CURRENT_IS_DS_TAKE [i][j] = PORT_READ(in_EVENT_IS_DS_TAKE   [i][j]);
     496//                 reg_PC_NEXT               [i][j] = PORT_READ(in_EVENT_ADDRESS_NEXT [i][j]);
     497//                 // PORT_READ(in_EVENT_ADDRESS_NEXT_VAL [i][j]);
     498//               }
    473499
    474500        // ===================================================================
     
    505531             
    506532              bool         flush         = reg_EVENT_FLUSH [front_end_id][context_id];
    507 
    508               Tcontrol_t   is_valid      = (((depth == depth_min) or
    509                                              depth_full or
    510                                              ((depth_min <= depth_max)?
    511                                               ((depth >= depth_min) and (depth <=depth_max)):
    512                                               ((depth >= depth_min) or  (depth <=depth_max))))
     533              bool         speculative   = entry->speculative and not (depth == depth_min);
     534              Tcontrol_t   is_valid      = ((not speculative or
     535                                             (speculative and (depth_full or // all is valid
     536                                                               ((depth_min <= depth_max)? // test if depth is overflow
     537                                                                ((depth >= depth_min) and (depth <=depth_max)):
     538                                                                ((depth >= depth_min) or  (depth <=depth_max))))))
    513539                                             and not flush);
    514540
     
    532558                    case ROB_BRANCH_WAIT_END             : {state = ROB_MISS_WAIT_END; break;}
    533559                    case ROB_BRANCH_COMPLETE             : {state = ROB_END_MISS     ; break;}
     560                    case ROB_END_BRANCH_MISS             :
    534561                    case ROB_END_BRANCH_MISS_SPECULATIVE : {state = ROB_END_MISS     ; break;}
     562                    case ROB_END_LOAD_MISS_UPDATE        :
     563                    case ROB_END_LOAD_MISS               :
    535564                    case ROB_END_LOAD_MISS_SPECULATIVE   : {state = ROB_END_MISS     ; break;}
    536565                    case ROB_STORE_WAIT_HEAD_OK          : {state = ROB_STORE_HEAD_KO; break;}
    537566                  //case ROB_STORE_WAIT_HEAD_KO          : {state = ; break;}
    538567                    case ROB_OTHER_WAIT_END              : {state = ROB_MISS_WAIT_END; break;}
     568                    case ROB_END_OK                      :
    539569                    case ROB_END_OK_SPECULATIVE          : {state = ROB_END_MISS     ; break;}
     570                    case ROB_END_KO                      :
    540571                    case ROB_END_KO_SPECULATIVE          : {state = ROB_END_MISS     ; break;}
     572                    case ROB_END_EXCEPTION_UPDATE        :
     573                    case ROB_END_EXCEPTION               :
    541574                    case ROB_END_EXCEPTION_WAIT_HEAD     : {state = ROB_END_MISS     ; break;}
    542575                                                         
     
    548581                      // can't have miss speculation     
    549582                    case ROB_STORE_HEAD_OK               :
    550                     case ROB_END_OK                      :
    551                     case ROB_END_KO                      :
    552                     case ROB_END_BRANCH_MISS             :
    553                     case ROB_END_LOAD_MISS_UPDATE        :
    554                     case ROB_END_LOAD_MISS               :
    555                     case ROB_END_EXCEPTION_UPDATE        :
    556                     case ROB_END_EXCEPTION               :
    557583                    default                              :
    558584                      {
    559                         throw ERRORMORPHEO(FUNCTION,_("Miss Speculation : Invalide state.\n"));
     585                        throw ERRORMORPHEO(FUNCTION,toString(_("Miss Speculation : Invalide state : %s.\n"),toString(state).c_str()));
    560586                        break;
    561587                      }
     
    566592              // test if instruction is not speculative
    567593              //------------------------------------------------------
    568               if (entry->depth == depth_min)
     594              entry->speculative = speculative;
     595//            if (entry->depth == depth_min)
     596              if (not speculative)
    569597                {
    570598                  switch (state)
     
    574602                    case ROB_END_BRANCH_MISS_SPECULATIVE : {state = ROB_END_BRANCH_MISS        ; break;}
    575603                    case ROB_END_LOAD_MISS_SPECULATIVE   : {state = ROB_END_LOAD_MISS_UPDATE   ; break;}
    576                     default : {break;}
     604                    default : {break;} // else, no change
    577605                  }
    578606                }
     
    587615                    case ROB_STORE_WAIT_HEAD_OK      : {state = ROB_STORE_HEAD_OK;        break;}
    588616                    case ROB_END_EXCEPTION_WAIT_HEAD : {state = ROB_END_EXCEPTION_UPDATE; break;}
    589                     default : {break;}
     617                    default : {break;} // else, no change
    590618                    }
    591619                }
     
    599627    // ===================================================================
    600628
    601     log_printf(TRACE,Commit_unit,FUNCTION,"  * Dump ROB (Re-Order-Buffer)");
    602     log_printf(TRACE,Commit_unit,FUNCTION,"    * num_bank_head : %d",reg_NUM_BANK_HEAD);
    603     log_printf(TRACE,Commit_unit,FUNCTION,"    * num_bank_tail : %d",reg_NUM_BANK_TAIL);
    604 
    605     for (uint32_t i=0; i<_param->_nb_front_end; i++)
    606       for (uint32_t j=0; j<_param->_nb_context [i]; j++)
     629#ifdef STATISTICS
     630    for (uint32_t i=0; i<_param->_nb_bank; i++)
     631      if (usage_is_set(_usage,USE_STATISTICS))
     632        *(_stat_bank_nb_inst [i]) += _rob[i].size();
     633#endif
     634
     635#if (DEBUG >= DEBUG_TRACE) and (DEBUG_Commit_unit == true)
     636    {
     637      log_printf(TRACE,Commit_unit,FUNCTION,"  * Dump ROB (Re-Order-Buffer)");
     638      log_printf(TRACE,Commit_unit,FUNCTION,"    * num_bank_head : %d",reg_NUM_BANK_HEAD);
     639      log_printf(TRACE,Commit_unit,FUNCTION,"    * num_bank_tail : %d",reg_NUM_BANK_TAIL);
     640     
     641      for (uint32_t i=0; i<_param->_nb_front_end; i++)
     642        for (uint32_t j=0; j<_param->_nb_context [i]; j++)
     643          {
     644            log_printf(TRACE,Commit_unit,FUNCTION,"    * [%d][%d]",i,j);
     645            log_printf(TRACE,Commit_unit,FUNCTION,"      * EVENT_STATE  : %s",toString(reg_EVENT_STATE [i][j]).c_str());
     646            log_printf(TRACE,Commit_unit,FUNCTION,"      * EVENT_FLUSH  : %d",reg_EVENT_FLUSH [i][j]);
     647            log_printf(TRACE,Commit_unit,FUNCTION,"      * NB_INST_ALL  : %d",reg_NB_INST_COMMIT_ALL[i][j]);
     648            log_printf(TRACE,Commit_unit,FUNCTION,"      * NB_INST_MEM  : %d",reg_NB_INST_COMMIT_MEM[i][j]);
     649            log_printf(TRACE,Commit_unit,FUNCTION,"      * PC_CURRENT   : %.8x (%.8x) - %d %d",reg_PC_CURRENT [i][j],reg_PC_CURRENT [i][j]<<2, reg_PC_CURRENT_IS_DS [i][j], reg_PC_CURRENT_IS_DS_TAKE [i][j]);
     650            log_printf(TRACE,Commit_unit,FUNCTION,"      * PC_NEXT      : %.8x (%.8x)",reg_PC_NEXT [i][j],reg_PC_NEXT [i][j]<<2);
     651          }
     652
     653      for (uint32_t i=0; i<_param->_nb_bank; i++)
    607654        {
    608           log_printf(TRACE,Commit_unit,FUNCTION,"    * [%d][%d] state        : %s",i,j,toString(reg_EVENT_STATE [i][j]).c_str());
    609           log_printf(TRACE,Commit_unit,FUNCTION,"    * num_inst_all : %d",reg_NB_INST_COMMIT_ALL[i][j]);
    610           log_printf(TRACE,Commit_unit,FUNCTION,"    * num_inst_mem : %d",reg_NB_INST_COMMIT_MEM[i][j]);
    611           log_printf(TRACE,Commit_unit,FUNCTION,"    * PC_CURRENT   : %.8x (%.8x) - %d %d",reg_PC_CURRENT [i][j],reg_PC_CURRENT [i][j]<<2, reg_PC_CURRENT_IS_DS [i][j], reg_PC_CURRENT_IS_DS_TAKE [i][j]);
    612           log_printf(TRACE,Commit_unit,FUNCTION,"    * PC_NEXT      : %.8x (%.8x)",reg_PC_NEXT [i][j],reg_PC_NEXT [i][j]<<2);
     655          uint32_t num_bank = (reg_NUM_BANK_HEAD+i)%_param->_nb_bank;
     656
     657          log_printf(TRACE,Commit_unit,FUNCTION,"      * Bank [%d] size : %d, ptr : %d",num_bank,(int)_rob[num_bank].size(), reg_BANK_PTR [i]);
     658         
     659          uint32_t x=0;
     660          for (std::list<entry_t*>::iterator it=_rob[num_bank].begin();
     661               it!=_rob[num_bank].end();
     662               it++)
     663            {
     664              log_printf(TRACE,Commit_unit,FUNCTION,"        [%.4d] %.4d %.4d %.4d %.4d, %.3d %.3d, %.1d, %.1d %.4d, %.1d %.4d, %s - %d",
     665                         x,
     666                         (*it)->front_end_id            ,
     667                         (*it)->context_id              ,
     668                         (*it)->rename_unit_id          ,
     669                         (*it)->depth                   ,
     670                         (*it)->type                    ,
     671                         (*it)->operation               ,
     672                         (*it)->is_delay_slot           ,
     673                         (*it)->use_store_queue         ,
     674                         (*it)->store_queue_ptr_write   ,
     675                         (*it)->use_load_queue          ,
     676                         (*it)->load_queue_ptr_write    ,
     677                         toString((*it)->state).c_str() ,
     678                         (*it)->ptr                     );
     679              log_printf(TRACE,Commit_unit,FUNCTION,"               %.1d %.2d %.6d, %.1d %.2d %.6d, %.1d %.1d %.6d, %.1d %.2d %.6d %.6d, %.1d %.1d %.6d %.6d ",
     680                         (*it)->read_ra                 ,
     681                         (*it)->num_reg_ra_log          ,
     682                         (*it)->num_reg_ra_phy          ,
     683                         (*it)->read_rb                 ,
     684                         (*it)->num_reg_rb_log          ,
     685                         (*it)->num_reg_rb_phy          ,
     686                         (*it)->read_rc                 ,
     687                         (*it)->num_reg_rc_log          ,
     688                         (*it)->num_reg_rc_phy          ,
     689                         (*it)->write_rd                ,
     690                         (*it)->num_reg_rd_log          ,
     691                         (*it)->num_reg_rd_phy_old      ,
     692                         (*it)->num_reg_rd_phy_new      ,
     693                         (*it)->write_re                ,
     694                         (*it)->num_reg_re_log          ,
     695                         (*it)->num_reg_re_phy_old      ,
     696                         (*it)->num_reg_re_phy_new      );
     697             
     698              log_printf(TRACE,Commit_unit,FUNCTION,"               %.2d %.2d %.1d %.1d %.1d - %.8x (%.8x) %.8x (%.8x)",
     699                         (*it)->exception_use ,
     700                         (*it)->exception     ,
     701                         (*it)->flags         ,
     702                         (*it)->no_sequence   ,
     703                         (*it)->speculative   ,
     704                         (*it)->address       ,
     705                         (*it)->address<<2    ,
     706                         (*it)->address_next  ,
     707                         (*it)->address_next<<2
     708                         );
     709             
     710              x++;
     711            }
    613712        }
    614        
    615     for (uint32_t i=0; i<_param->_nb_bank; i++)
    616       {
    617         log_printf(TRACE,Commit_unit,FUNCTION,"    * Bank [%d] size : %d, ptr : %d",i,(int)_rob[i].size(), reg_BANK_PTR [i]);
    618 
    619 #ifdef STATISTICS
    620         if (usage_is_set(_usage,USE_STATISTICS))
    621           *(_stat_bank_nb_inst [i]) += _rob[i].size();
    622 #endif
    623 
    624         uint32_t x=0;
    625         for (std::list<entry_t*>::iterator it=_rob[i].begin();
    626              it!=_rob[i].end();
    627              it++)
    628           {
    629             log_printf(TRACE,Commit_unit,FUNCTION,"      [%.4d] %.4d %.4d %.4d %.4d, %.3d %.3d, %.1d, %.1d %.4d, %.1d %.4d, %s - %d",
    630                        x,
    631                        (*it)->front_end_id            ,
    632                        (*it)->context_id              ,
    633                        (*it)->rename_unit_id          ,
    634                        (*it)->depth                   ,
    635                        (*it)->type                    ,
    636                        (*it)->operation               ,
    637 //                     (*it)->address                 ,
    638 //                     (*it)->address << 2            ,
    639                        (*it)->is_delay_slot           ,
    640                        (*it)->use_store_queue         ,
    641                        (*it)->store_queue_ptr_write   ,
    642                        (*it)->use_load_queue          ,
    643                        (*it)->load_queue_ptr_write    ,
    644                        toString((*it)->state).c_str() ,
    645                        (*it)->ptr                     );
    646             log_printf(TRACE,Commit_unit,FUNCTION,"             %.1d %.2d %.6d, %.1d %.2d %.6d, %.1d %.1d %.6d, %.1d %.2d %.6d %.6d, %.1d %.1d %.6d %.6d ",
    647                        (*it)->read_ra                 ,
    648                        (*it)->num_reg_ra_log          ,
    649                        (*it)->num_reg_ra_phy          ,
    650                        (*it)->read_rb                 ,
    651                        (*it)->num_reg_rb_log          ,
    652                        (*it)->num_reg_rb_phy          ,
    653                        (*it)->read_rc                 ,
    654                        (*it)->num_reg_rc_log          ,
    655                        (*it)->num_reg_rc_phy          ,
    656                        (*it)->write_rd                ,
    657                        (*it)->num_reg_rd_log          ,
    658                        (*it)->num_reg_rd_phy_old      ,
    659                        (*it)->num_reg_rd_phy_new      ,
    660                        (*it)->write_re                ,
    661                        (*it)->num_reg_re_log          ,
    662                        (*it)->num_reg_re_phy_old      ,
    663                        (*it)->num_reg_re_phy_new      );
    664            
    665             log_printf(TRACE,Commit_unit,FUNCTION,"             %.2d %.2d %.1d %.1d %.8x (%.8x)",
    666                        (*it)->exception_use ,
    667                        (*it)->exception     ,
    668                        (*it)->flags         ,
    669                        (*it)->no_sequence   ,
    670                        (*it)->address_next  ,
    671                        (*it)->address_next<<2
    672                        );
    673 
    674             x++;
    675           }
    676       }
     713    }
     714#endif
     715
     716#ifdef DEBUG_TEST
     717    {
     718      uint32_t x=reg_NUM_BANK_HEAD;
     719      if (not _rob[x].empty())
     720        {
     721          entry_t * entry = _rob [x].front();
     722
     723          if (false
     724//            or (entry->state == ROB_EMPTY                      )
     725//            or (entry->state == ROB_BRANCH_WAIT_END            )
     726//            or (entry->state == ROB_BRANCH_COMPLETE            )
     727//            or (entry->state == ROB_STORE_WAIT_HEAD_OK         )
     728//          //or (entry->state == ROB_STORE_WAIT_HEAD_KO         )
     729//            or (entry->state == ROB_STORE_HEAD_OK              )
     730//            or (entry->state == ROB_STORE_HEAD_KO              )
     731//            or (entry->state == ROB_OTHER_WAIT_END             )
     732//            or (entry->state == ROB_MISS_WAIT_END              )
     733//            or (entry->state == ROB_END_OK_SPECULATIVE         )
     734              or (entry->state == ROB_END_OK                     )
     735//            or (entry->state == ROB_END_KO_SPECULATIVE         )
     736//            or (entry->state == ROB_END_KO                     )
     737//            or (entry->state == ROB_END_BRANCH_MISS_SPECULATIVE)
     738              or (entry->state == ROB_END_BRANCH_MISS            )
     739//            or (entry->state == ROB_END_LOAD_MISS_SPECULATIVE  )
     740//            or (entry->state == ROB_END_LOAD_MISS_UPDATE       )
     741              or (entry->state == ROB_END_LOAD_MISS              )
     742//            or (entry->state == ROB_END_MISS                   )
     743//            or (entry->state == ROB_END_EXCEPTION_WAIT_HEAD    )
     744//            or (entry->state == ROB_END_EXCEPTION_UPDATE       )
     745//            or (entry->state == ROB_END_EXCEPTION              )
     746              )
     747          if (entry->address != reg_PC_CURRENT[entry->front_end_id][entry->context_id])
     748            throw ERRORMORPHEO(FUNCTION,toString(_("Rob top address (%x) is different of reg_PC_CURRENT[%d][%d] (%x).\n"),
     749                                                 entry->address,
     750                                                 entry->front_end_id,
     751                                                 entry->context_id,
     752                                                 reg_PC_CURRENT[entry->front_end_id][entry->context_id]));
     753        }
     754    }
     755#endif
    677756
    678757#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Parameters.cpp

    r88 r108  
    3131                          uint32_t            nb_inst_branch_complete ,
    3232                          uint32_t         ** nb_branch_speculated    ,
     33                          uint32_t            size_nb_inst_decod      ,
    3334                          uint32_t            size_general_data       ,
    3435                          uint32_t            size_store_queue_ptr    ,
     
    9394        _size_depth               = max<uint32_t>(_array_size_depth,_nb_front_end,_nb_context);
    9495        _size_nb_inst_commit      = log2(_size_queue)+1;
     96        _size_nb_inst_decod       = size_nb_inst_decod;
    9597       
    9698        _have_port_front_end_id   = _size_front_end_id   > 0;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Issue_queue/src/Parameters_msg_error.cpp

    r97 r108  
    2727
    2828    if (not is_multiple(_size_queue, _nb_bank))
    29       test.error(toString(_("nb_bank must be a multiple of size_queue.\n")));
     29      test.error(toString(_("nb_bank (%d) must be a multiple of size_queue (%d).\n"),_nb_bank,_size_queue));
    3030   
    3131    if (not is_multiple(_nb_bank, _nb_inst_issue))
    32       test.error(toString(_("nb_inst_issue must be a multiple of nb_bank.\n")));
     32      test.error(toString(_("nb_inst_issue (%d) must be a multiple of nb_bank (%d) .\n"),_nb_inst_issue,_nb_bank));
    3333
    3434    if (_nb_rename_unit_select > _nb_rename_unit)
  • 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

    r82 r108  
    8989
    9090    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    91   private   : uint32_t                        internal_BANK_PRIORITY;
     91  private   : uint32_t                        reg_BANK_PRIORITY;
    9292
    9393  private   : Tcontrol_t                    * internal_POP_ACK      ; //[nb_pop]
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_pop.cpp

    r88 r108  
    2828    for (uint32_t i=0; i<_param->_nb_pop; i++)
    2929      {
    30         uint32_t offset = i*_param->_nb_bank_by_pop;
     30        log_printf(TRACE,Free_List_unit,FUNCTION,"  * POP [%d]",i);
     31
     32        uint32_t offset = i*_param->_nb_bank_by_pop;
    3133
    3234        // GPR
    3335        bool gpr_ack = not PORT_READ(in_POP_GPR_VAL[i]);
    3436
     37        log_printf(TRACE,Free_List_unit,FUNCTION,"    * GPR_VAL : %d",PORT_READ(in_POP_GPR_VAL[i]));
     38
    3539        if (not gpr_ack)
    3640          for (uint32_t j=0; j<_param->_nb_bank_by_pop; j++)
    3741            {
    38               uint32_t bank = offset+((j+internal_BANK_PRIORITY)%_param->_nb_bank_by_pop);
     42              uint32_t bank = offset+((j+reg_BANK_PRIORITY)%_param->_nb_bank_by_pop
     43                                      );
     44
     45              log_printf(TRACE,Free_List_unit,FUNCTION,"    * bank    : %d",bank);
    3946             
    4047              if (not _gpr_list[bank].empty())
    4148                {
    4249                  // find
     50                  log_printf(TRACE,Free_List_unit,FUNCTION,"    * find    : %d",_gpr_list[bank].front());
     51
    4352                  gpr_ack = true;
    4453                  internal_POP_GPR_BANK [i] = bank;
    4554                  PORT_WRITE(out_POP_GPR_NUM_REG [i],
    46                              //(bank << _param->_shift) |
     55                             //(bank << _param->_shift) | // only in VHDL
    4756                             _gpr_list[bank].front());
    4857                 
     
    5463        bool spr_ack = not PORT_READ(in_POP_SPR_VAL[i]);
    5564
     65        log_printf(TRACE,Free_List_unit,FUNCTION,"    * SPR_VAL : %d",PORT_READ(in_POP_SPR_VAL[i]));
     66
    5667        if (not spr_ack)
    5768          for (uint32_t j=0; j<_param->_nb_bank_by_pop; j++)
    5869            {
    59               uint32_t bank = offset+((j+internal_BANK_PRIORITY)%_param->_nb_bank_by_pop);
     70              uint32_t bank = offset+((j+reg_BANK_PRIORITY)%_param->_nb_bank_by_pop
     71                                      );
     72
     73              log_printf(TRACE,Free_List_unit,FUNCTION,"    * bank    : %d",bank);
    6074             
    6175              if (not _spr_list[bank].empty())
    6276                {
    6377                  // find
     78                  log_printf(TRACE,Free_List_unit,FUNCTION,"    * find    : %d",_spr_list[bank].front());
     79
    6480                  spr_ack = true;
    6581                  internal_POP_SPR_BANK [i] = bank;
    6682                  PORT_WRITE(out_POP_SPR_NUM_REG [i],
    67                              //(bank << _param->_shift) |
     83                             //(bank << _param->_shift) | // only in VHDL
    6884                             _spr_list[bank].front());
    6985                 
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_push_gpr.cpp

    r88 r108  
    2626    log_function(Free_List_unit,FUNCTION,_name.c_str());
    2727
     28    // bank conflit
    2829    bool bank_use [_param->_nb_bank];
    2930    for (uint32_t i=0; i<_param->_nb_bank; i++)
     
    3233    for (uint32_t i=0; i<_param->_nb_push; i++)
    3334      {
     35        log_printf(TRACE,Free_List_unit,FUNCTION,"  * PUSH [%d]",i);
     36
    3437        bool gpr_ack = not PORT_READ(in_PUSH_GPR_VAL[i]);
     38       
     39        log_printf(TRACE,Free_List_unit,FUNCTION,"    * GPR_VAL : %d",PORT_READ(in_PUSH_GPR_VAL[i]));
    3540
    3641        if (not gpr_ack)
    3742          {
    38             // num_bank : MSB
    39             uint32_t bank = PORT_READ(in_PUSH_GPR_NUM_REG[i]) >> _param->_bank_gpr_size_slot;
     43//          // num_bank : MSB
     44//          uint32_t bank = PORT_READ(in_PUSH_GPR_NUM_REG[i]) >> _param->_bank_gpr_size_slot;
     45            // num_bank : LSB
     46            uint32_t bank = PORT_READ(in_PUSH_GPR_NUM_REG[i]) & _param->_mask_gpr;
    4047           
    4148            if (not bank_use [bank])
    4249              {
     50                log_printf(TRACE,Free_List_unit,FUNCTION,"    * find ");
     51                log_printf(TRACE,Free_List_unit,FUNCTION,"    * bank    : %d",bank);
     52
    4353                // find
    4454                gpr_ack = true;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_genMealy_push_spr.cpp

    r88 r108  
    3636        if (not spr_ack)
    3737          {
    38             // num_bank : MSB
    39             uint32_t bank = PORT_READ(in_PUSH_SPR_NUM_REG[i]) >> _param->_bank_spr_size_slot;
     38//          // num_bank : MSB
     39//          uint32_t bank = PORT_READ(in_PUSH_SPR_NUM_REG[i]) >> _param->_bank_spr_size_slot;
     40            // num_bank : LSB
     41            uint32_t bank = PORT_READ(in_PUSH_SPR_NUM_REG[i]) & _param->_mask_spr;
    4042           
    4143            if (not bank_use [bank])
  • 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

    r106 r108  
    2828    if (PORT_READ(in_NRESET) == 0)
    2929      {
    30         internal_BANK_PRIORITY = 0;
     30        reg_BANK_PRIORITY = 0;
    3131        for (uint32_t i=0; i<_param->_nb_bank; i++)
    3232          {
     
    5959            {
    6060              log_printf(TRACE,Free_List_unit,FUNCTION,"  * PUSH_GPR[%d]",i);
     61              log_printf(TRACE,Free_List_unit,FUNCTION,"    * bank    : %d",internal_PUSH_GPR_BANK[i]);
     62              log_printf(TRACE,Free_List_unit,FUNCTION,"    * num_reg : %d",PORT_READ(in_PUSH_GPR_NUM_REG [i]));
    6163
    62               _gpr_list [internal_PUSH_GPR_BANK[i]].push_back(//_param->_mask_gpr &
    63                                                               PORT_READ(in_PUSH_GPR_NUM_REG [i]));
     64              _gpr_list [internal_PUSH_GPR_BANK[i]].push_back(PORT_READ(in_PUSH_GPR_NUM_REG [i]));
    6465            }
    6566        // ==================================================
     
    7071            {
    7172              log_printf(TRACE,Free_List_unit,FUNCTION,"  * PUSH_SPR[%d]",i);
     73              log_printf(TRACE,Free_List_unit,FUNCTION,"    * bank    : %d",internal_PUSH_SPR_BANK[i]);
     74              log_printf(TRACE,Free_List_unit,FUNCTION,"    * num_reg : %d",PORT_READ(in_PUSH_SPR_NUM_REG [i]));
    7275
    73               _spr_list [internal_PUSH_SPR_BANK[i]].push_back(//_param->_mask_spr &
    74                                                               PORT_READ(in_PUSH_SPR_NUM_REG [i]));
     76              _spr_list [internal_PUSH_SPR_BANK[i]].push_back(PORT_READ(in_PUSH_SPR_NUM_REG [i]));
    7577            }
    7678
    77         if (_param->_priority == PRIORITY_ROUND_ROBIN)
    78           internal_BANK_PRIORITY = (internal_BANK_PRIORITY+1)%_param->_nb_bank_by_pop;
     79        if (_param->_priority == PRIORITY_ROUND_ROBIN)
     80          reg_BANK_PRIORITY = (reg_BANK_PRIORITY+1)%_param->_nb_bank_by_pop;
    7981
    8082#if (DEBUG >= DEBUG_TRACE) and (DEBUG_Free_List_unit == true)
     
    8385     
    8486          log_printf(TRACE,Free_List_unit,FUNCTION,"  * Dump Free List");
    85          
    8687          for (uint32_t i=0; i<_param->_nb_bank; ++i)
    8788            {
     89              log_printf(TRACE,Free_List_unit,FUNCTION,"    * GPR [%d] - NB_ELT : %d",i,_gpr_list[i].size());
     90
    8891              uint32_t j=0;
    89               for (std::list<Tgeneral_address_t>::iterator it=_gpr_list->begin();
    90                    it!=_gpr_list->end();
     92              for (std::list<Tgeneral_address_t>::iterator it=_gpr_list[i].begin();
     93                   it!=_gpr_list[i].end();
    9194                   )
    9295                {
     
    9598                  for (uint32_t x=0; x<limit; x++)
    9699                    {
    97                       if (it==_gpr_list->end())
     100                      if (it==_gpr_list[i].end())
    98101                        break;
    99102                      else
     
    108111          for (uint32_t i=0; i<_param->_nb_bank; ++i)
    109112            {
     113              log_printf(TRACE,Free_List_unit,FUNCTION,"    * SPR [%d] - NB_ELT : %d",i,_spr_list[i].size());
     114
    110115              uint32_t j=0;
    111               for (std::list<Tspecial_address_t>::iterator it=_spr_list->begin();
    112                    it!=_spr_list->end();
     116              for (std::list<Tspecial_address_t>::iterator it=_spr_list[i].begin();
     117                   it!=_spr_list[i].end();
    113118                   )
    114119                {
     
    117122                  for (uint32_t x=0; x<limit; x++)
    118123                    {
    119                       if (it==_spr_list->end())
     124                      if (it==_spr_list[i].end())
    120125                        break;
    121126                      else
     
    132137#ifdef DEBUG_TEST
    133138        if (1)
     139          for (uint32_t i=0; i<_param->_nb_bank; ++i)
    134140          {
    135             for (std::list<Tgeneral_address_t>::iterator it1=_gpr_list->begin();
    136                  it1!=_gpr_list->end();
     141            for (std::list<Tgeneral_address_t>::iterator it1=_gpr_list[i].begin();
     142                 it1!=_gpr_list[i].end();
    137143                 ++it1
    138144                 )
     
    141147
    142148                it2 ++;
    143                 while (it2 != _gpr_list->end())
     149                while (it2 != _gpr_list[i].end())
    144150                  {
    145151                    if (*it1 == *it2)
     
    149155              }
    150156
    151             for (std::list<Tspecial_address_t>::iterator it1=_spr_list->begin();
    152                  it1!=_spr_list->end();
     157            for (std::list<Tspecial_address_t>::iterator it1=_spr_list[i].begin();
     158                 it1!=_spr_list[i].end();
    153159                 ++it1
    154160                 )
     
    157163
    158164                it2 ++;
    159                 while (it2 != _spr_list->end())
     165                while (it2 != _spr_list[i].end())
    160166                  {
    161167                    if (*it1 == *it2)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Parameters.cpp

    r88 r108  
    5252    _bank_gpr_size_slot    = size_general_register-log2(nb_bank);
    5353
    54     _mask_gpr              = gen_mask<Tgeneral_address_t> (_bank_gpr_size_slot);
     54    _mask_gpr              = gen_mask<Tgeneral_address_t> (log2(nb_bank));
    5555
    5656    uint32_t spr_nb_slot   = nb_special_register - nb_thread*_nb_special_register_logic;
     
    5959    _bank_spr_size_slot    = size_special_register-log2(nb_bank);
    6060
    61     _mask_spr              = gen_mask<Tspecial_address_t> (_bank_spr_size_slot);
     61    _mask_spr              = gen_mask<Tspecial_address_t> (log2(nb_bank));
    6262
    6363    if (is_toplevel)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/SelfTest/src/test.cpp

    r105 r108  
    5959  ALLOC2_SC_SIGNAL( in_RENAME_IN_NO_EXECUTE    ," in_RENAME_IN_NO_EXECUTE    ",Tcontrol_t        ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
    6060  ALLOC2_SC_SIGNAL( in_RENAME_IN_IS_DELAY_SLOT ," in_RENAME_IN_IS_DELAY_SLOT ",Tcontrol_t        ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
     61#ifdef DEBUG
     62  ALLOC2_SC_SIGNAL( in_RENAME_IN_ADDRESS       ," in_RENAME_IN_ADDRESS       ",Taddress_t        ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
     63#endif
    6164  ALLOC2_SC_SIGNAL( in_RENAME_IN_ADDRESS_NEXT  ," in_RENAME_IN_ADDRESS_NEXT  ",Taddress_t        ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
    6265  ALLOC2_SC_SIGNAL( in_RENAME_IN_HAS_IMMEDIAT  ," in_RENAME_IN_HAS_IMMEDIAT  ",Tcontrol_t        ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
     
    8487  ALLOC1_SC_SIGNAL(out_RENAME_OUT_NO_EXECUTE   ,"out_RENAME_OUT_NO_EXECUTE   ",Tcontrol_t        ,_param->_nb_inst_rename);
    8588  ALLOC1_SC_SIGNAL(out_RENAME_OUT_IS_DELAY_SLOT,"out_RENAME_OUT_IS_DELAY_SLOT",Tcontrol_t        ,_param->_nb_inst_rename);
     89#ifdef DEBUG
     90  ALLOC1_SC_SIGNAL(out_RENAME_OUT_ADDRESS      ,"out_RENAME_OUT_ADDRESS      ",Taddress_t        ,_param->_nb_inst_rename);
     91#endif
    8692  ALLOC1_SC_SIGNAL(out_RENAME_OUT_ADDRESS_NEXT ,"out_RENAME_OUT_ADDRESS_NEXT ",Taddress_t        ,_param->_nb_inst_rename);
    8793  ALLOC1_SC_SIGNAL(out_RENAME_OUT_HAS_IMMEDIAT ,"out_RENAME_OUT_HAS_IMMEDIAT ",Tcontrol_t        ,_param->_nb_inst_rename);
     
    99105  ALLOC1_SC_SIGNAL(out_RENAME_OUT_EXCEPTION_USE,"out_RENAME_OUT_EXCEPTION_USE",Texception_t      ,_param->_nb_inst_rename);
    100106  ALLOC1_SC_SIGNAL(out_RENAME_OUT_EXCEPTION    ,"out_RENAME_OUT_EXCEPTION    ",Texception_t      ,_param->_nb_inst_rename);
     107
     108  ALLOC2_SC_SIGNAL( in_RETIRE_EVENT_STATE      ," in_RETIRE_EVENT_STATE      ",Tevent_state_t    ,_param->_nb_front_end,_param->_nb_context[it1]);
    101109 
    102110  /********************************************************
     
    121129  INSTANCE2_SC_SIGNAL(_Rename_select, in_RENAME_IN_NO_EXECUTE    ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
    122130  INSTANCE2_SC_SIGNAL(_Rename_select, in_RENAME_IN_IS_DELAY_SLOT ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
     131#ifdef DEBUG
     132  INSTANCE2_SC_SIGNAL(_Rename_select, in_RENAME_IN_ADDRESS       ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
     133#endif
    123134  INSTANCE2_SC_SIGNAL(_Rename_select, in_RENAME_IN_ADDRESS_NEXT  ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
    124135  INSTANCE2_SC_SIGNAL(_Rename_select, in_RENAME_IN_HAS_IMMEDIAT  ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
     
    149160  INSTANCE1_SC_SIGNAL(_Rename_select,out_RENAME_OUT_NO_EXECUTE   ,_param->_nb_inst_rename);
    150161  INSTANCE1_SC_SIGNAL(_Rename_select,out_RENAME_OUT_IS_DELAY_SLOT,_param->_nb_inst_rename);
     162#ifdef DEBUG
     163  INSTANCE1_SC_SIGNAL(_Rename_select,out_RENAME_OUT_ADDRESS      ,_param->_nb_inst_rename);
     164#endif
    151165  INSTANCE1_SC_SIGNAL(_Rename_select,out_RENAME_OUT_ADDRESS_NEXT ,_param->_nb_inst_rename);
    152166  INSTANCE1_SC_SIGNAL(_Rename_select,out_RENAME_OUT_HAS_IMMEDIAT ,_param->_nb_inst_rename);
     
    165179  INSTANCE1_SC_SIGNAL(_Rename_select,out_RENAME_OUT_EXCEPTION    ,_param->_nb_inst_rename);
    166180
     181  INSTANCE2_SC_SIGNAL(_Rename_select, in_RETIRE_EVENT_STATE      ,_param->_nb_front_end, _param->_nb_context[it1]);
     182
    167183  msg(_("<%s> : Start Simulation ............\n"),name.c_str());
    168184   
     
    194210  SC_START(5);
    195211  in_NRESET->write(1); 
     212 
     213  for (uint32_t i=0; i<_param->_nb_front_end; i++)
     214    for (uint32_t j=0; j<_param->_nb_context[i]; j++)
     215      in_RETIRE_EVENT_STATE [i][j]->write(EVENT_STATE_NO_EVENT);
    196216
    197217  LABEL("Loop of Test");
     
    329349  delete []  in_RENAME_IN_NO_EXECUTE    ;
    330350  delete []  in_RENAME_IN_IS_DELAY_SLOT ;
     351#ifdef DEBUG
     352  delete []  in_RENAME_IN_ADDRESS       ;
     353#endif
    331354  delete []  in_RENAME_IN_ADDRESS_NEXT  ;
    332355  delete []  in_RENAME_IN_HAS_IMMEDIAT  ;
     
    354377  delete [] out_RENAME_OUT_NO_EXECUTE   ;
    355378  delete [] out_RENAME_OUT_IS_DELAY_SLOT;
     379#ifdef DEBUG
     380  delete [] out_RENAME_OUT_ADDRESS      ;
     381#endif
    356382  delete [] out_RENAME_OUT_ADDRESS_NEXT ;
    357383  delete [] out_RENAME_OUT_HAS_IMMEDIAT ;
     
    369395  delete [] out_RENAME_OUT_EXCEPTION_USE;
    370396  delete [] out_RENAME_OUT_EXCEPTION    ;
     397
     398  DELETE2_SC_SIGNAL( in_RETIRE_EVENT_STATE          ,_param->_nb_front_end, _param->_nb_context[it1]);
    371399#endif
    372400
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/include/Rename_select.h

    r105 r108  
    7676  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IN_NO_EXECUTE    ;//[nb_front_end][nb_inst_decod]
    7777  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IN_IS_DELAY_SLOT ;//[nb_front_end][nb_inst_decod]
     78#ifdef DEBUG
     79  public    : SC_IN (Taddress_t        )  ***  in_RENAME_IN_ADDRESS       ;//[nb_front_end][nb_inst_decod]
     80#endif
    7881  public    : SC_IN (Taddress_t        )  ***  in_RENAME_IN_ADDRESS_NEXT  ;//[nb_front_end][nb_inst_decod]
    7982  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IN_HAS_IMMEDIAT  ;//[nb_front_end][nb_inst_decod]
     
    102105  public    : SC_OUT(Tcontrol_t        )   ** out_RENAME_OUT_NO_EXECUTE   ;//[nb_inst_rename]
    103106  public    : SC_OUT(Tcontrol_t        )   ** out_RENAME_OUT_IS_DELAY_SLOT;//[nb_inst_rename]
     107#ifdef DEBUG
     108  public    : SC_OUT(Taddress_t        )   ** out_RENAME_OUT_ADDRESS      ;//[nb_inst_rename]
     109#endif
    104110  public    : SC_OUT(Taddress_t        )   ** out_RENAME_OUT_ADDRESS_NEXT ;//[nb_inst_rename]
    105111  public    : SC_OUT(Tcontrol_t        )   ** out_RENAME_OUT_HAS_IMMEDIAT ;//[nb_inst_rename]
     
    117123  public    : SC_OUT(Texception_t      )   ** out_RENAME_OUT_EXCEPTION_USE;//[nb_inst_rename]
    118124  public    : SC_OUT(Texception_t      )   ** out_RENAME_OUT_EXCEPTION    ;//[nb_inst_rename]
     125
     126    // ~~~~~[ Interface "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     127  public    : SC_IN (Tevent_state_t    )  ***  in_RETIRE_EVENT_STATE      ;//[nb_front_end][nb_context]
    119128
    120129    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Rename_select.cpp

    r105 r108  
    9797                        << (*(in_RENAME_IN_NO_EXECUTE    [i][j]))
    9898                        << (*(in_RENAME_IN_IS_DELAY_SLOT [i][j]))
     99#ifdef DEBUG
     100                        << (*(in_RENAME_IN_ADDRESS       [i][j]))
     101#endif
    99102                        << (*(in_RENAME_IN_ADDRESS_NEXT  [i][j]))
    100103                        << (*(in_RENAME_IN_HAS_IMMEDIAT  [i][j]))
     
    119122              sensitive << (*(in_RENAME_IN_DEPTH         [i][j]));
    120123            }
     124
     125//      for (uint32_t i=0; i<_param->_nb_front_end; i++)
     126//        for (uint32_t j=0; j<_param->_nb_context [i]; j++)
     127//             sensitive << (*(in_RETIRE_EVENT_STATE [i][j]));
     128
    121129        for (uint32_t i=0; i<_param->_nb_inst_rename; i++)
    122130          sensitive << (*(in_RENAME_OUT_ACK          [i]));
     
    163171                  (*(out_RENAME_OUT_IS_DELAY_SLOT [x])) (*(in_RENAME_IN_VAL           [i][j]));
    164172                  (*(out_RENAME_OUT_IS_DELAY_SLOT [x])) (*(in_RENAME_IN_IS_DELAY_SLOT [i][j]));
     173#ifdef DEBUG
     174                  (*(out_RENAME_OUT_ADDRESS       [x])) (*(in_RENAME_IN_VAL           [i][j]));
     175                  (*(out_RENAME_OUT_ADDRESS       [x])) (*(in_RENAME_IN_ADDRESS       [i][j]));
     176#endif
    165177                  (*(out_RENAME_OUT_ADDRESS_NEXT  [x])) (*(in_RENAME_IN_VAL           [i][j]));
    166178                  (*(out_RENAME_OUT_ADDRESS_NEXT  [x])) (*(in_RENAME_IN_ADDRESS_NEXT  [i][j]));
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Rename_select_allocation.cpp

    r105 r108  
    6969      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_NO_EXECUTE    ,"no_execute"   ,Tcontrol_t        ,1                                   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
    7070      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_IS_DELAY_SLOT ,"is_delay_slot",Tcontrol_t        ,1                                   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
     71#ifdef DEBUG
     72      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_ADDRESS       ,"address"      ,Taddress_t        ,_param->_size_instruction_address   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
     73#endif
    7174      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_ADDRESS_NEXT  ,"address_next" ,Taddress_t        ,_param->_size_instruction_address   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
    7275      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_HAS_IMMEDIAT  ,"has_immediat" ,Tcontrol_t        ,1                                   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
     
    99102      ALLOC1_SIGNAL_OUT(out_RENAME_OUT_NO_EXECUTE    ,"no_execute"   ,Tcontrol_t        ,1                                   );
    100103      ALLOC1_SIGNAL_OUT(out_RENAME_OUT_IS_DELAY_SLOT ,"is_delay_slot",Tcontrol_t        ,1                                   );
     104#ifdef DEBUG
     105      ALLOC1_SIGNAL_OUT(out_RENAME_OUT_ADDRESS       ,"address"      ,Taddress_t        ,_param->_size_instruction_address   );
     106#endif
    101107      ALLOC1_SIGNAL_OUT(out_RENAME_OUT_ADDRESS_NEXT  ,"address_next" ,Taddress_t        ,_param->_size_instruction_address   );
    102108      ALLOC1_SIGNAL_OUT(out_RENAME_OUT_HAS_IMMEDIAT  ,"has_immediat" ,Tcontrol_t        ,1                                   );
     
    114120      ALLOC1_SIGNAL_OUT(out_RENAME_OUT_EXCEPTION_USE ,"exception_use",Texception_t      ,_param->_size_exception_use         );
    115121      ALLOC1_SIGNAL_OUT(out_RENAME_OUT_EXCEPTION     ,"exception"    ,Texception_t      ,_param->_size_exception             );
     122    }
     123
     124    // ~~~~~[ Interface : "retire_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     125    {
     126      ALLOC2_INTERFACE("retire_event", IN,NORTH, _("Retire event"), _param->_nb_front_end, _param->_nb_context[it1]);
     127
     128      _ALLOC2_SIGNAL_IN ( in_RETIRE_EVENT_STATE         ,"state"                ,Tevent_state_t    ,_param->_size_event_state, _param->_nb_front_end, _param->_nb_context[it1]);
    116129    }
    117130
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Rename_select_deallocation.cpp

    r105 r108  
    77
    88#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/include/Rename_select.h"
     9#include "Behavioural/include/Allocation.h"
    910
    1011namespace morpheo                    {
     
    4041        delete []  in_RENAME_IN_NO_EXECUTE    ;
    4142        delete []  in_RENAME_IN_IS_DELAY_SLOT ;
     43#ifdef DEBUG
     44        delete []  in_RENAME_IN_ADDRESS       ;
     45#endif
    4246        delete []  in_RENAME_IN_ADDRESS_NEXT  ;
    4347        delete []  in_RENAME_IN_HAS_IMMEDIAT  ;
     
    6670        delete [] out_RENAME_OUT_TYPE         ;
    6771        delete [] out_RENAME_OUT_OPERATION    ;
     72#ifdef DEBUG
     73        delete [] out_RENAME_OUT_ADDRESS      ;
     74#endif
    6875        delete [] out_RENAME_OUT_ADDRESS_NEXT ;
    6976        delete [] out_RENAME_OUT_HAS_IMMEDIAT ;
     
    8087        delete [] out_RENAME_OUT_NUM_REG_RE   ;
    8188        delete [] out_RENAME_OUT_EXCEPTION_USE;
     89
     90        DELETE2_SIGNAL( in_RETIRE_EVENT_STATE          ,_param->_nb_front_end, _param->_nb_context[it1],_param->_size_event_state);
    8291      }
    8392    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Rename_select_genMealy.cpp

    r105 r108  
    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;
     69               
     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]));
     77
     78                // Attention, j'ai enlevé event_state de la liste de sensibilité
     79//                 Tevent_state_t event_state  = PORT_READ(in_RETIRE_EVENT_STATE [front_end_id][context_id]);
     80
     81//                 Tcontrol_t     no_execute   = (PORT_READ(in_RENAME_IN_NO_EXECUTE [x][y]) or
     82//                                                // ROB Flush
     83//                                                ((event_state == EVENT_STATE_EVENT  ) or
     84//                                                 (event_state == EVENT_STATE_WAITEND)));
     85
     86//              Tcontrol_t read_ra  = (PORT_READ(in_RENAME_IN_READ_RA  [x][y]) and not no_execute);
     87//              Tcontrol_t read_rb  = (PORT_READ(in_RENAME_IN_READ_RB  [x][y]) and not no_execute);
     88//              Tcontrol_t read_rc  = (PORT_READ(in_RENAME_IN_READ_RC  [x][y]) and not no_execute);
     89//              Tcontrol_t write_rd = (PORT_READ(in_RENAME_IN_WRITE_RD [x][y]) and not no_execute);
     90//              Tcontrol_t write_re = (PORT_READ(in_RENAME_IN_WRITE_RE [x][y]) and not no_execute);
     91               
    6792                if (_param->_have_port_front_end_id)
    68                 PORT_WRITE(out_RENAME_OUT_FRONT_END_ID [i],PORT_READ(in_RENAME_IN_FRONT_END_ID  [x][y]));
     93                PORT_WRITE(out_RENAME_OUT_FRONT_END_ID [i],front_end_id);
    6994                if (_param->_have_port_context_id)
    70                 PORT_WRITE(out_RENAME_OUT_CONTEXT_ID   [i],PORT_READ(in_RENAME_IN_CONTEXT_ID    [x][y]));
     95                PORT_WRITE(out_RENAME_OUT_CONTEXT_ID   [i],context_id);
    7196                if (_param->_have_port_depth)
    7297                PORT_WRITE(out_RENAME_OUT_DEPTH        [i],PORT_READ(in_RENAME_IN_DEPTH         [x][y]));
    7398                PORT_WRITE(out_RENAME_OUT_TYPE         [i],PORT_READ(in_RENAME_IN_TYPE          [x][y]));
    7499                PORT_WRITE(out_RENAME_OUT_OPERATION    [i],PORT_READ(in_RENAME_IN_OPERATION     [x][y]));
    75                 PORT_WRITE(out_RENAME_OUT_NO_EXECUTE   [i],PORT_READ(in_RENAME_IN_NO_EXECUTE    [x][y]));
     100                PORT_WRITE(out_RENAME_OUT_NO_EXECUTE   [i],no_execute);
    76101                PORT_WRITE(out_RENAME_OUT_IS_DELAY_SLOT[i],PORT_READ(in_RENAME_IN_IS_DELAY_SLOT [x][y]));
     102#ifdef DEBUG
     103                PORT_WRITE(out_RENAME_OUT_ADDRESS      [i],PORT_READ(in_RENAME_IN_ADDRESS       [x][y]));
     104#endif
    77105                PORT_WRITE(out_RENAME_OUT_ADDRESS_NEXT [i],PORT_READ(in_RENAME_IN_ADDRESS_NEXT  [x][y]));
    78106                PORT_WRITE(out_RENAME_OUT_HAS_IMMEDIAT [i],PORT_READ(in_RENAME_IN_HAS_IMMEDIAT  [x][y]));
    79107                PORT_WRITE(out_RENAME_OUT_IMMEDIAT     [i],PORT_READ(in_RENAME_IN_IMMEDIAT      [x][y]));
    80                 PORT_WRITE(out_RENAME_OUT_READ_RA      [i],PORT_READ(in_RENAME_IN_READ_RA       [x][y]));
     108                PORT_WRITE(out_RENAME_OUT_READ_RA      [i],read_ra);
    81109                PORT_WRITE(out_RENAME_OUT_NUM_REG_RA   [i],PORT_READ(in_RENAME_IN_NUM_REG_RA    [x][y]));
    82                 PORT_WRITE(out_RENAME_OUT_READ_RB      [i],PORT_READ(in_RENAME_IN_READ_RB       [x][y]));
     110                PORT_WRITE(out_RENAME_OUT_READ_RB      [i],read_rb);
    83111                PORT_WRITE(out_RENAME_OUT_NUM_REG_RB   [i],PORT_READ(in_RENAME_IN_NUM_REG_RB    [x][y]));
    84                 PORT_WRITE(out_RENAME_OUT_READ_RC      [i],PORT_READ(in_RENAME_IN_READ_RC       [x][y]));
     112                PORT_WRITE(out_RENAME_OUT_READ_RC      [i],read_rc);
    85113                PORT_WRITE(out_RENAME_OUT_NUM_REG_RC   [i],PORT_READ(in_RENAME_IN_NUM_REG_RC    [x][y]));
    86                 PORT_WRITE(out_RENAME_OUT_WRITE_RD     [i],PORT_READ(in_RENAME_IN_WRITE_RD      [x][y]));
     114                PORT_WRITE(out_RENAME_OUT_WRITE_RD     [i],write_rd);
    87115                PORT_WRITE(out_RENAME_OUT_NUM_REG_RD   [i],PORT_READ(in_RENAME_IN_NUM_REG_RD    [x][y]));
    88                 PORT_WRITE(out_RENAME_OUT_WRITE_RE     [i],PORT_READ(in_RENAME_IN_WRITE_RE      [x][y]));
     116                PORT_WRITE(out_RENAME_OUT_WRITE_RE     [i],write_re);
    89117                PORT_WRITE(out_RENAME_OUT_NUM_REG_RE   [i],PORT_READ(in_RENAME_IN_NUM_REG_RE    [x][y]));
    90118                PORT_WRITE(out_RENAME_OUT_EXCEPTION_USE[i],PORT_READ(in_RENAME_IN_EXCEPTION_USE [x][y]));
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/SelfTest/src/test.cpp

    r105 r108  
    5757  ALLOC2_SC_SIGNAL( in_RENAME_IN_NO_EXECUTE        ," in_RENAME_IN_NO_EXECUTE        ",Tcontrol_t        ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
    5858  ALLOC2_SC_SIGNAL( in_RENAME_IN_IS_DELAY_SLOT     ," in_RENAME_IN_IS_DELAY_SLOT     ",Tcontrol_t        ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     59#ifdef DEBUG
     60  ALLOC2_SC_SIGNAL( in_RENAME_IN_ADDRESS           ," in_RENAME_IN_ADDRESS           ",Tgeneral_data_t   ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     61#endif
    5962  ALLOC2_SC_SIGNAL( in_RENAME_IN_ADDRESS_NEXT      ," in_RENAME_IN_ADDRESS_NEXT      ",Tgeneral_data_t   ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
    6063  ALLOC2_SC_SIGNAL( in_RENAME_IN_HAS_IMMEDIAT      ," in_RENAME_IN_HAS_IMMEDIAT      ",Tcontrol_t        ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     
    8184  ALLOC1_SC_SIGNAL(out_INSERT_NO_EXECUTE           ,"out_INSERT_NO_EXECUTE           ",Tcontrol_t        ,_param->_nb_inst_insert);
    8285  ALLOC1_SC_SIGNAL(out_INSERT_IS_DELAY_SLOT        ,"out_INSERT_IS_DELAY_SLOT        ",Tcontrol_t        ,_param->_nb_inst_insert);
     86#ifdef DEBUG
     87  ALLOC1_SC_SIGNAL(out_INSERT_ADDRESS              ,"out_INSERT_ADDRESS              ",Tgeneral_data_t   ,_param->_nb_inst_insert);
     88#endif
    8389  ALLOC1_SC_SIGNAL(out_INSERT_ADDRESS_NEXT         ,"out_INSERT_ADDRESS_NEXT         ",Tgeneral_data_t   ,_param->_nb_inst_insert);
    8490  ALLOC1_SC_SIGNAL(out_INSERT_HAS_IMMEDIAT         ,"out_INSERT_HAS_IMMEDIAT         ",Tcontrol_t        ,_param->_nb_inst_insert);
     
    155161  INSTANCE2_SC_SIGNAL(_Rename_unit, in_RENAME_IN_NO_EXECUTE        ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
    156162  INSTANCE2_SC_SIGNAL(_Rename_unit, in_RENAME_IN_IS_DELAY_SLOT     ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
     163#ifdef DEBUG
     164  INSTANCE2_SC_SIGNAL(_Rename_unit, in_RENAME_IN_ADDRESS           ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
     165#endif
    157166  INSTANCE2_SC_SIGNAL(_Rename_unit, in_RENAME_IN_ADDRESS_NEXT      ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
    158167  INSTANCE2_SC_SIGNAL(_Rename_unit, in_RENAME_IN_HAS_IMMEDIAT      ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
     
    183192  INSTANCE1_SC_SIGNAL(_Rename_unit,out_INSERT_NO_EXECUTE           ,_param->_nb_inst_insert);
    184193  INSTANCE1_SC_SIGNAL(_Rename_unit,out_INSERT_IS_DELAY_SLOT        ,_param->_nb_inst_insert);
     194#ifdef DEBUG
     195  INSTANCE1_SC_SIGNAL(_Rename_unit,out_INSERT_ADDRESS              ,_param->_nb_inst_insert);
     196#endif
    185197  INSTANCE1_SC_SIGNAL(_Rename_unit,out_INSERT_ADDRESS_NEXT         ,_param->_nb_inst_insert);
    186198  INSTANCE1_SC_SIGNAL(_Rename_unit,out_INSERT_HAS_IMMEDIAT         ,_param->_nb_inst_insert);
     
    297309  DELETE2_SC_SIGNAL( in_RENAME_IN_NO_EXECUTE        ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
    298310  DELETE2_SC_SIGNAL( in_RENAME_IN_IS_DELAY_SLOT     ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
     311#ifdef DEBUG
     312  DELETE2_SC_SIGNAL( in_RENAME_IN_ADDRESS           ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
     313#endif
    299314  DELETE2_SC_SIGNAL( in_RENAME_IN_ADDRESS_NEXT      ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
    300315  DELETE2_SC_SIGNAL( in_RENAME_IN_HAS_IMMEDIAT      ,_param->_nb_front_end, _param->_nb_inst_decod[it1]);
     
    322337  DELETE1_SC_SIGNAL(out_INSERT_NO_EXECUTE           ,_param->_nb_inst_insert);
    323338  DELETE1_SC_SIGNAL(out_INSERT_IS_DELAY_SLOT        ,_param->_nb_inst_insert);
     339#ifdef DEBUG
     340  DELETE1_SC_SIGNAL(out_INSERT_ADDRESS              ,_param->_nb_inst_insert);
     341#endif
    324342  DELETE1_SC_SIGNAL(out_INSERT_ADDRESS_NEXT         ,_param->_nb_inst_insert);
    325343  DELETE1_SC_SIGNAL(out_INSERT_HAS_IMMEDIAT         ,_param->_nb_inst_insert);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/include/Rename_unit.h

    r105 r108  
    7878  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IN_NO_EXECUTE        ;//[nb_front_end][nb_inst_decod]
    7979  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IN_IS_DELAY_SLOT     ;//[nb_front_end][nb_inst_decod]
     80#ifdef DEBUG
     81  public    : SC_IN (Taddress_t        )  ***  in_RENAME_IN_ADDRESS           ;//[nb_front_end][nb_inst_decod]
     82#endif
    8083  public    : SC_IN (Taddress_t        )  ***  in_RENAME_IN_ADDRESS_NEXT      ;//[nb_front_end][nb_inst_decod]
    8184  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IN_HAS_IMMEDIAT      ;//[nb_front_end][nb_inst_decod]
     
    104107  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_NO_EXECUTE           ;//[nb_inst_insert]
    105108  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_IS_DELAY_SLOT        ;//[nb_inst_insert]
     109#ifdef DEBUG
     110  public    : SC_OUT(Taddress_t        )   ** out_INSERT_ADDRESS              ;//[nb_inst_insert]
     111#endif
    106112  public    : SC_OUT(Taddress_t        )   ** out_INSERT_ADDRESS_NEXT         ;//[nb_inst_insert]
    107113  public    : SC_OUT(Tcontrol_t        )   ** out_INSERT_HAS_IMMEDIAT         ;//[nb_inst_insert]
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/src/Rename_unit_allocation.cpp

    r105 r108  
    6969      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_NO_EXECUTE    ,"no_execute"   ,Tcontrol_t        ,1                                   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
    7070      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_IS_DELAY_SLOT ,"is_delay_slot",Tcontrol_t        ,1                                   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
     71#ifdef DEBUG
     72      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_ADDRESS       ,"address"      ,Taddress_t        ,_param->_size_instruction_address   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
     73#endif
    7174      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_ADDRESS_NEXT  ,"address_next" ,Taddress_t        ,_param->_size_instruction_address   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
    7275      _ALLOC2_SIGNAL_IN ( in_RENAME_IN_HAS_IMMEDIAT  ,"has_immediat" ,Tcontrol_t        ,1                                   , _param->_nb_front_end, _param->_nb_inst_decod[it1]);
     
    99102      ALLOC1_SIGNAL_OUT(out_INSERT_NO_EXECUTE           ,"no_execute"           ,Tcontrol_t        ,1                                   );
    100103      ALLOC1_SIGNAL_OUT(out_INSERT_IS_DELAY_SLOT        ,"is_delay_slot"        ,Tcontrol_t        ,1                                   );
     104#ifdef DEBUG
     105      ALLOC1_SIGNAL_OUT(out_INSERT_ADDRESS              ,"address"              ,Taddress_t        ,_param->_size_instruction_address   );
     106#endif
    101107      ALLOC1_SIGNAL_OUT(out_INSERT_ADDRESS_NEXT         ,"address_next"         ,Taddress_t        ,_param->_size_instruction_address   );
    102108      ALLOC1_SIGNAL_OUT(out_INSERT_HAS_IMMEDIAT         ,"has_immediat"         ,Tcontrol_t        ,1                                   );
     
    301307            PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_"+toString(j)+"_IS_DELAY_SLOT",
    302308                                dest, "in_RENAME_IN_"+toString(i)+"_"+toString(j)+"_IS_DELAY_SLOT");
     309#ifdef DEBUG
     310            PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_"+toString(j)+"_ADDRESS"      ,
     311                                dest, "in_RENAME_IN_"+toString(i)+"_"+toString(j)+"_ADDRESS"      );
     312#endif
    303313            PORT_MAP(_component,src , "in_RENAME_IN_"+toString(i)+"_"+toString(j)+"_ADDRESS_NEXT" ,
    304314                                dest, "in_RENAME_IN_"+toString(i)+"_"+toString(j)+"_ADDRESS_NEXT" );
     
    349359          PORT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_DEPTH"       ,
    350360                              dest,"out_INSERT_"    +toString(i)+"_DEPTH"       );
     361#ifdef DEBUG
     362          PORT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_ADDRESS"     ,
     363                              dest,"out_INSERT_"    +toString(i)+"_ADDRESS"     );
     364#endif
    351365          PORT_MAP(_component,src ,"out_RENAME_OUT_"+toString(i)+"_ADDRESS_NEXT",
    352366                              dest,"out_INSERT_"    +toString(i)+"_ADDRESS_NEXT");
     
    412426                                   dest, "in_INSERT_"    +toString(i)+"_RENAME_SELECT_EXCEPTION"    );
    413427        }
     428
     429      for (uint32_t i=0; i<_param->_nb_front_end; i++)
     430        for (uint32_t j=0; j<_param->_nb_context[i]; j++)
     431          {
     432            dest = _name;
     433           
     434#ifdef POSITION
     435            _component->interface_map (src ,"retire_event_"+toString(i)+"_"+toString(j),
     436                                       dest,"retire_event_"+toString(i)+"_"+toString(j));
     437#endif     
     438            PORT_MAP(_component,src , "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_STATE",
     439                                dest, "in_RETIRE_EVENT_"+toString(i)+"_"+toString(j)+"_STATE");
     440          }
    414441    }
    415442
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/src/Rename_unit_deallocation.cpp

    r105 r108  
    3737        DELETE2_SIGNAL( in_RENAME_IN_NO_EXECUTE        ,_param->_nb_front_end, _param->_nb_inst_decod[it1],1                                   );
    3838        DELETE2_SIGNAL( in_RENAME_IN_IS_DELAY_SLOT     ,_param->_nb_front_end, _param->_nb_inst_decod[it1],1                                   );
     39#ifdef DEBUG
     40        DELETE2_SIGNAL( in_RENAME_IN_ADDRESS           ,_param->_nb_front_end, _param->_nb_inst_decod[it1],_param->_size_instruction_address   );
     41#endif
    3942        DELETE2_SIGNAL( in_RENAME_IN_ADDRESS_NEXT      ,_param->_nb_front_end, _param->_nb_inst_decod[it1],_param->_size_instruction_address   );
    4043        DELETE2_SIGNAL( in_RENAME_IN_HAS_IMMEDIAT      ,_param->_nb_front_end, _param->_nb_inst_decod[it1],1                                   );
     
    6265        DELETE1_SIGNAL(out_INSERT_NO_EXECUTE           ,_param->_nb_inst_insert,1                                   );
    6366        DELETE1_SIGNAL(out_INSERT_IS_DELAY_SLOT        ,_param->_nb_inst_insert,1                                   );
     67#ifdef DEBUG
     68        DELETE1_SIGNAL(out_INSERT_ADDRESS              ,_param->_nb_inst_insert,_param->_size_instruction_address   );
     69#endif
    6470        DELETE1_SIGNAL(out_INSERT_ADDRESS_NEXT         ,_param->_nb_inst_insert,_param->_size_instruction_address   );
    6571        DELETE1_SIGNAL(out_INSERT_HAS_IMMEDIAT         ,_param->_nb_inst_insert,1                                   );
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/SelfTest/configuration.cfg

    r88 r108  
    13131       1       +1      # nb_inst_branch_complete                             
    14141       1       +1      # nb_branch_speculated              [0][0]            [nb_front_end][nb_context]
     151       1       +1      # size_nb_inst_decod 
    15161       1       +1      # nb_rename_unit_select                   
    16171       1       +1      # nb_execute_loop_select                   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/SelfTest/src/main.cpp

    r88 r108  
    88#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/SelfTest/include/test.h"
    99
    10 #define NB_PARAMS 22
     10#define NB_PARAMS 23
    1111
    1212void usage (int argc, char * argv[])
     
    2727  err (_(" * nb_inst_branch_complete                                                 (uint32_t         )\n"));
    2828  err (_(" * nb_branch_speculated              [nb_front_end][nb_context]            (uint32_t         )\n"));
     29  err (_(" * size_nb_inst_decod                                                      (uint32_t         )\n"));
    2930  err (_(" * nb_rename_unit_select                                                   (uint32_t         )\n"));
    3031  err (_(" * nb_execute_loop_select                                                  (uint32_t         )\n"));
     
    130131        _nb_branch_speculated [i][j] = fromString<uint32_t>(argv[x++]);
    131132    }
     133  uint32_t              _size_nb_inst_decod                = fromString<uint32_t         >(argv[x++]);
    132134  uint32_t              _nb_rename_unit_select             = fromString<uint32_t         >(argv[x++]);
    133135  uint32_t              _nb_execute_loop_select            = fromString<uint32_t         >(argv[x++]);
     
    275277         _nb_inst_branch_complete          ,
    276278         _nb_branch_speculated             ,
     279         _size_nb_inst_decod               ,
    277280         _nb_rename_unit_select            ,
    278281         _nb_execute_loop_select           ,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/SelfTest/src/test.cpp

    r105 r108  
    5757  ALLOC2_SC_SIGNAL( in_RENAME_NO_EXECUTE                ," in_RENAME_NO_EXECUTE                ",Tcontrol_t        ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
    5858  ALLOC2_SC_SIGNAL( in_RENAME_IS_DELAY_SLOT             ," in_RENAME_IS_DELAY_SLOT             ",Tcontrol_t        ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     59#ifdef DEBUG
     60  ALLOC2_SC_SIGNAL( in_RENAME_ADDRESS                   ," in_RENAME_ADDRESS                   ",Taddress_t        ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     61#endif
    5962  ALLOC2_SC_SIGNAL( in_RENAME_ADDRESS_NEXT              ," in_RENAME_ADDRESS_NEXT              ",Taddress_t        ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
    6063  ALLOC2_SC_SIGNAL( in_RENAME_HAS_IMMEDIAT              ," in_RENAME_HAS_IMMEDIAT              ",Tcontrol_t        ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     
    165168  ALLOC2_SC_SIGNAL(out_NB_INST_COMMIT_ALL               ,"out_NB_INST_COMMIT_ALL               ",Tcounter_t        ,_param->_nb_front_end,_param->_nb_context[it1]);
    166169  ALLOC2_SC_SIGNAL(out_NB_INST_COMMIT_MEM               ,"out_NB_INST_COMMIT_MEM               ",Tcounter_t        ,_param->_nb_front_end,_param->_nb_context[it1]);
     170  ALLOC2_SC_SIGNAL( in_NB_INST_DECOD_ALL                ," in_NB_INST_DECOD_ALL                ",Tcounter_t        ,_param->_nb_front_end,_param->_nb_context[it1]);
    167171
    168172  ALLOC2_SC_SIGNAL( in_DEPTH_MIN                        ," in_DEPTH_MIN                        ",Tdepth_t          ,_param->_nb_front_end,_param->_nb_context[it1]);
     
    194198  INSTANCE2_SC_SIGNAL(_OOO_Engine, in_RENAME_NO_EXECUTE                ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
    195199  INSTANCE2_SC_SIGNAL(_OOO_Engine, in_RENAME_IS_DELAY_SLOT             ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     200#ifdef DEBUG
     201  INSTANCE2_SC_SIGNAL(_OOO_Engine, in_RENAME_ADDRESS                   ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     202#endif
    196203  INSTANCE2_SC_SIGNAL(_OOO_Engine, in_RENAME_ADDRESS_NEXT              ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
    197204  INSTANCE2_SC_SIGNAL(_OOO_Engine, in_RENAME_HAS_IMMEDIAT              ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     
    315322  INSTANCE2_SC_SIGNAL(_OOO_Engine,out_NB_INST_COMMIT_ALL               ,_param->_nb_front_end,_param->_nb_context[it1]);
    316323  INSTANCE2_SC_SIGNAL(_OOO_Engine,out_NB_INST_COMMIT_MEM               ,_param->_nb_front_end,_param->_nb_context[it1]);
     324  INSTANCE2_SC_SIGNAL(_OOO_Engine, in_NB_INST_DECOD_ALL                ,_param->_nb_front_end,_param->_nb_context[it1]);
    317325 
    318326  if (_param->_have_port_depth)
     
    378386  DELETE2_SC_SIGNAL( in_RENAME_NO_EXECUTE                ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
    379387  DELETE2_SC_SIGNAL( in_RENAME_IS_DELAY_SLOT             ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     388#ifdef DEBUG
     389  DELETE2_SC_SIGNAL( in_RENAME_ADDRESS                   ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     390#endif
    380391  DELETE2_SC_SIGNAL( in_RENAME_ADDRESS_NEXT              ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
    381392  DELETE2_SC_SIGNAL( in_RENAME_HAS_IMMEDIAT              ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     
    484495  DELETE2_SC_SIGNAL(out_NB_INST_COMMIT_ALL               ,_param->_nb_front_end,_param->_nb_context[it1]);
    485496  DELETE2_SC_SIGNAL(out_NB_INST_COMMIT_MEM               ,_param->_nb_front_end,_param->_nb_context[it1]);
     497  DELETE2_SC_SIGNAL( in_NB_INST_DECOD_ALL                ,_param->_nb_front_end,_param->_nb_context[it1]);
    486498  DELETE2_SC_SIGNAL( in_DEPTH_MIN                        ,_param->_nb_front_end,_param->_nb_context[it1]);
    487499  DELETE2_SC_SIGNAL( in_DEPTH_MAX                        ,_param->_nb_front_end,_param->_nb_context[it1]);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/include/OOO_Engine.h

    r105 r108  
    7777  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_NO_EXECUTE                ;//[nb_front_end][nb_inst_decod]
    7878  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_IS_DELAY_SLOT             ;//[nb_front_end][nb_inst_decod]
     79#ifdef DEBUG
     80  public    : SC_IN (Taddress_t        )  ***  in_RENAME_ADDRESS                   ;//[nb_front_end][nb_inst_decod]
     81#endif
    7982  public    : SC_IN (Taddress_t        )  ***  in_RENAME_ADDRESS_NEXT              ;//[nb_front_end][nb_inst_decod]
    8083  public    : SC_IN (Tcontrol_t        )  ***  in_RENAME_HAS_IMMEDIAT              ;//[nb_front_end][nb_inst_decod]
     
    194197  public    : SC_OUT(Tcounter_t        )  *** out_NB_INST_COMMIT_ALL               ;//[nb_front_end][nb_context]
    195198  public    : SC_OUT(Tcounter_t        )  *** out_NB_INST_COMMIT_MEM               ;//[nb_front_end][nb_context]
     199  public    : SC_IN (Tcounter_t        )  ***  in_NB_INST_DECOD_ALL                ;//[nb_front_end][nb_context]
    196200                                                                                   
    197201    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/include/Parameters.h

    r104 r108  
    134134                        uint32_t              nb_inst_branch_complete          ,
    135135                        uint32_t           ** nb_branch_speculated             ,//[nb_front_end][nb_context]
     136                        uint32_t              size_nb_inst_decod               ,
    136137                        uint32_t              nb_rename_unit_select            ,
    137138                        uint32_t              nb_execute_loop_select           ,
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/src/OOO_Engine_allocation.cpp

    r105 r108  
    6666      _ALLOC2_SIGNAL_IN ( in_RENAME_NO_EXECUTE                ,"NO_EXECUTE"                ,Tcontrol_t        ,1                                    ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
    6767      _ALLOC2_SIGNAL_IN ( in_RENAME_IS_DELAY_SLOT             ,"IS_DELAY_SLOT"             ,Tcontrol_t        ,1                                    ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     68#ifdef DEBUG
     69      _ALLOC2_SIGNAL_IN ( in_RENAME_ADDRESS                   ,"ADDRESS"                   ,Taddress_t        ,_param->_size_instruction_address    ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     70#endif
    6871      _ALLOC2_SIGNAL_IN ( in_RENAME_ADDRESS_NEXT              ,"ADDRESS_NEXT"              ,Taddress_t        ,_param->_size_instruction_address    ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
    6972      _ALLOC2_SIGNAL_IN ( in_RENAME_HAS_IMMEDIAT              ,"HAS_IMMEDIAT"              ,Tcontrol_t        ,1                                    ,_param->_nb_front_end,_param->_nb_inst_decod[it1]);
     
    158161    // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         
    159162    {
    160       ALLOC1_INTERFACE("branch_complete",OUT,WEST,_("Instruction to execute_loop"),_param->_nb_inst_issue);
     163      ALLOC1_INTERFACE("branch_complete",OUT,WEST,_("Instruction to execute_loop"),_param->_nb_inst_branch_complete);
    161164
    162165      ALLOC1_VALACK_OUT (out_BRANCH_COMPLETE_VAL              , VAL);
     
    219222      _ALLOC2_SIGNAL_OUT(out_NB_INST_COMMIT_ALL               ,"COMMIT_ALL"                 ,Tcounter_t       ,_param->_size_nb_inst_commit         ,_param->_nb_front_end,_param->_nb_context[it1]);
    220223      _ALLOC2_SIGNAL_OUT(out_NB_INST_COMMIT_MEM               ,"COMMIT_MEM"                 ,Tcounter_t       ,_param->_size_nb_inst_commit         ,_param->_nb_front_end,_param->_nb_context[it1]);
     224      _ALLOC2_SIGNAL_IN ( in_NB_INST_DECOD_ALL                ,"DECOD_ALL"                  ,Tcounter_t       ,_param->_size_nb_inst_decod          ,_param->_nb_front_end,_param->_nb_context[it1]);
    221225    }
    222226
     
    413417                    PORT_MAP(_component,src , "in_RENAME_IN_"+toString(x)+"_"+toString(k)+"_IS_DELAY_SLOT",
    414418                                        dest, "in_RENAME_"   +toString(j)+"_"+toString(k)+"_IS_DELAY_SLOT");
     419#ifdef DEBUG
     420                    PORT_MAP(_component,src , "in_RENAME_IN_"+toString(x)+"_"+toString(k)+"_ADDRESS"      ,
     421                                        dest, "in_RENAME_"   +toString(j)+"_"+toString(k)+"_ADDRESS"      );
     422#endif
    415423                    PORT_MAP(_component,src , "in_RENAME_IN_"+toString(x)+"_"+toString(k)+"_ADDRESS_NEXT" ,
    416424                                        dest, "in_RENAME_"   +toString(j)+"_"+toString(k)+"_ADDRESS_NEXT" );
     
    477485            COMPONENT_MAP(_component,src ,"out_INSERT_"+toString(j)                +"_IS_DELAY_SLOT" ,
    478486                                     dest, "in_INSERT_"+toString(i)+"_"+toString(j)+"_IS_DELAY_SLOT" );
     487#ifdef DEBUG
     488            COMPONENT_MAP(_component,src ,"out_INSERT_"+toString(j)                +"_ADDRESS"       ,
     489                                     dest, "in_INSERT_"+toString(i)+"_"+toString(j)+"_ADDRESS"       );
     490#endif
    479491            COMPONENT_MAP(_component,src ,"out_INSERT_"+toString(j)                +"_ADDRESS_NEXT"  ,
    480492                                     dest, "in_INSERT_"+toString(i)+"_"+toString(j)+"_ADDRESS_NEXT"  );
     
    755767
    756768            //    in_INSERT_DEPTH          - component_rename_unit
     769            //    in_INSERT_ADDRESS        - component_rename_unit
    757770            //    in_INSERT_ADDRESS_NEXT   - component_rename_unit
    758771            //    in_INSERT_EXCEPTION_USE  - component_rename_unit
     
    9911004            PORT_MAP(_component,src ,"out_NB_INST_"+toString(i)+"_"+toString(j)+"_COMMIT_MEM",
    9921005                                dest,"out_NB_INST_"+toString(i)+"_"+toString(j)+"_COMMIT_MEM");
     1006            PORT_MAP(_component,src , "in_NB_INST_"+toString(i)+"_"+toString(j)+"_DECOD_ALL" ,
     1007                                dest, "in_NB_INST_"+toString(i)+"_"+toString(j)+"_DECOD_ALL" );
    9931008          }
    9941009
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/src/OOO_Engine_deallocation.cpp

    r105 r108  
    3636        DELETE2_SIGNAL( in_RENAME_NO_EXECUTE                ,_param->_nb_front_end,_param->_nb_inst_decod[it1],1                                    );
    3737        DELETE2_SIGNAL( in_RENAME_IS_DELAY_SLOT             ,_param->_nb_front_end,_param->_nb_inst_decod[it1],1                                    );
     38#ifdef DEBUG
     39        DELETE2_SIGNAL( in_RENAME_ADDRESS                   ,_param->_nb_front_end,_param->_nb_inst_decod[it1],_param->_size_instruction_address    );
     40#endif
    3841        DELETE2_SIGNAL( in_RENAME_ADDRESS_NEXT              ,_param->_nb_front_end,_param->_nb_inst_decod[it1],_param->_size_instruction_address    );
    3942        DELETE2_SIGNAL( in_RENAME_HAS_IMMEDIAT              ,_param->_nb_front_end,_param->_nb_inst_decod[it1],1                                    );
     
    142145        DELETE2_SIGNAL(out_NB_INST_COMMIT_ALL               ,_param->_nb_front_end,_param->_nb_context[it1],_param->_size_nb_inst_commit         );
    143146        DELETE2_SIGNAL(out_NB_INST_COMMIT_MEM               ,_param->_nb_front_end,_param->_nb_context[it1],_param->_size_nb_inst_commit         );
     147        DELETE2_SIGNAL( in_NB_INST_DECOD_ALL                ,_param->_nb_front_end,_param->_nb_context[it1],_param->_size_nb_inst_decod          );
    144148        DELETE2_SIGNAL( in_DEPTH_MIN                        ,_param->_nb_front_end,_param->_nb_context[it1],_param->_size_depth                  );
    145149        DELETE2_SIGNAL( in_DEPTH_MAX                        ,_param->_nb_front_end,_param->_nb_context[it1],_param->_size_depth                  );
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/src/Parameters.cpp

    r88 r108  
    3131                          uint32_t              nb_inst_branch_complete          ,
    3232                          uint32_t           ** nb_branch_speculated             ,//[nb_front_end][nb_context]
     33                          uint32_t              size_nb_inst_decod               ,
    3334                          uint32_t              nb_rename_unit_select            ,
    3435                          uint32_t              nb_execute_loop_select           ,
     
    242243       _nb_inst_branch_complete ,
    243244       _nb_branch_speculated    ,
     245        size_nb_inst_decod      ,
    244246        size_general_data       ,
    245247        size_store_queue_ptr    ,
     
    336338        _size_rob_ptr                      = size_packet_id;
    337339        _size_nb_inst_commit               = log2(size_re_order_buffer)+1;
     340        _size_nb_inst_decod                = size_nb_inst_decod;
    338341
    339342        _have_port_front_end_id            = _size_front_end_id   > 0;
Note: See TracChangeset for help on using the changeset viewer.