source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_genMealy_update.cpp @ 123

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

1) Fix performance
2) add auto generation to SPECINT2000
3) add reset in genMoore and genMealy

File size: 4.3 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id$
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Prediction_unit_Glue.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_front_end {
15namespace front_end {
16namespace prediction_unit {
17namespace prediction_unit_glue {
18
19
20#undef  FUNCTION
21#define FUNCTION "Prediction_unit_Glue::genMealy_update"
22  void Prediction_unit_Glue::genMealy_update (void)
23  {
24    log_begin(Prediction_unit_Glue,FUNCTION);
25    log_function(Prediction_unit_Glue,FUNCTION,_name.c_str());
26
27    if (PORT_READ(in_NRESET))
28      {
29    for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++)
30      {
31        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"  * UPDATE [%d]",i);
32        Tcontrol_t btb_ack = PORT_READ(in_UPDATE_BTB_ACK [i]);
33        Tcontrol_t dir_ack = PORT_READ(in_UPDATE_DIR_ACK [i]);
34        Tcontrol_t ras_ack = PORT_READ(in_UPDATE_RAS_ACK [i]);
35        Tcontrol_t upt_val = PORT_READ(in_UPDATE_UPT_VAL [i]);
36
37        Tcontrol_t upt_btb_val = PORT_READ(in_UPDATE_UPT_BTB_VAL [i]);
38        Tcontrol_t upt_dir_val = PORT_READ(in_UPDATE_UPT_DIR_VAL [i]);
39        Tcontrol_t upt_ras_val = PORT_READ(in_UPDATE_UPT_RAS_VAL [i]);
40       
41        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * upt_val               : %d",upt_val);
42        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * upt_btb_val - btb_ack : %d - %d",upt_btb_val, btb_ack);
43        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * upt_dir_val - dir_ack : %d - %d",upt_dir_val, dir_ack);
44        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * upt_ras_val - ras_ack : %d - %d",upt_ras_val, ras_ack);
45
46        Tcontrol_t btb_val = (upt_val  and
47                              upt_btb_val and
48//                            upt_dir_val and
49//                            upt_ras_val and
50//                            (not upt_btb_val or (upt_btb_val and btb_ack)) and
51                              (not upt_dir_val or (upt_dir_val and dir_ack)) and
52                              (not upt_ras_val or (upt_ras_val and ras_ack))
53                              );
54
55        Tcontrol_t dir_val = (upt_val and
56//                            upt_btb_val and
57                              upt_dir_val and
58//                            upt_ras_val and
59                              (not upt_btb_val or (upt_btb_val and btb_ack)) and
60//                            (not upt_dir_val or (upt_dir_val and dir_ack)) and
61                              (not upt_ras_val or (upt_ras_val and ras_ack))
62                              );
63
64        Tcontrol_t ras_val = (upt_val  and
65//                            upt_btb_val and
66//                            upt_dir_val and
67                              upt_ras_val and
68                              (not upt_btb_val or (upt_btb_val and btb_ack)) and
69                              (not upt_dir_val or (upt_dir_val and dir_ack))//  and
70//                            (not upt_ras_val or (upt_ras_val and ras_ack))
71                              );
72
73        Tcontrol_t upt_ack = (
74//                            upt_val  and
75//                            upt_btb_val and
76//                            upt_dir_val and
77//                            upt_ras_val and
78                              (not upt_btb_val or (upt_btb_val and btb_ack)) and
79                              (not upt_dir_val or (upt_dir_val and dir_ack)) and
80                              (not upt_ras_val or (upt_ras_val and ras_ack))
81                              );
82
83        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    *     btb_val           : %d",btb_val);
84        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    *     dir_val           : %d",dir_val);
85        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    *     ras_val           : %d",ras_val);
86
87        PORT_WRITE(out_UPDATE_BTB_VAL [i], btb_val);
88        PORT_WRITE(out_UPDATE_DIR_VAL [i], dir_val);
89        PORT_WRITE(out_UPDATE_RAS_VAL [i], ras_val);
90        PORT_WRITE(out_UPDATE_UPT_ACK [i], upt_ack);
91      }
92      }
93    else
94      {
95        // RESET
96        for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++)
97          {
98            PORT_WRITE(out_UPDATE_BTB_VAL [i], 0);
99            PORT_WRITE(out_UPDATE_DIR_VAL [i], 0);
100            PORT_WRITE(out_UPDATE_RAS_VAL [i], 0);
101            PORT_WRITE(out_UPDATE_UPT_ACK [i], 0);
102          }
103      }
104
105    log_end(Prediction_unit_Glue,FUNCTION);
106  };
107
108}; // end namespace prediction_unit_glue
109}; // end namespace prediction_unit
110}; // end namespace front_end
111}; // end namespace multi_front_end
112}; // end namespace core
113
114}; // end namespace behavioural
115}; // end namespace morpheo             
116#endif
Note: See TracBrowser for help on using the repository browser.