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

  • Property svn:keywords set to Id
File size: 7.7 KB
Line 
1#ifdef SYSTEMC
2/*
3 * $Id: Stat_List_unit_transition.cpp 88 2008-12-10 18:31:39Z 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              if (PORT_READ(in_INSERT_READ_RA [i]))
52                {
53                  Tgeneral_address_t num_reg = PORT_READ(in_INSERT_NUM_REG_RA_PHY [i]);
54                  uint32_t bank = num_reg >> _param->_shift_gpr;
55                  uint32_t reg  = num_reg  & _param->_mask_gpr ;
56                  gpr_stat_list [bank][reg].insert_read();
57                }
58
59              if (PORT_READ(in_INSERT_READ_RB [i]))
60                {
61                  Tgeneral_address_t num_reg = PORT_READ(in_INSERT_NUM_REG_RB_PHY [i]);
62                  uint32_t bank = num_reg >> _param->_shift_gpr;
63                  uint32_t reg  = num_reg  & _param->_mask_gpr ;
64                  gpr_stat_list [bank][reg].insert_read();
65                }
66
67              if (PORT_READ(in_INSERT_READ_RC [i]))
68                {
69                  Tgeneral_address_t num_reg = PORT_READ(in_INSERT_NUM_REG_RC_PHY [i]);
70                  uint32_t bank = num_reg >> _param->_shift_spr;
71                  uint32_t reg  = num_reg  & _param->_mask_spr ;
72                  spr_stat_list [bank][reg].insert_read();
73                }
74
75              if (PORT_READ(in_INSERT_WRITE_RD [i]))
76                {
77                  Tgeneral_address_t num_reg = PORT_READ(in_INSERT_NUM_REG_RD_PHY_NEW [i]);
78                  uint32_t bank = num_reg >> _param->_shift_gpr;
79                  uint32_t reg  = num_reg  & _param->_mask_gpr ;
80                  gpr_stat_list [bank][reg].insert_write();
81                }
82
83              if (PORT_READ(in_INSERT_WRITE_RE [i]))
84                {
85                  Tgeneral_address_t num_reg = PORT_READ(in_INSERT_NUM_REG_RE_PHY_NEW [i]);
86                  uint32_t bank = num_reg >> _param->_shift_spr;
87                  uint32_t reg  = num_reg  & _param->_mask_spr ;
88                  spr_stat_list [bank][reg].insert_write();
89                }
90            }
91
92        // =====================================================
93        // =====[ RETIRE ]======================================
94        // =====================================================
95        for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
96          if (PORT_READ(in_RETIRE_VAL[i]) and internal_RETIRE_ACK[i])
97            {
98              if (PORT_READ(in_RETIRE_READ_RA [i]))
99                {
100                  Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RA_PHY [i]);
101                  uint32_t bank = num_reg >> _param->_shift_gpr;
102                  uint32_t reg  = num_reg  & _param->_mask_gpr ;
103                  gpr_stat_list [bank][reg].retire_read();
104                }
105
106              if (PORT_READ(in_RETIRE_READ_RB [i]))
107                {
108                  Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RB_PHY [i]);
109                  uint32_t bank = num_reg >> _param->_shift_gpr;
110                  uint32_t reg  = num_reg  & _param->_mask_gpr ;
111                  gpr_stat_list [bank][reg].retire_read();
112                }
113
114              if (PORT_READ(in_RETIRE_READ_RC [i]))
115                {
116                  Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RC_PHY [i]);
117                  uint32_t bank = num_reg >> _param->_shift_spr;
118                  uint32_t reg  = num_reg  & _param->_mask_spr ;
119                  spr_stat_list [bank][reg].retire_read();
120                }
121
122              if (PORT_READ(in_RETIRE_WRITE_RD [i]))
123                {
124                  Tcontrol_t restore_old = PORT_READ(in_RETIRE_RESTORE_RD_PHY_OLD [i]);
125                  {
126                    Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RD_PHY_OLD [i]);
127                    uint32_t bank = num_reg >> _param->_shift_gpr;
128                    uint32_t reg  = num_reg  & _param->_mask_gpr ;
129                    gpr_stat_list [bank][reg].retire_write_old(restore_old);
130                  }
131                  {
132                    Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RD_PHY_NEW [i]);
133                    uint32_t bank = num_reg >> _param->_shift_gpr;
134                    uint32_t reg  = num_reg  & _param->_mask_gpr ;
135                    gpr_stat_list [bank][reg].retire_write_new(restore_old);
136                  }
137                }
138
139              if (PORT_READ(in_RETIRE_WRITE_RE [i]))
140                {
141                  Tcontrol_t restore_old = PORT_READ(in_RETIRE_RESTORE_RE_PHY_OLD [i]);
142                  {
143                    Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RE_PHY_OLD [i]);
144                    uint32_t bank = num_reg >> _param->_shift_spr;
145                    uint32_t reg  = num_reg  & _param->_mask_spr ;
146                    spr_stat_list [bank][reg].retire_write_old(restore_old);
147                  }
148                  {
149                    Tgeneral_address_t num_reg = PORT_READ(in_RETIRE_NUM_REG_RE_PHY_NEW [i]);
150                    uint32_t bank = num_reg >> _param->_shift_spr;
151                    uint32_t reg  = num_reg  & _param->_mask_spr ;
152                    spr_stat_list [bank][reg].retire_write_new(restore_old);
153                  }
154                }
155            }
156
157        for (uint32_t i=0; i<_param->_nb_reg_free; i++)
158          {
159            // =====================================================
160            // =====[ PUSH_GPR ]====================================
161            // =====================================================
162            if (internal_PUSH_GPR_VAL [i] and PORT_READ(in_PUSH_GPR_ACK [i]))
163              gpr_stat_list[internal_PUSH_GPR_NUM_BANK [i]][internal_GPR_PTR_FREE].free();
164           
165            // =====================================================
166            // =====[ PUSH_SPR ]====================================
167            // =====================================================
168            if (internal_PUSH_SPR_VAL [i] and PORT_READ(in_PUSH_SPR_ACK [i]))
169              spr_stat_list[internal_PUSH_SPR_NUM_BANK [i]][internal_SPR_PTR_FREE].free();
170          }
171
172        // Update pointer
173        internal_GPR_PTR_FREE = ((internal_GPR_PTR_FREE==0)?_param->_nb_general_register_by_bank:internal_GPR_PTR_FREE)-1;
174        internal_SPR_PTR_FREE = ((internal_SPR_PTR_FREE==0)?_param->_nb_special_register_by_bank:internal_SPR_PTR_FREE)-1;
175      }
176
177
178#if (DEBUG >= DEBUG_TRACE)
179    log_printf(TRACE,Stat_List_unit,FUNCTION,"  * Dump Stat List");
180    for (uint32_t i=0; i<_param->_nb_bank; i++)
181      for (uint32_t j=0; j<_param->_nb_general_register_by_bank; j++)
182        log_printf(TRACE,Stat_List_unit,FUNCTION,"    * GPR[%.4d][%.5d] (%.5d) - free %.1d, link %.1d, valid %.1d, counter %.4d",
183                   i,
184                   j,
185                   (i<<_param->_shift_gpr)|j,
186                   gpr_stat_list[i][j]._is_free,
187                   gpr_stat_list[i][j]._is_link,
188                   gpr_stat_list[i][j]._is_valid,
189                   gpr_stat_list[i][j]._counter);
190    for (uint32_t i=0; i<_param->_nb_bank; i++)
191      for (uint32_t j=0; j<_param->_nb_special_register_by_bank; j++)
192        log_printf(TRACE,Stat_List_unit,FUNCTION,"    * SPR[%.4d][%.5d] (%.5d) - free %.1d, link %.1d, valid %.1d, counter %.4d",
193                   i,
194                   j,
195                   (i<<_param->_shift_spr)|j,
196                   spr_stat_list[i][j]._is_free,
197                   spr_stat_list[i][j]._is_link,
198                   spr_stat_list[i][j]._is_valid,
199                   spr_stat_list[i][j]._counter);
200#endif
201
202#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
203    end_cycle ();
204#endif
205
206    log_end(Stat_List_unit,FUNCTION);
207  };
208
209}; // end namespace stat_list_unit
210}; // end namespace register_translation_unit
211}; // end namespace rename_unit
212}; // end namespace ooo_engine
213}; // end namespace multi_ooo_engine
214}; // end namespace core
215
216}; // end namespace behavioural
217}; // end namespace morpheo             
218#endif
Note: See TracBrowser for help on using the repository browser.