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 @ 144

Last change on this file since 144 was 144, checked in by rosiere, 14 years ago

1) compatible gcc 4.4.3
2) Translation file in MORPHEO_PREFIX directory

  • Property svn:keywords set to Id
File size: 4.9 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Branch_Target_Buffer_Glue_genMealy_predict.cpp 144 2010-09-28 11:19:10Z 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  {
24    log_begin(Branch_Target_Buffer_Glue,FUNCTION);
25    log_function(Branch_Target_Buffer_Glue,FUNCTION,_name.c_str());
26
27    if (PORT_READ(in_NRESET))
28      {
29    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
30      {
31        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"  * PREDICT [%d]",i);
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);
40        log_printf(TRACE,Branch_Target_Buffer_Glue,FUNCTION,"    * port_victim  : %d",_param->_have_port_victim);
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       
44        Tptr_t          index       = (_param->_have_port_victim)?PORT_READ(in_PREDICT_SORT_INDEX [i]):0;
45        Tcontrol_t      hit         = // (_param->_have_port_victim)?sort_val:
46                                      PORT_READ(in_PREDICT_REGISTER_HIT [i][index]);
47        Tgeneral_data_t address_src = PORT_READ(in_PREDICT_REGISTER_ADDRESS_SRC [i][index]);
48
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
53        // Multiplexor
54
55        PORT_WRITE(out_PREDICT_HIT          [i],hit);
56        PORT_WRITE(out_PREDICT_ADDRESS_SRC  [i],address_src);
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
62        PORT_WRITE(out_PREDICT_ACK            [i], (
63//                                                  val          and
64                                                    register_ack and
65//                                                  sort_val     and
66                                                    victim_ack
67                                                    ));
68
69        PORT_WRITE(out_PREDICT_REGISTER_VAL   [i], (
70                                                    val          and
71//                                                  register_ack and
72//                                                  sort_val     and
73                                                    victim_ack
74                                                    ));
75
76        if (_param->_have_port_victim)
77          {
78        PORT_WRITE(out_PREDICT_VICTIM_VAL     [i], (
79                                                    val          and
80                                                    register_ack // and
81//                                                  sort_val     and
82//                                                  victim_ack
83                                                    ));
84        PORT_WRITE(out_PREDICT_VICTIM_HIT     [i], hit);
85        if (not _param->_is_full_associative)
86        PORT_WRITE(out_PREDICT_VICTIM_ADDRESS [i], (address_src >> _param->_shift_bank)&_param->_mask_bank);
87        PORT_WRITE(out_PREDICT_VICTIM_INDEX   [i], index);
88          }
89
90      }
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      }
102
103    log_end(Branch_Target_Buffer_Glue,FUNCTION);
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.