Ignore:
Timestamp:
Dec 31, 2008, 11:18:08 AM (16 years ago)
Author:
rosiere
Message:

1) Fix bug (read unit, RAT -> write in R0, SPR desallocation ...)
2) Change VHDL Execute_queue -> use Generic/Queue?
3) Complete document on VHDL generation
4) Add soc test

Location:
trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table
Files:
8 edited

Legend:

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

    r97 r98  
    2727  Tcontrol_t          take_good   ;
    2828  Tcontrol_t          flag        ;
     29  Tcontrol_t          no_sequence ;
    2930  Tcontrol_t          is_accurate ;
    3031  Thistory_t          history     ;
     
    104105  ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_DEPTH          ," in_BRANCH_COMPLETE_DEPTH          ",Tdepth_t           ,_param->_nb_inst_branch_complete);
    105106  ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_ADDRESS        ," in_BRANCH_COMPLETE_ADDRESS        ",Taddress_t         ,_param->_nb_inst_branch_complete);
    106   ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_FLAG           ," in_BRANCH_COMPLETE_FLAG           ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
     107  ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_NO_SEQUENCE    ," in_BRANCH_COMPLETE_NO_SEQUENCE    ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
    107108  ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_MISS_PREDICTION,"out_BRANCH_COMPLETE_MISS_PREDICTION",Tcontrol_t         ,_param->_nb_inst_branch_complete);
    108109  ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_TAKE           ,"out_BRANCH_COMPLETE_TAKE           ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
     
    112113  ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_VAL            ,"out_BRANCH_EVENT_VAL            ",Tcontrol_t         ,_param->_nb_context);
    113114  ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_ACK            ," in_BRANCH_EVENT_ACK            ",Tcontrol_t         ,_param->_nb_context);
    114 //   ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_CONTEXT_ID     ," in_BRANCH_EVENT_CONTEXT_ID     ",Tcontext_t         ,_param->_nb_context);
    115 //   ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_DEPTH          ," in_BRANCH_EVENT_DEPTH          ",Tdepth_t           ,_param->_nb_context);
     115//   ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_CONTEXT_ID     ,"out_BRANCH_EVENT_CONTEXT_ID     ",Tcontext_t         ,_param->_nb_context);
     116  ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_DEPTH          ,"out_BRANCH_EVENT_DEPTH          ",Tdepth_t           ,_param->_nb_context);
    116117//   ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_MISS_PREDICTION,"out_BRANCH_EVENT_MISS_PREDICTION",Tcontrol_t         ,_param->_nb_context);
    117118  ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_SRC    ,"out_BRANCH_EVENT_ADDRESS_SRC    ",Taddress_t         ,_param->_nb_context);
     
    194195  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_DEPTH          ,_param->_nb_inst_branch_complete);
    195196  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_ADDRESS        ,_param->_nb_inst_branch_complete);
    196   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_FLAG           ,_param->_nb_inst_branch_complete);
     197  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_NO_SEQUENCE    ,_param->_nb_inst_branch_complete);
    197198  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_COMPLETE_MISS_PREDICTION,_param->_nb_inst_branch_complete);
    198199  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_COMPLETE_TAKE           ,_param->_nb_inst_branch_complete);
     
    202203  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_VAL            ,_param->_nb_context);
    203204  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_ACK            ,_param->_nb_context);
    204 //   if (_param->_have_port_context_id)
    205 //   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_CONTEXT_ID     ,_param->_nb_context);
    206 //   if (_param->_have_port_depth)
    207 //   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_DEPTH          ,_param->_nb_context);
    208 //   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_ADDRESS        ,_param->_nb_context);
    209 //   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_MISS_PREDICTION,_param->_nb_context);
     205//if (_param->_have_port_context_id)
     206//INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_CONTEXT_ID     ,_param->_nb_context);
     207  if (_param->_have_port_depth)
     208  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_DEPTH          ,_param->_nb_context);
     209//INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_MISS_PREDICTION,_param->_nb_context);
    210210  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_ADDRESS_SRC    ,_param->_nb_context);
    211211  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_ADDRESS_DEST_VAL,_param->_nb_context);
     
    347347              request.take_good        = 1;                                             
    348348              request.flag             = (request.condition == BRANCH_CONDITION_FLAG_SET)?request.take_good:(not request.take_good);
     349              request.no_sequence      = (request.condition == BRANCH_CONDITION_FLAG_SET)?request.flag:not request.flag;
    349350              request.is_accurate      = true;
    350351              request.miss_ifetch      = false;
     
    486487                  in_BRANCH_COMPLETE_DEPTH      [port]->write(it_upt->upt_ptr     );
    487488                  in_BRANCH_COMPLETE_ADDRESS    [port]->write(it_upt->address_good);
    488                   in_BRANCH_COMPLETE_FLAG       [port]->write(it_upt->flag        );
     489                  in_BRANCH_COMPLETE_NO_SEQUENCE[port]->write(it_upt->no_sequence );
    489490
    490491                  if (_param->_have_port_depth)
     
    627628              request.take_good        = 1;                                             
    628629              request.flag             = (request.condition == BRANCH_CONDITION_FLAG_SET)?request.take_good:(not request.take_good);
     630              request.no_sequence      = (request.condition == BRANCH_CONDITION_FLAG_SET)?request.flag:not request.flag;
    629631              request.is_accurate      = true;
    630632              request.miss_ifetch      = false;
     
    704706          request.take_good        = 0;                                             
    705707          request.flag             = (request.condition == BRANCH_CONDITION_FLAG_SET)?request.take_good:(not request.take_good);
     708          request.no_sequence      = (request.condition == BRANCH_CONDITION_FLAG_SET)?request.flag:not request.flag;
    706709          request.is_accurate      = true;
    707710          request.miss_ifetch      = false;
     
    712715          request.ras_index        = (0x87654321)%_param->_size_ras_index[context];
    713716          request.ufpt_ptr         = ufpt_top [context];
     717          request.upt_ptr          = upt_top  [context];
    714718       
    715719          event = request;
     
    786790                  in_BRANCH_COMPLETE_DEPTH      [port]->write(it_upt->upt_ptr     );
    787791                  in_BRANCH_COMPLETE_ADDRESS    [port]->write(it_upt->address_good);
    788                   in_BRANCH_COMPLETE_FLAG       [port]->write(it_upt->flag        );
     792                  in_BRANCH_COMPLETE_NO_SEQUENCE[port]->write(it_upt->no_sequence );
    789793
    790794                  if (_param->_have_port_depth)
     
    910914                    LABEL("BRANCH_EVENT [%d] - Transaction accepted",port);
    911915                    have_transaction = true;
    912              
     916
     917                    TEST(Tdepth_t  ,out_BRANCH_EVENT_DEPTH            [port]->read(),event.upt_ptr);
    913918                    TEST(Taddress_t,out_BRANCH_EVENT_ADDRESS_SRC      [port]->read(),event.address_src);
    914919                    TEST(Tcontrol_t,out_BRANCH_EVENT_ADDRESS_DEST_VAL [port]->read(),event.take);
     
    982987              request.take_good        = 1;                                             
    983988              request.flag             = (request.condition == BRANCH_CONDITION_FLAG_SET)?request.take_good:(not request.take_good);
     989              request.no_sequence      = (request.condition == BRANCH_CONDITION_FLAG_SET)?request.flag:not request.flag;
    984990              request.is_accurate      = true;
    985991              request.miss_ifetch      = false;
     
    10591065          request.take_good        = 0;                                             
    10601066          request.flag             = (request.condition == BRANCH_CONDITION_FLAG_SET)?request.take_good:(not request.take_good);
     1067          request.no_sequence      = (request.condition == BRANCH_CONDITION_FLAG_SET)?request.flag:not request.flag;
    10611068          request.is_accurate      = true;
    10621069          request.miss_ifetch      = false;
     
    10671074          request.ras_index        = (0x87654321)%_param->_size_ras_index[context];
    10681075          request.ufpt_ptr         = ufpt_top [context];
     1076          request.upt_ptr          = upt_top  [context];
    10691077
    10701078          event = request;
     
    11411149                  in_BRANCH_COMPLETE_DEPTH      [port]->write(it_upt->upt_ptr     );
    11421150                  in_BRANCH_COMPLETE_ADDRESS    [port]->write(it_upt->address_good);
    1143                   in_BRANCH_COMPLETE_FLAG       [port]->write(it_upt->flag        );
     1151                  in_BRANCH_COMPLETE_NO_SEQUENCE[port]->write(it_upt->no_sequence );
    11441152
    11451153                  if (_param->_have_port_depth)
     
    13451353                    have_transaction = true;
    13461354             
     1355                    TEST(Tdepth_t  ,out_BRANCH_EVENT_DEPTH            [port]->read(),event.upt_ptr);
    13471356                    TEST(Taddress_t,out_BRANCH_EVENT_ADDRESS_SRC      [port]->read(),event.address_src);
    13481357                    TEST(Tcontrol_t,out_BRANCH_EVENT_ADDRESS_DEST_VAL [port]->read(),event.take);
     
    14151424                request.take_good        = 1;                                             
    14161425                request.flag             = (request.condition == BRANCH_CONDITION_FLAG_SET)?request.take_good:(not request.take_good);
     1426                request.no_sequence      = (request.condition == BRANCH_CONDITION_FLAG_SET)?request.flag:not request.flag;
    14171427                request.is_accurate      = true ;
    14181428                request.miss_ifetch      = false;
     
    15571567                request.take_good        = 1;                                             
    15581568                request.flag             = (request.condition == BRANCH_CONDITION_FLAG_SET)?request.take_good:(not request.take_good);
     1569                request.no_sequence      = (request.condition == BRANCH_CONDITION_FLAG_SET)?request.flag:not request.flag;
    15591570                request.is_accurate      = true ;
    15601571                request.miss_ifetch      = false;
     
    16441655                it_event->address_good = it_event->address_dest;
    16451656                it_event->flag         = not it_event->flag;
     1657                it_event->no_sequence  = not it_event->no_sequence;
    16461658                it_event->take_good    = not it_event->take_good;
    16471659              }
     
    16621674                  in_BRANCH_COMPLETE_DEPTH      [port]->write(it_event->upt_ptr     );
    16631675                  in_BRANCH_COMPLETE_ADDRESS    [port]->write(it_event->address_good);
    1664                   in_BRANCH_COMPLETE_FLAG       [port]->write(it_event->flag        );
     1676                  in_BRANCH_COMPLETE_NO_SEQUENCE[port]->write(it_event->no_sequence );
    16651677
    16661678                  if (_param->_have_port_depth)
     
    16751687                    {
    16761688                      LABEL("BRANCH_COMPLETE [%d] - Transaction accepted",port);
    1677                       LABEL("  * CONTEXT_ID %d"  ,it_event->context     );
    1678                       LABEL("  * DEPTH      %d"  ,it_event->upt_ptr     );
    1679                       LABEL("  * CONDITION  %d"  ,it_event->condition   );
    1680                       LABEL("  * ADDRESS    %.8x",it_event->address_good);
    1681                       LABEL("  * FLAG       %d"  ,it_event->flag        );
     1689                      LABEL("  * CONTEXT_ID  : %d"  ,it_event->context     );
     1690                      LABEL("  * DEPTH       : %d"  ,it_event->upt_ptr     );
     1691                      LABEL("  * CONDITION   : %d"  ,it_event->condition   );
     1692                      LABEL("  * ADDRESS     : %.8x",it_event->address_good);
     1693                      LABEL("  * FLAG        : %d"  ,it_event->flag        );
     1694                      LABEL("  * NO_SEQUENCE : %d"  ,it_event->no_sequence );
    16821695
    16831696                      have_transaction = true;
     
    17221735                  in_BRANCH_COMPLETE_DEPTH      [port]->write(it_upt->upt_ptr     );
    17231736                  in_BRANCH_COMPLETE_ADDRESS    [port]->write(it_upt->address_dest);
    1724                   in_BRANCH_COMPLETE_FLAG       [port]->write(it_upt->flag        );
     1737                  in_BRANCH_COMPLETE_NO_SEQUENCE[port]->write(it_upt->no_sequence );
    17251738
    17261739                  if (_param->_have_port_depth)
     
    17351748                    {
    17361749                      LABEL("BRANCH_COMPLETE [%d] - Transaction accepted",port);
    1737                       LABEL("  * CONTEXT_ID %d"  ,it_upt->context     );
    1738                       LABEL("  * DEPTH      %d"  ,it_upt->upt_ptr     );
    1739                       LABEL("  * CONDITION  %d"  ,it_upt->condition   );
    1740                       LABEL("  * ADDRESS    %.8x",it_upt->address_dest);
    1741                       LABEL("  * FLAG       %d"  ,it_upt->flag        );
     1750                      LABEL("  * CONTEXT_ID  : %d"  ,it_upt->context     );
     1751                      LABEL("  * DEPTH       : %d"  ,it_upt->upt_ptr     );
     1752                      LABEL("  * CONDITION   : %d"  ,it_upt->condition   );
     1753                      LABEL("  * ADDRESS     : %.8x",it_upt->address_dest);
     1754                      LABEL("  * FLAG        : %d"  ,it_upt->flag        );
     1755                      LABEL("  * NO_SEQUENCE : %d"  ,it_event->no_sequence );
    17421756
    17431757                      have_transaction = true;
     
    19531967                      LABEL("  * event.take         : %.8x,",event.take        );
    19541968                     
     1969                      TEST(Tdepth_t  ,out_BRANCH_EVENT_DEPTH            [port]->read(),event.upt_ptr);
    19551970                      TEST(Taddress_t,out_BRANCH_EVENT_ADDRESS_SRC      [port]->read(),event.address_src);
    19561971                      TEST(Tcontrol_t,out_BRANCH_EVENT_ADDRESS_DEST_VAL [port]->read(),event.take_good);
     
    21202135  delete []  in_BRANCH_COMPLETE_DEPTH          ;
    21212136  delete []  in_BRANCH_COMPLETE_ADDRESS        ;
    2122   delete []  in_BRANCH_COMPLETE_FLAG           ;
     2137  delete []  in_BRANCH_COMPLETE_NO_SEQUENCE    ;
    21232138  delete [] out_BRANCH_COMPLETE_MISS_PREDICTION;
    21242139  delete [] out_BRANCH_COMPLETE_TAKE           ;
     
    21292144  delete [] out_BRANCH_EVENT_VAL            ;
    21302145  delete []  in_BRANCH_EVENT_ACK            ;
    2131 //delete []  in_BRANCH_EVENT_CONTEXT_ID     ;
    2132 //delete []  in_BRANCH_EVENT_DEPTH          ;
     2146//delete [] out_BRANCH_EVENT_CONTEXT_ID     ;
     2147  delete [] out_BRANCH_EVENT_DEPTH          ;
    21332148//delete [] out_BRANCH_EVENT_MISS_PREDICTION;
    21342149  delete [] out_BRANCH_EVENT_ADDRESS_SRC    ;
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h

    r97 r98  
    106106  public    : SC_IN (Tdepth_t           )  **  in_BRANCH_COMPLETE_DEPTH          ; //[nb_inst_branch_complete]
    107107  public    : SC_IN (Taddress_t         )  **  in_BRANCH_COMPLETE_ADDRESS        ; //[nb_inst_branch_complete]
    108   public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_COMPLETE_FLAG           ; //[nb_inst_branch_complete]
     108  public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_COMPLETE_NO_SEQUENCE    ; //[nb_inst_branch_complete]
    109109  public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_COMPLETE_MISS_PREDICTION; //[nb_inst_branch_complete]
    110110  public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_COMPLETE_TAKE           ; //[nb_inst_branch_complete]
     
    116116  public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_EVENT_ACK               ; //[nb_context]
    117117//public    : SC_OUT(Tcontext_t         )  ** out_BRANCH_EVENT_CONTEXT_ID        ; //[nb_context]
    118 //public    : SC_OUT(Tdepth_t           )  ** out_BRANCH_EVENT_DEPTH             ; //[nb_context]
     118  public    : SC_OUT(Tdepth_t           )  ** out_BRANCH_EVENT_DEPTH             ; //[nb_context]
    119119//public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_EVENT_MISS_PREDICTION   ; //[nb_context] is always miss prediction
    120120  public    : SC_OUT(Taddress_t         )  ** out_BRANCH_EVENT_ADDRESS_SRC       ; //[nb_context]
     
    176176
    177177  private   : event_state_t                 * reg_EVENT_STATE                    ; //[nb_context]
     178  private   : Tdepth_t                      * reg_EVENT_DEPTH                    ; //[nb_context]
    178179  private   : Taddress_t                    * reg_EVENT_ADDRESS_SRC              ; //[nb_context] // Address branch
    179180  private   : Tcontrol_t                    * reg_EVENT_ADDRESS_DEST_VAL         ; //[nb_context] // if miss ifetch, decod issue branch, dest must be reload
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table.cpp

    r97 r98  
    161161            if (_param->_have_port_depth)
    162162            sensitive << (*(in_BRANCH_COMPLETE_DEPTH [i]));
    163             sensitive << (*(in_BRANCH_COMPLETE_FLAG    [i]))
     163            sensitive << (*(in_BRANCH_COMPLETE_NO_SEQUENCE [i]))
    164164                      << (*(in_BRANCH_COMPLETE_ADDRESS [i]));
    165165          }
     
    173173            if (_param->_have_port_depth)
    174174            (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_DEPTH      [i]));
    175             (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_FLAG       [i]));
     175            (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_NO_SEQUENCE[i]));
    176176            (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_ADDRESS    [i]));
    177177
     
    180180            if (_param->_have_port_depth)
    181181            (*(out_BRANCH_COMPLETE_TAKE            [i])) (*(in_BRANCH_COMPLETE_DEPTH      [i]));
    182             (*(out_BRANCH_COMPLETE_TAKE            [i])) (*(in_BRANCH_COMPLETE_FLAG       [i]));
     182            (*(out_BRANCH_COMPLETE_TAKE            [i])) (*(in_BRANCH_COMPLETE_NO_SEQUENCE[i]));
    183183
    184184            if (_param->_have_port_context_id)
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp

    r97 r98  
    103103      ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_DEPTH          ,"depth"          ,Tdepth_t  ,_param->_size_depth);
    104104      ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_ADDRESS        ,"address"        ,Taddress_t,_param->_size_instruction_address);
    105       ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_FLAG           ,"flag"           ,Tcontrol_t,1);
     105      ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_NO_SEQUENCE    ,"no_sequence"    ,Tcontrol_t,1);
    106106      ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_MISS_PREDICTION,"miss_prediction",Tcontrol_t,1);
    107107      ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_TAKE           ,"take"           ,Tcontrol_t,1);
     
    117117      ALLOC1_VALACK_IN ( in_BRANCH_EVENT_ACK              ,ACK);
    118118//    ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_CONTEXT_ID       ,"context_id"      ,Tcontext_t,_param->_size_context_id);
    119 //    ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_DEPTH            ,"depth"           ,Tdepth_t  ,_param->_size_depth);
     119      ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_DEPTH            ,"depth"           ,Tdepth_t  ,_param->_size_depth);
    120120//    ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_MISS_PREDICTION  ,"miss_prediction" ,Tcontrol_t,1);
    121121      ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_SRC      ,"address_src"     ,Taddress_t,_param->_size_instruction_address);
     
    203203
    204204    ALLOC1(reg_EVENT_STATE                  ,event_state_t,_param->_nb_context);
     205    ALLOC1(reg_EVENT_DEPTH                  ,Tdepth_t     ,_param->_nb_context);
    205206    ALLOC1(reg_EVENT_ADDRESS_SRC            ,Taddress_t   ,_param->_nb_context);
    206207    ALLOC1(reg_EVENT_ADDRESS_DEST_VAL       ,Tcontrol_t   ,_param->_nb_context);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_deallocation.cpp

    r97 r98  
    7373        delete []  in_BRANCH_COMPLETE_DEPTH          ;
    7474        delete []  in_BRANCH_COMPLETE_ADDRESS        ;
    75         delete []  in_BRANCH_COMPLETE_FLAG           ;
     75        delete []  in_BRANCH_COMPLETE_NO_SEQUENCE    ;
    7676        delete [] out_BRANCH_COMPLETE_MISS_PREDICTION;
    7777        delete [] out_BRANCH_COMPLETE_TAKE           ;
     
    8383        DELETE1_SIGNAL( in_BRANCH_EVENT_ACK              ,_param->_nb_context,1);
    8484//      DELETE1_SIGNAL(out_BRANCH_EVENT_CONTEXT_ID       ,_param->_nb_context,_param->_size_context_id);
    85 //      DELETE1_SIGNAL(out_BRANCH_EVENT_DEPTH            ,_param->_nb_context,_param->_size_depth);
     85        DELETE1_SIGNAL(out_BRANCH_EVENT_DEPTH            ,_param->_nb_context,_param->_size_depth);
    8686//      DELETE1_SIGNAL(out_BRANCH_EVENT_MISS_PREDICTION  ,_param->_nb_context,1);
    8787        DELETE1_SIGNAL(out_BRANCH_EVENT_ADDRESS_SRC      ,_param->_nb_context,_param->_size_instruction_address);
     
    156156       
    157157        DELETE1(reg_EVENT_STATE                  ,_param->_nb_context);
     158        DELETE1(reg_EVENT_DEPTH                  ,_param->_nb_context);
    158159        DELETE1(reg_EVENT_ADDRESS_SRC            ,_param->_nb_context);
    159160        DELETE1(reg_EVENT_ADDRESS_DEST_VAL       ,_param->_nb_context);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_branch_complete.cpp

    r97 r98  
    4040        Tbranch_condition_t condition = reg_UPDATE_PREDICTION_TABLE [context][depth]._condition   ;
    4141
    42         Tcontrol_t          flag      = PORT_READ(in_BRANCH_COMPLETE_FLAG [i]);
     42        Tcontrol_t          no_sequence = PORT_READ(in_BRANCH_COMPLETE_NO_SEQUENCE [i]);
    4343        Taddress_t          addr_good = PORT_READ(in_BRANCH_COMPLETE_ADDRESS [i]);
    4444
     
    4646        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * depth          : %d",depth  );
    4747        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * condition      : %s",toString(condition).c_str());
    48         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * flag           : %d",flag);
     48        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * no_sequence    : %d",no_sequence);
    4949        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * address_good   : %.8x",addr_good);
    5050
     
    7474            }
    7575          case BRANCH_CONDITION_FLAG_UNSET                        : // l.bnf
    76             {
    77               //addr_dest : compute in decod stage
    78               //miss if the direction is bad
    79               log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * BRANCH_CONDITION_FLAG_UNSET");
    80 
    81               Tcontrol_t take_good = not flag; // flag set = not take
    82 
    83               miss = (take != take_good);
    84               take = take_good;
    85 
    86 #ifdef DEBUG_TEST
    87 //               if (addr_dest != addr_good)
    88 //                 throw ERRORMORPHEO(FUNCTION,toString("Branch_complete[%d] (condition %s) : bad destination address.",i,toString(condition).c_str()));
    89 #endif
    90 
    91               break;
    92             }
    9376          case BRANCH_CONDITION_FLAG_SET                          : // l.bf
    9477            {
    9578              //addr_dest : compute in decod stage
    9679              //miss if the direction is bad
    97               log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * BRANCH_CONDITION_FLAG_SET");
     80              log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * BRANCH_CONDITION_FLAG");
    9881
    99               Tcontrol_t take_good = flag; // flag set = take
     82//               Tcontrol_t take_good = not flag; // flag set = not take
     83//               Tcontrol_t take_good = flag; // flag set = take
     84              Tcontrol_t take_good = no_sequence;
    10085
    10186              miss = (take != take_good);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMoore.cpp

    r95 r98  
    253253
    254254        PORT_WRITE(out_BRANCH_EVENT_VAL              [i],val);
     255        if (_param->_have_port_depth)
     256        PORT_WRITE(out_BRANCH_EVENT_DEPTH            [i],reg_EVENT_DEPTH            [i]);
    255257        PORT_WRITE(out_BRANCH_EVENT_ADDRESS_SRC      [i],reg_EVENT_ADDRESS_SRC      [i]);
    256258        PORT_WRITE(out_BRANCH_EVENT_ADDRESS_DEST_VAL [i],reg_EVENT_ADDRESS_DEST_VAL [i]);
  • trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp

    r97 r98  
    213213                  flush_UFPT [context] = true;
    214214
     215                  reg_EVENT_DEPTH           [context] = upt_ptr_write;
    215216                  reg_EVENT_ADDRESS_SRC     [context] = address_src; // delay_slot is compute in Context_State
    216217                  reg_EVENT_ADDRESS_DEST_VAL[context] = last_take;
     
    303304          if (PORT_READ(in_BRANCH_COMPLETE_VAL[i]) and internal_BRANCH_COMPLETE_ACK [i])
    304305            {
    305               Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_BRANCH_COMPLETE_CONTEXT_ID [i]):0;
    306               Tdepth_t   depth   = (_param->_have_port_depth     )?PORT_READ(in_BRANCH_COMPLETE_DEPTH      [i]):0;
     306              Tcontext_t context   = (_param->_have_port_context_id)?PORT_READ(in_BRANCH_COMPLETE_CONTEXT_ID [i]):0;
     307              Tdepth_t   depth     = (_param->_have_port_depth     )?PORT_READ(in_BRANCH_COMPLETE_DEPTH      [i]):0;
    307308              Tcontrol_t miss      = internal_BRANCH_COMPLETE_MISS_PREDICTION [i];
    308309              Tcontrol_t good_take = internal_BRANCH_COMPLETE_TAKE            [i];
     
    375376                  // else no update
    376377
     378                  reg_EVENT_DEPTH           [context] = depth;
    377379                  reg_EVENT_ADDRESS_SRC     [context] = address_src; // delay_slot is compute in Context_State
    378380                  reg_EVENT_ADDRESS_DEST_VAL[context] = good_take;
     
    668670        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_IS_ACCURATE           : %d",reg_IS_ACCURATE        [i]);
    669671        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_STATE           : %s"  ,toString(reg_EVENT_STATE [i]).c_str());
     672        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_DEPTH           : %d"  ,reg_EVENT_DEPTH           [i]);
    670673        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_ADDRESS_SRC     : %.8x",reg_EVENT_ADDRESS_SRC     [i]);
    671674        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_ADDRESS_DEST_VAL: %d"  ,reg_EVENT_ADDRESS_DEST_VAL[i]);
Note: See TracChangeset for help on using the changeset viewer.