Ignore:
Timestamp:
Jun 3, 2009, 10:15:51 AM (15 years ago)
Author:
rosiere
Message:

Modif for performance :
1) Load Store Unit : store send request to valid exeception
2) Commit_unit : retire can bypass store
3) Commit_unit : add stat to manage store instruction
4) Load Store Unit and Load Store Pointer Manager : add store_queue_ptr_read
5) Fix lot of bug

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_decod.cpp

    r120 r122  
    2828    if (PORT_READ(in_NRESET) != 0)
    2929      {
     30    // for each decod instruction
    3031    for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
    3132      {
    3233        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * DECOD [%d]",i);
    3334
    34         Tcontext_t    context     = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0;
    35         bool          is_accurate = _param->_accurate_block_decod or reg_IS_ACCURATE [context];
    36         event_state_t event_state = reg_EVENT_STATE [context];
    37         uint32_t      ptr_write   = reg_UPT_TOP     [context];
    38         // can continue if next slot is empty
    39         Tcontrol_t    can_continue= ((reg_UPDATE_PREDICTION_TABLE [context][(reg_UPT_TOP [context]+1)%_param->_size_upt_queue[context]]._state == UPDATE_PREDICTION_STATE_EMPTY) and
    40                                      (reg_EVENT_STATE [context] == EVENT_STATE_OK));
     35        // Read information
     36        Tcontext_t         context          = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0;
     37        bool               is_accurate      = (_param->_always_accurate_decod or
     38                                              (_param->_can_accurate_decod and reg_IS_ACCURATE [context]));
     39        upt_event_state_t  upt_event_state  = reg_UPT_EVENT_STATE  [context];
     40        ufpt_event_state_t ufpt_event_state = reg_UFPT_EVENT_STATE [context];
     41        uint32_t           ptr_write        = reg_UPT_TOP     [context]; // One branch per context per cycle
     42        uint32_t           ptr_write_next   = (ptr_write+1)%_param->_size_upt_queue[context];
     43        // Decod can continue until the next branch if next slot is empty, and no event
     44        Tcontrol_t         can_continue     = (reg_UPDATE_PREDICTION_TABLE [context][ptr_write_next]._state == UPDATE_PREDICTION_STATE_EMPTY);
    4145
    42         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * context     : %d",context    );
    43         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * is_accurate : %d",is_accurate);
    44         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * event_state : %s",toString(event_state).c_str());
    45         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * ptr_write   : %d",ptr_write  );
    46         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * upt_state   : %s",toString(reg_UPDATE_PREDICTION_TABLE [context][ptr_write]._state).c_str());
    47         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * can_continue: %d",can_continue);
     46        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * context          : %d",context);
     47        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * is_accurate      : %d",is_accurate);
     48        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * ufpt_event_state : %s",toString(ufpt_event_state).c_str());
     49        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * upt_event_state  : %s",toString(upt_event_state).c_str());
     50        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * ptr_write        : %d - %d",ptr_write,ptr_write_next);
     51        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * upt_state        : %s",toString(reg_UPDATE_PREDICTION_TABLE [context][ptr_write]._state).c_str());
     52        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * can_continue     : %d",can_continue);
    4853
    49         // ack :
     54        // can decod (ack) if :
    5055        //   * in all case (miss or hit), need empty slot
     56        //   * not previous event (state = ok)
    5157        //   * is_accurate
    52         //   * event_state : don't update upt
    5358        internal_DECOD_ACK           [i] = ((reg_UPDATE_PREDICTION_TABLE [context][ptr_write]._state == UPDATE_PREDICTION_STATE_EMPTY) and
    54                                             is_accurate and
    55 //                                             (
    56                                              (event_state == EVENT_STATE_OK)//  or
    57 //                                              (event_state == EVENT_STATE_MISS_FLUSH_UFPT    ) or
    58 //                                              (event_state == EVENT_STATE_UPDATE_CONTEXT))
    59                                             );
     59                                            (ufpt_event_state == UFPT_EVENT_STATE_OK) and
     60                                            (upt_event_state  == UPT_EVENT_STATE_OK ) and
     61                                            is_accurate);
    6062        internal_DECOD_UPT_PTR_WRITE [i] = ptr_write;
    6163
    62         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * ack         : %d",internal_DECOD_ACK [i]);
     64        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * ack              : %d",internal_DECOD_ACK [i]);
    6365
    6466        PORT_WRITE(out_DECOD_ACK          [i], internal_DECOD_ACK [i]);
Note: See TracChangeset for help on using the changeset viewer.