source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/SelfTest/src/test.cpp

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

1) Correct bug in link two signal
2) Fix error detected with valgrind
3) modif distexe script

  • Property svn:keywords set to Id
File size: 31.9 KB
Line 
1/*
2 * $Id: test.cpp 128 2009-06-26 08:43:23Z rosiere $
3 *
4 * [ Description ]
5 *
6 * Test
7 */
8
9#define NB_ITERATION  64
10#define CYCLE_MAX     (1024*NB_ITERATION)
11
12#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/SelfTest/include/test.h"
13#include "Common/include/Test.h"
14#include "Common/include/Max.h"
15#include "Behavioural/include/Allocation.h"
16
17void test (string name,
18           morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::register_address_translation_unit::Parameters * _param)
19{
20  msg(_("<%s> : Simulation SystemC.\n"),name.c_str());
21
22#ifdef STATISTICS
23  morpheo::behavioural::Parameters_Statistics * _parameters_statistics = new morpheo::behavioural::Parameters_Statistics (5,50);
24#endif
25
26  Tusage_t _usage = USE_ALL;
27
28//   _usage = usage_unset(_usage,USE_SYSTEMC              );
29//   _usage = usage_unset(_usage,USE_VHDL                 );
30//   _usage = usage_unset(_usage,USE_VHDL_TESTBENCH       );
31//   _usage = usage_unset(_usage,USE_VHDL_TESTBENCH_ASSERT);
32//   _usage = usage_unset(_usage,USE_POSITION             );
33//   _usage = usage_unset(_usage,USE_STATISTICS           );
34//   _usage = usage_unset(_usage,USE_INFORMATION          );
35
36  Register_Address_Translation_unit * _Register_Address_Translation_unit = new Register_Address_Translation_unit
37    (name.c_str(),
38#ifdef STATISTICS
39     _parameters_statistics,
40#endif
41     _param,
42     _usage);
43 
44#ifdef SYSTEMC
45  /*********************************************************************
46   * Déclarations des signaux
47   *********************************************************************/
48  string rename;
49
50  sc_clock              *  in_CLOCK  = new sc_clock ("clock", 1.0, 0.5);         
51  sc_signal<Tcontrol_t> *  in_NRESET = new sc_signal<Tcontrol_t> ("NRESET");
52
53  sc_signal<Tcontrol_t        >  **  in_RENAME_VAL               ;
54  sc_signal<Tcontrol_t        >  ** out_RENAME_ACK               ;
55  sc_signal<Tcontext_t        >  **  in_RENAME_FRONT_END_ID      ;
56  sc_signal<Tcontext_t        >  **  in_RENAME_CONTEXT_ID        ;
57  sc_signal<Tgeneral_address_t>  **  in_RENAME_NUM_REG_RA_LOG    ;
58  sc_signal<Tgeneral_address_t>  **  in_RENAME_NUM_REG_RB_LOG    ;
59  sc_signal<Tspecial_address_t>  **  in_RENAME_NUM_REG_RC_LOG    ;
60  sc_signal<Tgeneral_address_t>  **  in_RENAME_NUM_REG_RD_LOG    ;
61  sc_signal<Tspecial_address_t>  **  in_RENAME_NUM_REG_RE_LOG    ;
62  sc_signal<Tgeneral_address_t>  ** out_RENAME_NUM_REG_RA_PHY    ;
63  sc_signal<Tgeneral_address_t>  ** out_RENAME_NUM_REG_RB_PHY    ;
64  sc_signal<Tspecial_address_t>  ** out_RENAME_NUM_REG_RC_PHY    ;
65  sc_signal<Tgeneral_address_t>  ** out_RENAME_NUM_REG_RD_PHY_OLD;
66  sc_signal<Tspecial_address_t>  ** out_RENAME_NUM_REG_RE_PHY_OLD;
67
68  sc_signal<Tcontrol_t        >  **  in_INSERT_VAL               ;
69  sc_signal<Tcontrol_t        >  ** out_INSERT_ACK               ;
70//sc_signal<Tcontext_t        >  **  in_INSERT_FRONT_END_ID      ;
71//sc_signal<Tcontext_t        >  **  in_INSERT_CONTEXT_ID        ;
72  sc_signal<Tcontrol_t        >  **  in_INSERT_WRITE_RD          ;
73  sc_signal<Tcontrol_t        >  **  in_INSERT_WRITE_RE          ;
74  sc_signal<Tgeneral_address_t>  **  in_INSERT_NUM_REG_RD_LOG    ;
75  sc_signal<Tspecial_address_t>  **  in_INSERT_NUM_REG_RE_LOG    ;
76  sc_signal<Tgeneral_address_t>  **  in_INSERT_NUM_REG_RD_PHY    ;
77  sc_signal<Tspecial_address_t>  **  in_INSERT_NUM_REG_RE_PHY    ;
78
79  sc_signal<Tcontrol_t        >  **  in_RETIRE_VAL               ;
80  sc_signal<Tcontrol_t        >  ** out_RETIRE_ACK               ;
81  sc_signal<Tcontext_t        >  **  in_RETIRE_FRONT_END_ID      ;
82  sc_signal<Tcontext_t        >  **  in_RETIRE_CONTEXT_ID        ;
83  sc_signal<Tcontrol_t        >  **  in_RETIRE_WRITE_RD          ;
84  sc_signal<Tcontrol_t        >  **  in_RETIRE_WRITE_RE          ;
85  sc_signal<Tgeneral_address_t>  **  in_RETIRE_NUM_REG_RD_LOG    ;
86  sc_signal<Tspecial_address_t>  **  in_RETIRE_NUM_REG_RE_LOG    ;
87  sc_signal<Tgeneral_address_t>  **  in_RETIRE_NUM_REG_RD_PHY_NEW;
88  sc_signal<Tspecial_address_t>  **  in_RETIRE_NUM_REG_RE_PHY_NEW;
89  sc_signal<Tcontrol_t        >  ** out_RETIRE_RESTORE_RD_PHY_OLD;
90  sc_signal<Tcontrol_t        >  ** out_RETIRE_RESTORE_RE_PHY_OLD;
91  sc_signal<Tcontrol_t        >  ** out_RETIRE_RESTORE           ;
92
93  sc_signal<Tcontrol_t        > ***  in_RETIRE_EVENT_VAL         ;
94  sc_signal<Tcontrol_t        > *** out_RETIRE_EVENT_ACK         ;
95  sc_signal<Tevent_state_t    > ***  in_RETIRE_EVENT_STATE       ;
96
97  ALLOC1_SC_SIGNAL( in_RENAME_VAL               ," in_RENAME_VAL               ",Tcontrol_t        ,_param->_nb_inst_insert);
98  ALLOC1_SC_SIGNAL(out_RENAME_ACK               ,"out_RENAME_ACK               ",Tcontrol_t        ,_param->_nb_inst_insert);
99  ALLOC1_SC_SIGNAL( in_RENAME_FRONT_END_ID      ," in_RENAME_FRONT_END_ID      ",Tcontext_t        ,_param->_nb_inst_insert);
100  ALLOC1_SC_SIGNAL( in_RENAME_CONTEXT_ID        ," in_RENAME_CONTEXT_ID        ",Tcontext_t        ,_param->_nb_inst_insert);
101  ALLOC1_SC_SIGNAL( in_RENAME_NUM_REG_RA_LOG    ," in_RENAME_NUM_REG_RA_LOG    ",Tgeneral_address_t,_param->_nb_inst_insert);
102  ALLOC1_SC_SIGNAL( in_RENAME_NUM_REG_RB_LOG    ," in_RENAME_NUM_REG_RB_LOG    ",Tgeneral_address_t,_param->_nb_inst_insert);
103  ALLOC1_SC_SIGNAL( in_RENAME_NUM_REG_RC_LOG    ," in_RENAME_NUM_REG_RC_LOG    ",Tspecial_address_t,_param->_nb_inst_insert);
104  ALLOC1_SC_SIGNAL( in_RENAME_NUM_REG_RD_LOG    ," in_RENAME_NUM_REG_RD_LOG    ",Tgeneral_address_t,_param->_nb_inst_insert);
105  ALLOC1_SC_SIGNAL( in_RENAME_NUM_REG_RE_LOG    ," in_RENAME_NUM_REG_RE_LOG    ",Tspecial_address_t,_param->_nb_inst_insert);
106  ALLOC1_SC_SIGNAL(out_RENAME_NUM_REG_RA_PHY    ,"out_RENAME_NUM_REG_RA_PHY    ",Tgeneral_address_t,_param->_nb_inst_insert);
107  ALLOC1_SC_SIGNAL(out_RENAME_NUM_REG_RB_PHY    ,"out_RENAME_NUM_REG_RB_PHY    ",Tgeneral_address_t,_param->_nb_inst_insert);
108  ALLOC1_SC_SIGNAL(out_RENAME_NUM_REG_RC_PHY    ,"out_RENAME_NUM_REG_RC_PHY    ",Tspecial_address_t,_param->_nb_inst_insert);
109  ALLOC1_SC_SIGNAL(out_RENAME_NUM_REG_RD_PHY_OLD,"out_RENAME_NUM_REG_RD_PHY_OLD",Tgeneral_address_t,_param->_nb_inst_insert);
110  ALLOC1_SC_SIGNAL(out_RENAME_NUM_REG_RE_PHY_OLD,"out_RENAME_NUM_REG_RE_PHY_OLD",Tspecial_address_t,_param->_nb_inst_insert);
111
112  ALLOC1_SC_SIGNAL( in_INSERT_VAL               ," in_INSERT_VAL               ",Tcontrol_t        ,_param->_nb_inst_insert);
113  ALLOC1_SC_SIGNAL(out_INSERT_ACK               ,"out_INSERT_ACK               ",Tcontrol_t        ,_param->_nb_inst_insert);
114//ALLOC1_SC_SIGNAL( in_INSERT_FRONT_END_ID      ," in_INSERT_FRONT_END_ID      ",Tcontext_t        ,_param->_nb_inst_insert);
115//ALLOC1_SC_SIGNAL( in_INSERT_CONTEXT_ID        ," in_INSERT_CONTEXT_ID        ",Tcontext_t        ,_param->_nb_inst_insert);
116  ALLOC1_SC_SIGNAL( in_INSERT_WRITE_RD          ," in_INSERT_WRITE_RD          ",Tcontrol_t        ,_param->_nb_inst_insert);
117  ALLOC1_SC_SIGNAL( in_INSERT_WRITE_RE          ," in_INSERT_WRITE_RE          ",Tcontrol_t        ,_param->_nb_inst_insert);
118  ALLOC1_SC_SIGNAL( in_INSERT_NUM_REG_RD_LOG    ," in_INSERT_NUM_REG_RD_LOG    ",Tgeneral_address_t,_param->_nb_inst_insert);
119  ALLOC1_SC_SIGNAL( in_INSERT_NUM_REG_RE_LOG    ," in_INSERT_NUM_REG_RE_LOG    ",Tspecial_address_t,_param->_nb_inst_insert);
120  ALLOC1_SC_SIGNAL( in_INSERT_NUM_REG_RD_PHY    ," in_INSERT_NUM_REG_RD_PHY    ",Tgeneral_address_t,_param->_nb_inst_insert);
121  ALLOC1_SC_SIGNAL( in_INSERT_NUM_REG_RE_PHY    ," in_INSERT_NUM_REG_RE_PHY    ",Tspecial_address_t,_param->_nb_inst_insert);
122
123  ALLOC1_SC_SIGNAL( in_RETIRE_VAL               ," in_RETIRE_VAL               ",Tcontrol_t        ,_param->_nb_inst_retire);
124  ALLOC1_SC_SIGNAL(out_RETIRE_ACK               ,"out_RETIRE_ACK               ",Tcontrol_t        ,_param->_nb_inst_retire);
125  ALLOC1_SC_SIGNAL( in_RETIRE_FRONT_END_ID      ," in_RETIRE_FRONT_END_ID      ",Tcontext_t        ,_param->_nb_inst_retire);
126  ALLOC1_SC_SIGNAL( in_RETIRE_CONTEXT_ID        ," in_RETIRE_CONTEXT_ID        ",Tcontext_t        ,_param->_nb_inst_retire);
127  ALLOC1_SC_SIGNAL( in_RETIRE_WRITE_RD          ," in_RETIRE_WRITE_RD          ",Tcontrol_t        ,_param->_nb_inst_retire);
128  ALLOC1_SC_SIGNAL( in_RETIRE_WRITE_RE          ," in_RETIRE_WRITE_RE          ",Tcontrol_t        ,_param->_nb_inst_retire);
129  ALLOC1_SC_SIGNAL( in_RETIRE_NUM_REG_RD_LOG    ," in_RETIRE_NUM_REG_RD_LOG    ",Tgeneral_address_t,_param->_nb_inst_retire);
130  ALLOC1_SC_SIGNAL( in_RETIRE_NUM_REG_RE_LOG    ," in_RETIRE_NUM_REG_RE_LOG    ",Tspecial_address_t,_param->_nb_inst_retire);
131  ALLOC1_SC_SIGNAL( in_RETIRE_NUM_REG_RD_PHY_NEW," in_RETIRE_NUM_REG_RD_PHY_NEW",Tgeneral_address_t,_param->_nb_inst_retire);
132  ALLOC1_SC_SIGNAL( in_RETIRE_NUM_REG_RE_PHY_NEW," in_RETIRE_NUM_REG_RE_PHY_NEW",Tspecial_address_t,_param->_nb_inst_retire);
133  ALLOC1_SC_SIGNAL(out_RETIRE_RESTORE_RD_PHY_OLD,"out_RETIRE_RESTORE_RD_PHY_OLD",Tcontrol_t        ,_param->_nb_inst_retire);
134  ALLOC1_SC_SIGNAL(out_RETIRE_RESTORE_RE_PHY_OLD,"out_RETIRE_RESTORE_RE_PHY_OLD",Tcontrol_t        ,_param->_nb_inst_retire);
135  ALLOC1_SC_SIGNAL(out_RETIRE_RESTORE           ,"out_RETIRE_RESTORE           ",Tcontrol_t        ,_param->_nb_inst_retire);
136
137  ALLOC2_SC_SIGNAL( in_RETIRE_EVENT_VAL         ," in_RETIRE_EVENT_VAL         ",Tcontrol_t        ,_param->_nb_front_end,_param->_nb_context[it1]);
138  ALLOC2_SC_SIGNAL(out_RETIRE_EVENT_ACK         ,"out_RETIRE_EVENT_ACK         ",Tcontrol_t        ,_param->_nb_front_end,_param->_nb_context[it1]);
139  ALLOC2_SC_SIGNAL( in_RETIRE_EVENT_STATE       ," in_RETIRE_EVENT_STATE       ",Tevent_state_t    ,_param->_nb_front_end,_param->_nb_context[it1]);
140 
141  /********************************************************
142   * Instanciation
143   ********************************************************/
144 
145  msg(_("<%s> : Instanciation of _Register_Address_Translation_unit.\n"),name.c_str());
146
147  (*(_Register_Address_Translation_unit->in_CLOCK))        (*(in_CLOCK));
148  (*(_Register_Address_Translation_unit->in_NRESET))       (*(in_NRESET));
149
150  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RENAME_VAL               ,_param->_nb_inst_insert);
151  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit,out_RENAME_ACK               ,_param->_nb_inst_insert);
152  if (_param->_have_port_front_end_id)
153  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RENAME_FRONT_END_ID      ,_param->_nb_inst_insert);
154  if (_param->_have_port_context_id)
155  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RENAME_CONTEXT_ID        ,_param->_nb_inst_insert);
156  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RENAME_NUM_REG_RA_LOG    ,_param->_nb_inst_insert);
157  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RENAME_NUM_REG_RB_LOG    ,_param->_nb_inst_insert);
158  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RENAME_NUM_REG_RC_LOG    ,_param->_nb_inst_insert);
159  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RENAME_NUM_REG_RD_LOG    ,_param->_nb_inst_insert);
160  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RENAME_NUM_REG_RE_LOG    ,_param->_nb_inst_insert);
161  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit,out_RENAME_NUM_REG_RA_PHY    ,_param->_nb_inst_insert);
162  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit,out_RENAME_NUM_REG_RB_PHY    ,_param->_nb_inst_insert);
163  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit,out_RENAME_NUM_REG_RC_PHY    ,_param->_nb_inst_insert);
164  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit,out_RENAME_NUM_REG_RD_PHY_OLD,_param->_nb_inst_insert);
165  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit,out_RENAME_NUM_REG_RE_PHY_OLD,_param->_nb_inst_insert);
166
167  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_INSERT_VAL               ,_param->_nb_inst_insert);
168  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit,out_INSERT_ACK               ,_param->_nb_inst_insert);
169//if (_param->_have_port_front_end_id)
170//INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_INSERT_FRONT_END_ID      ,_param->_nb_inst_insert);
171//if (_param->_have_port_context_id)
172//INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_INSERT_CONTEXT_ID        ,_param->_nb_inst_insert);
173  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_INSERT_WRITE_RD          ,_param->_nb_inst_insert);
174  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_INSERT_WRITE_RE          ,_param->_nb_inst_insert);
175  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_INSERT_NUM_REG_RD_LOG    ,_param->_nb_inst_insert);
176  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_INSERT_NUM_REG_RE_LOG    ,_param->_nb_inst_insert);
177  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_INSERT_NUM_REG_RD_PHY    ,_param->_nb_inst_insert);
178  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_INSERT_NUM_REG_RE_PHY    ,_param->_nb_inst_insert);
179
180  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_VAL               ,_param->_nb_inst_retire);
181  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit,out_RETIRE_ACK               ,_param->_nb_inst_retire);
182  if (_param->_have_port_front_end_id)
183  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_FRONT_END_ID      ,_param->_nb_inst_retire);
184  if (_param->_have_port_context_id)
185  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_CONTEXT_ID        ,_param->_nb_inst_retire);
186  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_WRITE_RD          ,_param->_nb_inst_retire);
187  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_WRITE_RE          ,_param->_nb_inst_retire);
188  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_NUM_REG_RD_LOG    ,_param->_nb_inst_retire);
189  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_NUM_REG_RE_LOG    ,_param->_nb_inst_retire);
190  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_NUM_REG_RD_PHY_NEW,_param->_nb_inst_retire);
191  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_NUM_REG_RE_PHY_NEW,_param->_nb_inst_retire);
192  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit,out_RETIRE_RESTORE_RD_PHY_OLD,_param->_nb_inst_retire);
193  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit,out_RETIRE_RESTORE_RE_PHY_OLD,_param->_nb_inst_retire);
194  INSTANCE1_SC_SIGNAL(_Register_Address_Translation_unit,out_RETIRE_RESTORE           ,_param->_nb_inst_retire);
195
196  INSTANCE2_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_EVENT_VAL         ,_param->_nb_front_end, _param->_nb_context[it1]);
197  INSTANCE2_SC_SIGNAL(_Register_Address_Translation_unit,out_RETIRE_EVENT_ACK         ,_param->_nb_front_end, _param->_nb_context[it1]);
198  INSTANCE2_SC_SIGNAL(_Register_Address_Translation_unit, in_RETIRE_EVENT_STATE       ,_param->_nb_front_end, _param->_nb_context[it1]);
199
200  msg(_("<%s> : Start Simulation ............\n"),name.c_str());
201   
202  Time * _time = new Time();
203
204  /********************************************************
205   * Simulation - Begin
206   ********************************************************/
207
208  // Initialisation
209
210  const uint32_t seed = 0;
211//const uint32_t seed = static_cast<uint32_t>(time(NULL));
212
213  srand(seed);
214
215  const  int32_t percent_transaction_insert = 75;
216  const  int32_t percent_transaction_retire = 75;
217
218  uint32_t max_nb_context = max(_param->_nb_context,_param->_nb_front_end);
219
220  Tgeneral_address_t rat_gpr      [_param->_nb_front_end][max_nb_context][_param->_nb_general_register_logic];
221  Tspecial_address_t rat_spr      [_param->_nb_front_end][max_nb_context][_param->_nb_special_register_logic];
222  bool               rat_gpr_updt [_param->_nb_front_end][max_nb_context][_param->_nb_general_register_logic];
223  bool               rat_spr_updt [_param->_nb_front_end][max_nb_context][_param->_nb_special_register_logic];
224 
225  uint32_t gpr=1;
226  uint32_t spr=0;
227  for (uint32_t i=0; i<_param->_nb_front_end; i++)
228    for (uint32_t j=0; j<_param->_nb_context[i]; j++)
229      {
230        rat_gpr [i][j][0] = 0;
231
232        for (uint32_t k=1; k<_param->_nb_general_register_logic; k++)
233          {
234            rat_gpr      [i][j][k] = gpr++;
235            rat_gpr_updt [i][j][k] = false;
236          }
237        for (uint32_t k=0; k<_param->_nb_special_register_logic; k++)
238          {
239            rat_spr      [i][j][k] = spr++;
240            rat_spr_updt [i][j][k] = false;
241          }
242      }
243
244  SC_START(0);
245  LABEL("Initialisation");
246 
247  for (uint32_t i=0; i<_param->_nb_front_end; ++i)
248    for (uint32_t j=0; j<_param->_nb_context[i]; ++j)
249      in_RETIRE_EVENT_VAL [i][j]->write(1);
250
251  LABEL("Reset");
252  in_NRESET->write(0);
253  SC_START(5);
254  in_NRESET->write(1); 
255
256  LABEL("Loop of Test");
257
258  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
259    {
260      int32_t nb_request;
261     
262      LABEL("Iteration %d",iteration);
263
264      for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
265        {
266          in_RENAME_VAL [i]->write(0);
267          in_INSERT_VAL [i]->write(0);
268        }
269      for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
270        in_RETIRE_VAL [i]->write(0);
271
272      nb_request = 32;
273      while (nb_request > 1)
274        {
275          for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
276            {
277              Tcontrol_t val = (rand()%100)<percent_transaction_insert;
278             
279              Tcontext_t front_end_id = rand() % _param->_nb_front_end;
280
281              in_RENAME_VAL             [i]->write(val);
282              in_RENAME_FRONT_END_ID    [i]->write(front_end_id);
283              in_RENAME_CONTEXT_ID      [i]->write(rand() % (_param->_nb_context[front_end_id]));
284              in_RENAME_NUM_REG_RA_LOG  [i]->write((rand() % (_param->_nb_general_register_logic-1))+1);
285              in_RENAME_NUM_REG_RB_LOG  [i]->write((rand() % (_param->_nb_general_register_logic-1))+1);
286              in_RENAME_NUM_REG_RC_LOG  [i]->write( rand() %  _param->_nb_special_register_logic);
287              in_RENAME_NUM_REG_RD_LOG  [i]->write((rand() % (_param->_nb_general_register_logic-1))+1);
288              in_RENAME_NUM_REG_RE_LOG  [i]->write( rand() %  _param->_nb_special_register_logic);
289              in_INSERT_VAL             [i]->write(val);
290              in_INSERT_WRITE_RD        [i]->write(rand() % 2);
291              in_INSERT_WRITE_RE        [i]->write(rand() % 2);
292              in_INSERT_NUM_REG_RD_LOG  [i]->write((rand() % (_param->_nb_general_register_logic-1))+1);
293              in_INSERT_NUM_REG_RE_LOG  [i]->write( rand() %  _param->_nb_special_register_logic      );
294              in_INSERT_NUM_REG_RD_PHY  [i]->write((rand() % (_param->_nb_general_register      -1))+1);
295              in_INSERT_NUM_REG_RE_PHY  [i]->write( rand() %  _param->_nb_special_register            );
296            }
297
298          uint32_t retire_max = _param->_nb_inst_retire;
299          for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
300            {
301              // in order ...........
302
303              Tcontrol_t val = (i<retire_max) and ((rand()%100)<percent_transaction_retire);
304             
305              if (not val)
306                retire_max = i;
307
308              Tcontext_t front_end_id = rand() % _param->_nb_front_end;
309              Tcontext_t context_id   = rand() % (_param->_nb_context[front_end_id]);
310
311              in_RETIRE_VAL                [i]->write(val);
312              in_RETIRE_FRONT_END_ID       [i]->write(front_end_id);
313              in_RETIRE_CONTEXT_ID         [i]->write(context_id);
314              in_RETIRE_WRITE_RD           [i]->write(rand() % 2);
315              in_RETIRE_WRITE_RE           [i]->write(rand() % 2);
316              in_RETIRE_NUM_REG_RD_LOG     [i]->write(rand() % _param->_nb_general_register_logic);
317              in_RETIRE_NUM_REG_RE_LOG     [i]->write(rand() % _param->_nb_special_register_logic);
318              in_RETIRE_NUM_REG_RD_PHY_NEW [i]->write(rand() % _param->_nb_general_register);
319              in_RETIRE_NUM_REG_RE_PHY_NEW [i]->write(rand() % _param->_nb_special_register);
320
321              in_RETIRE_EVENT_STATE        [front_end_id][context_id]->write(EVENT_STATE_NO_EVENT);
322            }
323
324          SC_START(1);
325         
326
327          for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
328            {
329              Tcontext_t front_end_id = in_RENAME_FRONT_END_ID [i]->read();
330              Tcontext_t context_id   = in_RENAME_CONTEXT_ID   [i]->read();
331              if (in_INSERT_VAL [i]->read() and out_INSERT_ACK [i]->read())
332                {
333                  // ERROR BECAUSE write same register
334                  if (in_INSERT_WRITE_RD [i]->read() == 1)
335                    rat_gpr[front_end_id][context_id][in_INSERT_NUM_REG_RD_LOG[i]->read()] = in_INSERT_NUM_REG_RD_PHY[i]->read();
336                  if (in_INSERT_WRITE_RE [i]->read() == 1)
337                    rat_spr[front_end_id][context_id][in_INSERT_NUM_REG_RE_LOG[i]->read()] = in_INSERT_NUM_REG_RE_PHY[i]->read();
338                }
339            }
340
341          for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
342            {
343              TEST(Tcontrol_t,out_RETIRE_RESTORE_RD_PHY_OLD[i]->read(), 0);
344              TEST(Tcontrol_t,out_RETIRE_RESTORE_RE_PHY_OLD[i]->read(), 0);
345            }
346
347          for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
348            {
349              Tcontext_t front_end_id = in_RENAME_FRONT_END_ID [i]->read();
350              Tcontext_t context_id   = in_RENAME_CONTEXT_ID   [i]->read();
351              if (in_RENAME_VAL [i]->read() and out_RENAME_ACK [i]->read())
352                {
353                  nb_request --;
354
355                  TEST(Tgeneral_address_t,out_RENAME_NUM_REG_RA_PHY    [i]->read(), rat_gpr[front_end_id][context_id][in_RENAME_NUM_REG_RA_LOG[i]->read()]);
356                  TEST(Tgeneral_address_t,out_RENAME_NUM_REG_RB_PHY    [i]->read(), rat_gpr[front_end_id][context_id][in_RENAME_NUM_REG_RB_LOG[i]->read()]);
357                  TEST(Tspecial_address_t,out_RENAME_NUM_REG_RC_PHY    [i]->read(), rat_spr[front_end_id][context_id][in_RENAME_NUM_REG_RC_LOG[i]->read()]);
358                  TEST(Tgeneral_address_t,out_RENAME_NUM_REG_RD_PHY_OLD[i]->read(), rat_gpr[front_end_id][context_id][in_RENAME_NUM_REG_RD_LOG[i]->read()]);
359                  TEST(Tspecial_address_t,out_RENAME_NUM_REG_RE_PHY_OLD[i]->read(), rat_spr[front_end_id][context_id][in_RENAME_NUM_REG_RE_LOG[i]->read()]);
360                }
361
362            }
363        }
364
365      // Event
366      for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
367        {
368          in_RENAME_VAL [i]->write(0);
369          in_INSERT_VAL [i]->write(0);
370        }
371      for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
372        in_RETIRE_VAL [i]->write(0);
373     
374      Tcontext_t retire_front_end_id [_param->_nb_inst_retire];
375      Tcontext_t retire_context_id   [_param->_nb_inst_retire];
376     
377      for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
378        {
379          retire_front_end_id [i] = rand() % _param->_nb_front_end;
380          retire_context_id   [i] = rand() % (_param->_nb_context[retire_front_end_id [i]]);
381
382          for (uint32_t k=0; k<_param->_nb_general_register_logic; k++)
383            rat_gpr_updt [retire_front_end_id [i]][retire_context_id [i]][k] = false;
384          for (uint32_t k=0; k<_param->_nb_special_register_logic; k++)
385            rat_spr_updt [retire_front_end_id [i]][retire_context_id [i]][k] = false;
386        }
387     
388      for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
389        {
390          in_RETIRE_VAL                [i]->write(1);
391          in_RETIRE_FRONT_END_ID       [i]->write(retire_front_end_id [i]);
392          in_RETIRE_CONTEXT_ID         [i]->write(retire_context_id   [i]);
393          in_RETIRE_WRITE_RD           [i]->write(0);
394          in_RETIRE_WRITE_RE           [i]->write(0);
395         
396          in_RETIRE_EVENT_STATE [retire_front_end_id [i]][retire_context_id [i]]->write(EVENT_STATE_EVENT);
397
398          do
399            {
400              SC_START(1);
401            }
402          while (out_RETIRE_ACK[i]->read() == 0);
403         
404          in_RETIRE_VAL                [i]->write(0);
405        }
406     
407      SC_START(1);
408
409      // EVENT !!!!!!!!
410
411      nb_request = 32;
412      while (nb_request > 1)
413        {
414         
415          for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
416            {
417              Tcontrol_t val = (rand()%100)<percent_transaction_insert;
418             
419              Tcontext_t front_end_id = rand() % _param->_nb_front_end;
420
421              in_RENAME_VAL             [i]->write(val);
422              in_RENAME_FRONT_END_ID    [i]->write(front_end_id);
423              in_RENAME_CONTEXT_ID      [i]->write(rand() % (_param->_nb_context[front_end_id]));
424              in_RENAME_NUM_REG_RA_LOG  [i]->write(rand() % _param->_nb_general_register_logic);
425              in_RENAME_NUM_REG_RB_LOG  [i]->write(rand() % _param->_nb_general_register_logic);
426              in_RENAME_NUM_REG_RC_LOG  [i]->write(rand() % _param->_nb_special_register_logic);
427              in_RENAME_NUM_REG_RD_LOG  [i]->write(rand() % _param->_nb_general_register_logic);
428              in_RENAME_NUM_REG_RE_LOG  [i]->write(rand() % _param->_nb_special_register_logic);
429              in_INSERT_VAL             [i]->write(val);
430              in_INSERT_WRITE_RD        [i]->write(rand() % 2);
431              in_INSERT_WRITE_RE        [i]->write(rand() % 2);
432              in_INSERT_NUM_REG_RD_LOG  [i]->write(rand() % _param->_nb_general_register_logic);
433              in_INSERT_NUM_REG_RE_LOG  [i]->write(rand() % _param->_nb_special_register_logic);
434              in_INSERT_NUM_REG_RD_PHY  [i]->write(rand() % _param->_nb_general_register);
435              in_INSERT_NUM_REG_RE_PHY  [i]->write(rand() % _param->_nb_special_register);
436            }
437
438          uint32_t retire_max = _param->_nb_inst_retire;
439          for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
440            {
441              // in order ...........
442
443              Tcontrol_t val = (i<retire_max) and ((rand()%100)<percent_transaction_retire);
444             
445              if (not val)
446                retire_max = i;
447
448              in_RETIRE_VAL                [i]->write(val);
449              in_RETIRE_FRONT_END_ID       [i]->write(retire_front_end_id [i]);
450              in_RETIRE_CONTEXT_ID         [i]->write(retire_context_id   [i]);
451              in_RETIRE_WRITE_RD           [i]->write(rand() % 2);
452              in_RETIRE_WRITE_RE           [i]->write(rand() % 2);
453              in_RETIRE_NUM_REG_RD_LOG     [i]->write(rand() % _param->_nb_general_register_logic);
454              in_RETIRE_NUM_REG_RE_LOG     [i]->write(rand() % _param->_nb_special_register_logic);
455              in_RETIRE_NUM_REG_RD_PHY_NEW [i]->write(rand() % _param->_nb_general_register);
456              in_RETIRE_NUM_REG_RE_PHY_NEW [i]->write(rand() % _param->_nb_special_register);
457
458              in_RETIRE_EVENT_STATE [retire_front_end_id [i]][retire_context_id [i]]->write(EVENT_STATE_WAITEND);
459            }
460
461          SC_START(0);
462         
463
464          for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
465            {
466              Tcontext_t front_end_id = in_RENAME_FRONT_END_ID [i]->read();
467              Tcontext_t context_id   = in_RENAME_CONTEXT_ID   [i]->read();
468              if (in_INSERT_VAL [i]->read() and out_INSERT_ACK [i]->read())
469                {
470                  if (in_INSERT_WRITE_RD [i]->read() == 1)
471                    rat_gpr[front_end_id][context_id][in_INSERT_NUM_REG_RD_LOG[i]->read()] = in_INSERT_NUM_REG_RD_PHY[i]->read();
472                  if (in_INSERT_WRITE_RE [i]->read() == 1)
473                    rat_spr[front_end_id][context_id][in_INSERT_NUM_REG_RE_LOG[i]->read()] = in_INSERT_NUM_REG_RE_PHY[i]->read();
474                }
475            }
476
477          for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
478            {
479              LABEL("RETIRE[%d]",i);
480
481              Tcontext_t front_end_id = in_RETIRE_FRONT_END_ID [i]->read();
482              Tcontext_t context_id   = in_RETIRE_CONTEXT_ID   [i]->read();
483
484              LABEL("  * front_end_id : %d",front_end_id);
485              LABEL("  * context_id   : %d",context_id  );
486
487              if (in_RETIRE_VAL [i]->read() and out_RETIRE_ACK [i]->read())
488                {
489                  if (in_RETIRE_WRITE_RD [i]->read() == 1)
490                    {
491//                       LABEL("  * transaction and write rd");
492//                       LABEL("    * rd_log       : %d",in_RETIRE_NUM_REG_RD_LOG[i]->read());
493//                       LABEL("    * rat_gpr_updt : %d",rat_gpr_updt [front_end_id][context_id][in_RETIRE_NUM_REG_RD_LOG[i]->read()]);
494                      TEST(Tcontrol_t,out_RETIRE_RESTORE_RD_PHY_OLD[i]->read(), (rat_gpr_updt [front_end_id][context_id][in_RETIRE_NUM_REG_RD_LOG[i]->read()] == false));
495
496                      if (rat_gpr_updt [front_end_id][context_id][in_RETIRE_NUM_REG_RD_LOG[i]->read()] == false)
497                        rat_gpr[front_end_id][context_id][in_RETIRE_NUM_REG_RD_LOG[i]->read()] = in_RETIRE_NUM_REG_RD_PHY_NEW[i]->read();
498                      rat_gpr_updt [front_end_id][context_id][in_RETIRE_NUM_REG_RD_LOG[i]->read()] = true;
499                    }
500                  if (in_RETIRE_WRITE_RE [i]->read() == 1)
501                    {
502                      TEST(Tcontrol_t,out_RETIRE_RESTORE_RE_PHY_OLD[i]->read(), (rat_spr_updt [front_end_id][context_id][in_RETIRE_NUM_REG_RE_LOG[i]->read()] == false));
503
504                      if (rat_spr_updt [front_end_id][context_id][in_RETIRE_NUM_REG_RE_LOG[i]->read()] == false)
505                        rat_spr[front_end_id][context_id][in_RETIRE_NUM_REG_RE_LOG[i]->read()] = in_RETIRE_NUM_REG_RE_PHY_NEW[i]->read();
506                      rat_spr_updt [front_end_id][context_id][in_RETIRE_NUM_REG_RE_LOG[i]->read()] = true;
507                    }
508                }
509            }
510
511          SC_START(1);
512
513          for (uint32_t i=0; i<_param->_nb_inst_insert; i++)
514            {
515              Tcontext_t front_end_id = in_RENAME_FRONT_END_ID [i]->read();
516              Tcontext_t context_id   = in_RENAME_CONTEXT_ID   [i]->read();
517              if (in_RENAME_VAL [i]->read() and out_RENAME_ACK [i]->read())
518                {
519                  nb_request --;
520
521                  TEST(Tgeneral_address_t,out_RENAME_NUM_REG_RA_PHY    [i]->read(), rat_gpr[front_end_id][context_id][in_RENAME_NUM_REG_RA_LOG[i]->read()]);
522                  TEST(Tgeneral_address_t,out_RENAME_NUM_REG_RB_PHY    [i]->read(), rat_gpr[front_end_id][context_id][in_RENAME_NUM_REG_RB_LOG[i]->read()]);
523                  TEST(Tspecial_address_t,out_RENAME_NUM_REG_RC_PHY    [i]->read(), rat_spr[front_end_id][context_id][in_RENAME_NUM_REG_RC_LOG[i]->read()]);
524                  TEST(Tgeneral_address_t,out_RENAME_NUM_REG_RD_PHY_OLD[i]->read(), rat_gpr[front_end_id][context_id][in_RENAME_NUM_REG_RD_LOG[i]->read()]);
525                  TEST(Tspecial_address_t,out_RENAME_NUM_REG_RE_PHY_OLD[i]->read(), rat_spr[front_end_id][context_id][in_RENAME_NUM_REG_RE_LOG[i]->read()]);
526                }
527            }
528
529        }
530    }
531
532  /********************************************************
533   * Simulation - End
534   ********************************************************/
535
536  TEST_OK ("End of Simulation");
537  delete _time;
538
539  msg(_("<%s> : ............ Stop Simulation\n"),name.c_str());
540
541  delete in_CLOCK;
542  delete in_NRESET;
543
544
545  DELETE1_SC_SIGNAL( in_RENAME_VAL               ,_param->_nb_inst_insert);
546  DELETE1_SC_SIGNAL(out_RENAME_ACK               ,_param->_nb_inst_insert);
547  DELETE1_SC_SIGNAL( in_RENAME_FRONT_END_ID      ,_param->_nb_inst_insert);
548  DELETE1_SC_SIGNAL( in_RENAME_CONTEXT_ID        ,_param->_nb_inst_insert);
549  DELETE1_SC_SIGNAL( in_RENAME_NUM_REG_RA_LOG    ,_param->_nb_inst_insert);
550  DELETE1_SC_SIGNAL( in_RENAME_NUM_REG_RB_LOG    ,_param->_nb_inst_insert);
551  DELETE1_SC_SIGNAL( in_RENAME_NUM_REG_RC_LOG    ,_param->_nb_inst_insert);
552  DELETE1_SC_SIGNAL( in_RENAME_NUM_REG_RD_LOG    ,_param->_nb_inst_insert);
553  DELETE1_SC_SIGNAL( in_RENAME_NUM_REG_RE_LOG    ,_param->_nb_inst_insert);
554  DELETE1_SC_SIGNAL(out_RENAME_NUM_REG_RA_PHY    ,_param->_nb_inst_insert);
555  DELETE1_SC_SIGNAL(out_RENAME_NUM_REG_RB_PHY    ,_param->_nb_inst_insert);
556  DELETE1_SC_SIGNAL(out_RENAME_NUM_REG_RC_PHY    ,_param->_nb_inst_insert);
557  DELETE1_SC_SIGNAL(out_RENAME_NUM_REG_RD_PHY_OLD,_param->_nb_inst_insert);
558  DELETE1_SC_SIGNAL(out_RENAME_NUM_REG_RE_PHY_OLD,_param->_nb_inst_insert);
559
560  DELETE1_SC_SIGNAL( in_INSERT_VAL               ,_param->_nb_inst_insert);
561  DELETE1_SC_SIGNAL(out_INSERT_ACK               ,_param->_nb_inst_insert);
562//DELETE1_SC_SIGNAL( in_INSERT_FRONT_END_ID      ,_param->_nb_inst_insert);
563//DELETE1_SC_SIGNAL( in_INSERT_CONTEXT_ID        ,_param->_nb_inst_insert);
564  DELETE1_SC_SIGNAL( in_INSERT_WRITE_RD          ,_param->_nb_inst_insert);
565  DELETE1_SC_SIGNAL( in_INSERT_WRITE_RE          ,_param->_nb_inst_insert);
566  DELETE1_SC_SIGNAL( in_INSERT_NUM_REG_RD_LOG    ,_param->_nb_inst_insert);
567  DELETE1_SC_SIGNAL( in_INSERT_NUM_REG_RE_LOG    ,_param->_nb_inst_insert);
568  DELETE1_SC_SIGNAL( in_INSERT_NUM_REG_RD_PHY    ,_param->_nb_inst_insert);
569  DELETE1_SC_SIGNAL( in_INSERT_NUM_REG_RE_PHY    ,_param->_nb_inst_insert);
570
571  DELETE1_SC_SIGNAL( in_RETIRE_VAL               ,_param->_nb_inst_retire);
572  DELETE1_SC_SIGNAL(out_RETIRE_ACK               ,_param->_nb_inst_retire);
573  DELETE1_SC_SIGNAL( in_RETIRE_FRONT_END_ID      ,_param->_nb_inst_retire);
574  DELETE1_SC_SIGNAL( in_RETIRE_CONTEXT_ID        ,_param->_nb_inst_retire);
575  DELETE1_SC_SIGNAL( in_RETIRE_WRITE_RD          ,_param->_nb_inst_retire);
576  DELETE1_SC_SIGNAL( in_RETIRE_WRITE_RE          ,_param->_nb_inst_retire);
577  DELETE1_SC_SIGNAL( in_RETIRE_NUM_REG_RD_LOG    ,_param->_nb_inst_retire);
578  DELETE1_SC_SIGNAL( in_RETIRE_NUM_REG_RE_LOG    ,_param->_nb_inst_retire);
579  DELETE1_SC_SIGNAL( in_RETIRE_NUM_REG_RD_PHY_NEW,_param->_nb_inst_retire);
580  DELETE1_SC_SIGNAL( in_RETIRE_NUM_REG_RE_PHY_NEW,_param->_nb_inst_retire);
581  DELETE1_SC_SIGNAL(out_RETIRE_RESTORE_RD_PHY_OLD,_param->_nb_inst_retire);
582  DELETE1_SC_SIGNAL(out_RETIRE_RESTORE_RE_PHY_OLD,_param->_nb_inst_retire);
583  DELETE1_SC_SIGNAL(out_RETIRE_RESTORE           ,_param->_nb_inst_retire);
584
585  DELETE2_SC_SIGNAL( in_RETIRE_EVENT_VAL         ,_param->_nb_front_end,_param->_nb_context[it1]);
586  DELETE2_SC_SIGNAL(out_RETIRE_EVENT_ACK         ,_param->_nb_front_end,_param->_nb_context[it1]);
587  DELETE2_SC_SIGNAL( in_RETIRE_EVENT_STATE       ,_param->_nb_front_end,_param->_nb_context[it1]);
588#endif
589
590  delete _Register_Address_Translation_unit;
591#ifdef STATISTICS
592  delete _parameters_statistics;
593#endif
594}
Note: See TracBrowser for help on using the repository browser.