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

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

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

File size: 3.9 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    for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++)
28      {
29        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"  * UPDATE [%d]",i);
30        Tcontrol_t btb_ack = PORT_READ(in_UPDATE_BTB_ACK [i]);
31        Tcontrol_t dir_ack = PORT_READ(in_UPDATE_DIR_ACK [i]);
32        Tcontrol_t ras_ack = PORT_READ(in_UPDATE_RAS_ACK [i]);
33        Tcontrol_t upt_val = PORT_READ(in_UPDATE_UPT_VAL [i]);
34
35        Tcontrol_t upt_btb_val = PORT_READ(in_UPDATE_UPT_BTB_VAL [i]);
36        Tcontrol_t upt_dir_val = PORT_READ(in_UPDATE_UPT_DIR_VAL [i]);
37        Tcontrol_t upt_ras_val = PORT_READ(in_UPDATE_UPT_RAS_VAL [i]);
38       
39        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * upt_val               : %d",upt_val);
40        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * upt_btb_val - btb_ack : %d - %d",upt_btb_val, btb_ack);
41        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * upt_dir_val - dir_ack : %d - %d",upt_dir_val, dir_ack);
42        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * upt_ras_val - ras_ack : %d - %d",upt_ras_val, ras_ack);
43
44        Tcontrol_t btb_val = (upt_val  and
45                              upt_btb_val and
46//                            upt_dir_val and
47//                            upt_ras_val and
48//                            (not upt_btb_val or (upt_btb_val and btb_ack)) and
49                              (not upt_dir_val or (upt_dir_val and dir_ack)) and
50                              (not upt_ras_val or (upt_ras_val and ras_ack))
51                              );
52
53        Tcontrol_t dir_val = (upt_val and
54//                            upt_btb_val and
55                              upt_dir_val and
56//                            upt_ras_val and
57                              (not upt_btb_val or (upt_btb_val and btb_ack)) and
58//                            (not upt_dir_val or (upt_dir_val and dir_ack)) and
59                              (not upt_ras_val or (upt_ras_val and ras_ack))
60                              );
61
62        Tcontrol_t ras_val = (upt_val  and
63//                            upt_btb_val and
64//                            upt_dir_val and
65                              upt_ras_val and
66                              (not upt_btb_val or (upt_btb_val and btb_ack)) and
67                              (not upt_dir_val or (upt_dir_val and dir_ack))//  and
68//                            (not upt_ras_val or (upt_ras_val and ras_ack))
69                              );
70
71        Tcontrol_t upt_ack = (
72//                            upt_val  and
73//                            upt_btb_val and
74//                            upt_dir_val and
75//                            upt_ras_val and
76                              (not upt_btb_val or (upt_btb_val and btb_ack)) and
77                              (not upt_dir_val or (upt_dir_val and dir_ack)) and
78                              (not upt_ras_val or (upt_ras_val and ras_ack))
79                              );
80
81        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    *     btb_val           : %d",btb_val);
82        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    *     dir_val           : %d",dir_val);
83        log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    *     ras_val           : %d",ras_val);
84
85        PORT_WRITE(out_UPDATE_BTB_VAL [i], btb_val);
86        PORT_WRITE(out_UPDATE_DIR_VAL [i], dir_val);
87        PORT_WRITE(out_UPDATE_RAS_VAL [i], ras_val);
88        PORT_WRITE(out_UPDATE_UPT_ACK [i], upt_ack);
89      }
90
91    log_end(Prediction_unit_Glue,FUNCTION);
92  };
93
94}; // end namespace prediction_unit_glue
95}; // end namespace prediction_unit
96}; // end namespace front_end
97}; // end namespace multi_front_end
98}; // end namespace core
99
100}; // end namespace behavioural
101}; // end namespace morpheo             
102#endif
Note: See TracBrowser for help on using the repository browser.