Ignore:
Timestamp:
May 21, 2009, 12:01:32 AM (15 years ago)
Author:
rosiere
Message:

1) Stat List : scan all queue to find free register
2) Write_queue : test "genMealy" add bypass [0]
3) Functionnal_unit : add const parameters to add or not the pipeline_in
4) Load Store Unit : if load make an exception, free nb_check
5) Debug, change test to add model

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_genMoore.cpp

    r112 r118  
    88
    99#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Stat_List_unit.h"
     10#include <set>
    1011
    1112namespace morpheo                    {
     
    1819namespace stat_list_unit {
    1920
     21#define STAT_LIST_SCAN_ALL
    2022
    2123#undef  FUNCTION
     
    2628    log_function(Stat_List_unit,FUNCTION,_name.c_str());
    2729
    28     uint32_t gpr_ptr = reg_GPR_PTR_FREE;
    29     uint32_t spr_ptr = reg_SPR_PTR_FREE;
     30    uint32_t  gpr_ptr = reg_GPR_PTR_FREE;
     31    uint32_t  spr_ptr = reg_SPR_PTR_FREE;
     32#ifdef STAT_LIST_SCAN_ALL
     33    std::set<Tgeneral_address_t> list_gpr_free;
     34    std::set<Tspecial_address_t> list_spr_free;
     35#endif
    3036
    3137    for (uint32_t i=0; i<_param->_nb_reg_free; i++)
    3238      {
     39        log_printf(TRACE,Stat_List_unit,FUNCTION,"  * PUSH [%d]",i);
     40         
    3341        uint32_t offset  = i*_param->_nb_bank_by_port_free;
    3442
    3543        // PUSH_GPR
    3644        {
    37           uint32_t bank_gpr;
    38          
    39           for (bank_gpr=offset; bank_gpr<offset+_param->_nb_bank_by_port_free; bank_gpr++)
    40             if (gpr_stat_list[bank_gpr][gpr_ptr].can_free())
    41               break;
    42          
    43           bool val = (bank_gpr != offset+_param->_nb_bank_by_port_free);
    44          
     45          bool     val      = false;
     46          uint32_t bank_gpr = offset;
     47
     48#ifdef STAT_LIST_SCAN_ALL
     49          for (uint32_t _gpr_ptr=0;  _gpr_ptr<_param->_nb_general_register_by_bank; ++_gpr_ptr)
     50            {
     51              gpr_ptr = (gpr_ptr+1)%_param->_nb_general_register_by_bank;
     52#endif   
     53              for (bank_gpr = offset; bank_gpr<offset+_param->_nb_bank_by_port_free; bank_gpr++)
     54                if (gpr_stat_list[bank_gpr][gpr_ptr].can_free())
     55                  {
     56#ifdef STAT_LIST_SCAN_ALL
     57                    Tgeneral_address_t num_reg = ((bank_gpr<<_param->_shift_gpr) | gpr_ptr);
     58                    if (list_gpr_free.find(num_reg) == list_gpr_free.end())
     59                      {
     60                        list_gpr_free.insert(num_reg);
     61#endif
     62                        val = true;
     63                        break;
     64#ifdef STAT_LIST_SCAN_ALL
     65                      }
     66#endif
     67                  }
     68#ifdef STAT_LIST_SCAN_ALL
     69              if (val)
     70                break;
     71            }
     72#endif   
     73
     74          log_printf(TRACE,Stat_List_unit,FUNCTION,"    * val      : %d",val);
     75          log_printf(TRACE,Stat_List_unit,FUNCTION,"    * bank_gpr : %d",bank_gpr);
     76          log_printf(TRACE,Stat_List_unit,FUNCTION,"    * gpr_ptr  : %d",gpr_ptr);
     77          log_printf(TRACE,Stat_List_unit,FUNCTION,"    * num_reg  : %d",((bank_gpr<<_param->_shift_gpr) | gpr_ptr));
     78
    4579          internal_PUSH_GPR_VAL      [i] = val;
    4680          internal_PUSH_GPR_NUM_BANK [i] = bank_gpr;
     81          internal_PUSH_GPR_NUM_REG  [i] = gpr_ptr ;
    4782
    4883          PORT_WRITE(out_PUSH_GPR_VAL [i], val);
     
    5388        // PUSH_SPR
    5489        {
    55           uint32_t bank_spr;
    56          
    57           for (bank_spr=offset; bank_spr<offset+_param->_nb_bank_by_port_free; bank_spr++)
    58             if (spr_stat_list[bank_spr][spr_ptr].can_free())
    59               break;
     90          bool     val      = false;
     91          uint32_t bank_spr = offset;
    6092
    61           bool val = (bank_spr != (offset+_param->_nb_bank_by_port_free));
    62          
     93#ifdef STAT_LIST_SCAN_ALL
     94          for (uint32_t _spr_ptr=0;  _spr_ptr<_param->_nb_special_register_by_bank; ++_spr_ptr)
     95            {
     96              spr_ptr = (spr_ptr+1)%_param->_nb_special_register_by_bank;
     97#endif   
     98              for (bank_spr = offset; bank_spr<offset+_param->_nb_bank_by_port_free; bank_spr++)
     99                if (spr_stat_list[bank_spr][spr_ptr].can_free())
     100                  {
     101#ifdef STAT_LIST_SCAN_ALL
     102                    Tspecial_address_t num_reg = ((bank_spr<<_param->_shift_spr) | spr_ptr);
     103                    if (list_spr_free.find(num_reg) == list_spr_free.end())
     104                      {
     105                        list_spr_free.insert(num_reg);
     106#endif
     107                        val = true;
     108                        break;
     109#ifdef STAT_LIST_SCAN_ALL
     110                      }
     111#endif
     112                  }
     113#ifdef STAT_LIST_SCAN_ALL
     114              if (val)
     115                break;
     116            }
     117#endif   
     118
     119          log_printf(TRACE,Stat_List_unit,FUNCTION,"    * val      : %d",val);
     120          log_printf(TRACE,Stat_List_unit,FUNCTION,"    * bank_spr : %d",bank_spr);
     121          log_printf(TRACE,Stat_List_unit,FUNCTION,"    * spr_ptr  : %d",spr_ptr);
     122          log_printf(TRACE,Stat_List_unit,FUNCTION,"    * num_reg  : %d",((bank_spr<<_param->_shift_spr) | spr_ptr));
     123
    63124          internal_PUSH_SPR_VAL      [i] = val;
    64125          internal_PUSH_SPR_NUM_BANK [i] = bank_spr;
     126          internal_PUSH_SPR_NUM_REG  [i] = spr_ptr ;
    65127
    66128          PORT_WRITE(out_PUSH_SPR_VAL [i], val);
     
    68130            PORT_WRITE(out_PUSH_SPR_NUM_REG[i], ((bank_spr<<_param->_shift_spr) | spr_ptr));
    69131        }
     132
     133
    70134      }
    71135   
Note: See TracChangeset for help on using the changeset viewer.