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

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

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/Makefile.deps

    r81 r109  
    1414endif
    1515
     16ifndef Priority
     17include                         $(DIR_MORPHEO)/Behavioural/Generic/Priority/Makefile.deps
     18endif
     19
    1620#-----[ Directory ]----------------------------------------
    1721
    18 Free_List_unit_DIR                      =       $(DIR_MORPHEO)/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit
     22Free_List_unit_DIR              =       $(DIR_MORPHEO)/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit
    1923
    2024#-----[ Library ]------------------------------------------
    2125
    22 Free_List_unit_LIBRARY          =       -lFree_List_unit        \
     26Free_List_unit_LIBRARY          =       -lFree_List_unit                \
     27                                        $(Priority_LIBRARY)             \
    2328                                        $(Behavioural_LIBRARY) 
    2429
    25 Free_List_unit_DIR_LIBRARY              =       -L$(Free_List_unit_DIR)/lib     \
     30Free_List_unit_DIR_LIBRARY      =       -L$(Free_List_unit_DIR)/lib     \
     31                                        $(Priority_DIR_LIBRARY)         \
    2632                                        $(Behavioural_DIR_LIBRARY)
    2733
     
    3137                                @\
    3238                                $(MAKE) Behavioural_library;            \
     39                                $(MAKE) Priority_library;               \
    3340                                $(MAKE) --directory=$(Free_List_unit_DIR) --makefile=Makefile;
    3441
     
    3643                                @\
    3744                                $(MAKE) Behavioural_library_clean;      \
     45                                $(MAKE) Priority_library_clean;         \
    3846                                $(MAKE) --directory=$(Free_List_unit_DIR) --makefile=Makefile clean;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/SelfTest/src/test.cpp

    r88 r109  
    77 */
    88
    9 #define NB_ITERATION  1
     9#define NB_ITERATION  16
    1010#define CYCLE_MAX     (128*NB_ITERATION)
    1111
     
    190190                    TEST(bool, gpr_free[reg],true);
    191191
    192                     Tgeneral_address_t bank = reg >> _param->_bank_gpr_size_slot;
    193                     TEST(bool, (bank >= (i*_param->_nb_bank_by_pop)) and (bank < ((i+1)*_param->_nb_bank_by_pop)), true);
     192//                  Tgeneral_address_t bank = reg >> _param->_bank_gpr_size_slot;
     193//                  TEST(bool, (bank >= (i*_param->_nb_bank_by_pop)) and (bank < ((i+1)*_param->_nb_bank_by_pop)), true);
    194194
    195195                    gpr_free[reg] = false;
     
    202202                    TEST(bool,spr_free[reg],true);
    203203                   
    204                     Tspecial_address_t bank = reg >> _param->_bank_spr_size_slot;
    205                     TEST(bool, (bank >= (i*_param->_nb_bank_by_pop)) and (bank < ((i+1)*_param->_nb_bank_by_pop)), true);
     204//                  Tspecial_address_t bank = reg >> _param->_bank_spr_size_slot;
     205//                  TEST(bool, (bank >= (i*_param->_nb_bank_by_pop)) and (bank < ((i+1)*_param->_nb_bank_by_pop)), true);
    206206
    207207                    spr_free[reg] = false;
  • 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

    r108 r109  
    2828#endif
    2929#include "Behavioural/include/Usage.h"
     30
     31#include "Behavioural/Generic/Priority/include/Priority.h"
    3032
    3133namespace morpheo {
     
    8385
    8486    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
     87  private   : generic::priority::Priority   * _priority_gpr;
     88  private   : generic::priority::Priority   * _priority_spr;
    8589
    8690    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
     
    8993
    9094    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    91   private   : uint32_t                        reg_BANK_PRIORITY;
    92 
    9395  private   : Tcontrol_t                    * internal_POP_ACK      ; //[nb_pop]
    9496  private   : uint32_t                      * internal_POP_GPR_BANK ; //[nb_pop]
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Parameters.h

    r88 r109  
    3737//public : uint32_t    _size_special_register;
    3838
    39   public : uint32_t    _nb_bank_by_pop       ;
     39//   public : uint32_t    _nb_bank_by_pop       ;
    4040  public : uint32_t    _bank_gpr_nb_slot     ;
    4141  public : uint32_t    _bank_gpr_size_slot   ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_allocation.cpp

    r88 r109  
    101101       }
    102102    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
     103    _priority_gpr = new generic::priority::Priority (_name+"_priority_gpr",
     104                                                     _param->_priority,
     105                                                     _param->_nb_bank,
     106                                                     _param->_nb_bank);
     107
     108    _priority_spr = new generic::priority::Priority (_name+"_priority_spr",
     109                                                     _param->_priority,
     110                                                     _param->_nb_bank,
     111                                                     _param->_nb_bank);
    103112
    104113#ifdef POSITION
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Free_List_unit_deallocation.cpp

    r88 r109  
    5858
    5959    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
    60 
    61      delete _component;
    62 
     60    delete _priority_gpr;
     61    delete _priority_spr;
     62   
     63    delete _component;
     64   
    6365    log_printf(FUNC,Free_List_unit,FUNCTION,"End");
    6466  };
  • 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

    r108 r109  
    2626    log_function(Free_List_unit,FUNCTION,_name.c_str());
    2727
     28    std::list<generic::priority::select_t> * select_gpr = _priority_gpr->select();
     29    std::list<generic::priority::select_t>::iterator it_gpr=select_gpr->begin();
     30
     31    std::list<generic::priority::select_t> * select_spr = _priority_spr->select();
     32    std::list<generic::priority::select_t>::iterator it_spr=select_spr->begin();
     33
    2834    for (uint32_t i=0; i<_param->_nb_pop; i++)
    2935      {
    3036        log_printf(TRACE,Free_List_unit,FUNCTION,"  * POP [%d]",i);
    31 
    32         uint32_t offset = i*_param->_nb_bank_by_pop;
    33 
     37       
    3438        // GPR
    3539        bool gpr_ack = not PORT_READ(in_POP_GPR_VAL[i]);
    36 
     40       
    3741        log_printf(TRACE,Free_List_unit,FUNCTION,"    * GPR_VAL : %d",PORT_READ(in_POP_GPR_VAL[i]));
    38 
     42       
    3943        if (not gpr_ack)
    40           for (uint32_t j=0; j<_param->_nb_bank_by_pop; j++)
    41             {
    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);
    46              
    47               if (not _gpr_list[bank].empty())
    48                 {
    49                   // find
    50                   log_printf(TRACE,Free_List_unit,FUNCTION,"    * find    : %d",_gpr_list[bank].front());
    51 
    52                   gpr_ack = true;
    53                   internal_POP_GPR_BANK [i] = bank;
    54                   PORT_WRITE(out_POP_GPR_NUM_REG [i],
    55                              //(bank << _param->_shift) | // only in VHDL
    56                              _gpr_list[bank].front());
    57                  
    58                   break;
    59                 }
    60             }
     44          {
     45            // scan all bank
     46            for (;
     47                 it_gpr!=select_gpr->end();
     48                 ++it_gpr)
     49              {
     50                uint32_t num_bank = it_gpr->grp;
     51               
     52                log_printf(TRACE,Free_List_unit,FUNCTION,"    * num_bank: %d",num_bank);
     53               
     54                if (not _gpr_list[num_bank].empty())
     55                  {
     56                    // find
     57                    log_printf(TRACE,Free_List_unit,FUNCTION,"    * find    : %d",_gpr_list[num_bank].front());
     58                   
     59                    gpr_ack = true;
     60                    internal_POP_GPR_BANK [i] = num_bank;
     61                    PORT_WRITE(out_POP_GPR_NUM_REG [i],
     62                               //(num_bank << _param->_shift) | // only in VHDL
     63                               _gpr_list[num_bank].front());
     64                 
     65                    ++it_gpr;
     66                    break;
     67                  }
     68              }
     69          }
    6170
    6271        // SPR
    6372        bool spr_ack = not PORT_READ(in_POP_SPR_VAL[i]);
     73       
     74        log_printf(TRACE,Free_List_unit,FUNCTION,"    * SPR_VAL : %d",PORT_READ(in_POP_SPR_VAL[i]));
     75       
     76        if (not spr_ack)
     77          {
     78            // scan all bank
     79            for (;
     80                 it_spr!=select_spr->end();
     81                 ++it_spr)
     82              {
     83                uint32_t num_bank = it_spr->grp;
     84               
     85                log_printf(TRACE,Free_List_unit,FUNCTION,"    * num_bank: %d",num_bank);
     86               
     87                if (not _spr_list[num_bank].empty())
     88                  {
     89                    // find
     90                    log_printf(TRACE,Free_List_unit,FUNCTION,"    * find    : %d",_spr_list[num_bank].front());
     91                   
     92                    spr_ack = true;
     93                    internal_POP_SPR_BANK [i] = num_bank;
     94                    PORT_WRITE(out_POP_SPR_NUM_REG [i],
     95                               //(num_bank << _param->_shift) | // only in VHDL
     96                               _spr_list[num_bank].front());
     97                 
     98                    ++it_spr;
     99                    break;
     100                  }
     101              }
     102          }
    64103
    65         log_printf(TRACE,Free_List_unit,FUNCTION,"    * SPR_VAL : %d",PORT_READ(in_POP_SPR_VAL[i]));
    66 
    67         if (not spr_ack)
    68           for (uint32_t j=0; j<_param->_nb_bank_by_pop; j++)
    69             {
    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);
    74              
    75               if (not _spr_list[bank].empty())
    76                 {
    77                   // find
    78                   log_printf(TRACE,Free_List_unit,FUNCTION,"    * find    : %d",_spr_list[bank].front());
    79 
    80                   spr_ack = true;
    81                   internal_POP_SPR_BANK [i] = bank;
    82                   PORT_WRITE(out_POP_SPR_NUM_REG [i],
    83                              //(bank << _param->_shift) | // only in VHDL
    84                              _spr_list[bank].front());
    85                  
    86                   break;
    87                 }
    88             }
    89104
    90105        internal_POP_ACK [i] = gpr_ack and spr_ack;
    91        
    92106        PORT_WRITE(out_POP_ACK [i], internal_POP_ACK [i]);
    93107      }
     108
     109//     for (uint32_t i=0; i<_param->_nb_pop; i++)
     110//       {
     111//         log_printf(TRACE,Free_List_unit,FUNCTION,"  * POP [%d]",i);
     112       
     113//      uint32_t offset = (i*_param->_nb_bank_by_pop) + reg_BANK_PRIORITY;
     114
     115//      // GPR
     116//      bool gpr_ack = not PORT_READ(in_POP_GPR_VAL[i]);
     117
     118//         log_printf(TRACE,Free_List_unit,FUNCTION,"    * GPR_VAL : %d",PORT_READ(in_POP_GPR_VAL[i]));
     119
     120//      if (not gpr_ack)
     121//           {
     122//             for (uint32_t j=0; j<_param->_nb_bank_by_pop; j++)
     123//               {
     124//                 uint32_t bank = (offset+((j+reg_BANK_BY_POP_PRIORITY)%_param->_nb_bank_by_pop))%_param->_nb_bank;
     125               
     126//                 log_printf(TRACE,Free_List_unit,FUNCTION,"    * bank    : %d",bank);
     127               
     128//                 if (not _gpr_list[bank].empty())
     129//                   {
     130//                     // find
     131//                     log_printf(TRACE,Free_List_unit,FUNCTION,"    * find    : %d",_gpr_list[bank].front());
     132                   
     133//                     gpr_ack = true;
     134//                     internal_POP_GPR_BANK [i] = bank;
     135//                     PORT_WRITE(out_POP_GPR_NUM_REG [i],
     136//                                //(bank << _param->_shift) | // only in VHDL
     137//                                _gpr_list[bank].front());
     138                   
     139//                     break;
     140//                   }
     141//               }
     142//           }
     143
     144//      // SPR
     145//      bool spr_ack = not PORT_READ(in_POP_SPR_VAL[i]);
     146       
     147//         log_printf(TRACE,Free_List_unit,FUNCTION,"    * SPR_VAL : %d",PORT_READ(in_POP_SPR_VAL[i]));
     148       
     149//      if (not spr_ack)
     150//           {
     151//             uint32_t offset = (i*_param->_nb_bank_by_pop) + reg_BANK_PRIORITY;
     152
     153//             for (uint32_t j=0; j<_param->_nb_bank_by_pop; j++)
     154//               {
     155//                 uint32_t bank = (offset+((j+reg_BANK_BY_POP_PRIORITY)%_param->_nb_bank_by_pop))%_param->_nb_bank;
     156               
     157//                 log_printf(TRACE,Free_List_unit,FUNCTION,"    * bank    : %d",bank);
     158               
     159//                 if (not _spr_list[bank].empty())
     160//                   {
     161//                     // find
     162//                     log_printf(TRACE,Free_List_unit,FUNCTION,"    * find    : %d",_spr_list[bank].front());
     163                   
     164//                     spr_ack = true;
     165//                     internal_POP_SPR_BANK [i] = bank;
     166//                     PORT_WRITE(out_POP_SPR_NUM_REG [i],
     167//                                //(bank << _param->_shift) | // only in VHDL
     168//                                _spr_list[bank].front());
     169                   
     170//                     break;
     171//                   }
     172//               }
     173//           }
     174
     175//      internal_POP_ACK [i] = gpr_ack and spr_ack;
     176       
     177//      PORT_WRITE(out_POP_ACK [i], internal_POP_ACK [i]);
     178//       }
    94179   
    95180
  • 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

    r108 r109  
    2828    if (PORT_READ(in_NRESET) == 0)
    2929      {
    30         reg_BANK_PRIORITY = 0;
     30        _priority_gpr->reset();
     31        _priority_spr->reset();
     32
    3133        for (uint32_t i=0; i<_param->_nb_bank; i++)
    3234          {
     
    3739    else
    3840      {
     41        _priority_gpr->transition();
     42        _priority_spr->transition();
     43
    3944        // ==================================================
    4045        // =====[ POP ]======================================
     
    7681              _spr_list [internal_PUSH_SPR_BANK[i]].push_back(PORT_READ(in_PUSH_SPR_NUM_REG [i]));
    7782            }
    78 
    79         if (_param->_priority == PRIORITY_ROUND_ROBIN)
    80           reg_BANK_PRIORITY = (reg_BANK_PRIORITY+1)%_param->_nb_bank_by_pop;
    8183
    8284#if (DEBUG >= DEBUG_TRACE) and (DEBUG_Free_List_unit == true)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Parameters.cpp

    r108 r109  
    4545    uint32_t size_special_register = log2(nb_special_register);
    4646
    47     _nb_bank_by_pop        = _nb_bank / _nb_pop;
     47//     _nb_bank_by_pop        = _nb_bank / _nb_pop;
    4848
    4949    uint32_t gpr_nb_slot   = nb_general_register - nb_thread*_nb_general_register_logic;
Note: See TracChangeset for help on using the changeset viewer.