source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/SelfTest/src/test.cpp @ 55

Last change on this file since 55 was 55, checked in by rosiere, 17 years ago

Ajout SystemC read_queue et reservation_station
Ajout port au bloc registerfile_monolithic (à ajouter également au bloc registerfile et registerfile_multi_banked)
Modif param : passage de pointeur (attention, tous les composants n'ont pas été tous modifier)

File size: 36.1 KB
Line 
1/*
2 * $Id$
3 *
4 * [ Description ]
5 *
6 * Test
7 */
8
9#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/SelfTest/include/test.h"
10#include "Common/include/Test.h"
11
12#define NB_ITERATION  16
13#define CYCLE_MAX     (512*NB_ITERATION)
14
15#define LABEL(str)                                                                       \
16{                                                                                        \
17  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} " << str << endl; \
18} while(0)
19
20static uint32_t cycle = 0;
21
22#define SC_START(cycle_offset)                                          \
23do                                                                      \
24{                                                                       \
25/*cout << "SC_START (begin)" << endl;*/                                 \
26                                                                        \
27  uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \
28  sc_start(cycle_offset);                                               \
29  if (cycle_current != cycle)                                           \
30    {                                                                   \
31      cycle = cycle_current;                                            \
32      cout << "##########[ cycle "<< cycle << " ]" << endl;             \
33    }                                                                   \
34                                                                        \
35  if (cycle_current > CYCLE_MAX)                                        \
36    {                                                                   \
37      TEST_KO("Maximal cycles Reached");                                \
38    }                                                                   \
39/*cout << "SC_START (end  )" << endl;*/                                 \
40} while(0)
41
42void test (string name,
43           morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::reservation_station::Parameters * _param)
44{
45  cout << "<" << name << "> : Simulation SystemC" << endl;
46
47#ifdef STATISTICS
48  morpheo::behavioural::Parameters_Statistics * _parameters_statistics = new morpheo::behavioural::Parameters_Statistics (5,50);
49#endif
50
51  Reservation_station * _Reservation_station = new Reservation_station (name.c_str(),
52#ifdef STATISTICS
53                                             _parameters_statistics,
54#endif
55                                             _param);
56 
57#ifdef SYSTEMC
58  /*********************************************************************
59   * Déclarations des signaux
60   *********************************************************************/
61  string rename = "";
62
63  sc_clock              * in_CLOCK  = new sc_clock ("clock", 1.0, 0.5);
64  sc_signal<Tcontrol_t> * in_NRESET = new sc_signal<Tcontrol_t> ("NRESET");
65
66  sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_VAL            = new sc_signal<Tcontrol_t        >;
67  sc_signal<Tcontrol_t        > * out_RESERVATION_STATION_IN_ACK            = new sc_signal<Tcontrol_t        >;
68  sc_signal<Tcontext_t        > *  in_RESERVATION_STATION_IN_CONTEXT_ID     = new sc_signal<Tcontext_t        >;
69  sc_signal<Tpacket_t         > *  in_RESERVATION_STATION_IN_PACKET_ID      = new sc_signal<Tpacket_t         >;
70  sc_signal<Toperation_t      > *  in_RESERVATION_STATION_IN_OPERATION      = new sc_signal<Toperation_t      >;
71  sc_signal<Ttype_t           > *  in_RESERVATION_STATION_IN_TYPE           = new sc_signal<Ttype_t           >;
72  sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_HAS_IMMEDIAT   = new sc_signal<Tcontrol_t        >;
73  sc_signal<Tgeneral_data_t   > *  in_RESERVATION_STATION_IN_IMMEDIAT       = new sc_signal<Tgeneral_data_t   >;
74//sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_READ_RA        = new sc_signal<Tcontrol_t        >;
75  sc_signal<Tgeneral_address_t> *  in_RESERVATION_STATION_IN_NUM_REG_RA     = new sc_signal<Tgeneral_address_t>;
76  sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_DATA_RA_VAL    = new sc_signal<Tcontrol_t        >;
77  sc_signal<Tgeneral_data_t   > *  in_RESERVATION_STATION_IN_DATA_RA        = new sc_signal<Tgeneral_data_t   >;
78//sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_READ_RB        = new sc_signal<Tcontrol_t        >;
79  sc_signal<Tgeneral_address_t> *  in_RESERVATION_STATION_IN_NUM_REG_RB     = new sc_signal<Tgeneral_address_t>;
80  sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_DATA_RB_VAL    = new sc_signal<Tcontrol_t        >;
81  sc_signal<Tgeneral_data_t   > *  in_RESERVATION_STATION_IN_DATA_RB        = new sc_signal<Tgeneral_data_t   >;
82//sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_READ_RC        = new sc_signal<Tcontrol_t        >;
83  sc_signal<Tspecial_address_t> *  in_RESERVATION_STATION_IN_NUM_REG_RC     = new sc_signal<Tspecial_address_t>;
84  sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_DATA_RC_VAL    = new sc_signal<Tcontrol_t        >;
85  sc_signal<Tspecial_data_t   > *  in_RESERVATION_STATION_IN_DATA_RC        = new sc_signal<Tspecial_data_t   >;
86  sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_WRITE_RD       = new sc_signal<Tcontrol_t        >;
87  sc_signal<Tgeneral_address_t> *  in_RESERVATION_STATION_IN_NUM_REG_RD     = new sc_signal<Tgeneral_address_t>;
88  sc_signal<Tcontrol_t        > *  in_RESERVATION_STATION_IN_WRITE_RE       = new sc_signal<Tcontrol_t        >;
89  sc_signal<Tspecial_address_t> *  in_RESERVATION_STATION_IN_NUM_REG_RE     = new sc_signal<Tspecial_address_t>;
90
91  sc_signal<Tcontrol_t        > ** out_RESERVATION_STATION_OUT_VAL         = new sc_signal<Tcontrol_t        > * [_param->_size_queue];
92  sc_signal<Tcontrol_t        > **  in_RESERVATION_STATION_OUT_ACK         = new sc_signal<Tcontrol_t        > * [_param->_size_queue];
93  sc_signal<Tcontext_t        > ** out_RESERVATION_STATION_OUT_CONTEXT_ID  = new sc_signal<Tcontext_t        > * [_param->_size_queue];
94  sc_signal<Tpacket_t         > ** out_RESERVATION_STATION_OUT_PACKET_ID   = new sc_signal<Tpacket_t         > * [_param->_size_queue];
95  sc_signal<Toperation_t      > ** out_RESERVATION_STATION_OUT_OPERATION   = new sc_signal<Toperation_t      > * [_param->_size_queue];
96  sc_signal<Ttype_t           > ** out_RESERVATION_STATION_OUT_TYPE        = new sc_signal<Ttype_t           > * [_param->_size_queue];
97  sc_signal<Tcontrol_t        > ** out_RESERVATION_STATION_OUT_HAS_IMMEDIAT= new sc_signal<Tcontrol_t        > * [_param->_size_queue];
98  sc_signal<Tgeneral_data_t   > ** out_RESERVATION_STATION_OUT_IMMEDIAT    = new sc_signal<Tgeneral_data_t   > * [_param->_size_queue];
99  sc_signal<Tgeneral_data_t   > ** out_RESERVATION_STATION_OUT_DATA_RA     = new sc_signal<Tgeneral_data_t   > * [_param->_size_queue];
100  sc_signal<Tgeneral_data_t   > ** out_RESERVATION_STATION_OUT_DATA_RB     = new sc_signal<Tgeneral_data_t   > * [_param->_size_queue];
101  sc_signal<Tspecial_data_t   > ** out_RESERVATION_STATION_OUT_DATA_RC     = new sc_signal<Tspecial_data_t   > * [_param->_size_queue];
102  sc_signal<Tcontrol_t        > ** out_RESERVATION_STATION_OUT_WRITE_RD    = new sc_signal<Tcontrol_t        > * [_param->_size_queue];
103  sc_signal<Tgeneral_address_t> ** out_RESERVATION_STATION_OUT_NUM_REG_RD  = new sc_signal<Tgeneral_address_t> * [_param->_size_queue];
104  sc_signal<Tcontrol_t        > ** out_RESERVATION_STATION_OUT_WRITE_RE    = new sc_signal<Tcontrol_t        > * [_param->_size_queue];
105  sc_signal<Tspecial_address_t> ** out_RESERVATION_STATION_OUT_NUM_REG_RE  = new sc_signal<Tspecial_address_t> * [_param->_size_queue];
106   
107  for (uint32_t i=0; i<_param->_size_queue; i++)
108    {
109      out_RESERVATION_STATION_OUT_VAL          [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
110       in_RESERVATION_STATION_OUT_ACK          [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
111      out_RESERVATION_STATION_OUT_CONTEXT_ID   [i] = new sc_signal<Tcontext_t        > (rename.c_str());
112      out_RESERVATION_STATION_OUT_PACKET_ID    [i] = new sc_signal<Tpacket_t         > (rename.c_str());
113      out_RESERVATION_STATION_OUT_OPERATION    [i] = new sc_signal<Toperation_t      > (rename.c_str());
114      out_RESERVATION_STATION_OUT_TYPE         [i] = new sc_signal<Ttype_t           > (rename.c_str());
115      out_RESERVATION_STATION_OUT_HAS_IMMEDIAT [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
116      out_RESERVATION_STATION_OUT_IMMEDIAT     [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
117      out_RESERVATION_STATION_OUT_DATA_RA      [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
118      out_RESERVATION_STATION_OUT_DATA_RB      [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
119      out_RESERVATION_STATION_OUT_DATA_RC      [i] = new sc_signal<Tspecial_data_t   > (rename.c_str());
120      out_RESERVATION_STATION_OUT_WRITE_RD     [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
121      out_RESERVATION_STATION_OUT_NUM_REG_RD   [i] = new sc_signal<Tgeneral_address_t> (rename.c_str());
122      out_RESERVATION_STATION_OUT_WRITE_RE     [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
123      out_RESERVATION_STATION_OUT_NUM_REG_RE   [i] = new sc_signal<Tspecial_address_t> (rename.c_str());
124    }
125
126  sc_signal<Tcontrol_t        > ** in_GPR_WRITE_VAL        = new sc_signal<Tcontrol_t        > * [_param->_nb_gpr_write];
127  sc_signal<Tcontext_t        > ** in_GPR_WRITE_CONTEXT_ID = new sc_signal<Tcontext_t        > * [_param->_nb_gpr_write];
128  sc_signal<Tgeneral_address_t> ** in_GPR_WRITE_NUM_REG    = new sc_signal<Tgeneral_address_t> * [_param->_nb_gpr_write];
129  sc_signal<Tgeneral_data_t   > ** in_GPR_WRITE_DATA       = new sc_signal<Tgeneral_data_t   > * [_param->_nb_gpr_write];
130   
131  for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
132    {
133      in_GPR_WRITE_VAL        [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
134      in_GPR_WRITE_CONTEXT_ID [i] = new sc_signal<Tcontext_t        > (rename.c_str());
135      in_GPR_WRITE_NUM_REG    [i] = new sc_signal<Tgeneral_address_t> (rename.c_str());
136      in_GPR_WRITE_DATA       [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
137    }
138 
139  sc_signal<Tcontrol_t        > ** in_SPR_WRITE_VAL       = new sc_signal<Tcontrol_t        > * [_param->_nb_spr_write];
140  sc_signal<Tcontext_t        > ** in_SPR_WRITE_CONTEXT_ID= new sc_signal<Tcontext_t        > * [_param->_nb_spr_write];
141  sc_signal<Tspecial_address_t> ** in_SPR_WRITE_NUM_REG   = new sc_signal<Tspecial_address_t> * [_param->_nb_spr_write];
142  sc_signal<Tspecial_data_t   > ** in_SPR_WRITE_DATA      = new sc_signal<Tspecial_data_t   > * [_param->_nb_spr_write];
143   
144  for (uint32_t i=0; i<_param->_nb_spr_write; i++)
145    {
146      in_SPR_WRITE_VAL        [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
147      in_SPR_WRITE_CONTEXT_ID [i] = new sc_signal<Tcontext_t        > (rename.c_str());
148      in_SPR_WRITE_NUM_REG    [i] = new sc_signal<Tspecial_address_t> (rename.c_str());
149      in_SPR_WRITE_DATA       [i] = new sc_signal<Tspecial_data_t   > (rename.c_str());
150    }
151
152  sc_signal<Tcontext_t        > ** in_BYPASS_WRITE_CONTEXT_ID  = new sc_signal<Tcontext_t        > * [_param->_nb_bypass_write];
153  sc_signal<Tcontrol_t        > ** in_BYPASS_WRITE_GPR_VAL     = new sc_signal<Tcontrol_t        > * [_param->_nb_bypass_write];
154  sc_signal<Tgeneral_address_t> ** in_BYPASS_WRITE_GPR_NUM_REG = new sc_signal<Tgeneral_address_t> * [_param->_nb_bypass_write];
155  sc_signal<Tgeneral_data_t   > ** in_BYPASS_WRITE_GPR_DATA    = new sc_signal<Tgeneral_data_t   > * [_param->_nb_bypass_write];
156  sc_signal<Tcontrol_t        > ** in_BYPASS_WRITE_SPR_VAL     = new sc_signal<Tcontrol_t        > * [_param->_nb_bypass_write];
157  sc_signal<Tspecial_address_t> ** in_BYPASS_WRITE_SPR_NUM_REG = new sc_signal<Tspecial_address_t> * [_param->_nb_bypass_write];
158  sc_signal<Tspecial_data_t   > ** in_BYPASS_WRITE_SPR_DATA    = new sc_signal<Tspecial_data_t   > * [_param->_nb_bypass_write];
159
160  for (uint32_t i=0; i<_param->_nb_bypass_write; i++)
161    {
162      in_BYPASS_WRITE_CONTEXT_ID [i] = new sc_signal<Tcontext_t        > (rename.c_str());
163      in_BYPASS_WRITE_GPR_VAL    [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
164      in_BYPASS_WRITE_GPR_NUM_REG[i] = new sc_signal<Tgeneral_address_t> (rename.c_str());
165      in_BYPASS_WRITE_GPR_DATA   [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
166      in_BYPASS_WRITE_SPR_VAL    [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
167      in_BYPASS_WRITE_SPR_NUM_REG[i] = new sc_signal<Tspecial_address_t> (rename.c_str());
168      in_BYPASS_WRITE_SPR_DATA   [i] = new sc_signal<Tspecial_data_t   > (rename.c_str());
169    }
170  sc_signal<Tcontrol_t        > ** in_BYPASS_MEMORY_VAL         = new sc_signal<Tcontrol_t        > * [_param->_nb_bypass_memory];
171  sc_signal<Tcontext_t        > ** in_BYPASS_MEMORY_CONTEXT_ID  = new sc_signal<Tcontext_t        > * [_param->_nb_bypass_memory];
172  sc_signal<Tgeneral_address_t> ** in_BYPASS_MEMORY_NUM_REG     = new sc_signal<Tgeneral_address_t> * [_param->_nb_bypass_memory];
173  sc_signal<Tgeneral_data_t   > ** in_BYPASS_MEMORY_DATA        = new sc_signal<Tgeneral_data_t   > * [_param->_nb_bypass_memory];
174
175  for (uint32_t i=0; i<_param->_nb_bypass_memory; i++)
176    {
177      in_BYPASS_MEMORY_VAL        [i] = new sc_signal<Tcontrol_t        > (rename.c_str());
178      in_BYPASS_MEMORY_CONTEXT_ID [i] = new sc_signal<Tcontext_t        > (rename.c_str());
179      in_BYPASS_MEMORY_NUM_REG    [i] = new sc_signal<Tgeneral_address_t> (rename.c_str());
180      in_BYPASS_MEMORY_DATA       [i] = new sc_signal<Tgeneral_data_t   > (rename.c_str());
181    }
182   
183  /********************************************************
184   * Instanciation
185   ********************************************************/
186 
187  cout << "<" << name << "> Instanciation of _Reservation_station" << endl;
188 
189  (*(_Reservation_station->in_CLOCK))        (*(in_CLOCK));
190  (*(_Reservation_station->in_NRESET))       (*(in_NRESET));
191
192  (*(_Reservation_station-> in_RESERVATION_STATION_IN_VAL              )) (*( in_RESERVATION_STATION_IN_VAL              ));
193  (*(_Reservation_station->out_RESERVATION_STATION_IN_ACK              )) (*(out_RESERVATION_STATION_IN_ACK              ));
194  (*(_Reservation_station-> in_RESERVATION_STATION_IN_CONTEXT_ID       )) (*( in_RESERVATION_STATION_IN_CONTEXT_ID       ));
195  (*(_Reservation_station-> in_RESERVATION_STATION_IN_PACKET_ID        )) (*( in_RESERVATION_STATION_IN_PACKET_ID        ));
196  (*(_Reservation_station-> in_RESERVATION_STATION_IN_OPERATION        )) (*( in_RESERVATION_STATION_IN_OPERATION        ));
197  (*(_Reservation_station-> in_RESERVATION_STATION_IN_TYPE             )) (*( in_RESERVATION_STATION_IN_TYPE             ));
198  (*(_Reservation_station-> in_RESERVATION_STATION_IN_HAS_IMMEDIAT     )) (*( in_RESERVATION_STATION_IN_HAS_IMMEDIAT     ));
199  (*(_Reservation_station-> in_RESERVATION_STATION_IN_IMMEDIAT         )) (*( in_RESERVATION_STATION_IN_IMMEDIAT         ));
200//   (*(_Reservation_station-> in_RESERVATION_STATION_IN_READ_RA          )) (*( in_RESERVATION_STATION_IN_READ_RA          ));
201  (*(_Reservation_station-> in_RESERVATION_STATION_IN_NUM_REG_RA       )) (*( in_RESERVATION_STATION_IN_NUM_REG_RA       ));
202  (*(_Reservation_station-> in_RESERVATION_STATION_IN_DATA_RA_VAL      )) (*( in_RESERVATION_STATION_IN_DATA_RA_VAL      ));
203  (*(_Reservation_station-> in_RESERVATION_STATION_IN_DATA_RA          )) (*( in_RESERVATION_STATION_IN_DATA_RA          ));
204//   (*(_Reservation_station-> in_RESERVATION_STATION_IN_READ_RB          )) (*( in_RESERVATION_STATION_IN_READ_RB          ));
205  (*(_Reservation_station-> in_RESERVATION_STATION_IN_NUM_REG_RB       )) (*( in_RESERVATION_STATION_IN_NUM_REG_RB       ));
206  (*(_Reservation_station-> in_RESERVATION_STATION_IN_DATA_RB_VAL      )) (*( in_RESERVATION_STATION_IN_DATA_RB_VAL      ));
207  (*(_Reservation_station-> in_RESERVATION_STATION_IN_DATA_RB          )) (*( in_RESERVATION_STATION_IN_DATA_RB          ));
208//   (*(_Reservation_station-> in_RESERVATION_STATION_IN_READ_RC          )) (*( in_RESERVATION_STATION_IN_READ_RC          ));
209  (*(_Reservation_station-> in_RESERVATION_STATION_IN_NUM_REG_RC       )) (*( in_RESERVATION_STATION_IN_NUM_REG_RC       ));
210  (*(_Reservation_station-> in_RESERVATION_STATION_IN_DATA_RC_VAL      )) (*( in_RESERVATION_STATION_IN_DATA_RC_VAL      ));
211  (*(_Reservation_station-> in_RESERVATION_STATION_IN_DATA_RC          )) (*( in_RESERVATION_STATION_IN_DATA_RC          ));
212  (*(_Reservation_station-> in_RESERVATION_STATION_IN_WRITE_RD         )) (*( in_RESERVATION_STATION_IN_WRITE_RD         ));
213  (*(_Reservation_station-> in_RESERVATION_STATION_IN_NUM_REG_RD       )) (*( in_RESERVATION_STATION_IN_NUM_REG_RD       ));
214  (*(_Reservation_station-> in_RESERVATION_STATION_IN_WRITE_RE         )) (*( in_RESERVATION_STATION_IN_WRITE_RE         ));
215  (*(_Reservation_station-> in_RESERVATION_STATION_IN_NUM_REG_RE       )) (*( in_RESERVATION_STATION_IN_NUM_REG_RE       ));
216
217    for (uint32_t i=0; i<_param->_size_queue; i++)
218      {
219  (*(_Reservation_station->out_RESERVATION_STATION_OUT_VAL          [i])) (*(out_RESERVATION_STATION_OUT_VAL          [i]));
220  (*(_Reservation_station-> in_RESERVATION_STATION_OUT_ACK          [i])) (*( in_RESERVATION_STATION_OUT_ACK          [i]));
221  (*(_Reservation_station->out_RESERVATION_STATION_OUT_CONTEXT_ID   [i])) (*(out_RESERVATION_STATION_OUT_CONTEXT_ID   [i]));
222  (*(_Reservation_station->out_RESERVATION_STATION_OUT_PACKET_ID    [i])) (*(out_RESERVATION_STATION_OUT_PACKET_ID    [i]));
223  (*(_Reservation_station->out_RESERVATION_STATION_OUT_OPERATION    [i])) (*(out_RESERVATION_STATION_OUT_OPERATION    [i]));
224  (*(_Reservation_station->out_RESERVATION_STATION_OUT_TYPE         [i])) (*(out_RESERVATION_STATION_OUT_TYPE         [i]));
225  (*(_Reservation_station->out_RESERVATION_STATION_OUT_HAS_IMMEDIAT [i])) (*(out_RESERVATION_STATION_OUT_HAS_IMMEDIAT [i]));
226  (*(_Reservation_station->out_RESERVATION_STATION_OUT_IMMEDIAT     [i])) (*(out_RESERVATION_STATION_OUT_IMMEDIAT     [i]));
227  (*(_Reservation_station->out_RESERVATION_STATION_OUT_DATA_RA      [i])) (*(out_RESERVATION_STATION_OUT_DATA_RA      [i]));
228  (*(_Reservation_station->out_RESERVATION_STATION_OUT_DATA_RB      [i])) (*(out_RESERVATION_STATION_OUT_DATA_RB      [i]));
229  (*(_Reservation_station->out_RESERVATION_STATION_OUT_DATA_RC      [i])) (*(out_RESERVATION_STATION_OUT_DATA_RC      [i]));
230  (*(_Reservation_station->out_RESERVATION_STATION_OUT_WRITE_RD     [i])) (*(out_RESERVATION_STATION_OUT_WRITE_RD     [i]));
231  (*(_Reservation_station->out_RESERVATION_STATION_OUT_NUM_REG_RD   [i])) (*(out_RESERVATION_STATION_OUT_NUM_REG_RD   [i]));
232  (*(_Reservation_station->out_RESERVATION_STATION_OUT_WRITE_RE     [i])) (*(out_RESERVATION_STATION_OUT_WRITE_RE     [i]));
233  (*(_Reservation_station->out_RESERVATION_STATION_OUT_NUM_REG_RE   [i])) (*(out_RESERVATION_STATION_OUT_NUM_REG_RE   [i]));
234      }
235    for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
236      {
237  (*(_Reservation_station-> in_GPR_WRITE_VAL                        [i])) (*( in_GPR_WRITE_VAL                        [i]));
238  (*(_Reservation_station-> in_GPR_WRITE_CONTEXT_ID                 [i])) (*( in_GPR_WRITE_CONTEXT_ID                 [i]));
239  (*(_Reservation_station-> in_GPR_WRITE_NUM_REG                    [i])) (*( in_GPR_WRITE_NUM_REG                    [i]));
240  (*(_Reservation_station-> in_GPR_WRITE_DATA                       [i])) (*( in_GPR_WRITE_DATA                       [i]));
241      }
242    for (uint32_t i=0; i<_param->_nb_spr_write; i++)
243      {
244  (*(_Reservation_station-> in_SPR_WRITE_VAL                        [i])) (*( in_SPR_WRITE_VAL                        [i]));
245  (*(_Reservation_station-> in_SPR_WRITE_CONTEXT_ID                 [i])) (*( in_SPR_WRITE_CONTEXT_ID                 [i]));
246  (*(_Reservation_station-> in_SPR_WRITE_NUM_REG                    [i])) (*( in_SPR_WRITE_NUM_REG                    [i]));
247  (*(_Reservation_station-> in_SPR_WRITE_DATA                       [i])) (*( in_SPR_WRITE_DATA                       [i]));
248      }
249    for (uint32_t i=0; i<_param->_nb_bypass_write; i++)
250      {
251  (*(_Reservation_station-> in_BYPASS_WRITE_CONTEXT_ID              [i])) (*( in_BYPASS_WRITE_CONTEXT_ID              [i]));
252  (*(_Reservation_station-> in_BYPASS_WRITE_GPR_VAL                 [i])) (*( in_BYPASS_WRITE_GPR_VAL                 [i]));
253  (*(_Reservation_station-> in_BYPASS_WRITE_GPR_NUM_REG             [i])) (*( in_BYPASS_WRITE_GPR_NUM_REG             [i]));
254  (*(_Reservation_station-> in_BYPASS_WRITE_GPR_DATA                [i])) (*( in_BYPASS_WRITE_GPR_DATA                [i]));
255  (*(_Reservation_station-> in_BYPASS_WRITE_SPR_VAL                 [i])) (*( in_BYPASS_WRITE_SPR_VAL                 [i]));
256  (*(_Reservation_station-> in_BYPASS_WRITE_SPR_NUM_REG             [i])) (*( in_BYPASS_WRITE_SPR_NUM_REG             [i]));
257  (*(_Reservation_station-> in_BYPASS_WRITE_SPR_DATA                [i])) (*( in_BYPASS_WRITE_SPR_DATA                [i]));
258      }
259    for (uint32_t i=0; i<_param->_nb_bypass_memory; i++)
260      {
261  (*(_Reservation_station-> in_BYPASS_MEMORY_VAL                    [i])) (*( in_BYPASS_MEMORY_VAL                    [i]));
262  (*(_Reservation_station-> in_BYPASS_MEMORY_CONTEXT_ID             [i])) (*( in_BYPASS_MEMORY_CONTEXT_ID             [i]));
263  (*(_Reservation_station-> in_BYPASS_MEMORY_NUM_REG                [i])) (*( in_BYPASS_MEMORY_NUM_REG                [i]));
264  (*(_Reservation_station-> in_BYPASS_MEMORY_DATA                   [i])) (*( in_BYPASS_MEMORY_DATA                   [i]));
265      }
266
267  cout << "<" << name << "> Start Simulation ............" << endl;
268  Time * _time = new Time();
269
270  /********************************************************
271   * Simulation - Begin
272   ********************************************************/
273
274  // Initialisation
275
276  const uint32_t nb_request = _param->_nb_packet;
277//const uint32_t seed = 0;
278  const uint32_t seed = static_cast<uint32_t>(time(NULL));
279  srand(seed);
280
281  Tcontext_t         _context_id [nb_request];
282  Tcontrol_t         _read_ra    [nb_request];
283  Tgeneral_address_t _num_reg_ra [nb_request];
284  Tcontrol_t         _read_rb    [nb_request];
285  Tgeneral_address_t _num_reg_rb [nb_request];
286  Tcontrol_t         _read_rc    [nb_request];
287  Tspecial_address_t _num_reg_rc [nb_request];
288
289  // emulation of registerFile
290  Tcontrol_t         _gpr_val    [_param->_nb_general_register][_param->_nb_context];
291  Tgeneral_data_t    _gpr        [_param->_nb_general_register][_param->_nb_context];
292  Tcontrol_t         _spr_val    [_param->_nb_special_register][_param->_nb_context];
293  Tspecial_data_t    _spr        [_param->_nb_special_register][_param->_nb_context];
294
295  SC_START(0);
296
297  LABEL("Initialisation");
298  in_RESERVATION_STATION_IN_VAL ->write(0);
299  for (uint32_t i=0; i<_param->_size_queue      ; i++)
300    in_RESERVATION_STATION_OUT_ACK [i]->write(0);
301  for (uint32_t i=0; i<_param->_nb_gpr_write    ; i++)
302    in_GPR_WRITE_VAL               [i]->write(0);
303  for (uint32_t i=0; i<_param->_nb_spr_write    ; i++)
304    in_SPR_WRITE_VAL               [i]->write(0);
305  for (uint32_t i=0; i<_param->_nb_bypass_write ; i++)
306    {
307      in_BYPASS_WRITE_GPR_VAL      [i]->write(0);
308      in_BYPASS_WRITE_SPR_VAL      [i]->write(0);
309    }
310  for (uint32_t i=0; i<_param->_nb_bypass_memory; i++)
311    in_BYPASS_MEMORY_VAL           [i]->write(0);
312
313  in_NRESET->write(0);
314  SC_START(5);
315  in_NRESET->write(1);
316
317  LABEL("Loop of Test");
318
319  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
320    {
321      LABEL("Iteration "+toString(iteration));
322
323      int32_t percent_transaction_queue_in     = (rand()%50)+25;
324      int32_t percent_transaction_queue_out    = (rand()%50)+25;
325      int32_t percent_registerfile_valid       = (rand()%50)+25;
326      int32_t percent_transaction_registerfile = (rand()%50)+25;
327      int32_t percent_transaction_bypass       = (rand()%50)+25;
328     
329      LABEL("Initialisation");
330
331      for (uint32_t i=0; i<nb_request; i++)
332        {
333          _context_id   [i] = rand()% _param->_nb_context            ;
334          _read_ra      [i] = rand()% 2                              ;
335          _num_reg_ra   [i] = rand()% _param->_nb_general_register   ;
336          _read_rb      [i] = rand()% 2                              ;
337          _num_reg_rb   [i] = rand()% _param->_nb_general_register   ;
338          _read_rc      [i] = rand()% 2                              ;
339          _num_reg_rc   [i] = rand()% _param->_nb_special_register   ;
340        }
341     
342      // emulation of registerFile
343      for (uint32_t j=0; j<_param->_nb_context; j++)
344        {
345          for (uint32_t i=0; i<_param->_nb_general_register; i++)
346            {
347              _gpr_val      [i][j] = ((rand()%100) < percent_registerfile_valid);
348              _gpr          [i][j] = rand()%(1<<_param->_size_general_data);
349            }
350          for (uint32_t i=0; i<_param->_nb_special_register; i++)
351            {
352              _spr_val      [i][j] = ((rand()%100) < percent_registerfile_valid);
353              _spr          [i][j] = rand()%(1<<_param->_size_special_data);
354            }
355        }
356      // End initialisation .......
357
358      uint32_t request_in  = 0;
359      uint32_t request_out = 0;
360      bool     request_out_wait [nb_request];
361
362      for (uint32_t i=0; i<nb_request; i++)
363        request_out_wait [i] = true;
364
365      while (request_out < nb_request)
366        {
367          if ((request_in < nb_request) and
368              ((rand()%100) < percent_transaction_queue_in))
369            {
370              bool               data_val;
371              Tgeneral_address_t gpr_addr;
372              Tspecial_address_t spr_addr;
373              Tcontext_t         ctxt    = _context_id [request_in];
374              in_RESERVATION_STATION_IN_VAL         ->write(1);
375              in_RESERVATION_STATION_IN_CONTEXT_ID  ->write(ctxt);
376              in_RESERVATION_STATION_IN_PACKET_ID   ->write(request_in);
377              in_RESERVATION_STATION_IN_OPERATION   ->write(0);
378              in_RESERVATION_STATION_IN_TYPE        ->write(0);
379              in_RESERVATION_STATION_IN_HAS_IMMEDIAT->write(0);
380              in_RESERVATION_STATION_IN_IMMEDIAT    ->write(0);
381//            in_RESERVATION_STATION_IN_READ_RA     ->write(_read_ra[request_in]);
382              gpr_addr = _num_reg_ra [request_in];
383              data_val = not(_read_ra[request_in]) or _gpr_val[gpr_addr][ctxt];
384              in_RESERVATION_STATION_IN_NUM_REG_RA  ->write(gpr_addr);
385              in_RESERVATION_STATION_IN_DATA_RA_VAL ->write(data_val);
386              in_RESERVATION_STATION_IN_DATA_RA     ->write((data_val)?_gpr[gpr_addr][ctxt]:0);
387//            in_RESERVATION_STATION_IN_READ_RB     ->write(_read_rb[request_in]);
388              gpr_addr = _num_reg_rb [request_in];
389              data_val = not(_read_rb[request_in]) or _gpr_val[gpr_addr][ctxt];
390              in_RESERVATION_STATION_IN_NUM_REG_RB  ->write(gpr_addr);                         
391              in_RESERVATION_STATION_IN_DATA_RB_VAL ->write(data_val);                         
392              in_RESERVATION_STATION_IN_DATA_RB     ->write((data_val)?_gpr[gpr_addr][ctxt]:0);
393//            in_RESERVATION_STATION_IN_READ_RC     ->write(_read_rc[request_in]);
394              spr_addr = _num_reg_rc [request_in];
395              data_val = not(_read_rc[request_in]) or _spr_val[spr_addr][ctxt];
396              in_RESERVATION_STATION_IN_NUM_REG_RC  ->write(spr_addr);                         
397              in_RESERVATION_STATION_IN_DATA_RC_VAL ->write(data_val);                         
398              in_RESERVATION_STATION_IN_DATA_RC     ->write((data_val)?_spr[spr_addr][ctxt]:0);
399              in_RESERVATION_STATION_IN_WRITE_RD    ->write(0);
400              in_RESERVATION_STATION_IN_NUM_REG_RD  ->write(0);
401              in_RESERVATION_STATION_IN_WRITE_RE    ->write(0);
402              in_RESERVATION_STATION_IN_NUM_REG_RE  ->write(0);
403            }
404          else
405            {
406              in_RESERVATION_STATION_IN_VAL         ->write(0);
407            }
408
409          for (uint32_t i=0; i<_param->_size_queue      ; i++)
410            in_RESERVATION_STATION_OUT_ACK[i]->write((rand()%100)<percent_transaction_queue_out);
411
412
413          LABEL("Bypass Network :");
414          for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
415            {
416              Tgeneral_address_t num_reg = rand()% _param->_nb_general_register;
417              Tcontext_t         context = rand()% _param->_nb_context;
418              Tcontrol_t         val     = (_gpr_val [num_reg][context]== 0)?((rand()%100) < percent_transaction_registerfile):0;
419              Tgeneral_data_t    data    = rand()%(1<<_param->_size_general_data);
420             
421              in_GPR_WRITE_VAL        [i]->write(val);       
422              in_GPR_WRITE_CONTEXT_ID [i]->write(context);
423              in_GPR_WRITE_NUM_REG    [i]->write(num_reg);
424              in_GPR_WRITE_DATA       [i]->write(data);
425
426              if (val)
427                {
428                  LABEL(" * GPR_WRITE     ["+toString(i)+"] - gpr["+toString(num_reg)+"]["+toString(context)+"] <- "+toString(data));
429                  _gpr     [num_reg][context] = data;
430                  _gpr_val [num_reg][context] = 1;
431                }
432            }
433          for (uint32_t i=0; i<_param->_nb_spr_write; i++)
434            {
435              Tspecial_address_t num_reg = rand()% _param->_nb_special_register;
436              Tcontext_t         context = rand()% _param->_nb_context;
437              Tcontrol_t         val     = (_spr_val [num_reg][context]== 0)?((rand()%100) < percent_transaction_registerfile):0;
438              Tspecial_data_t    data    = rand()%(1<<_param->_size_special_data);
439             
440              in_SPR_WRITE_VAL        [i]->write(val);       
441              in_SPR_WRITE_CONTEXT_ID [i]->write(context);
442              in_SPR_WRITE_NUM_REG    [i]->write(num_reg);
443              in_SPR_WRITE_DATA       [i]->write(data);
444
445              if (val == 1)
446                {
447                  LABEL(" * SPR_WRITE     ["+toString(i)+"] - spr["+toString(num_reg)+"]["+toString(context)+"] <- "+toString(data));
448                  _spr     [num_reg][context] = data;
449                  _spr_val [num_reg][context] = 1;
450                }
451            }
452
453          for (uint32_t i=0; i<_param->_nb_bypass_write; i++)
454            {
455              Tcontext_t         context     = rand()% _param->_nb_context;
456              in_BYPASS_WRITE_CONTEXT_ID [i]->write(context);
457
458              Tgeneral_address_t gpr_num_reg = rand()% _param->_nb_general_register;
459              Tcontrol_t         gpr_val     = (_gpr_val [gpr_num_reg][context]== 0)?((rand()%100) < percent_transaction_bypass):0;
460              Tgeneral_data_t    gpr_data    = rand()%(1<<_param->_size_general_data);
461             
462              in_BYPASS_WRITE_GPR_VAL    [i]->write(gpr_val);         
463              in_BYPASS_WRITE_GPR_NUM_REG[i]->write(gpr_num_reg);
464              in_BYPASS_WRITE_GPR_DATA   [i]->write(gpr_data);
465
466              if (gpr_val)
467                {
468                  LABEL(" * BYPASS_WRITE  ["+toString(i)+"] - gpr["+toString(gpr_num_reg)+"]["+toString(context)+"] <- "+toString(gpr_data));
469                  _gpr     [gpr_num_reg][context] = gpr_data;
470                  _gpr_val [gpr_num_reg][context] = 1;
471                }
472
473              Tspecial_address_t spr_num_reg = rand()% _param->_nb_special_register;
474              Tcontrol_t         spr_val     = (_spr_val [spr_num_reg][context]== 0)?((rand()%100) < percent_transaction_bypass):0;
475              Tspecial_data_t    spr_data    = rand()%(1<<_param->_size_special_data);
476             
477              in_BYPASS_WRITE_SPR_VAL    [i]->write(spr_val);         
478              in_BYPASS_WRITE_SPR_NUM_REG[i]->write(spr_num_reg);
479              in_BYPASS_WRITE_SPR_DATA   [i]->write(spr_data);
480
481              if (spr_val)
482                {
483                  LABEL(" * BYPASS_WRITE  ["+toString(i)+"] - spr["+toString(spr_num_reg)+"]["+toString(context)+"] <- "+toString(spr_data));
484                  _spr     [spr_num_reg][context] = spr_data;
485                  _spr_val [spr_num_reg][context] = 1;
486                }
487
488            }
489
490          for (uint32_t i=0; i<_param->_nb_bypass_memory; i++)
491            {
492              Tcontext_t         context     = rand()% _param->_nb_context;
493              in_BYPASS_MEMORY_CONTEXT_ID [i]->write(context);
494
495              Tgeneral_address_t gpr_num_reg = rand()% _param->_nb_general_register;
496              Tcontrol_t         gpr_val     = (_gpr_val [gpr_num_reg][context]== 0)?((rand()%100) < percent_transaction_bypass):0;
497              Tgeneral_data_t    gpr_data    = rand()%(1<<_param->_size_general_data);
498             
499              in_BYPASS_MEMORY_VAL    [i]->write(gpr_val);           
500              in_BYPASS_MEMORY_NUM_REG[i]->write(gpr_num_reg);
501              in_BYPASS_MEMORY_DATA   [i]->write(gpr_data);
502
503              if (gpr_val)
504                {
505                  LABEL(" * BYPASS_MEMORY ["+toString(i)+"] - gpr["+toString(gpr_num_reg)+"]["+toString(context)+"] <- "+toString(gpr_data));
506                  _gpr     [gpr_num_reg][context] = gpr_data;
507                  _gpr_val [gpr_num_reg][context] = 1;
508                }
509            }
510          SC_START(0); // to mealy function
511         
512//        LABEL("Test     RESERVATION_STATION_IN  : "+toString(in_RESERVATION_STATION_IN_VAL->read())+","+toString(out_RESERVATION_STATION_IN_ACK->read()));
513          if (( in_RESERVATION_STATION_IN_VAL->read() == 1) and
514              (out_RESERVATION_STATION_IN_ACK->read() == 1))
515            {
516              LABEL("Accepted RESERVATION_STATION_IN  n°"+toString(request_in));
517              request_in  ++;
518            }
519
520          for (uint32_t i=0; i<_param->_size_queue      ; i++)
521            {
522              LABEL("Test     RESERVATION_STATION_OUT "+toString(i)+" : "+toString(out_RESERVATION_STATION_OUT_VAL[i]->read())+","+toString(in_RESERVATION_STATION_OUT_ACK[i]->read()));
523              if ((out_RESERVATION_STATION_OUT_VAL [i]->read() == 1) and
524                  ( in_RESERVATION_STATION_OUT_ACK [i]->read() == 1))
525                {
526                  Tpacket_t  packet_id  = out_RESERVATION_STATION_OUT_PACKET_ID [i]->read();
527
528                  LABEL("Accepted RESERVATION_STATION_OUT ["+toString(i)+"] n°"+toString(packet_id)+", request n°"+toString(request_out));
529                  TEST(bool, request_out_wait [packet_id] , true);
530
531                  request_out ++;
532                  request_out_wait [packet_id] = false;
533
534                  Tcontext_t context_id = _context_id [packet_id];
535                 
536                  TEST(Tcontext_t        ,out_RESERVATION_STATION_OUT_CONTEXT_ID[i]->read(),context_id);
537                  if (_read_ra [packet_id])
538                  TEST(Tgeneral_data_t   ,out_RESERVATION_STATION_OUT_DATA_RA   [i]->read(),_gpr[_num_reg_ra[packet_id]][context_id]);
539                 
540                  if (_read_rb [packet_id])
541                  TEST(Tgeneral_data_t   ,out_RESERVATION_STATION_OUT_DATA_RB   [i]->read(),_gpr[_num_reg_rb[packet_id]][context_id]);
542                 
543                  if (_read_rc [packet_id])
544                  TEST(Tspecial_data_t   ,out_RESERVATION_STATION_OUT_DATA_RC   [i]->read(),_spr[_num_reg_rc[packet_id]][context_id]);
545                }
546            }
547         
548          SC_START(1);   
549        }
550    }
551
552  /********************************************************
553   * Simulation - End
554   ********************************************************/
555
556  TEST_OK ("End of Simulation");
557  delete _time;
558  cout << "<" << name << "> ............ Stop Simulation" << endl;
559
560  delete     in_CLOCK ;
561  delete     in_NRESET;
562
563  delete     in_RESERVATION_STATION_IN_VAL         ;
564  delete    out_RESERVATION_STATION_IN_ACK         ;
565  delete     in_RESERVATION_STATION_IN_CONTEXT_ID  ;
566  delete     in_RESERVATION_STATION_IN_PACKET_ID   ;
567  delete     in_RESERVATION_STATION_IN_OPERATION   ;
568  delete     in_RESERVATION_STATION_IN_TYPE        ;
569  delete     in_RESERVATION_STATION_IN_HAS_IMMEDIAT;
570  delete     in_RESERVATION_STATION_IN_IMMEDIAT    ;
571//delete     in_RESERVATION_STATION_IN_READ_RA     ;
572  delete     in_RESERVATION_STATION_IN_NUM_REG_RA  ;
573  delete     in_RESERVATION_STATION_IN_DATA_RA_VAL ;
574  delete     in_RESERVATION_STATION_IN_DATA_RA     ;
575//delete     in_RESERVATION_STATION_IN_READ_RB     ;
576  delete     in_RESERVATION_STATION_IN_NUM_REG_RB  ;
577  delete     in_RESERVATION_STATION_IN_DATA_RB_VAL ;
578  delete     in_RESERVATION_STATION_IN_DATA_RB     ;
579//delete     in_RESERVATION_STATION_IN_READ_RC     ;
580  delete     in_RESERVATION_STATION_IN_NUM_REG_RC  ;
581  delete     in_RESERVATION_STATION_IN_DATA_RC_VAL ;
582  delete     in_RESERVATION_STATION_IN_DATA_RC     ;
583  delete     in_RESERVATION_STATION_IN_WRITE_RD    ;
584  delete     in_RESERVATION_STATION_IN_NUM_REG_RD  ;
585  delete     in_RESERVATION_STATION_IN_WRITE_RE    ;
586  delete     in_RESERVATION_STATION_IN_NUM_REG_RE  ;
587 
588  delete [] out_RESERVATION_STATION_OUT_VAL         ;
589  delete []  in_RESERVATION_STATION_OUT_ACK         ;
590  delete [] out_RESERVATION_STATION_OUT_CONTEXT_ID  ;
591  delete [] out_RESERVATION_STATION_OUT_PACKET_ID   ;
592  delete [] out_RESERVATION_STATION_OUT_OPERATION   ;
593  delete [] out_RESERVATION_STATION_OUT_TYPE        ;
594  delete [] out_RESERVATION_STATION_OUT_HAS_IMMEDIAT;
595  delete [] out_RESERVATION_STATION_OUT_IMMEDIAT    ;
596  delete [] out_RESERVATION_STATION_OUT_DATA_RA     ;
597  delete [] out_RESERVATION_STATION_OUT_DATA_RB     ;
598  delete [] out_RESERVATION_STATION_OUT_DATA_RC     ;
599  delete [] out_RESERVATION_STATION_OUT_WRITE_RD    ;
600  delete [] out_RESERVATION_STATION_OUT_NUM_REG_RD  ;
601  delete [] out_RESERVATION_STATION_OUT_WRITE_RE    ;
602  delete [] out_RESERVATION_STATION_OUT_NUM_REG_RE  ;
603 
604  delete []  in_GPR_WRITE_VAL       ;
605  delete []  in_GPR_WRITE_CONTEXT_ID;
606  delete []  in_GPR_WRITE_NUM_REG   ;
607  delete []  in_GPR_WRITE_DATA      ;
608 
609  delete []  in_SPR_WRITE_VAL       ;
610  delete []  in_SPR_WRITE_CONTEXT_ID;
611  delete []  in_SPR_WRITE_NUM_REG   ;
612  delete []  in_SPR_WRITE_DATA      ;
613 
614  delete []  in_BYPASS_WRITE_CONTEXT_ID ;
615  delete []  in_BYPASS_WRITE_GPR_VAL    ;
616  delete []  in_BYPASS_WRITE_GPR_NUM_REG;
617  delete []  in_BYPASS_WRITE_GPR_DATA   ;
618  delete []  in_BYPASS_WRITE_SPR_VAL    ;
619  delete []  in_BYPASS_WRITE_SPR_NUM_REG;
620  delete []  in_BYPASS_WRITE_SPR_DATA   ;
621 
622  delete []  in_BYPASS_MEMORY_VAL       ;
623  delete []  in_BYPASS_MEMORY_CONTEXT_ID;
624  delete []  in_BYPASS_MEMORY_NUM_REG   ;
625  delete []  in_BYPASS_MEMORY_DATA      ;
626#endif
627
628  delete _Reservation_station;
629#ifdef STATISTICS
630  delete _parameters_statistics;
631#endif
632}
Note: See TracBrowser for help on using the repository browser.