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

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

1) RAT : Fix bug when update and event in same cycle
2) Context State : Compute depth
3) Load Store Unit : In check logic, translate all access in little endian. More easy to check
4) UFPT : End Event

  • Property svn:keywords set to Id
File size: 9.3 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Stat_List_unit_transition.cpp 106 2009-02-09 22:55:26Z 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_begin(Stat_List_unit,FUNCTION);
26    log_function(Stat_List_unit,FUNCTION,_name.c_str());
27
28    if (PORT_READ(in_NRESET) == 0)
29      {
30        uint32_t gpr = 0;
31        uint32_t spr = 0;
32       
33        for (uint32_t i=0; i<_param->_nb_bank; i++)
34          {
35            for (uint32_t j=0; j<_param->_nb_general_register_by_bank; j++)
36              gpr_stat_list [i][j].reset((gpr++)<_param->_nb_gpr_use_init);
37            for (uint32_t j=0; j<_param->_nb_special_register_by_bank; j++)
38              spr_stat_list [i][j].reset((spr++)<_param->_nb_spr_use_init);
39          }
40        internal_GPR_PTR_FREE = 0;
41        internal_SPR_PTR_FREE = 0;
42      }
43    else
44      {
45        // =====================================================
46        // =====[ INSERT ]======================================
47        // =====================================================
48        for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
49          if (PORT_READ(in_INSERT_VAL[i]) and internal_INSERT_ACK[i])
50            {
51              log_printf(TRACE,Stat_List_unit,FUNCTION,"  * INSERT [%d]",i);
52             
53              if (PORT_READ(in_INSERT_READ_RA [i]))
54                {
55                  Tgeneral_address_t num_reg = PORT_READ(in_INSERT_NUM_REG_RA_PHY [i]);
56
57                  log_printf(TRACE,Stat_List_unit,FUNCTION,"    * READ_RA  - num_reg     : %d",num_reg);
58
59                  uint32_t bank = num_reg >> _param->_shift_gpr;
60                  uint32_t reg  = num_reg  & _param->_mask_gpr ;
61                  gpr_stat_list [bank][reg].insert_read();
62                }
63
64              if (PORT_READ(in_INSERT_READ_RB [i]))
65                {
66                  Tgeneral_address_t num_reg = PORT_READ(in_INSERT_NUM_REG_RB_PHY [i]);
67
68                  log_printf(TRACE,Stat_List_unit,FUNCTION,"    * READ_RB  - num_reg     : %d",num_reg);
69
70                  uint32_t bank = num_reg >> _param->_shift_gpr;
71                  uint32_t reg  = num_reg  & _param->_mask_gpr ;
72                  gpr_stat_list [bank][reg].insert_read();
73                }
74
75              if (PORT_READ(in_INSERT_READ_RC [i]))
76                {
77                  Tgeneral_address_t num_reg = PORT_READ(in_INSERT_NUM_REG_RC_PHY [i]);
78
79                  log_printf(TRACE,Stat_List_unit,FUNCTION,"    * READ_RC  - num_reg     : %d",num_reg);
80
81                  uint32_t bank = num_reg >> _param->_shift_spr;
82                  uint32_t reg  = num_reg  & _param->_mask_spr ;
83                  spr_stat_list [bank][reg].insert_read();
84                }
85
86              if (PORT_READ(in_INSERT_WRITE_RD [i]))
87                {
88                  Tgeneral_address_t num_reg = PORT_READ(in_INSERT_NUM_REG_RD_PHY_NEW [i]);
89
90                  log_printf(TRACE,Stat_List_unit,FUNCTION,"    * WRITE_RD - num_reg     : %d",num_reg);
91
92                  uint32_t bank = num_reg >> _param->_shift_gpr;
93                  uint32_t reg  = num_reg  & _param->_mask_gpr ;
94                  gpr_stat_list [bank][reg].insert_write();
95                }
96
97              if (PORT_READ(in_INSERT_WRITE_RE [i]))
98                {
99                  Tgeneral_address_t num_reg = PORT_READ(in_INSERT_NUM_REG_RE_PHY_NEW [i]);
100
101                  log_printf(TRACE,Stat_List_unit,FUNCTION,"    * WRITE_RE - num_reg     : %d",num_reg);
102
103                  uint32_t bank = num_reg >> _param->_shift_spr;
104                  uint32_t reg  = num_reg  & _param->_mask_spr ;
105                  spr_stat_list [bank][reg].insert_write();
106                }
107            }
108
109        // =====================================================
110        // =====[ RETIRE ]======================================
111        // =====================================================
112        for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
113          if (PORT_READ(in_RETIRE_VAL[i]) and internal_RETIRE_ACK[i])
114            {
115              log_printf(TRACE,Stat_List_unit,FUNCTION,"  * RETIRE [%d]",i);
116
117              if (PORT_READ(in_RETIRE_READ_RA [i]))
118                {
119                  Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RA_PHY [i]);
120
121                  log_printf(TRACE,Stat_List_unit,FUNCTION,"    * READ_RA  - num_reg     : %d",num_reg);
122
123                  uint32_t bank = num_reg >> _param->_shift_gpr;
124                  uint32_t reg  = num_reg  & _param->_mask_gpr ;
125                  gpr_stat_list [bank][reg].retire_read();
126                }
127
128              if (PORT_READ(in_RETIRE_READ_RB [i]))
129                {
130                  Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RB_PHY [i]);
131
132                  log_printf(TRACE,Stat_List_unit,FUNCTION,"    * READ_RD  - num_reg     : %d",num_reg);
133
134                  uint32_t bank = num_reg >> _param->_shift_gpr;
135                  uint32_t reg  = num_reg  & _param->_mask_gpr ;
136                  gpr_stat_list [bank][reg].retire_read();
137                }
138
139              if (PORT_READ(in_RETIRE_READ_RC [i]))
140                {
141                  Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RC_PHY [i]);
142
143                  log_printf(TRACE,Stat_List_unit,FUNCTION,"    * READ_RC  - num_reg     : %d",num_reg);
144
145                  uint32_t bank = num_reg >> _param->_shift_spr;
146                  uint32_t reg  = num_reg  & _param->_mask_spr ;
147                  spr_stat_list [bank][reg].retire_read();
148                }
149
150              if (PORT_READ(in_RETIRE_WRITE_RD [i]))
151                {
152                  Tcontrol_t restore_old = PORT_READ(in_RETIRE_RESTORE_RD_PHY_OLD [i]);
153
154                  log_printf(TRACE,Stat_List_unit,FUNCTION,"    * WRITE_RD - restore_old : %d",restore_old);
155
156                  {
157                    Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RD_PHY_OLD [i]);
158
159                    log_printf(TRACE,Stat_List_unit,FUNCTION,"    * WRITE_RD - num_reg_old : %d",num_reg);
160                 
161                    uint32_t bank = num_reg >> _param->_shift_gpr;
162                    uint32_t reg  = num_reg  & _param->_mask_gpr ;
163                    gpr_stat_list [bank][reg].retire_write_old(restore_old);
164                  }
165                  {
166                    Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RD_PHY_NEW [i]);
167
168                    log_printf(TRACE,Stat_List_unit,FUNCTION,"    * WRITE_RD - num_reg_new : %d",num_reg);
169
170                    uint32_t bank = num_reg >> _param->_shift_gpr;
171                    uint32_t reg  = num_reg  & _param->_mask_gpr ;
172                    gpr_stat_list [bank][reg].retire_write_new(restore_old);
173                  }
174                }
175
176              if (PORT_READ(in_RETIRE_WRITE_RE [i]))
177                {
178                  Tcontrol_t restore_old = PORT_READ(in_RETIRE_RESTORE_RE_PHY_OLD [i]);
179
180                  log_printf(TRACE,Stat_List_unit,FUNCTION,"    * WRITE_RE - restore_old : %d",restore_old);
181
182                  {
183                    Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RE_PHY_OLD [i]);
184
185                    log_printf(TRACE,Stat_List_unit,FUNCTION,"    * WRITE_RE - num_reg_new : %d",num_reg);
186
187                    uint32_t bank = num_reg >> _param->_shift_spr;
188                    uint32_t reg  = num_reg  & _param->_mask_spr ;
189                    spr_stat_list [bank][reg].retire_write_old(restore_old);
190                  }
191                  {
192                    Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RE_PHY_NEW [i]);
193
194                    log_printf(TRACE,Stat_List_unit,FUNCTION,"    * WRITE_RE - num_reg_new : %d",num_reg);
195
196                    uint32_t bank = num_reg >> _param->_shift_spr;
197                    uint32_t reg  = num_reg  & _param->_mask_spr ;
198                    spr_stat_list [bank][reg].retire_write_new(restore_old);
199                  }
200                }
201            }
202
203        for (uint32_t i=0; i<_param->_nb_reg_free; i++)
204          {
205            // =====================================================
206            // =====[ PUSH_GPR ]====================================
207            // =====================================================
208            if (internal_PUSH_GPR_VAL [i] and PORT_READ(in_PUSH_GPR_ACK [i]))
209              gpr_stat_list[internal_PUSH_GPR_NUM_BANK [i]][internal_GPR_PTR_FREE].free();
210           
211            // =====================================================
212            // =====[ PUSH_SPR ]====================================
213            // =====================================================
214            if (internal_PUSH_SPR_VAL [i] and PORT_READ(in_PUSH_SPR_ACK [i]))
215              spr_stat_list[internal_PUSH_SPR_NUM_BANK [i]][internal_SPR_PTR_FREE].free();
216          }
217
218        // Update pointer
219        internal_GPR_PTR_FREE = ((internal_GPR_PTR_FREE==0)?_param->_nb_general_register_by_bank:internal_GPR_PTR_FREE)-1;
220        internal_SPR_PTR_FREE = ((internal_SPR_PTR_FREE==0)?_param->_nb_special_register_by_bank:internal_SPR_PTR_FREE)-1;
221      }
222
223
224#if (DEBUG >= DEBUG_TRACE)
225    log_printf(TRACE,Stat_List_unit,FUNCTION,"  * Dump Stat List");
226    for (uint32_t i=0; i<_param->_nb_bank; i++)
227      for (uint32_t j=0; j<_param->_nb_general_register_by_bank; j++)
228        log_printf(TRACE,Stat_List_unit,FUNCTION,"    * GPR[%.4d][%.5d] (%.5d) - free %.1d, link %.1d, valid %.1d, counter %.4d",
229                   i,
230                   j,
231                   (i<<_param->_shift_gpr)|j,
232                   gpr_stat_list[i][j]._is_free,
233                   gpr_stat_list[i][j]._is_link,
234                   gpr_stat_list[i][j]._is_valid,
235                   gpr_stat_list[i][j]._counter);
236    for (uint32_t i=0; i<_param->_nb_bank; i++)
237      for (uint32_t j=0; j<_param->_nb_special_register_by_bank; j++)
238        log_printf(TRACE,Stat_List_unit,FUNCTION,"    * SPR[%.4d][%.5d] (%.5d) - free %.1d, link %.1d, valid %.1d, counter %.4d",
239                   i,
240                   j,
241                   (i<<_param->_shift_spr)|j,
242                   spr_stat_list[i][j]._is_free,
243                   spr_stat_list[i][j]._is_link,
244                   spr_stat_list[i][j]._is_valid,
245                   spr_stat_list[i][j]._counter);
246#endif
247
248#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
249    end_cycle ();
250#endif
251
252    log_end(Stat_List_unit,FUNCTION);
253  };
254
255}; // end namespace stat_list_unit
256}; // end namespace register_translation_unit
257}; // end namespace rename_unit
258}; // end namespace ooo_engine
259}; // end namespace multi_ooo_engine
260}; // end namespace core
261
262}; // end namespace behavioural
263}; // end namespace morpheo             
264#endif
Note: See TracBrowser for help on using the repository browser.