source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Reexecute_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: 42.7 KB
Line 
1/*
2 * $Id: test.cpp 128 2009-06-26 08:43:23Z rosiere $
3 *
4 * [ Description ]
5 *
6 * Test
7 */
8
9#include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Reexecute_unit/SelfTest/include/test.h"
10#include "Behavioural/include/Allocation.h"
11#include "Common/include/BitManipulation.h"
12
13class request_t
14{
15public : Tcontext_t         context_id   ;
16public : Tcontext_t         front_end_id ;
17public : Tpacket_t          packet_id    ;
18public : Tcontrol_t         commit_wen   ;
19public : Tcontrol_t         spr_access   ;
20public : Tcontrol_t         spr_wen      ;
21public : Tcontrol_t         spr_ren      ;
22public : Tcontrol_t         reexecute    ;
23public : Ttype_t            type         ;
24public : Toperation_t       operation    ;
25public : Tgeneral_data_t    num_group    ;
26public : Tgeneral_data_t    num_reg      ;
27public : Tgeneral_data_t    address      ;
28public : Tgeneral_data_t    data         ;
29public : Tcontrol_t         write_rd     ;
30public : Tgeneral_address_t num_reg_rd   ;
31public : Tspecial_data_t    flags        ;
32public : Texception_t       exception    ;
33public : Tcontrol_t         no_sequence  ;
34 
35public : void init (morpheo::behavioural::core::multi_ooo_engine::ooo_engine::reexecute_unit::Parameters * _param, Tpacket_t _packet_id)
36  {
37    context_id   = range<Tcontext_t        >(rand(),_param->_size_context_id         );
38    front_end_id = range<Tcontext_t        >(rand(),_param->_size_front_end_id       );
39    packet_id    = _packet_id;
40    num_group    = (rand()%2)?GROUP_DCACHE:GROUP_POWER_MANAGEMENT;
41    num_reg      = packet_id;
42    data         = range<Tgeneral_data_t   >(rand(),_param->_size_general_data       );
43    num_reg_rd   = range<Tspecial_address_t>(rand(),_param->_size_special_register   );
44    flags        = range<Tspecial_data_t   >(rand(),_param->_size_special_data       );
45
46    switch (rand()%4)
47      {
48      case 0  : exception = EXCEPTION_ALU_SPR_ACCESS_MUST_WRITE; break;
49      case 1  : exception = EXCEPTION_ALU_SPR_ACCESS_MUST_READ ; break;
50      default : exception = EXCEPTION_NONE;
51      }
52
53    no_sequence  = rand()%2;
54
55    address      = (num_group << 11)+num_reg;
56   
57
58    spr_wen      = (exception ==  EXCEPTION_ALU_SPR_ACCESS_MUST_WRITE);
59    spr_ren      = (exception ==  EXCEPTION_ALU_SPR_ACCESS_MUST_READ );
60    spr_access   = spr_wen or spr_ren;
61
62    reexecute    = spr_ren or (spr_wen and ((num_group == GROUP_DCACHE) and
63                                            ((num_reg == SPR_DCBPR) or
64                                             (num_reg == SPR_DCBFR) or
65                                             (num_reg == SPR_DCBIR) or
66                                             (num_reg == SPR_DCBLR))));
67
68    commit_wen   = not reexecute;
69
70    if (not spr_access)
71      {
72        write_rd  = 0;
73        type      = TYPE_SHIFT;
74        operation = OPERATION_SHIFT_L_SRA;
75      }
76    else
77      if (spr_ren)
78        {
79          write_rd  = 1;
80          type      = TYPE_ALU;
81          operation = OPERATION_ALU_L_OR;
82        }
83      else
84        {
85          write_rd = 0;
86          type     = TYPE_MEMORY;
87          switch (num_reg)
88            {
89            case SPR_DCBPR : {operation = OPERATION_MEMORY_PREFETCH  ; break;}
90            case SPR_DCBFR : {operation = OPERATION_MEMORY_FLUSH     ; break;}
91            case SPR_DCBIR : {operation = OPERATION_MEMORY_INVALIDATE; break;}
92            case SPR_DCBLR : {operation = OPERATION_MEMORY_LOCK      ; break;}
93            default        : break;
94            }
95        }
96
97  }
98};
99
100
101void test (string name,
102           morpheo::behavioural::core::multi_ooo_engine::ooo_engine::reexecute_unit::Parameters * _param)
103{
104  msg(_("<%s> : Simulation SystemC.\n"),name.c_str());
105
106#ifdef STATISTICS
107  morpheo::behavioural::Parameters_Statistics * _parameters_statistics = new morpheo::behavioural::Parameters_Statistics (5,CYCLE_MAX);
108#endif
109
110  Tusage_t _usage = USE_ALL;
111
112//   _usage = usage_unset(_usage,USE_SYSTEMC              );
113//   _usage = usage_unset(_usage,USE_VHDL                 );
114//   _usage = usage_unset(_usage,USE_VHDL_TESTBENCH       );
115//   _usage = usage_unset(_usage,USE_VHDL_TESTBENCH_ASSERT);
116//   _usage = usage_unset(_usage,USE_POSITION             );
117   _usage = usage_unset(_usage,USE_STATISTICS           );
118//   _usage = usage_unset(_usage,USE_INFORMATION          );
119
120  Reexecute_unit * _Reexecute_unit = new Reexecute_unit
121    (name.c_str(),
122#ifdef STATISTICS
123     _parameters_statistics,
124#endif
125     _param,
126     _usage);
127 
128#ifdef SYSTEMC
129  if (usage_is_set(_usage,USE_SYSTEMC))
130    {
131  /*********************************************************************
132   * Déclarations des signaux
133   *********************************************************************/
134  string rename;
135
136  sc_clock              *  in_CLOCK  = new sc_clock ("clock", 1.0, 0.5);         
137  sc_signal<Tcontrol_t> *  in_NRESET = new sc_signal<Tcontrol_t> ("NRESET");
138
139  sc_signal<Tcontrol_t         > ***  in_EXECUTE_LOOP_VAL                     ;
140  sc_signal<Tcontrol_t         > *** out_EXECUTE_LOOP_ACK                     ;
141  sc_signal<Tcontext_t         > ***  in_EXECUTE_LOOP_CONTEXT_ID              ;
142  sc_signal<Tcontext_t         > ***  in_EXECUTE_LOOP_FRONT_END_ID            ;
143  sc_signal<Tpacket_t          > ***  in_EXECUTE_LOOP_PACKET_ID               ;
144//sc_signal<Toperation_t       > ***  in_EXECUTE_LOOP_OPERATION               ;
145//sc_signal<Ttype_t            > ***  in_EXECUTE_LOOP_TYPE                    ;
146  sc_signal<Tspecial_data_t    > ***  in_EXECUTE_LOOP_FLAGS                   ;
147  sc_signal<Texception_t       > ***  in_EXECUTE_LOOP_EXCEPTION               ;
148  sc_signal<Tcontrol_t         > ***  in_EXECUTE_LOOP_NO_SEQUENCE             ;
149  sc_signal<Tgeneral_data_t    > ***  in_EXECUTE_LOOP_ADDRESS                 ;
150  sc_signal<Tgeneral_data_t    > ***  in_EXECUTE_LOOP_DATA                    ;
151
152  sc_signal<Tcontrol_t         >  ** out_COMMIT_VAL                           ;
153  sc_signal<Tcontrol_t         >  **  in_COMMIT_ACK                           ;
154  sc_signal<Tcontrol_t         >  ** out_COMMIT_WEN                           ;
155  sc_signal<Tcontext_t         >  ** out_COMMIT_CONTEXT_ID                    ;
156  sc_signal<Tcontext_t         >  ** out_COMMIT_FRONT_END_ID                  ;
157  sc_signal<Tpacket_t          >  ** out_COMMIT_PACKET_ID                     ;
158//sc_signal<Toperation_t       >  ** out_COMMIT_OPERATION                     ;
159//sc_signal<Ttype_t            >  ** out_COMMIT_TYPE                          ;
160  sc_signal<Tspecial_data_t    >  ** out_COMMIT_FLAGS                         ;
161  sc_signal<Texception_t       >  ** out_COMMIT_EXCEPTION                     ;
162  sc_signal<Tcontrol_t         >  ** out_COMMIT_NO_SEQUENCE                   ;
163  sc_signal<Tgeneral_data_t    >  ** out_COMMIT_ADDRESS                       ;
164  sc_signal<Tgeneral_address_t >  **  in_COMMIT_NUM_REG_RD                    ;
165
166  sc_signal<Tcontrol_t         >  ** out_SPR_VAL                              ;
167  sc_signal<Tcontrol_t         >  **  in_SPR_ACK                              ;
168  sc_signal<Tcontrol_t         >  ** out_SPR_WEN                              ;
169  sc_signal<Tcontext_t         >  ** out_SPR_CONTEXT_ID                       ;
170  sc_signal<Tcontext_t         >  ** out_SPR_FRONT_END_ID                     ;
171  sc_signal<Tspr_address_t     >  ** out_SPR_NUM_GROUP                        ;
172  sc_signal<Tspr_address_t     >  ** out_SPR_NUM_REG                          ;
173  sc_signal<Tspr_t             >  ** out_SPR_WDATA                            ;
174  sc_signal<Tspr_t             >  **  in_SPR_RDATA                            ;
175  sc_signal<Tcontrol_t         >  **  in_SPR_INVALID                          ;
176
177  sc_signal<Tcontrol_t         >  **  in_REEXECUTE_ROB_VAL                    ;
178  sc_signal<Tcontrol_t         >  ** out_REEXECUTE_ROB_ACK                    ;
179  sc_signal<Tcontext_t         >  **  in_REEXECUTE_ROB_CONTEXT_ID             ;
180  sc_signal<Tcontext_t         >  **  in_REEXECUTE_ROB_FRONT_END_ID           ;
181  sc_signal<Tpacket_t          >  **  in_REEXECUTE_ROB_PACKET_ID              ;
182  sc_signal<Toperation_t       >  **  in_REEXECUTE_ROB_OPERATION              ;
183  sc_signal<Ttype_t            >  **  in_REEXECUTE_ROB_TYPE                   ;
184  sc_signal<Tlsq_ptr_t         >  **  in_REEXECUTE_ROB_STORE_QUEUE_PTR_WRITE  ;
185
186  sc_signal<Tcontrol_t         >  ** out_REEXECUTE_VAL                        ;
187  sc_signal<Tcontrol_t         >  **  in_REEXECUTE_ACK                        ;
188  sc_signal<Tcontext_t         >  ** out_REEXECUTE_CONTEXT_ID                 ;
189  sc_signal<Tcontext_t         >  ** out_REEXECUTE_FRONT_END_ID               ;
190  sc_signal<Tpacket_t          >  ** out_REEXECUTE_PACKET_ID                  ;
191  sc_signal<Toperation_t       >  ** out_REEXECUTE_OPERATION                  ;
192  sc_signal<Ttype_t            >  ** out_REEXECUTE_TYPE                       ;
193  sc_signal<Tlsq_ptr_t         >  ** out_REEXECUTE_STORE_QUEUE_PTR_WRITE      ;
194  sc_signal<Tlsq_ptr_t         >  ** out_REEXECUTE_STORE_QUEUE_PTR_READ       ;
195  sc_signal<Tcontrol_t         >  ** out_REEXECUTE_STORE_QUEUE_EMPTY          ;
196  sc_signal<Tlsq_ptr_t         >  ** out_REEXECUTE_LOAD_QUEUE_PTR_WRITE       ;
197  sc_signal<Tcontrol_t         >  ** out_REEXECUTE_HAS_IMMEDIAT               ;
198  sc_signal<Tgeneral_data_t    >  ** out_REEXECUTE_IMMEDIAT                   ;
199  sc_signal<Tcontrol_t         >  ** out_REEXECUTE_READ_RA                    ;
200  sc_signal<Tgeneral_address_t >  ** out_REEXECUTE_NUM_REG_RA                 ;
201  sc_signal<Tcontrol_t         >  ** out_REEXECUTE_READ_RB                    ;
202  sc_signal<Tgeneral_address_t >  ** out_REEXECUTE_NUM_REG_RB                 ;
203  sc_signal<Tcontrol_t         >  ** out_REEXECUTE_READ_RC                    ;
204  sc_signal<Tspecial_address_t >  ** out_REEXECUTE_NUM_REG_RC                 ;
205  sc_signal<Tcontrol_t         >  ** out_REEXECUTE_WRITE_RD                   ;
206  sc_signal<Tgeneral_address_t >  ** out_REEXECUTE_NUM_REG_RD                 ;
207  sc_signal<Tcontrol_t         >  ** out_REEXECUTE_WRITE_RE                   ;
208  sc_signal<Tspecial_address_t >  ** out_REEXECUTE_NUM_REG_RE                 ;
209
210  ALLOC2_SC_SIGNAL( in_EXECUTE_LOOP_VAL                     ," in_EXECUTE_LOOP_VAL                   ",Tcontrol_t         ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
211  ALLOC2_SC_SIGNAL(out_EXECUTE_LOOP_ACK                     ,"out_EXECUTE_LOOP_ACK                   ",Tcontrol_t         ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
212  ALLOC2_SC_SIGNAL( in_EXECUTE_LOOP_CONTEXT_ID              ," in_EXECUTE_LOOP_CONTEXT_ID            ",Tcontext_t         ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
213  ALLOC2_SC_SIGNAL( in_EXECUTE_LOOP_FRONT_END_ID            ," in_EXECUTE_LOOP_FRONT_END_ID          ",Tcontext_t         ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
214  ALLOC2_SC_SIGNAL( in_EXECUTE_LOOP_PACKET_ID               ," in_EXECUTE_LOOP_PACKET_ID             ",Tpacket_t          ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
215//ALLOC2_SC_SIGNAL( in_EXECUTE_LOOP_OPERATION               ," in_EXECUTE_LOOP_OPERATION             ",Toperation_t       ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
216//ALLOC2_SC_SIGNAL( in_EXECUTE_LOOP_TYPE                    ," in_EXECUTE_LOOP_TYPE                  ",Ttype_t            ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
217  ALLOC2_SC_SIGNAL( in_EXECUTE_LOOP_FLAGS                   ," in_EXECUTE_LOOP_FLAGS                 ",Tspecial_data_t    ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
218  ALLOC2_SC_SIGNAL( in_EXECUTE_LOOP_EXCEPTION               ," in_EXECUTE_LOOP_EXCEPTION             ",Texception_t       ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
219  ALLOC2_SC_SIGNAL( in_EXECUTE_LOOP_NO_SEQUENCE             ," in_EXECUTE_LOOP_NO_SEQUENCE           ",Tcontrol_t         ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
220  ALLOC2_SC_SIGNAL( in_EXECUTE_LOOP_ADDRESS                 ," in_EXECUTE_LOOP_ADDRESS               ",Tgeneral_data_t    ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
221  ALLOC2_SC_SIGNAL( in_EXECUTE_LOOP_DATA                    ," in_EXECUTE_LOOP_DATA                  ",Tgeneral_data_t    ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
222
223  ALLOC1_SC_SIGNAL(out_COMMIT_VAL                           ,"out_COMMIT_VAL                         ",Tcontrol_t         ,_param->_nb_inst_commit);
224  ALLOC1_SC_SIGNAL( in_COMMIT_ACK                           ," in_COMMIT_ACK                         ",Tcontrol_t         ,_param->_nb_inst_commit);
225  ALLOC1_SC_SIGNAL(out_COMMIT_WEN                           ,"out_COMMIT_WEN                         ",Tcontrol_t         ,_param->_nb_inst_commit);
226//ALLOC1_SC_SIGNAL(out_COMMIT_CONTEXT_ID                    ,"out_COMMIT_CONTEXT_ID                  ",Tcontext_t         ,_param->_nb_inst_commit);
227//ALLOC1_SC_SIGNAL(out_COMMIT_FRONT_END_ID                  ,"out_COMMIT_FRONT_END_ID                ",Tcontext_t         ,_param->_nb_inst_commit);
228  ALLOC1_SC_SIGNAL(out_COMMIT_PACKET_ID                     ,"out_COMMIT_PACKET_ID                   ",Tpacket_t          ,_param->_nb_inst_commit);
229//ALLOC1_SC_SIGNAL(out_COMMIT_OPERATION                     ,"out_COMMIT_OPERATION                   ",Toperation_t       ,_param->_nb_inst_commit);
230//ALLOC1_SC_SIGNAL(out_COMMIT_TYPE                          ,"out_COMMIT_TYPE                        ",Ttype_t            ,_param->_nb_inst_commit);
231  ALLOC1_SC_SIGNAL(out_COMMIT_FLAGS                         ,"out_COMMIT_FLAGS                       ",Tspecial_data_t    ,_param->_nb_inst_commit);
232  ALLOC1_SC_SIGNAL(out_COMMIT_EXCEPTION                     ,"out_COMMIT_EXCEPTION                   ",Texception_t       ,_param->_nb_inst_commit);
233  ALLOC1_SC_SIGNAL(out_COMMIT_NO_SEQUENCE                   ,"out_COMMIT_NO_SEQUENCE                 ",Tcontrol_t         ,_param->_nb_inst_commit);
234  ALLOC1_SC_SIGNAL(out_COMMIT_ADDRESS                       ,"out_COMMIT_ADDRESS                     ",Tgeneral_data_t    ,_param->_nb_inst_commit);
235  ALLOC1_SC_SIGNAL( in_COMMIT_NUM_REG_RD                    ," in_COMMIT_NUM_REG_RD                  ",Tgeneral_address_t ,_param->_nb_inst_commit);
236
237  ALLOC1_SC_SIGNAL(out_SPR_VAL                              ,"out_SPR_VAL                            ",Tcontrol_t         ,_param->_nb_inst_reexecute);
238  ALLOC1_SC_SIGNAL( in_SPR_ACK                              ," in_SPR_ACK                            ",Tcontrol_t         ,_param->_nb_inst_reexecute);
239  ALLOC1_SC_SIGNAL(out_SPR_WEN                              ,"out_SPR_WEN                            ",Tcontrol_t         ,_param->_nb_inst_reexecute);
240  ALLOC1_SC_SIGNAL(out_SPR_CONTEXT_ID                       ,"out_SPR_CONTEXT_ID                     ",Tcontext_t         ,_param->_nb_inst_reexecute);
241  ALLOC1_SC_SIGNAL(out_SPR_FRONT_END_ID                     ,"out_SPR_FRONT_END_ID                   ",Tcontext_t         ,_param->_nb_inst_reexecute);
242  ALLOC1_SC_SIGNAL(out_SPR_NUM_GROUP                        ,"out_SPR_NUM_GROUP                      ",Tspr_address_t     ,_param->_nb_inst_reexecute);
243  ALLOC1_SC_SIGNAL(out_SPR_NUM_REG                          ,"out_SPR_NUM_REG                        ",Tspr_address_t     ,_param->_nb_inst_reexecute);
244  ALLOC1_SC_SIGNAL(out_SPR_WDATA                            ,"out_SPR_WDATA                          ",Tspr_t             ,_param->_nb_inst_reexecute);
245  ALLOC1_SC_SIGNAL( in_SPR_RDATA                            ," in_SPR_RDATA                          ",Tspr_t             ,_param->_nb_inst_reexecute);
246  ALLOC1_SC_SIGNAL( in_SPR_INVALID                          ," in_SPR_INVALID                        ",Tcontrol_t         ,_param->_nb_inst_reexecute);
247
248  ALLOC1_SC_SIGNAL( in_REEXECUTE_ROB_VAL                    ," in_REEXECUTE_ROB_VAL                  ",Tcontrol_t         ,_param->_nb_inst_reexecute);
249  ALLOC1_SC_SIGNAL(out_REEXECUTE_ROB_ACK                    ,"out_REEXECUTE_ROB_ACK                  ",Tcontrol_t         ,_param->_nb_inst_reexecute);
250  ALLOC1_SC_SIGNAL( in_REEXECUTE_ROB_CONTEXT_ID             ," in_REEXECUTE_ROB_CONTEXT_ID           ",Tcontext_t         ,_param->_nb_inst_reexecute);
251  ALLOC1_SC_SIGNAL( in_REEXECUTE_ROB_FRONT_END_ID           ," in_REEXECUTE_ROB_FRONT_END_ID         ",Tcontext_t         ,_param->_nb_inst_reexecute);
252  ALLOC1_SC_SIGNAL( in_REEXECUTE_ROB_PACKET_ID              ," in_REEXECUTE_ROB_PACKET_ID            ",Tpacket_t          ,_param->_nb_inst_reexecute);
253  ALLOC1_SC_SIGNAL( in_REEXECUTE_ROB_OPERATION              ," in_REEXECUTE_ROB_OPERATION            ",Toperation_t       ,_param->_nb_inst_reexecute);
254  ALLOC1_SC_SIGNAL( in_REEXECUTE_ROB_TYPE                   ," in_REEXECUTE_ROB_TYPE                 ",Ttype_t            ,_param->_nb_inst_reexecute);
255  ALLOC1_SC_SIGNAL( in_REEXECUTE_ROB_STORE_QUEUE_PTR_WRITE  ," in_REEXECUTE_ROB_STORE_QUEUE_PTR_WRITE",Tlsq_ptr_t         ,_param->_nb_inst_reexecute);
256
257  ALLOC1_SC_SIGNAL(out_REEXECUTE_VAL                        ,"out_REEXECUTE_VAL                      ",Tcontrol_t         ,_param->_nb_inst_reexecute);
258  ALLOC1_SC_SIGNAL( in_REEXECUTE_ACK                        ," in_REEXECUTE_ACK                      ",Tcontrol_t         ,_param->_nb_inst_reexecute);
259  ALLOC1_SC_SIGNAL(out_REEXECUTE_CONTEXT_ID                 ,"out_REEXECUTE_CONTEXT_ID               ",Tcontext_t         ,_param->_nb_inst_reexecute);
260  ALLOC1_SC_SIGNAL(out_REEXECUTE_FRONT_END_ID               ,"out_REEXECUTE_FRONT_END_ID             ",Tcontext_t         ,_param->_nb_inst_reexecute);
261  ALLOC1_SC_SIGNAL(out_REEXECUTE_PACKET_ID                  ,"out_REEXECUTE_PACKET_ID                ",Tpacket_t          ,_param->_nb_inst_reexecute);
262  ALLOC1_SC_SIGNAL(out_REEXECUTE_OPERATION                  ,"out_REEXECUTE_OPERATION                ",Toperation_t       ,_param->_nb_inst_reexecute);
263  ALLOC1_SC_SIGNAL(out_REEXECUTE_TYPE                       ,"out_REEXECUTE_TYPE                     ",Ttype_t            ,_param->_nb_inst_reexecute);
264  ALLOC1_SC_SIGNAL(out_REEXECUTE_STORE_QUEUE_PTR_WRITE      ,"out_REEXECUTE_STORE_QUEUE_PTR_WRITE    ",Tlsq_ptr_t         ,_param->_nb_inst_reexecute);
265  ALLOC1_SC_SIGNAL(out_REEXECUTE_STORE_QUEUE_PTR_READ       ,"out_REEXECUTE_STORE_QUEUE_PTR_READ     ",Tlsq_ptr_t         ,_param->_nb_inst_reexecute);
266  ALLOC1_SC_SIGNAL(out_REEXECUTE_STORE_QUEUE_EMPTY          ,"out_REEXECUTE_STORE_QUEUE_EMPTY        ",Tcontrol_t         ,_param->_nb_inst_reexecute);
267  ALLOC1_SC_SIGNAL(out_REEXECUTE_LOAD_QUEUE_PTR_WRITE       ,"out_REEXECUTE_LOAD_QUEUE_PTR_WRITE     ",Tlsq_ptr_t         ,_param->_nb_inst_reexecute);
268  ALLOC1_SC_SIGNAL(out_REEXECUTE_HAS_IMMEDIAT               ,"out_REEXECUTE_HAS_IMMEDIAT             ",Tcontrol_t         ,_param->_nb_inst_reexecute);
269  ALLOC1_SC_SIGNAL(out_REEXECUTE_IMMEDIAT                   ,"out_REEXECUTE_IMMEDIAT                 ",Tgeneral_data_t    ,_param->_nb_inst_reexecute);
270  ALLOC1_SC_SIGNAL(out_REEXECUTE_READ_RA                    ,"out_REEXECUTE_READ_RA                  ",Tcontrol_t         ,_param->_nb_inst_reexecute);
271  ALLOC1_SC_SIGNAL(out_REEXECUTE_NUM_REG_RA                 ,"out_REEXECUTE_NUM_REG_RA               ",Tgeneral_address_t ,_param->_nb_inst_reexecute);
272  ALLOC1_SC_SIGNAL(out_REEXECUTE_READ_RB                    ,"out_REEXECUTE_READ_RB                  ",Tcontrol_t         ,_param->_nb_inst_reexecute);
273  ALLOC1_SC_SIGNAL(out_REEXECUTE_NUM_REG_RB                 ,"out_REEXECUTE_NUM_REG_RB               ",Tgeneral_address_t ,_param->_nb_inst_reexecute);
274  ALLOC1_SC_SIGNAL(out_REEXECUTE_READ_RC                    ,"out_REEXECUTE_READ_RC                  ",Tcontrol_t         ,_param->_nb_inst_reexecute);
275  ALLOC1_SC_SIGNAL(out_REEXECUTE_NUM_REG_RC                 ,"out_REEXECUTE_NUM_REG_RC               ",Tspecial_address_t ,_param->_nb_inst_reexecute);
276  ALLOC1_SC_SIGNAL(out_REEXECUTE_WRITE_RD                   ,"out_REEXECUTE_WRITE_RD                 ",Tcontrol_t         ,_param->_nb_inst_reexecute);
277  ALLOC1_SC_SIGNAL(out_REEXECUTE_NUM_REG_RD                 ,"out_REEXECUTE_NUM_REG_RD               ",Tgeneral_address_t ,_param->_nb_inst_reexecute);
278  ALLOC1_SC_SIGNAL(out_REEXECUTE_WRITE_RE                   ,"out_REEXECUTE_WRITE_RE                 ",Tcontrol_t         ,_param->_nb_inst_reexecute);
279  ALLOC1_SC_SIGNAL(out_REEXECUTE_NUM_REG_RE                 ,"out_REEXECUTE_NUM_REG_RE               ",Tspecial_address_t ,_param->_nb_inst_reexecute);
280 
281  /********************************************************
282   * Instanciation
283   ********************************************************/
284 
285  msg(_("<%s> : Instanciation of _Reexecute_unit.\n"),name.c_str());
286
287  (*(_Reexecute_unit->in_CLOCK))        (*(in_CLOCK));
288  (*(_Reexecute_unit->in_NRESET))       (*(in_NRESET));
289
290  INSTANCE2_SC_SIGNAL(_Reexecute_unit, in_EXECUTE_LOOP_VAL                     ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
291  INSTANCE2_SC_SIGNAL(_Reexecute_unit,out_EXECUTE_LOOP_ACK                     ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
292  if (_param->_have_port_context_id)
293  INSTANCE2_SC_SIGNAL(_Reexecute_unit, in_EXECUTE_LOOP_CONTEXT_ID              ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
294  if (_param->_have_port_front_end_id)
295  INSTANCE2_SC_SIGNAL(_Reexecute_unit, in_EXECUTE_LOOP_FRONT_END_ID            ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
296  if (_param->_have_port_rob_ptr  )
297  INSTANCE2_SC_SIGNAL(_Reexecute_unit, in_EXECUTE_LOOP_PACKET_ID               ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
298//INSTANCE2_SC_SIGNAL(_Reexecute_unit, in_EXECUTE_LOOP_OPERATION               ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
299//INSTANCE2_SC_SIGNAL(_Reexecute_unit, in_EXECUTE_LOOP_TYPE                    ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
300  INSTANCE2_SC_SIGNAL(_Reexecute_unit, in_EXECUTE_LOOP_FLAGS                   ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
301  INSTANCE2_SC_SIGNAL(_Reexecute_unit, in_EXECUTE_LOOP_EXCEPTION               ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
302  INSTANCE2_SC_SIGNAL(_Reexecute_unit, in_EXECUTE_LOOP_NO_SEQUENCE             ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
303  INSTANCE2_SC_SIGNAL(_Reexecute_unit, in_EXECUTE_LOOP_ADDRESS                 ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
304  INSTANCE2_SC_SIGNAL(_Reexecute_unit, in_EXECUTE_LOOP_DATA                    ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
305
306  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_COMMIT_VAL                           ,_param->_nb_inst_commit);
307  INSTANCE1_SC_SIGNAL(_Reexecute_unit, in_COMMIT_ACK                           ,_param->_nb_inst_commit);
308  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_COMMIT_WEN                           ,_param->_nb_inst_commit);
309//if (_param->_have_port_context_id)
310//INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_COMMIT_CONTEXT_ID                    ,_param->_nb_inst_commit);
311//if (_param->_have_port_front_end_id)
312//INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_COMMIT_FRONT_END_ID                  ,_param->_nb_inst_commit);
313  if (_param->_have_port_rob_ptr  )
314  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_COMMIT_PACKET_ID                     ,_param->_nb_inst_commit);
315//INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_COMMIT_OPERATION                     ,_param->_nb_inst_commit);
316//INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_COMMIT_TYPE                          ,_param->_nb_inst_commit);
317  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_COMMIT_FLAGS                         ,_param->_nb_inst_commit);
318  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_COMMIT_EXCEPTION                     ,_param->_nb_inst_commit);
319  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_COMMIT_NO_SEQUENCE                   ,_param->_nb_inst_commit);
320  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_COMMIT_ADDRESS                       ,_param->_nb_inst_commit);
321  INSTANCE1_SC_SIGNAL(_Reexecute_unit, in_COMMIT_NUM_REG_RD                    ,_param->_nb_inst_commit);
322
323  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_SPR_VAL                              ,_param->_nb_inst_reexecute);
324  INSTANCE1_SC_SIGNAL(_Reexecute_unit, in_SPR_ACK                              ,_param->_nb_inst_reexecute);
325  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_SPR_WEN                              ,_param->_nb_inst_reexecute);
326  if (_param->_have_port_context_id)
327  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_SPR_CONTEXT_ID                       ,_param->_nb_inst_reexecute);
328  if (_param->_have_port_front_end_id)
329  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_SPR_FRONT_END_ID                     ,_param->_nb_inst_reexecute);
330  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_SPR_NUM_GROUP                        ,_param->_nb_inst_reexecute);
331  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_SPR_NUM_REG                          ,_param->_nb_inst_reexecute);
332  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_SPR_WDATA                            ,_param->_nb_inst_reexecute);
333  INSTANCE1_SC_SIGNAL(_Reexecute_unit, in_SPR_RDATA                            ,_param->_nb_inst_reexecute);
334  INSTANCE1_SC_SIGNAL(_Reexecute_unit, in_SPR_INVALID                          ,_param->_nb_inst_reexecute);
335
336  INSTANCE1_SC_SIGNAL(_Reexecute_unit, in_REEXECUTE_ROB_VAL                    ,_param->_nb_inst_reexecute);
337  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_ROB_ACK                    ,_param->_nb_inst_reexecute);
338  if (_param->_have_port_context_id)
339  INSTANCE1_SC_SIGNAL(_Reexecute_unit, in_REEXECUTE_ROB_CONTEXT_ID             ,_param->_nb_inst_reexecute);
340  if (_param->_have_port_front_end_id)
341  INSTANCE1_SC_SIGNAL(_Reexecute_unit, in_REEXECUTE_ROB_FRONT_END_ID           ,_param->_nb_inst_reexecute);
342  if (_param->_have_port_rob_ptr  )
343  INSTANCE1_SC_SIGNAL(_Reexecute_unit, in_REEXECUTE_ROB_PACKET_ID              ,_param->_nb_inst_reexecute);
344  INSTANCE1_SC_SIGNAL(_Reexecute_unit, in_REEXECUTE_ROB_OPERATION              ,_param->_nb_inst_reexecute);
345  INSTANCE1_SC_SIGNAL(_Reexecute_unit, in_REEXECUTE_ROB_TYPE                   ,_param->_nb_inst_reexecute);
346  INSTANCE1_SC_SIGNAL(_Reexecute_unit, in_REEXECUTE_ROB_STORE_QUEUE_PTR_WRITE  ,_param->_nb_inst_reexecute);
347
348  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_VAL                        ,_param->_nb_inst_reexecute);
349  INSTANCE1_SC_SIGNAL(_Reexecute_unit, in_REEXECUTE_ACK                        ,_param->_nb_inst_reexecute);
350  if (_param->_have_port_context_id)
351  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_CONTEXT_ID                 ,_param->_nb_inst_reexecute);
352  if (_param->_have_port_front_end_id)
353  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_FRONT_END_ID               ,_param->_nb_inst_reexecute);
354  if (_param->_have_port_rob_ptr  )
355  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_PACKET_ID                  ,_param->_nb_inst_reexecute);
356  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_OPERATION                  ,_param->_nb_inst_reexecute);
357  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_TYPE                       ,_param->_nb_inst_reexecute);
358  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_STORE_QUEUE_PTR_WRITE      ,_param->_nb_inst_reexecute);
359  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_STORE_QUEUE_PTR_READ       ,_param->_nb_inst_reexecute);
360  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_STORE_QUEUE_EMPTY          ,_param->_nb_inst_reexecute);
361  if (_param->_have_port_load_queue_ptr)
362  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_LOAD_QUEUE_PTR_WRITE       ,_param->_nb_inst_reexecute);
363  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_HAS_IMMEDIAT               ,_param->_nb_inst_reexecute);
364  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_IMMEDIAT                   ,_param->_nb_inst_reexecute);
365  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_READ_RA                    ,_param->_nb_inst_reexecute);
366  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_NUM_REG_RA                 ,_param->_nb_inst_reexecute);
367  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_READ_RB                    ,_param->_nb_inst_reexecute);
368  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_NUM_REG_RB                 ,_param->_nb_inst_reexecute);
369  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_READ_RC                    ,_param->_nb_inst_reexecute);
370  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_NUM_REG_RC                 ,_param->_nb_inst_reexecute);
371  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_WRITE_RD                   ,_param->_nb_inst_reexecute);
372  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_NUM_REG_RD                 ,_param->_nb_inst_reexecute);
373  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_WRITE_RE                   ,_param->_nb_inst_reexecute);
374  INSTANCE1_SC_SIGNAL(_Reexecute_unit,out_REEXECUTE_NUM_REG_RE                 ,_param->_nb_inst_reexecute);
375
376  msg(_("<%s> : Start Simulation ............\n"),name.c_str());
377   
378  Time * _time = new Time();
379
380  /********************************************************
381   * Simulation - Begin
382   ********************************************************/
383
384  // Initialisation
385
386  const uint32_t seed = 0;
387//const uint32_t seed = static_cast<uint32_t>(time(NULL));
388
389  srand(seed);
390
391  const  int32_t percent_transaction_execute_loop = 75;
392  const  int32_t percent_transaction_commit       = 75;
393  const  int32_t percent_transaction_spr          = 75;
394  const  int32_t percent_transaction_reexecute    = 75;
395
396
397  SC_START(0);
398  LABEL("Initialisation");
399
400  LABEL("Reset");
401  in_NRESET->write(0);
402  SC_START(5);
403  in_NRESET->write(1); 
404
405  LABEL("Loop of Test");
406
407  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
408    {
409      LABEL("Iteration %d",iteration);
410     
411      uint32_t nb_request     = 1<<_param->_size_rob_ptr;
412      uint32_t nb_request_in  = 0;
413      uint32_t nb_request_out = 0;
414
415      request_t request [nb_request];
416
417      uint32_t tab_request_in  [_param->_nb_execute_loop][_param->_max_nb_inst_execute];
418      bool     tab_request_out [nb_request];
419      for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
420        for (uint32_t j=0; j<_param->_nb_inst_execute [i]; ++j)
421          tab_request_in [i][j] = (nb_request_in < nb_request)?(nb_request_in++):nb_request;
422      for (uint32_t i=0; i<nb_request; i++)
423        {
424          tab_request_out [i] = true;
425          request [i].init(_param, i);
426        }
427     
428      while (nb_request_out < nb_request)
429        {
430          for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
431            for (uint32_t j=0; j<_param->_nb_inst_execute [i]; ++j)
432              {
433                uint32_t x=tab_request_in [i][j];
434
435                in_EXECUTE_LOOP_VAL          [i][j]->write(((rand()%100)<percent_transaction_execute_loop) and (x<nb_request));
436                in_EXECUTE_LOOP_CONTEXT_ID   [i][j]->write(request[x].context_id  );
437                in_EXECUTE_LOOP_FRONT_END_ID [i][j]->write(request[x].front_end_id);
438                in_EXECUTE_LOOP_PACKET_ID    [i][j]->write(x);
439              //in_EXECUTE_LOOP_OPERATION    [i][j]->write(0);
440              //in_EXECUTE_LOOP_TYPE         [i][j]->write(0);
441                in_EXECUTE_LOOP_FLAGS        [i][j]->write(request[x].flags       );
442                in_EXECUTE_LOOP_EXCEPTION    [i][j]->write(request[x].exception   );
443                in_EXECUTE_LOOP_NO_SEQUENCE  [i][j]->write(request[x].no_sequence );
444                uint32_t num_group = request[x].num_group;
445                uint32_t num_reg   = request[x].num_reg  ;
446                in_EXECUTE_LOOP_ADDRESS      [i][j]->write((num_group << 11) | num_reg);
447                in_EXECUTE_LOOP_DATA         [i][j]->write(request[x].data        );
448              }
449         
450          SC_START(0);
451          for (uint32_t i=0; i<_param->_nb_inst_commit; ++i)
452            {
453              in_COMMIT_ACK        [i]->write((rand()%100)<percent_transaction_commit);
454
455              Tpacket_t packet = (_param->_have_port_rob_ptr  )?PORT_READ(out_COMMIT_PACKET_ID [i]):0;
456              in_COMMIT_NUM_REG_RD [i]->write(request[packet].num_reg_rd);
457            }
458
459          for (uint32_t i=0; i<_param->_nb_inst_reexecute; i++)
460            {
461              in_SPR_ACK     [i]->write((rand()%100)<percent_transaction_spr);
462              in_SPR_RDATA   [i]->write(~out_SPR_WDATA [i]->read());
463              in_SPR_INVALID [i]->write(0);
464            }
465
466          for (uint32_t i=0; i<_param->_nb_inst_reexecute; i++)
467            in_REEXECUTE_ACK   [i]->write((rand()%100)<percent_transaction_reexecute);
468
469          SC_START(0);
470
471          for (uint32_t i=0; i<_param->_nb_execute_loop; ++i)
472            for (uint32_t j=0; j<_param->_nb_inst_execute [i]; ++j)
473              if (in_EXECUTE_LOOP_VAL [i][j]->read() and out_EXECUTE_LOOP_ACK [i][j]->read())
474                {
475                  LABEL("EXECUTE_LOOP [%d][%d] : Transaction accepted",i,j);
476                 
477                  tab_request_in [i][j] = (nb_request_in < nb_request)?(nb_request_in++):nb_request;
478                }
479         
480          for (uint32_t i=0; i<_param->_nb_inst_commit; ++i)
481            if (out_COMMIT_VAL [i]->read() and in_COMMIT_ACK [i]->read())
482                {
483                  LABEL("COMMIT       [%d] : Transaction accepted",i);
484                 
485                  Tpacket_t packet = (_param->_have_port_rob_ptr  )?PORT_READ(out_COMMIT_PACKET_ID [i]):0;
486
487                  LABEL(" * packet : %d",packet);
488
489                  TEST(bool, tab_request_out [packet], true);
490
491                  TEST(Tcontrol_t     ,out_COMMIT_WEN          [i]->read(),request[packet].commit_wen  );
492//                if (_param->_have_port_context_id)
493//                TEST(Tcontext_t     ,out_COMMIT_CONTEXT_ID   [i]->read(),request[packet].context_id  );
494//                if (_param->_have_port_front_end_id)
495//                TEST(Tcontext_t     ,out_COMMIT_FRONT_END_ID [i]->read(),request[packet].front_end_id);
496//                TEST(Toperation_t   ,out_COMMIT_OPERATION    [i]->read(),request[packet].operation   );
497//                TEST(Ttype_t        ,out_COMMIT_TYPE         [i]->read(),request[packet].type        );
498                  TEST(Tspecial_data_t,out_COMMIT_FLAGS        [i]->read(),request[packet].flags       );
499                  TEST(Texception_t   ,out_COMMIT_EXCEPTION    [i]->read(),request[packet].exception   );
500                  TEST(Tcontrol_t     ,out_COMMIT_NO_SEQUENCE  [i]->read(),request[packet].no_sequence );
501                  TEST(Tgeneral_data_t,out_COMMIT_ADDRESS      [i]->read(),request[packet].address     );
502
503                  tab_request_out [packet] = false;
504                  if (not request[packet].spr_access)
505                    nb_request_out++;
506                }
507         
508          for (uint32_t i=0; i<_param->_nb_inst_reexecute; i++)
509            if (out_SPR_VAL[i]->read() and in_SPR_ACK[i]->read())
510              {
511                LABEL("SPR          [%d] : Transaction accepted",i);
512               
513                Tspr_address_t num_reg = out_SPR_NUM_REG [i]->read();
514                TEST(Tcontrol_t    ,out_SPR_WEN          [i]->read(), request[num_reg].spr_wen);
515                if (_param->_have_port_context_id)
516                TEST(Tcontext_t    ,out_SPR_CONTEXT_ID   [i]->read(), request[num_reg].context_id);
517                if (_param->_have_port_front_end_id)
518                TEST(Tcontext_t    ,out_SPR_FRONT_END_ID [i]->read(), request[num_reg].front_end_id);
519                TEST(Tspr_address_t,out_SPR_NUM_GROUP    [i]->read(), request[num_reg].num_group);
520                TEST(Tspr_t        ,out_SPR_WDATA        [i]->read(), request[num_reg].data);
521
522                if (request[num_reg].spr_ren)
523                  request[num_reg].data = ~request[num_reg].data;
524
525                if (not request[num_reg].reexecute)
526                  nb_request_out++;
527              }
528
529          for (uint32_t i=0; i<_param->_nb_inst_reexecute; i++)
530            if (out_REEXECUTE_VAL[i]->read() and in_REEXECUTE_ACK[i]->read())
531              {
532                LABEL("REEXECUTE    [%d] : Transaction accepted",i);
533
534                Tpacket_t packet = (_param->_have_port_rob_ptr  )?PORT_READ(out_REEXECUTE_PACKET_ID [i]):0;
535               
536                LABEL(" * packet : %d",packet);
537                TEST(Tcontrol_t        ,request [packet].reexecute, true);
538               
539                if (_param->_have_port_context_id)
540                TEST(Tcontext_t        ,out_REEXECUTE_CONTEXT_ID            [i]->read(), request[packet].context_id  );
541                if (_param->_have_port_front_end_id)
542                TEST(Tcontext_t        ,out_REEXECUTE_FRONT_END_ID          [i]->read(), request[packet].front_end_id);
543                TEST(Tgeneral_data_t   ,out_REEXECUTE_IMMEDIAT              [i]->read(), request[packet].data        );
544                TEST(Tcontrol_t        ,out_REEXECUTE_WRITE_RD              [i]->read(), request[packet].write_rd    );
545                TEST(Tgeneral_address_t,out_REEXECUTE_NUM_REG_RD            [i]->read(), request[packet].num_reg_rd  );
546
547                TEST(Ttype_t           ,out_REEXECUTE_TYPE                  [i]->read(), request[packet].type        );
548                TEST(Toperation_t      ,out_REEXECUTE_OPERATION             [i]->read(), request[packet].operation   );
549
550                TEST(Tcontrol_t        ,out_REEXECUTE_HAS_IMMEDIAT          [i]->read(), 1);
551                TEST(Tlsq_ptr_t        ,out_REEXECUTE_STORE_QUEUE_PTR_WRITE [i]->read(), 0);
552                TEST(Tlsq_ptr_t        ,out_REEXECUTE_STORE_QUEUE_PTR_READ  [i]->read(), 0);
553                TEST(Tlsq_ptr_t        ,out_REEXECUTE_STORE_QUEUE_EMPTY     [i]->read(), 0);
554                TEST(Tlsq_ptr_t        ,out_REEXECUTE_LOAD_QUEUE_PTR_WRITE  [i]->read(), 0);
555                TEST(Tcontrol_t        ,out_REEXECUTE_READ_RA               [i]->read(), 0);
556                TEST(Tgeneral_address_t,out_REEXECUTE_NUM_REG_RA            [i]->read(), 0);
557                TEST(Tcontrol_t        ,out_REEXECUTE_READ_RB               [i]->read(), 0);
558                TEST(Tgeneral_address_t,out_REEXECUTE_NUM_REG_RB            [i]->read(), 0);
559                TEST(Tcontrol_t        ,out_REEXECUTE_READ_RC               [i]->read(), 0);
560                TEST(Tspecial_address_t,out_REEXECUTE_NUM_REG_RC            [i]->read(), 0);
561                TEST(Tcontrol_t        ,out_REEXECUTE_WRITE_RE              [i]->read(), 0);
562                TEST(Tspecial_address_t,out_REEXECUTE_NUM_REG_RE            [i]->read(), 0);
563
564                nb_request_out++;
565              }
566
567          SC_START(1);
568        }
569
570
571      TEST(uint32_t, nb_request_in  ,nb_request);
572      TEST(uint32_t, nb_request_out ,nb_request);
573
574//       for (uint32_t i=0; i<nb_request; i++)
575//      TEST(bool,tab_request_out [i],false);
576
577      SC_START(1);
578    }
579 
580  /********************************************************
581   * Simulation - End
582   ********************************************************/
583
584  TEST_OK ("End of Simulation");
585  delete _time;
586
587  msg(_("<%s> : ............ Stop Simulation\n"),name.c_str());
588
589  delete in_CLOCK;
590  delete in_NRESET;
591
592  DELETE2_SC_SIGNAL( in_EXECUTE_LOOP_VAL                     ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
593  DELETE2_SC_SIGNAL(out_EXECUTE_LOOP_ACK                     ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
594  DELETE2_SC_SIGNAL( in_EXECUTE_LOOP_CONTEXT_ID              ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
595  DELETE2_SC_SIGNAL( in_EXECUTE_LOOP_FRONT_END_ID            ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
596  DELETE2_SC_SIGNAL( in_EXECUTE_LOOP_PACKET_ID               ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
597//DELETE2_SC_SIGNAL( in_EXECUTE_LOOP_OPERATION               ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
598//DELETE2_SC_SIGNAL( in_EXECUTE_LOOP_TYPE                    ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
599  DELETE2_SC_SIGNAL( in_EXECUTE_LOOP_FLAGS                   ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
600  DELETE2_SC_SIGNAL( in_EXECUTE_LOOP_EXCEPTION               ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
601  DELETE2_SC_SIGNAL( in_EXECUTE_LOOP_NO_SEQUENCE             ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
602  DELETE2_SC_SIGNAL( in_EXECUTE_LOOP_ADDRESS                 ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
603  DELETE2_SC_SIGNAL( in_EXECUTE_LOOP_DATA                    ,_param->_nb_execute_loop,_param->_nb_inst_execute[it1]);
604
605  DELETE1_SC_SIGNAL(out_COMMIT_VAL                           ,_param->_nb_inst_commit);
606  DELETE1_SC_SIGNAL( in_COMMIT_ACK                           ,_param->_nb_inst_commit);
607  DELETE1_SC_SIGNAL(out_COMMIT_WEN                           ,_param->_nb_inst_commit);
608//DELETE1_SC_SIGNAL(out_COMMIT_CONTEXT_ID                    ,_param->_nb_inst_commit);
609//DELETE1_SC_SIGNAL(out_COMMIT_FRONT_END_ID                  ,_param->_nb_inst_commit);
610  DELETE1_SC_SIGNAL(out_COMMIT_PACKET_ID                     ,_param->_nb_inst_commit);
611//DELETE1_SC_SIGNAL(out_COMMIT_OPERATION                     ,_param->_nb_inst_commit);
612//DELETE1_SC_SIGNAL(out_COMMIT_TYPE                          ,_param->_nb_inst_commit);
613  DELETE1_SC_SIGNAL(out_COMMIT_FLAGS                         ,_param->_nb_inst_commit);
614  DELETE1_SC_SIGNAL(out_COMMIT_EXCEPTION                     ,_param->_nb_inst_commit);
615  DELETE1_SC_SIGNAL(out_COMMIT_NO_SEQUENCE                   ,_param->_nb_inst_commit);
616  DELETE1_SC_SIGNAL(out_COMMIT_ADDRESS                       ,_param->_nb_inst_commit);
617  DELETE1_SC_SIGNAL( in_COMMIT_NUM_REG_RD                    ,_param->_nb_inst_commit);
618
619  DELETE1_SC_SIGNAL(out_SPR_VAL                              ,_param->_nb_inst_reexecute);
620  DELETE1_SC_SIGNAL( in_SPR_ACK                              ,_param->_nb_inst_reexecute);
621  DELETE1_SC_SIGNAL(out_SPR_WEN                              ,_param->_nb_inst_reexecute);
622  DELETE1_SC_SIGNAL(out_SPR_CONTEXT_ID                       ,_param->_nb_inst_reexecute);
623  DELETE1_SC_SIGNAL(out_SPR_FRONT_END_ID                     ,_param->_nb_inst_reexecute);
624  DELETE1_SC_SIGNAL(out_SPR_NUM_GROUP                        ,_param->_nb_inst_reexecute);
625  DELETE1_SC_SIGNAL(out_SPR_NUM_REG                          ,_param->_nb_inst_reexecute);
626  DELETE1_SC_SIGNAL(out_SPR_WDATA                            ,_param->_nb_inst_reexecute);
627  DELETE1_SC_SIGNAL( in_SPR_RDATA                            ,_param->_nb_inst_reexecute);
628  DELETE1_SC_SIGNAL( in_SPR_INVALID                          ,_param->_nb_inst_reexecute);
629
630  DELETE1_SC_SIGNAL( in_REEXECUTE_ROB_VAL                    ,_param->_nb_inst_reexecute);
631  DELETE1_SC_SIGNAL(out_REEXECUTE_ROB_ACK                    ,_param->_nb_inst_reexecute);
632  DELETE1_SC_SIGNAL( in_REEXECUTE_ROB_CONTEXT_ID             ,_param->_nb_inst_reexecute);
633  DELETE1_SC_SIGNAL( in_REEXECUTE_ROB_FRONT_END_ID           ,_param->_nb_inst_reexecute);
634  DELETE1_SC_SIGNAL( in_REEXECUTE_ROB_PACKET_ID              ,_param->_nb_inst_reexecute);
635  DELETE1_SC_SIGNAL( in_REEXECUTE_ROB_OPERATION              ,_param->_nb_inst_reexecute);
636  DELETE1_SC_SIGNAL( in_REEXECUTE_ROB_TYPE                   ,_param->_nb_inst_reexecute);
637  DELETE1_SC_SIGNAL( in_REEXECUTE_ROB_STORE_QUEUE_PTR_WRITE  ,_param->_nb_inst_reexecute);
638
639  DELETE1_SC_SIGNAL(out_REEXECUTE_VAL                        ,_param->_nb_inst_reexecute);
640  DELETE1_SC_SIGNAL( in_REEXECUTE_ACK                        ,_param->_nb_inst_reexecute);
641  DELETE1_SC_SIGNAL(out_REEXECUTE_CONTEXT_ID                 ,_param->_nb_inst_reexecute);
642  DELETE1_SC_SIGNAL(out_REEXECUTE_FRONT_END_ID               ,_param->_nb_inst_reexecute);
643  DELETE1_SC_SIGNAL(out_REEXECUTE_PACKET_ID                  ,_param->_nb_inst_reexecute);
644  DELETE1_SC_SIGNAL(out_REEXECUTE_OPERATION                  ,_param->_nb_inst_reexecute);
645  DELETE1_SC_SIGNAL(out_REEXECUTE_TYPE                       ,_param->_nb_inst_reexecute);
646  DELETE1_SC_SIGNAL(out_REEXECUTE_STORE_QUEUE_PTR_WRITE      ,_param->_nb_inst_reexecute);
647  DELETE1_SC_SIGNAL(out_REEXECUTE_STORE_QUEUE_PTR_READ       ,_param->_nb_inst_reexecute);
648  DELETE1_SC_SIGNAL(out_REEXECUTE_STORE_QUEUE_EMPTY          ,_param->_nb_inst_reexecute);
649  DELETE1_SC_SIGNAL(out_REEXECUTE_LOAD_QUEUE_PTR_WRITE       ,_param->_nb_inst_reexecute);
650  DELETE1_SC_SIGNAL(out_REEXECUTE_HAS_IMMEDIAT               ,_param->_nb_inst_reexecute);
651  DELETE1_SC_SIGNAL(out_REEXECUTE_IMMEDIAT                   ,_param->_nb_inst_reexecute);
652  DELETE1_SC_SIGNAL(out_REEXECUTE_READ_RA                    ,_param->_nb_inst_reexecute);
653  DELETE1_SC_SIGNAL(out_REEXECUTE_NUM_REG_RA                 ,_param->_nb_inst_reexecute);
654  DELETE1_SC_SIGNAL(out_REEXECUTE_READ_RB                    ,_param->_nb_inst_reexecute);
655  DELETE1_SC_SIGNAL(out_REEXECUTE_NUM_REG_RB                 ,_param->_nb_inst_reexecute);
656  DELETE1_SC_SIGNAL(out_REEXECUTE_READ_RC                    ,_param->_nb_inst_reexecute);
657  DELETE1_SC_SIGNAL(out_REEXECUTE_NUM_REG_RC                 ,_param->_nb_inst_reexecute);
658  DELETE1_SC_SIGNAL(out_REEXECUTE_WRITE_RD                   ,_param->_nb_inst_reexecute);
659  DELETE1_SC_SIGNAL(out_REEXECUTE_NUM_REG_RD                 ,_param->_nb_inst_reexecute);
660  DELETE1_SC_SIGNAL(out_REEXECUTE_WRITE_RE                   ,_param->_nb_inst_reexecute);
661  DELETE1_SC_SIGNAL(out_REEXECUTE_NUM_REG_RE                 ,_param->_nb_inst_reexecute);
662    }
663#endif
664
665  delete _Reexecute_unit;
666#ifdef STATISTICS
667  delete _parameters_statistics;
668#endif
669}
Note: See TracBrowser for help on using the repository browser.