source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_decod.cpp @ 120

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

1) Context_state : Add statistics
2) Add configuration with multi front_end
3) Add optionnal pid at log filename

File size: 3.4 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/Update_Prediction_Table/include/Update_Prediction_Table.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_front_end {
15namespace front_end {
16namespace prediction_unit {
17namespace update_prediction_table {
18
19
20#undef  FUNCTION
21#define FUNCTION "Update_Prediction_Table::genMealy_decod"
22  void Update_Prediction_Table::genMealy_decod (void)
23  {
24    log_begin(Update_Prediction_Table,FUNCTION);
25    log_function(Update_Prediction_Table,FUNCTION,_name.c_str());
26   
27    // WARNING : One branch per context per cycle
28    if (PORT_READ(in_NRESET) != 0)
29      {
30    for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
31      {
32        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * DECOD [%d]",i);
33
34        Tcontext_t    context     = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0;
35        bool          is_accurate = _param->_accurate_block_decod or reg_IS_ACCURATE [context];
36        event_state_t event_state = reg_EVENT_STATE [context];
37        uint32_t      ptr_write   = reg_UPT_TOP     [context];
38        // can continue if next slot is empty
39        Tcontrol_t    can_continue= ((reg_UPDATE_PREDICTION_TABLE [context][(reg_UPT_TOP [context]+1)%_param->_size_upt_queue[context]]._state == UPDATE_PREDICTION_STATE_EMPTY) and
40                                     (reg_EVENT_STATE [context] == EVENT_STATE_OK));
41
42        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * context     : %d",context    );
43        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * is_accurate : %d",is_accurate);
44        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * event_state : %s",toString(event_state).c_str());
45        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * ptr_write   : %d",ptr_write  );
46        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * upt_state   : %s",toString(reg_UPDATE_PREDICTION_TABLE [context][ptr_write]._state).c_str());
47        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * can_continue: %d",can_continue);
48
49        // ack :
50        //   * in all case (miss or hit), need empty slot
51        //   * is_accurate
52        //   * event_state : don't update upt
53        internal_DECOD_ACK           [i] = ((reg_UPDATE_PREDICTION_TABLE [context][ptr_write]._state == UPDATE_PREDICTION_STATE_EMPTY) and
54                                            is_accurate and
55//                                             (
56                                             (event_state == EVENT_STATE_OK)//  or
57//                                              (event_state == EVENT_STATE_MISS_FLUSH_UFPT    ) or
58//                                              (event_state == EVENT_STATE_UPDATE_CONTEXT))
59                                            );
60        internal_DECOD_UPT_PTR_WRITE [i] = ptr_write;
61
62        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * ack         : %d",internal_DECOD_ACK [i]);
63
64        PORT_WRITE(out_DECOD_ACK          [i], internal_DECOD_ACK [i]);
65        PORT_WRITE(out_DECOD_CAN_CONTINUE [i], can_continue);
66      }
67      }
68    log_end(Update_Prediction_Table,FUNCTION);
69  };
70
71}; // end namespace update_prediction_table
72}; // end namespace prediction_unit
73}; // end namespace front_end
74}; // end namespace multi_front_end
75}; // end namespace core
76
77}; // end namespace behavioural
78}; // end namespace morpheo             
79#endif
Note: See TracBrowser for help on using the repository browser.