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

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

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_allocation.cpp

    r117 r118  
    342342      if (_param->_have_thread [i])
    343343        {
    344           std::string filename = MORPHEO_LOG+"/"+toString(getpid())+"-Instruction_flow-thread_"+toString(i)+"-"+toString(getpid())+".log";
     344          std::string filename = MORPHEO_LOG+"/"+toString(getpid())+"-Instruction_flow-thread_"+toString(i)+".log";
    345345         
    346346          instruction_log_file [i] .open(filename.c_str() ,std::ios::out | std::ios::trunc);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Commit_unit/src/Commit_unit_genMoore.cpp

    r105 r118  
    2828    // ===================================================================
    2929    {
     30      log_printf(TRACE,Commit_unit,FUNCTION,"  * REEXECUTE [0]");
     31
    3032      // Store instruction comming Out Of Order in Load Store Unit.
    3133      // Must be executed in no speculative mode. Also, send a signal when an Store is in head of ROB
    3234
    33       Tcontrol_t val = false;
    34 
    35       if (not _rob[reg_NUM_BANK_HEAD].empty())
    36         {
    37           entry_t    * entry = _rob [reg_NUM_BANK_HEAD].front();
     35      Tcontrol_t val      = false;
     36      uint32_t   num_bank = reg_NUM_BANK_HEAD;
     37
     38      if (not _rob[num_bank].empty())
     39        {
     40          log_printf(TRACE,Commit_unit,FUNCTION,"    * ROB is not empty");
     41          log_printf(TRACE,Commit_unit,FUNCTION,"    * num_bank      : %d",num_bank);
     42
     43          entry_t    * entry = _rob [num_bank].front();
    3844          rob_state_t  state = entry->state;
    3945
     
    4147          val   = ((state == ROB_STORE_HEAD_OK) or
    4248                   (state == ROB_STORE_HEAD_KO));
    43          
     49
     50          log_printf(TRACE,Commit_unit,FUNCTION,"    * val           : %d",val);
    4451          if (val)
    4552            {
     53              Tpacket_t packet_id = ((entry->ptr << _param->_shift_num_slot) | num_bank);
     54
     55              log_printf(TRACE,Commit_unit,FUNCTION,"    * packet_id     : %d",packet_id);
     56         
    4657              // Reexecute store
    4758              if (_param->_have_port_context_id)
     
    5061              PORT_WRITE(out_REEXECUTE_FRONT_END_ID          [0], entry->front_end_id         );
    5162              if (_param->_have_port_rob_ptr  )
    52               PORT_WRITE(out_REEXECUTE_PACKET_ID             [0], entry->ptr                  );
     63              PORT_WRITE(out_REEXECUTE_PACKET_ID             [0], packet_id                   );
    5364              PORT_WRITE(out_REEXECUTE_TYPE                  [0], entry->type                 );
    5465              PORT_WRITE(out_REEXECUTE_STORE_QUEUE_PTR_WRITE [0], entry->store_queue_ptr_write);
     
    5869 
    5970      internal_REEXECUTE_VAL      [0] = val;
    60       internal_REEXECUTE_NUM_BANK [0] = reg_NUM_BANK_HEAD;
     71      internal_REEXECUTE_NUM_BANK [0] = num_bank;
    6172     
    6273      PORT_WRITE(out_REEXECUTE_VAL[0], internal_REEXECUTE_VAL [0]);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Reexecute_unit/src/Reexecute_unit_genMealy_reexecute.cpp

    r98 r118  
    3434        Tcontrol_t ack;
    3535
     36        log_printf(TRACE,Reexecute_unit,FUNCTION,"  * REEXECUTE[%d]",i);
     37
    3638        if (not _reexecute_queue [i].empty() and (_reexecute_queue [i].front()->state == STATE_REEXECUTE))
    3739          {
     
    4042
    4143            entry_t * entry = _reexecute_queue [i].front();
     44            Tpacket_t packet_id = (_param->_have_port_rob_ptr)?entry->packet_id:0;
     45
     46            log_printf(TRACE,Reexecute_unit,FUNCTION,"    * From Reexecute_queue");
     47            log_printf(TRACE,Reexecute_unit,FUNCTION,"    * packet_id : %d",packet_id);
    4248
    4349            if (_param->_have_port_context_id)
     
    4652            PORT_WRITE(out_REEXECUTE_FRONT_END_ID          [i],entry->front_end_id  );
    4753            if (_param->_have_port_rob_ptr  )
    48             PORT_WRITE(out_REEXECUTE_PACKET_ID             [i],entry->packet_id     );
     54            PORT_WRITE(out_REEXECUTE_PACKET_ID             [i],       packet_id     );
    4955            PORT_WRITE(out_REEXECUTE_OPERATION             [i],entry->operation     );
    5056            PORT_WRITE(out_REEXECUTE_TYPE                  [i],entry->type          );
     
    6066            ack = PORT_READ(in_REEXECUTE_ACK     [i]);
    6167
     68            Tpacket_t packet_id = (_param->_have_port_rob_ptr)?PORT_READ(in_REEXECUTE_ROB_PACKET_ID [i]):0;
     69
     70            log_printf(TRACE,Reexecute_unit,FUNCTION,"    * From ROB");
     71            log_printf(TRACE,Reexecute_unit,FUNCTION,"    * val & ack : %d",val and ack);
     72            log_printf(TRACE,Reexecute_unit,FUNCTION,"    * have ??   : %d",_param->_have_port_rob_ptr);
     73            log_printf(TRACE,Reexecute_unit,FUNCTION,"    * packet_id : %d",packet_id);
     74
    6275            if (_param->_have_port_context_id)
    6376            PORT_WRITE(out_REEXECUTE_CONTEXT_ID            [i], PORT_READ(in_REEXECUTE_ROB_CONTEXT_ID              [i]));
     
    6578            PORT_WRITE(out_REEXECUTE_FRONT_END_ID          [i], PORT_READ(in_REEXECUTE_ROB_FRONT_END_ID            [i]));
    6679            if (_param->_have_port_rob_ptr  )
    67             PORT_WRITE(out_REEXECUTE_PACKET_ID             [i], PORT_READ(in_REEXECUTE_ROB_PACKET_ID               [i]));
     80            PORT_WRITE(out_REEXECUTE_PACKET_ID             [i],                            packet_id                   );
    6881            PORT_WRITE(out_REEXECUTE_OPERATION             [i], PORT_READ(in_REEXECUTE_ROB_OPERATION               [i]));
    6982            PORT_WRITE(out_REEXECUTE_TYPE                  [i], PORT_READ(in_REEXECUTE_ROB_TYPE                    [i]));
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Stat_List_unit.h

    r117 r118  
    121121  private   : Tcontrol_t                    * internal_PUSH_GPR_VAL     ;//[nb_reg_free]
    122122  private   : uint32_t                      * internal_PUSH_GPR_NUM_BANK;//[nb_reg_free]
     123  private   : uint32_t                      * internal_PUSH_GPR_NUM_REG ;//[nb_reg_free]
    123124  private   : Tcontrol_t                    * internal_PUSH_SPR_VAL     ;//[nb_reg_free]
    124125  private   : uint32_t                      * internal_PUSH_SPR_NUM_BANK;//[nb_reg_free]
     126  private   : uint32_t                      * internal_PUSH_SPR_NUM_REG ;//[nb_reg_free]
    125127#endif
    126128
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_allocation.cpp

    r117 r118  
    134134     ALLOC1(internal_PUSH_GPR_VAL     ,Tcontrol_t,_param->_nb_reg_free);
    135135     ALLOC1(internal_PUSH_GPR_NUM_BANK,uint32_t  ,_param->_nb_reg_free);
     136     ALLOC1(internal_PUSH_GPR_NUM_REG ,uint32_t  ,_param->_nb_reg_free);
    136137     ALLOC1(internal_PUSH_SPR_VAL     ,Tcontrol_t,_param->_nb_reg_free);
    137138     ALLOC1(internal_PUSH_SPR_NUM_BANK,uint32_t  ,_param->_nb_reg_free);
     139     ALLOC1(internal_PUSH_SPR_NUM_REG ,uint32_t  ,_param->_nb_reg_free);
    138140      }
    139141
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_deallocation.cpp

    r117 r118  
    7777        DELETE1(internal_PUSH_GPR_VAL     ,_param->_nb_reg_free);
    7878        DELETE1(internal_PUSH_GPR_NUM_BANK,_param->_nb_reg_free);
     79        DELETE1(internal_PUSH_GPR_NUM_REG ,_param->_nb_reg_free);
    7980        DELETE1(internal_PUSH_SPR_VAL     ,_param->_nb_reg_free);
    8081        DELETE1(internal_PUSH_SPR_NUM_BANK,_param->_nb_reg_free);
     82        DELETE1(internal_PUSH_SPR_NUM_REG ,_param->_nb_reg_free);
    8183      }
    8284
  • 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   
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_transition.cpp

    r117 r118  
    233233            // =====================================================
    234234            if (internal_PUSH_GPR_VAL [i] and PORT_READ(in_PUSH_GPR_ACK [i]))
    235               gpr_stat_list[internal_PUSH_GPR_NUM_BANK [i]][reg_GPR_PTR_FREE].free();
     235              gpr_stat_list[internal_PUSH_GPR_NUM_BANK [i]][internal_PUSH_GPR_NUM_REG [i]].free();
    236236           
    237237            // =====================================================
     
    239239            // =====================================================
    240240            if (internal_PUSH_SPR_VAL [i] and PORT_READ(in_PUSH_SPR_ACK [i]))
    241               spr_stat_list[internal_PUSH_SPR_NUM_BANK [i]][reg_SPR_PTR_FREE].free();
     241              spr_stat_list[internal_PUSH_SPR_NUM_BANK [i]][internal_PUSH_SPR_NUM_REG [i]].free();
    242242          }
    243243
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Special_Register_unit/src/Special_Register_unit_transition.cpp

    r100 r118  
    133133                }
    134134            }
     135
     136#if (DEBUG >= DEBUG_TRACE) and (DEBUG_Special_Register_unit == true)
     137        {
     138          log_printf(TRACE,Special_Register_unit,FUNCTION,"  * Dump SPR");
     139
     140          for (uint32_t i=0; i<_param->_nb_front_end; i++)
     141            for (uint32_t j=0; j<_param->_nb_context[i]; j++)
     142              {
     143                log_printf(TRACE,Special_Register_unit,FUNCTION,"    * SR        [%d][%d] : %.8x",i,j,_spr [i][j][GROUP_SYSTEM_AND_CONTROL][SPR_SR          ]->read());
     144                log_printf(TRACE,Special_Register_unit,FUNCTION,"    * CID       [%d][%d] : %.8x",i,j,_spr [i][j][GROUP_SYSTEM_AND_CONTROL][SPR_CID         ]->read());
     145                log_printf(TRACE,Special_Register_unit,FUNCTION,"    * TID       [%d][%d] : %.8x",i,j,_spr [i][j][GROUP_SYSTEM_AND_CONTROL][SPR_TID         ]->read());
     146                log_printf(TRACE,Special_Register_unit,FUNCTION,"    * TSR       [%d][%d] : %.8x",i,j,_spr [i][j][GROUP_SYSTEM_AND_CONTROL][SPR_TSR         ]->read());
     147//                 log_printf(TRACE,Special_Register_unit,FUNCTION,"    * MACLO     [%d][%d] : %.8x",i,j,_spr [i][j][GROUP_MAC               ][SPR_MACLO      ]->read());
     148//                 log_printf(TRACE,Special_Register_unit,FUNCTION,"    * MACHI     [%d][%d] : %.8x",i,j,_spr [i][j][GROUP_MAC               ][SPR_MACHI      ]->read());
     149              }
     150        }
     151#endif
    135152      }
    136153
Note: See TracChangeset for help on using the changeset viewer.