source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Stat_List_unit_transition.cpp @ 81

Last change on this file since 81 was 81, checked in by rosiere, 16 years ago
  • Finish Environment (and test)
  • Continue predictor_unit
  • Add external tools
  • svn keyword "Id" set
  • Property svn:keywords set to Id
File size: 7.2 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Stat_List_unit_transition.cpp 81 2008-04-15 18:40:01Z rosiere $
4 *
5 * [ Description ]
6 *
7 */
8
9#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Stat_List_unit.h"
10
11namespace morpheo                    {
12namespace behavioural {
13namespace core {
14namespace multi_ooo_engine {
15namespace ooo_engine {
16namespace rename_unit {
17namespace register_translation_unit {
18namespace stat_list_unit {
19
20
21#undef  FUNCTION
22#define FUNCTION "Stat_List_unit::transition"
23  void Stat_List_unit::transition (void)
24  {
25    log_printf(FUNC,Stat_List_unit,FUNCTION,"Begin");
26
27    if (PORT_READ(in_NRESET) == 0)
28      {
29        uint32_t gpr = 0;
30        uint32_t spr = 0;
31       
32        for (uint32_t i=0; i<_param->_nb_bank; i++)
33          {
34            for (uint32_t j=0; j<_param->_nb_general_register_by_bank; j++)
35              gpr_stat_list [i][j].reset((gpr++)<_param->_nb_gpr_use_init);
36            for (uint32_t j=0; j<_param->_nb_special_register_by_bank; j++)
37              spr_stat_list [i][j].reset((spr++)<_param->_nb_spr_use_init);
38          }
39        internal_GPR_PTR_FREE = 0;
40        internal_SPR_PTR_FREE = 0;
41      }
42    else
43      {
44        // =====================================================
45        // =====[ INSERT ]======================================
46        // =====================================================
47        for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
48          if (PORT_READ(in_INSERT_VAL[i]) and internal_INSERT_ACK[i])
49            {
50              if (PORT_READ(in_INSERT_READ_RA [i]))
51                {
52                  Tgeneral_address_t num_reg = PORT_READ(in_INSERT_NUM_REG_RA_PHY [i]);
53                  uint32_t bank = num_reg >> _param->_shift_gpr;
54                  uint32_t reg  = num_reg  & _param->_mask_gpr ;
55                  gpr_stat_list [bank][reg].insert_read();
56                }
57
58              if (PORT_READ(in_INSERT_READ_RB [i]))
59                {
60                  Tgeneral_address_t num_reg = PORT_READ(in_INSERT_NUM_REG_RB_PHY [i]);
61                  uint32_t bank = num_reg >> _param->_shift_gpr;
62                  uint32_t reg  = num_reg  & _param->_mask_gpr ;
63                  gpr_stat_list [bank][reg].insert_read();
64                }
65
66              if (PORT_READ(in_INSERT_READ_RC [i]))
67                {
68                  Tgeneral_address_t num_reg = PORT_READ(in_INSERT_NUM_REG_RC_PHY [i]);
69                  uint32_t bank = num_reg >> _param->_shift_spr;
70                  uint32_t reg  = num_reg  & _param->_mask_spr ;
71                  spr_stat_list [bank][reg].insert_read();
72                }
73
74              if (PORT_READ(in_INSERT_WRITE_RD [i]))
75                {
76                  Tgeneral_address_t num_reg = PORT_READ(in_INSERT_NUM_REG_RD_PHY_NEW [i]);
77                  uint32_t bank = num_reg >> _param->_shift_gpr;
78                  uint32_t reg  = num_reg  & _param->_mask_gpr ;
79                  gpr_stat_list [bank][reg].insert_write();
80                }
81
82              if (PORT_READ(in_INSERT_WRITE_RE [i]))
83                {
84                  Tgeneral_address_t num_reg = PORT_READ(in_INSERT_NUM_REG_RE_PHY_NEW [i]);
85                  uint32_t bank = num_reg >> _param->_shift_spr;
86                  uint32_t reg  = num_reg  & _param->_mask_spr ;
87                  spr_stat_list [bank][reg].insert_write();
88                }
89            }
90
91        // =====================================================
92        // =====[ RETIRE ]======================================
93        // =====================================================
94        for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
95          if (PORT_READ(in_RETIRE_VAL[i]) and internal_RETIRE_ACK[i])
96            {
97              if (PORT_READ(in_RETIRE_READ_RA [i]))
98                {
99                  Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RA_PHY [i]);
100                  uint32_t bank = num_reg >> _param->_shift_gpr;
101                  uint32_t reg  = num_reg  & _param->_mask_gpr ;
102                  gpr_stat_list [bank][reg].retire_read();
103                }
104
105              if (PORT_READ(in_RETIRE_READ_RB [i]))
106                {
107                  Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RB_PHY [i]);
108                  uint32_t bank = num_reg >> _param->_shift_gpr;
109                  uint32_t reg  = num_reg  & _param->_mask_gpr ;
110                  gpr_stat_list [bank][reg].retire_read();
111                }
112
113              if (PORT_READ(in_RETIRE_READ_RC [i]))
114                {
115                  Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RC_PHY [i]);
116                  uint32_t bank = num_reg >> _param->_shift_spr;
117                  uint32_t reg  = num_reg  & _param->_mask_spr ;
118                  spr_stat_list [bank][reg].retire_read();
119                }
120
121              if (PORT_READ(in_RETIRE_WRITE_RD [i]))
122                {
123                  {
124                    Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RD_PHY_OLD [i]);
125                    uint32_t bank = num_reg >> _param->_shift_gpr;
126                    uint32_t reg  = num_reg  & _param->_mask_gpr ;
127                    gpr_stat_list [bank][reg].retire_write_old();
128                  }
129                  {
130                    Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RD_PHY_NEW [i]);
131                    uint32_t bank = num_reg >> _param->_shift_gpr;
132                    uint32_t reg  = num_reg  & _param->_mask_gpr ;
133                    gpr_stat_list [bank][reg].retire_write_new();
134                  }
135                }
136
137              if (PORT_READ(in_RETIRE_WRITE_RE [i]))
138                {
139                  {
140                    Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RE_PHY_OLD [i]);
141                    uint32_t bank = num_reg >> _param->_shift_spr;
142                    uint32_t reg  = num_reg  & _param->_mask_spr ;
143                    spr_stat_list [bank][reg].retire_write_old();
144                  }
145                  {
146                    Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RE_PHY_NEW [i]);
147                    uint32_t bank = num_reg >> _param->_shift_spr;
148                    uint32_t reg  = num_reg  & _param->_mask_spr ;
149                    spr_stat_list [bank][reg].retire_write_new();
150                  }
151                }
152            }
153
154        for (uint32_t i=0; i<_param->_nb_reg_free; i++)
155          {
156            // =====================================================
157            // =====[ PUSH_GPR ]====================================
158            // =====================================================
159            if (internal_PUSH_GPR_VAL [i] and PORT_READ(in_PUSH_GPR_ACK [i]))
160              gpr_stat_list[internal_PUSH_GPR_NUM_BANK [i]][internal_GPR_PTR_FREE].free();
161           
162            // =====================================================
163            // =====[ PUSH_SPR ]====================================
164            // =====================================================
165            if (internal_PUSH_SPR_VAL [i] and PORT_READ(in_PUSH_SPR_ACK [i]))
166              spr_stat_list[internal_PUSH_SPR_NUM_BANK [i]][internal_SPR_PTR_FREE].free();
167          }
168
169        // Update pointer
170        internal_GPR_PTR_FREE = ((internal_GPR_PTR_FREE==0)?_param->_nb_general_register_by_bank:internal_GPR_PTR_FREE)-1;
171        internal_SPR_PTR_FREE = ((internal_SPR_PTR_FREE==0)?_param->_nb_special_register_by_bank:internal_SPR_PTR_FREE)-1;
172      }
173   
174//     log_printf(TRACE,Stat_List_unit,FUNCTION,"Print gpr_stat_list :");
175//     for (uint32_t i=0; i<_param->_nb_bank; i++)
176//       {
177//      log_printf(TRACE,Stat_List_unit,FUNCTION," * Bank : %d",i);
178//      for (uint32_t j=0; j<_param->_nb_general_register_by_bank; j++)
179//        {
180//          std::ostringstream str;
181//          str << gpr_stat_list [i][j];
182//          log_printf(TRACE,Stat_List_unit,FUNCTION,"   [%d] %s",j,str.str().c_str());
183
184//        }
185//       }
186//     log_printf(TRACE,Stat_List_unit,FUNCTION,"Print spr_stat_list :");
187//     for (uint32_t i=0; i<_param->_nb_bank; i++)
188//       {
189//      log_printf(TRACE,Stat_List_unit,FUNCTION," * Bank : %d",i);
190//      for (uint32_t j=0; j<_param->_nb_special_register_by_bank; j++)
191//        {
192//          std::ostringstream str;
193//          str << spr_stat_list [i][j];
194//          log_printf(TRACE,Stat_List_unit,FUNCTION,"   [%d] %s",j,str.str().c_str());
195//        }
196//       }
197
198#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
199    end_cycle ();
200#endif
201
202    log_printf(FUNC,Stat_List_unit,FUNCTION,"End");
203  };
204
205}; // end namespace stat_list_unit
206}; // end namespace register_translation_unit
207}; // end namespace rename_unit
208}; // end namespace ooo_engine
209}; // end namespace multi_ooo_engine
210}; // end namespace core
211
212}; // end namespace behavioural
213}; // end namespace morpheo             
214#endif
Note: See TracBrowser for help on using the repository browser.