Ignore:
Timestamp:
Feb 27, 2009, 7:37:40 PM (15 years ago)
Author:
rosiere
Message:

1) Decod_queue : multi implementation (one_fifo, multi_fifo)
2) Issue_queue : multi implementation (in_order, out_of_order)
3) Direction : Add Meta predictor
4) Context_State : re add Branch_complete, More priority to Load miss (is not speculative)
5) Return_Address_Stack : update reg_PREDICT pointer on decod miss prediction
6) UPT : Fix bug in multi event
7) Prediction_glue : in read_stack case, insert in UPT pc_next
8) Rename select : when rob have an event (need flush), read_r{a,b,c} and write_r{d,e} is set at 0

File:
1 edited

Legend:

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

    r110 r111  
    2727      {
    2828        _priority_in ->reset();
    29         _priority_out->reset();
    30         _priority_reg->reset();
    31        
    32         for (uint32_t i=0; i<_param->_nb_bank; i++)
    33           _issue_queue [i].clear();
    3429        _reexecute_queue.clear();
    3530      }
     
    3732      {
    3833        _priority_in ->transition();
    39         _priority_out->transition();
    40         _priority_reg->transition();
    41 
    42         // ===================================================================
    43         // =====[ ISSUE_IN ]==================================================
    44         // ===================================================================
    45 
    46         for (uint32_t i=0; i<_param->_nb_bank; i++)
    47           if (internal_BANK_IN_ACK [i])
    48             {
    49               uint32_t x = internal_BANK_IN_NUM_RENAME_UNIT [i];
    50               uint32_t y = internal_BANK_IN_NUM_INST [i];
    51              
    52               if (PORT_READ(in_ISSUE_IN_VAL[x][y]))
    53                 {
    54                   log_printf(TRACE,Issue_queue,FUNCTION,"  * ISSUE_IN [%d] - Transaction with ISSUE_IN [%d][%d]",i,x,y);
    55 
    56 #ifdef STATISTICS
    57                   if (usage_is_set(_usage,USE_STATISTICS))
    58                     (*_stat_nb_inst_issue_in [x]) ++;
    59 #endif
    60                   entry_t * entry = new entry_t
    61                     (
    62                      (_param->_have_port_context_id    )?PORT_READ(in_ISSUE_IN_CONTEXT_ID            [x][y]):0,
    63                      (_param->_have_port_front_end_id  )?PORT_READ(in_ISSUE_IN_FRONT_END_ID          [x][y]):0,
    64                      (_param->_have_port_rob_ptr       )?PORT_READ(in_ISSUE_IN_PACKET_ID             [x][y]):0,
    65                                                          PORT_READ(in_ISSUE_IN_OPERATION             [x][y]),
    66                                                          PORT_READ(in_ISSUE_IN_TYPE                  [x][y]),
    67                                                          PORT_READ(in_ISSUE_IN_STORE_QUEUE_PTR_WRITE [x][y]),
    68                      (_param->_have_port_load_queue_ptr)?PORT_READ(in_ISSUE_IN_LOAD_QUEUE_PTR_WRITE  [x][y]):0,
    69                                                          PORT_READ(in_ISSUE_IN_HAS_IMMEDIAT          [x][y]),
    70                                                          PORT_READ(in_ISSUE_IN_IMMEDIAT              [x][y]),
    71                                                          PORT_READ(in_ISSUE_IN_READ_RA               [x][y]),
    72                                                          PORT_READ(in_ISSUE_IN_NUM_REG_RA            [x][y]),
    73                                                          PORT_READ(in_ISSUE_IN_READ_RB               [x][y]),
    74                                                          PORT_READ(in_ISSUE_IN_NUM_REG_RB            [x][y]),
    75                                                          PORT_READ(in_ISSUE_IN_READ_RC               [x][y]),
    76                                                          PORT_READ(in_ISSUE_IN_NUM_REG_RC            [x][y]),
    77                                                          PORT_READ(in_ISSUE_IN_WRITE_RD              [x][y]),
    78                                                          PORT_READ(in_ISSUE_IN_NUM_REG_RD            [x][y]),
    79                                                          PORT_READ(in_ISSUE_IN_WRITE_RE              [x][y]),
    80                                                          PORT_READ(in_ISSUE_IN_NUM_REG_RE            [x][y])
    81                      );
    82 
    83                   _issue_queue [i].push_back(entry);
    84                 }
    85             }
    8634
    8735        // ===================================================================
     
    13078          if (internal_ISSUE_OUT_VAL [i] and PORT_READ(in_ISSUE_OUT_ACK [i]))
    13179            {
    132               entry_t * entry    = internal_ISSUE_OUT_ENTRY    [i];
    133 
     80#ifdef STATISTICS
     81              if (usage_is_set(_usage,USE_STATISTICS))
     82                (*_stat_nb_inst_issue_out ) ++;
     83#endif
    13484              if (internal_ISSUE_OUT_FROM_REEXECUTE [i])
    13585                {
     86                  entry_t * entry = internal_ISSUE_OUT_ENTRY    [i];
     87                 
    13688                  log_printf(TRACE,Issue_queue,FUNCTION,"  * ISSUE_OUT [%d] - From Reexecute_queue",i);
    13789                 
    13890                  _reexecute_queue.remove(entry);
     91                 
     92                  delete entry;
    13993                }
    140               else
    141                 {
    142                   // front ...
    143                   uint32_t  num_bank = internal_ISSUE_OUT_NUM_BANK [i];
    144 
    145                   log_printf(TRACE,Issue_queue,FUNCTION,"  * ISSUE_OUT [%d] - From issue_queue [%d]",i,num_bank);
    146 
    147                   _issue_queue [num_bank].remove(entry);
    148                 }
    149 
    150               delete entry;
    151             }
     94                // else ... in function specific
     95            }
    15296      }
    15397
    154 #if defined(DEBUG) and defined(DEBUG_Issue_queue) and (DEBUG >= DEBUG_TRACE)
     98    // specific implementation
     99    (this->*function_transition) ();
     100
     101    // ===================================================================
     102    // =====[ PRINT ]====================================================
     103    // ===================================================================
     104
     105#if defined(DEBUG) and DEBUG_Issue_queue and (DEBUG >= DEBUG_TRACE)
    155106    log_printf(TRACE,Issue_queue,FUNCTION,"  * Dump Issue_queue");
    156107
     
    245196#endif
    246197
     198
     199
    247200#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
    248201    end_cycle ();
Note: See TracChangeset for help on using the changeset viewer.