Ignore:
Timestamp:
Dec 15, 2008, 12:04:03 PM (15 years ago)
Author:
rosiere
Message:

Update document on Vhdl generation.

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_genMoore.cpp

    r88 r94  
    2424    log_begin(Update_Prediction_Table,FUNCTION);
    2525    log_function(Update_Prediction_Table,FUNCTION,_name.c_str());
    26     log_printf(NONE,Update_Prediction_Table,FUNCTION,FUNCTION);
    2726
    2827    if (PORT_READ(in_NRESET) == 1)
     
    8786        Thistory_t          dir_history          ;
    8887        Tcontrol_t          ras_val              ;
     88        Tcontrol_t          ras_flush            ;
    8989        Tcontrol_t          ras_push             ;
    9090        Taddress_t          ras_address          ;
     
    110110               
    111111                val                   = (state == UPDATE_FETCH_PREDICTION_STATE_EVENT);
     112//              val_without_ack       = not update_ras(condition);
     113
    112114                miss_prediction       = 1;
    113115//              direction_good        = ;
     
    119121//              dir_history           = ;
    120122                ras_val               = update_ras(condition); // repop/ repush data -> don't corrupt ras
     123                ras_flush             = 0;
    121124                ras_push              = push_ras(condition);
    122125                ras_address           = reg_UPDATE_FETCH_PREDICTION_TABLE [context][depth]._address_ras;
     
    132135                  ufpt_update [context] = false;
    133136               
    134                 tab_ufpt_depth[context] = (depth==0)?(_param->_size_ufpt_queue[context]-1):(depth-1);
     137                tab_ufpt_depth[context] = ((depth==0)?_param->_size_ufpt_queue[context]:depth)-1;
    135138              }
    136139          }
     
    177180                dir_history           = reg_UPDATE_PREDICTION_TABLE [context][depth]._history     ;
    178181                ras_val               = update_ras(condition); // repop/ repush data -> don't corrupt ras
     182                ras_flush             = (state == UPDATE_PREDICTION_STATE_KO); // miss prediction, RAS is corrupted
    179183                ras_push              = push_ras(condition);
    180184                ras_address           = reg_UPDATE_PREDICTION_TABLE [context][depth]._address_ras;
     
    224228        PORT_WRITE(out_UPDATE_BTB_VAL               [i],btb_val              );
    225229        PORT_WRITE(out_UPDATE_BTB_ADDRESS_SRC       [i],btb_address_src      );
    226 
    227         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * address_src     : %.8x",btb_address_src);
    228 
    229230        PORT_WRITE(out_UPDATE_BTB_ADDRESS_DEST      [i],btb_address_dest     );
    230231        PORT_WRITE(out_UPDATE_BTB_CONDITION         [i],btb_condition        );
     
    233234        PORT_WRITE(out_UPDATE_DIR_HISTORY           [i],dir_history          );
    234235        PORT_WRITE(out_UPDATE_RAS_VAL               [i],ras_val              );
     236        PORT_WRITE(out_UPDATE_RAS_FLUSH             [i],ras_flush            );
    235237        PORT_WRITE(out_UPDATE_RAS_PUSH              [i],ras_push             );
    236238        PORT_WRITE(out_UPDATE_RAS_ADDRESS           [i],ras_address          );
     
    239241          }
    240242      }
    241 
    242 //     // ===================================================================
    243 //     // =====[ BRANCH_EVENT ]==============================================
    244 //     // ===================================================================
    245 //     for (uint32_t i=0; i<_param->_nb_context; i++)
    246 //       {
    247 //      Tdepth_t   depth   = (reg_BOTTOM [i] + reg_NB_ELT_UPDATE [i])%_param->_size_queue [i];
    248 //      state_t    state   = reg_UPDATE_PREDICTION_TABLE [i][depth]._state;
    249        
    250 //      Tcontrol_t val     = ((state == UPDATE_PREDICTION_STATE_EVENT) or
    251 //                               (state == UPDATE_PREDICTION_STATE_WAITEND_AND_EVENT));
    252 
    253 //      if (val)
    254 //        {
    255 // //          breakpoint ("UPT : have an branch_event (depth %d)",depth);
    256 //          PORT_WRITE(out_BRANCH_EVENT_ADDRESS_SRC  [i], reg_UPDATE_PREDICTION_TABLE [i][depth]._address_src );
    257 //          PORT_WRITE(out_BRANCH_EVENT_ADDRESS_DEST [i], reg_UPDATE_PREDICTION_TABLE [i][depth]._address_dest);
    258 //          internal_BRANCH_EVENT_DEPTH [i] = depth;
    259 //        }
    260 
    261 //      internal_BRANCH_EVENT_VAL   [i] = val;
    262 //      PORT_WRITE(out_BRANCH_EVENT_VAL [i], internal_BRANCH_EVENT_VAL [i]);
    263 //       }
    264 
    265       }
     243   
     244    // ===================================================================
     245    // =====[ BRANCH_EVENT ]==============================================
     246    // ===================================================================
     247    for (uint32_t i=0; i<_param->_nb_context; i++)
     248      {
     249        Tcontrol_t val = (reg_EVENT_STATE [i] == EVENT_STATE_UPDATE_CONTEXT);
     250
     251        PORT_WRITE(out_BRANCH_EVENT_VAL              [i],val);
     252        PORT_WRITE(out_BRANCH_EVENT_ADDRESS_SRC      [i],reg_EVENT_ADDRESS_SRC      [i]);
     253        PORT_WRITE(out_BRANCH_EVENT_ADDRESS_DEST_VAL [i],reg_EVENT_ADDRESS_DEST_VAL [i]);
     254        PORT_WRITE(out_BRANCH_EVENT_ADDRESS_DEST     [i],reg_EVENT_ADDRESS_DEST     [i]);
     255
     256        internal_BRANCH_EVENT_VAL [i] = val;
     257      }
     258      }
     259
    266260    log_end(Update_Prediction_Table,FUNCTION);
    267261  };
Note: See TracChangeset for help on using the changeset viewer.