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

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

Almost complete design
with Test and test platform

File size: 2.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/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    for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
29      {
30        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * DECOD [%d]",i);
31
32        Tcontext_t    context     = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0;
33        bool          is_accurate = reg_IS_ACCURATE [context];
34        event_state_t event_state = reg_EVENT_STATE [context];
35        uint32_t      ptr_write   = reg_UPT_TOP     [context];
36
37        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * context     : %d",context    );
38        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * is_accurate : %d",is_accurate);
39        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * event_state : %s",toString(event_state).c_str());
40        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * ptr_write   : %d",ptr_write  );
41        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * upt_state   : %s",toString(reg_UPDATE_PREDICTION_TABLE [context][ptr_write]._state).c_str());
42
43        // ack :
44        //   * in all case (miss or hit), need empty slot
45        //   * is_accurate
46        //   * event_state : don't update upt
47        internal_DECOD_ACK           [i] = ((reg_UPDATE_PREDICTION_TABLE [context][ptr_write]._state == UPDATE_PREDICTION_STATE_EMPTY) and
48                                            is_accurate and
49//                                             (
50                                             (event_state == EVENT_STATE_OK            )//  or
51//                                              (event_state == EVENT_STATE_FLUSH_UFPT    ) or
52//                                              (event_state == EVENT_STATE_UPDATE_CONTEXT))
53                                            );
54        internal_DECOD_UPT_PTR_WRITE [i] = ptr_write;
55
56        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * ack         : %d",internal_DECOD_ACK [i]);
57
58        PORT_WRITE(out_DECOD_ACK [i], internal_DECOD_ACK [i]);
59      }
60
61    log_end(Update_Prediction_Table,FUNCTION);
62  };
63
64}; // end namespace update_prediction_table
65}; // end namespace prediction_unit
66}; // end namespace front_end
67}; // end namespace multi_front_end
68}; // end namespace core
69
70}; // end namespace behavioural
71}; // end namespace morpheo             
72#endif
Note: See TracBrowser for help on using the repository browser.