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/Rename_unit/Register_translation_unit/Free_List_unit
Files:
6 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/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)
Note: See TracChangeset for help on using the changeset viewer.