source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Front_end_Glue/src/Front_end_Glue_genMealy_event.cpp @ 97

Last change on this file since 97 was 97, checked in by rosiere, 16 years ago

1) Update Prediction Table : statistics
2) Size instruction address on 30 bits
3) Change Log File
4) Add debug_level in simulation configuration file

  • Property svn:keywords set to Id
File size: 5.3 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Front_end_Glue_genMealy_event.cpp 97 2008-12-19 15:34:00Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_Front_end/Front_end/Front_end_Glue/include/Front_end_Glue.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_front_end {
15namespace front_end {
16namespace front_end_glue {
17
18#undef  FUNCTION
19#define FUNCTION "Front_end_Glue::genMealy_event"
20  void Front_end_Glue::genMealy_event (void)
21  {
22    log_begin(Front_end_Glue,FUNCTION);
23    log_function(Front_end_Glue,FUNCTION,_name.c_str());
24
25    for (uint32_t i=0; i<_param->_nb_context; ++i)
26      {
27        Taddress_t    address = PORT_READ(in_EVENT_CONTEXT_STATE_ADDRESS [i]);
28        PORT_WRITE(out_EVENT_ADDRESS             [i],address);
29        PORT_WRITE(out_EVENT_IFETCH_UNIT_ADDRESS [i],address);
30
31        Taddress_t    address_next = PORT_READ(in_EVENT_CONTEXT_STATE_ADDRESS_NEXT [i]);
32        PORT_WRITE(out_EVENT_ADDRESS_NEXT             [i],address_next);
33        PORT_WRITE(out_EVENT_IFETCH_UNIT_ADDRESS_NEXT [i],address_next);
34
35        Tcontrol_t    address_next_val = PORT_READ(in_EVENT_CONTEXT_STATE_ADDRESS_NEXT_VAL [i]);
36        PORT_WRITE(out_EVENT_ADDRESS_NEXT_VAL             [i],address_next_val);
37        PORT_WRITE(out_EVENT_IFETCH_UNIT_ADDRESS_NEXT_VAL [i],address_next_val);
38
39        Tcontrol_t    is_ds_take = PORT_READ(in_EVENT_CONTEXT_STATE_IS_DS_TAKE [i]);
40        PORT_WRITE(out_EVENT_IS_DS_TAKE             [i],is_ds_take);
41        PORT_WRITE(out_EVENT_IFETCH_UNIT_IS_DS_TAKE [i],is_ds_take);
42
43        Tevent_type_t event_type = PORT_READ(in_EVENT_CONTEXT_STATE_TYPE [i]);
44        PORT_WRITE(out_EVENT_PREDICTION_UNIT_TYPE [i],event_type);
45       
46        if (_param->_have_port_depth)
47          {
48        Tdepth_t      depth = PORT_READ(in_EVENT_CONTEXT_STATE_DEPTH [i]);
49        PORT_WRITE(out_EVENT_PREDICTION_UNIT_DEPTH [i],depth);
50          }
51       
52
53        Tcontrol_t ack                 = PORT_READ(in_EVENT_ACK                 [i]);
54        Tcontrol_t ifetch_unit_ack     = PORT_READ(in_EVENT_IFETCH_UNIT_ACK     [i]);
55        Tcontrol_t prediction_unit_ack = PORT_READ(in_EVENT_PREDICTION_UNIT_ACK [i]);
56        Tcontrol_t context_state_val   = PORT_READ(in_EVENT_CONTEXT_STATE_VAL   [i]);
57
58        Tcontrol_t val                 = (//ack                 and
59                                            ifetch_unit_ack     and
60                                            prediction_unit_ack and
61                                            context_state_val   
62                                          );
63        Tcontrol_t ifetch_unit_val     = (  ack                 and
64                                          //ifetch_unit_ack     and
65                                            prediction_unit_ack and
66                                            context_state_val   
67                                            );
68        Tcontrol_t prediction_unit_val = (  ack                 and
69                                            ifetch_unit_ack     and
70                                          //prediction_unit_ack and
71                                            context_state_val   
72                                            );
73        Tcontrol_t context_state_ack   = (  ack                 and
74                                            ifetch_unit_ack     and
75                                            prediction_unit_ack // and
76                                          //context_state_val   
77                                            );
78
79        log_printf(TRACE,Front_end_Glue,FUNCTION,"  * val                 %d, ack                 %d",val                ,ack                );
80        log_printf(TRACE,Front_end_Glue,FUNCTION,"  * ifetch_unit_val     %d, ifetch_unit_ack     %d",ifetch_unit_val    ,ifetch_unit_ack    );
81        log_printf(TRACE,Front_end_Glue,FUNCTION,"  * prediction_unit_val %d, prediction_unit_ack %d",prediction_unit_val,prediction_unit_ack);
82        log_printf(TRACE,Front_end_Glue,FUNCTION,"  * context_state_val   %d, context_state_ack   %d",context_state_val  ,context_state_ack  );
83
84
85        PORT_WRITE(out_EVENT_VAL                 [i], val                );
86        PORT_WRITE(out_EVENT_IFETCH_UNIT_VAL     [i], ifetch_unit_val    );
87        PORT_WRITE(out_EVENT_PREDICTION_UNIT_VAL [i], prediction_unit_val);
88        PORT_WRITE(out_EVENT_CONTEXT_STATE_ACK   [i], context_state_ack  );
89
90#ifdef DEBUG
91        log_printf(TRACE,Front_end_Glue,FUNCTION,"  * EVENT Context [%d]",i);
92        if (val and ack)
93          {
94            log_printf(TRACE,Front_end_Glue,FUNCTION,"    * have event");
95            log_printf(TRACE,Front_end_Glue,FUNCTION,"    * address          : %.8x (%.8x)",address     ,address     <<2);
96            log_printf(TRACE,Front_end_Glue,FUNCTION,"    * address_next     : %.8x (%.8x)",address_next,address_next<<2);
97            log_printf(TRACE,Front_end_Glue,FUNCTION,"    * address_next_val : %d",address_next_val);
98            log_printf(TRACE,Front_end_Glue,FUNCTION,"    * is_ds_take       : %d",is_ds_take      );
99          }
100        else
101          log_printf(TRACE,Front_end_Glue,FUNCTION,"    * have not event");
102#endif
103      }
104
105    log_end(Front_end_Glue,FUNCTION);
106  };
107
108}; // end namespace front_end_glue
109}; // end namespace front_end
110}; // end namespace multi_front_end
111}; // end namespace core
112
113}; // end namespace behavioural
114}; // end namespace morpheo             
115#endif
Note: See TracBrowser for help on using the repository browser.