source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/src/Branch_Target_Buffer_Glue_genMealy_predict.cpp @ 128

Last change on this file since 128 was 128, checked in by rosiere, 15 years ago

1) Correct bug in link two signal
2) Fix error detected with valgrind
3) modif distexe script

  • Property svn:keywords set to Id
File size: 4.9 KB
RevLine 
[78]1#ifdef SYSTEMC
2/*
3 * $Id: Branch_Target_Buffer_Glue_genMealy_predict.cpp 128 2009-06-26 08:43:23Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/include/Branch_Target_Buffer_Glue.h"
10
11namespace morpheo {
12namespace behavioural {
13namespace core {
14namespace multi_front_end {
15namespace front_end {
16namespace prediction_unit {
17namespace branch_target_buffer {
18namespace branch_target_buffer_glue {
19
20#undef  FUNCTION
21#define FUNCTION "Branch_Target_Buffer_Glue::genMealy_predict"
22  void Branch_Target_Buffer_Glue::genMealy_predict (void)
23  {
[98]24    log_begin(Branch_Target_Buffer_Glue,FUNCTION);
25    log_function(Branch_Target_Buffer_Glue,FUNCTION,_name.c_str());
[78]26
[123]27    if (PORT_READ(in_NRESET))
28      {
[78]29    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
30      {
[98]31        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"  * PREDICT [%d]",i);
[108]32
33        Tcontrol_t val          = PORT_READ(in_PREDICT_VAL          [i]);
34        Tcontrol_t register_ack = PORT_READ(in_PREDICT_REGISTER_ACK [i]);
35        Tcontrol_t sort_val     = (_param->_have_port_victim)?PORT_READ(in_PREDICT_SORT_VAL   [i]):true;
36        Tcontrol_t victim_ack   = (_param->_have_port_victim)?PORT_READ(in_PREDICT_VICTIM_ACK [i]):true;
37
38        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"    * val          : %d",val         );
39        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"    * register_ack : %d",register_ack);
[128]40        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"    * port_victim  : %d",_param->_have_port_victim);
[108]41        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"    * sort_val     : %d",sort_val    );
42        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"    * victim_ack   : %d",victim_ack  );
43       
[98]44        Tptr_t          index       = (_param->_have_port_victim)?PORT_READ(in_PREDICT_SORT_INDEX [i]):0;
[108]45        Tcontrol_t      hit         = // (_param->_have_port_victim)?sort_val:
46                                      PORT_READ(in_PREDICT_REGISTER_HIT [i][index]);
[98]47        Tgeneral_data_t address_src = PORT_READ(in_PREDICT_REGISTER_ADDRESS_SRC [i][index]);
[78]48
[98]49        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"    * index        : %d"  ,index      );
50        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"    * hit          : %d"  ,hit        );
51        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"    * address_src  : %.8x",address_src);
52
[78]53        // Multiplexor
[128]54
[78]55        PORT_WRITE(out_PREDICT_HIT          [i],hit);
[98]56        PORT_WRITE(out_PREDICT_ADDRESS_SRC  [i],address_src);
[78]57        PORT_WRITE(out_PREDICT_ADDRESS_DEST [i],PORT_READ(in_PREDICT_REGISTER_ADDRESS_DEST  [i][index]));
58        PORT_WRITE(out_PREDICT_CONDITION    [i],PORT_READ(in_PREDICT_REGISTER_CONDITION     [i][index]));
59        PORT_WRITE(out_PREDICT_LAST_TAKE    [i],PORT_READ(in_PREDICT_REGISTER_LAST_TAKE     [i][index]));
60        PORT_WRITE(out_PREDICT_IS_ACCURATE  [i],PORT_READ(in_PREDICT_REGISTER_IS_ACCURATE   [i][index]));
61
[98]62        PORT_WRITE(out_PREDICT_ACK            [i], (
63//                                                  val          and
64                                                    register_ack and
[108]65//                                                  sort_val     and
[98]66                                                    victim_ack
67                                                    ));
[128]68
[98]69        PORT_WRITE(out_PREDICT_REGISTER_VAL   [i], (
70                                                    val          and
71//                                                  register_ack and
[108]72//                                                  sort_val     and
[98]73                                                    victim_ack
74                                                    ));
[78]75
76        if (_param->_have_port_victim)
77          {
[98]78        PORT_WRITE(out_PREDICT_VICTIM_VAL     [i], (
79                                                    val          and
[108]80                                                    register_ack // and
81//                                                  sort_val     and
[98]82//                                                  victim_ack
83                                                    ));
[78]84        PORT_WRITE(out_PREDICT_VICTIM_HIT     [i], hit);
85        if (not _param->_is_full_associative)
[98]86        PORT_WRITE(out_PREDICT_VICTIM_ADDRESS [i], (address_src >> _param->_shift_bank)&_param->_mask_bank);
[78]87        PORT_WRITE(out_PREDICT_VICTIM_INDEX   [i], index);
88          }
[128]89
[78]90      }
[123]91      }
92    else
93      {
94        for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
95          {
96            PORT_WRITE(out_PREDICT_ACK            [i], 0);
97            PORT_WRITE(out_PREDICT_REGISTER_VAL   [i], 0);
98            if (_param->_have_port_victim)
99            PORT_WRITE(out_PREDICT_VICTIM_VAL     [i], 0);
100          }
101      }
[78]102
[98]103    log_end(Branch_Target_Buffer_Glue,FUNCTION);
[78]104  };
105
106}; // end namespace branch_target_buffer_glue
107}; // end namespace branch_target_buffer
108}; // end namespace prediction_unit
109}; // end namespace front_end
110}; // end namespace multi_front_end
111}; // end namespace core
112}; // end namespace behavioural
113}; // end namespace morpheo             
114#endif
Note: See TracBrowser for help on using the repository browser.