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

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

1) Stat_list : fix retire old and new register bug
2) Stat_list : remove read_counter and valid flag, because validation of destination is in retire step (not in commit step)
3) Model : add class Model (cf Morpheo.sim)
4) Allocation : alloc_interface_begin and alloc_interface_end to delete temporary array.
5) Script : add distexe.sh
6) Add Comparator, Multiplier, Divider. But this component are not implemented
7) Software : add Dhrystone

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