source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/src/test.cpp @ 82

Last change on this file since 82 was 82, checked in by rosiere, 16 years ago
  • support locale (now must "just" translate)
  • update all component with new test format
  • update all component with usage
  • New component : decod queue and prediction_unit
  • Property svn:keywords set to Id
File size: 14.6 KB
Line 
1/*
2 * $Id: test.cpp 82 2008-05-01 16:48:45Z rosiere $
3 *
4 * [ Description ]
5 *
6 * Test
7 */
8
9#define NB_ITERATION  1
10#define CYCLE_MAX     (128*NB_ITERATION)
11
12#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/include/test.h"
13#include "Common/include/Test.h"
14#include "Behavioural/include/Allocation.h"
15
16void test (string name,
17           morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer::branch_target_buffer_glue::Parameters * _param)
18{
19  msg(_("<%s> : Simulation SystemC.\n"),name.c_str());
20
21#ifdef STATISTICS
22  morpheo::behavioural::Parameters_Statistics * _parameters_statistics = new morpheo::behavioural::Parameters_Statistics (5,50);
23#endif
24
25  Branch_Target_Buffer_Glue * _Branch_Target_Buffer_Glue = new Branch_Target_Buffer_Glue
26    (name.c_str(),
27#ifdef STATISTICS
28     _parameters_statistics,
29#endif
30     _param,
31     USE_ALL);
32 
33#ifdef SYSTEMC
34  /*********************************************************************
35   * Déclarations des signaux
36   *********************************************************************/
37  string rename;
38
39  sc_clock              *  in_CLOCK  = new sc_clock ("clock", 1.0, 0.5);         
40  sc_signal<Tcontrol_t> *  in_NRESET = new sc_signal<Tcontrol_t> ("NRESET");
41
42  ALLOC1_SC_SIGNAL( in_PREDICT_VAL                  ," in_PREDICT_VAL                  ",Tcontrol_t         ,_param->_nb_inst_predict);
43  ALLOC1_SC_SIGNAL(out_PREDICT_ACK                  ,"out_PREDICT_ACK                  ",Tcontrol_t         ,_param->_nb_inst_predict);
44  ALLOC1_SC_SIGNAL(out_PREDICT_HIT                  ,"out_PREDICT_HIT                  ",Tcontrol_t         ,_param->_nb_inst_predict);
45  ALLOC1_SC_SIGNAL(out_PREDICT_ADDRESS_SRC          ,"out_PREDICT_ADDRESS_SRC          ",Tgeneral_data_t    ,_param->_nb_inst_predict);
46  ALLOC1_SC_SIGNAL(out_PREDICT_ADDRESS_DEST         ,"out_PREDICT_ADDRESS_DEST         ",Tgeneral_data_t    ,_param->_nb_inst_predict);
47  ALLOC1_SC_SIGNAL(out_PREDICT_CONDITION            ,"out_PREDICT_CONDITION            ",Tbranch_condition_t,_param->_nb_inst_predict);
48  ALLOC1_SC_SIGNAL(out_PREDICT_LAST_TAKE            ,"out_PREDICT_LAST_TAKE            ",Tcontrol_t         ,_param->_nb_inst_predict);
49  ALLOC1_SC_SIGNAL(out_PREDICT_IS_ACCURATE          ,"out_PREDICT_IS_ACCURATE          ",Tcontrol_t         ,_param->_nb_inst_predict);
50  ALLOC1_SC_SIGNAL(out_PREDICT_REGISTER_VAL         ,"out_PREDICT_REGISTER_VAL         ",Tcontrol_t         ,_param->_nb_inst_predict);
51  ALLOC1_SC_SIGNAL( in_PREDICT_REGISTER_ACK         ," in_PREDICT_REGISTER_ACK         ",Tcontrol_t         ,_param->_nb_inst_predict);
52  ALLOC2_SC_SIGNAL( in_PREDICT_REGISTER_HIT         ," in_PREDICT_REGISTER_HIT         ",Tcontrol_t         ,_param->_nb_inst_predict,_param->_associativity);
53  ALLOC2_SC_SIGNAL( in_PREDICT_REGISTER_ADDRESS_SRC ," in_PREDICT_REGISTER_ADDRESS_SRC ",Tgeneral_data_t    ,_param->_nb_inst_predict,_param->_associativity);
54  ALLOC2_SC_SIGNAL( in_PREDICT_REGISTER_ADDRESS_DEST," in_PREDICT_REGISTER_ADDRESS_DEST",Tgeneral_data_t    ,_param->_nb_inst_predict,_param->_associativity);
55  ALLOC2_SC_SIGNAL( in_PREDICT_REGISTER_CONDITION   ," in_PREDICT_REGISTER_CONDITION   ",Tbranch_condition_t,_param->_nb_inst_predict,_param->_associativity);
56  ALLOC2_SC_SIGNAL( in_PREDICT_REGISTER_LAST_TAKE   ," in_PREDICT_REGISTER_LAST_TAKE   ",Tcontrol_t         ,_param->_nb_inst_predict,_param->_associativity);
57  ALLOC2_SC_SIGNAL( in_PREDICT_REGISTER_IS_ACCURATE ," in_PREDICT_REGISTER_IS_ACCURATE ",Tcontrol_t         ,_param->_nb_inst_predict,_param->_associativity);
58  ALLOC1_SC_SIGNAL( in_PREDICT_SORT_VAL             ," in_PREDICT_SORT_VAL             ",Tptr_t             ,_param->_nb_inst_predict);
59  ALLOC1_SC_SIGNAL( in_PREDICT_SORT_INDEX           ," in_PREDICT_SORT_INDEX           ",Tptr_t             ,_param->_nb_inst_predict);
60  ALLOC1_SC_SIGNAL(out_PREDICT_VICTIM_VAL           ,"out_PREDICT_VICTIM_VAL           ",Tcontrol_t         ,_param->_nb_inst_predict);
61  ALLOC1_SC_SIGNAL( in_PREDICT_VICTIM_ACK           ," in_PREDICT_VICTIM_ACK           ",Tcontrol_t         ,_param->_nb_inst_predict);
62  ALLOC1_SC_SIGNAL(out_PREDICT_VICTIM_HIT           ,"out_PREDICT_VICTIM_HIT           ",Tcontrol_t         ,_param->_nb_inst_predict);
63  ALLOC1_SC_SIGNAL(out_PREDICT_VICTIM_ADDRESS       ,"out_PREDICT_VICTIM_ADDRESS       ",Tgeneral_data_t    ,_param->_nb_inst_predict);
64  ALLOC1_SC_SIGNAL(out_PREDICT_VICTIM_INDEX         ,"out_PREDICT_VICTIM_INDEX         ",Tptr_t             ,_param->_nb_inst_predict);
65  ALLOC1_SC_SIGNAL( in_PREDICT_VICTIM_VICTIM        ,"out_PREDICT_VICTIM_VICTIM        ",Tptr_t             ,_param->_nb_inst_predict);
66  ALLOC1_SC_SIGNAL( in_DECOD_VAL                    ," in_DECOD_VAL                    ",Tcontrol_t         ,_param->_nb_inst_decod);
67  ALLOC1_SC_SIGNAL(out_DECOD_ACK                    ,"out_DECOD_ACK                    ",Tcontrol_t         ,_param->_nb_inst_decod);
68  ALLOC1_SC_SIGNAL( in_DECOD_ADDRESS_SRC            ," in_DECOD_ADDRESS_SRC            ",Tgeneral_data_t    ,_param->_nb_inst_decod);
69  ALLOC1_SC_SIGNAL(out_DECOD_REGISTER_VAL           ,"out_DECOD_REGISTER_VAL           ",Tcontrol_t         ,_param->_nb_inst_decod);
70  ALLOC1_SC_SIGNAL( in_DECOD_REGISTER_ACK           ," in_DECOD_REGISTER_ACK           ",Tcontrol_t         ,_param->_nb_inst_decod);
71  ALLOC1_SC_SIGNAL(out_DECOD_VICTIM_VAL             ,"out_DECOD_VICTIM_VAL             ",Tcontrol_t         ,_param->_nb_inst_decod);
72  ALLOC1_SC_SIGNAL( in_DECOD_VICTIM_ACK             ," in_DECOD_VICTIM_ACK             ",Tcontrol_t         ,_param->_nb_inst_decod);
73  ALLOC1_SC_SIGNAL(out_DECOD_VICTIM_ADDRESS         ,"out_DECOD_VICTIM_ADDRESS         ",Tgeneral_data_t    ,_param->_nb_inst_decod);
74  ALLOC1_SC_SIGNAL( in_UPDATE_VAL                   ," in_UPDATE_VAL                   ",Tcontrol_t         ,_param->_nb_inst_update);
75  ALLOC1_SC_SIGNAL(out_UPDATE_ACK                   ,"out_UPDATE_ACK                   ",Tcontrol_t         ,_param->_nb_inst_update);
76  ALLOC1_SC_SIGNAL( in_UPDATE_ADDRESS_SRC           ," in_UPDATE_ADDRESS_SRC           ",Tgeneral_data_t    ,_param->_nb_inst_update);
77  ALLOC1_SC_SIGNAL(out_UPDATE_REGISTER_VAL          ,"out_UPDATE_REGISTER_VAL          ",Tcontrol_t         ,_param->_nb_inst_update);
78  ALLOC1_SC_SIGNAL( in_UPDATE_REGISTER_ACK          ," in_UPDATE_REGISTER_ACK          ",Tcontrol_t         ,_param->_nb_inst_update);
79  ALLOC1_SC_SIGNAL(out_UPDATE_VICTIM_VAL            ,"out_UPDATE_VICTIM_VAL            ",Tcontrol_t         ,_param->_nb_inst_update);
80  ALLOC1_SC_SIGNAL( in_UPDATE_VICTIM_ACK            ," in_UPDATE_VICTIM_ACK            ",Tcontrol_t         ,_param->_nb_inst_update);
81  ALLOC1_SC_SIGNAL(out_UPDATE_VICTIM_ADDRESS        ,"out_UPDATE_VICTIM_ADDRESS        ",Tgeneral_data_t    ,_param->_nb_inst_update);
82 
83  /********************************************************
84   * Instanciation
85   ********************************************************/
86 
87  msg(_("<%s> : Instanciation of _Branch_Target_Buffer_Glue.\n"),name.c_str());
88
89  (*(_Branch_Target_Buffer_Glue->in_CLOCK))        (*(in_CLOCK));
90  (*(_Branch_Target_Buffer_Glue->in_NRESET))       (*(in_NRESET));
91 
92  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_VAL                  ,_param->_nb_inst_predict);
93  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_ACK                  ,_param->_nb_inst_predict);
94  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_HIT                  ,_param->_nb_inst_predict);
95  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_ADDRESS_SRC          ,_param->_nb_inst_predict);
96  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_ADDRESS_DEST         ,_param->_nb_inst_predict);
97  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_CONDITION            ,_param->_nb_inst_predict);
98  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_LAST_TAKE            ,_param->_nb_inst_predict);
99  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_IS_ACCURATE          ,_param->_nb_inst_predict);
100  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_REGISTER_VAL         ,_param->_nb_inst_predict);
101  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_REGISTER_ACK         ,_param->_nb_inst_predict);
102  INSTANCE2_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_REGISTER_HIT         ,_param->_nb_inst_predict,_param->_associativity);
103  INSTANCE2_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_REGISTER_ADDRESS_SRC ,_param->_nb_inst_predict,_param->_associativity);
104  INSTANCE2_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_REGISTER_ADDRESS_DEST,_param->_nb_inst_predict,_param->_associativity);
105  INSTANCE2_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_REGISTER_CONDITION   ,_param->_nb_inst_predict,_param->_associativity);
106  INSTANCE2_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_REGISTER_LAST_TAKE   ,_param->_nb_inst_predict,_param->_associativity);
107  INSTANCE2_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_REGISTER_IS_ACCURATE ,_param->_nb_inst_predict,_param->_associativity);
108  if (_param->_have_port_victim)
109    {
110  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_SORT_VAL             ,_param->_nb_inst_predict);
111  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_SORT_INDEX           ,_param->_nb_inst_predict);
112  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_VICTIM_VAL           ,_param->_nb_inst_predict);
113  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_VICTIM_ACK           ,_param->_nb_inst_predict);
114  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_VICTIM_HIT           ,_param->_nb_inst_predict);
115  if (not _param->_is_full_associative)
116  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_VICTIM_ADDRESS       ,_param->_nb_inst_predict);
117  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_PREDICT_VICTIM_INDEX         ,_param->_nb_inst_predict);
118  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_PREDICT_VICTIM_VICTIM        ,_param->_nb_inst_predict);
119    }
120  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_DECOD_VAL                    ,_param->_nb_inst_decod);
121  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_DECOD_ACK                    ,_param->_nb_inst_decod);
122  if (not _param->_is_full_associative)
123  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_DECOD_ADDRESS_SRC            ,_param->_nb_inst_decod);
124  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_DECOD_REGISTER_VAL           ,_param->_nb_inst_decod);
125  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_DECOD_REGISTER_ACK           ,_param->_nb_inst_decod);
126  if (_param->_have_port_victim)
127    {
128  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_DECOD_VICTIM_VAL             ,_param->_nb_inst_decod);
129  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_DECOD_VICTIM_ACK             ,_param->_nb_inst_decod);
130  if (not _param->_is_full_associative)
131  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_DECOD_VICTIM_ADDRESS         ,_param->_nb_inst_decod);
132    }
133  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_UPDATE_VAL                   ,_param->_nb_inst_update);
134  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_UPDATE_ACK                   ,_param->_nb_inst_update);
135  if (not _param->_is_full_associative)
136  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_UPDATE_ADDRESS_SRC           ,_param->_nb_inst_update);
137  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_UPDATE_REGISTER_VAL          ,_param->_nb_inst_update);
138  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_UPDATE_REGISTER_ACK          ,_param->_nb_inst_update);
139  if (_param->_have_port_victim)
140    {
141  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_UPDATE_VICTIM_VAL            ,_param->_nb_inst_update);
142  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue, in_UPDATE_VICTIM_ACK            ,_param->_nb_inst_update);
143  if (not _param->_is_full_associative)
144  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Glue,out_UPDATE_VICTIM_ADDRESS        ,_param->_nb_inst_update);
145    }
146  msg(_("<%s> : Start Simulation ............\n"),name.c_str());
147   
148  Time * _time = new Time();
149
150  /********************************************************
151   * Simulation - Begin
152   ********************************************************/
153
154  // Initialisation
155
156  const uint32_t seed = 0;
157//const uint32_t seed = static_cast<uint32_t>(time(NULL));
158
159  srand(seed);
160
161  SC_START(0);
162  LABEL("Initialisation");
163
164  LABEL("Reset");
165  in_NRESET->write(0);
166  SC_START(5);
167  in_NRESET->write(1); 
168
169  LABEL("Loop of Test");
170
171  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
172    {
173      LABEL("Iteration %d",iteration);
174
175      SC_START(1);
176    }
177
178  /********************************************************
179   * Simulation - End
180   ********************************************************/
181
182  TEST_OK ("End of Simulation");
183  delete _time;
184
185  msg(_("<%s> : ............ Stop Simulation\n"),name.c_str());
186
187  delete in_CLOCK;
188  delete in_NRESET;
189
190  delete []  in_PREDICT_VAL                  ;
191  delete [] out_PREDICT_ACK                  ;
192  delete [] out_PREDICT_HIT                  ;
193  delete [] out_PREDICT_ADDRESS_SRC          ;
194  delete [] out_PREDICT_ADDRESS_DEST         ;
195  delete [] out_PREDICT_CONDITION            ;
196  delete [] out_PREDICT_LAST_TAKE            ;
197  delete [] out_PREDICT_IS_ACCURATE          ;
198  delete [] out_PREDICT_REGISTER_VAL         ;
199  delete []  in_PREDICT_REGISTER_ACK         ;
200  delete []  in_PREDICT_REGISTER_HIT         ;
201  delete []  in_PREDICT_REGISTER_ADDRESS_SRC ;
202  delete []  in_PREDICT_REGISTER_ADDRESS_DEST;
203  delete []  in_PREDICT_REGISTER_CONDITION   ;
204  delete []  in_PREDICT_REGISTER_LAST_TAKE   ;
205  delete []  in_PREDICT_REGISTER_IS_ACCURATE ;
206  delete []  in_PREDICT_SORT_VAL             ;
207  delete []  in_PREDICT_SORT_INDEX           ;
208  delete [] out_PREDICT_VICTIM_VAL           ;
209  delete []  in_PREDICT_VICTIM_ACK           ;
210  delete [] out_PREDICT_VICTIM_HIT           ;
211  delete [] out_PREDICT_VICTIM_ADDRESS       ;
212  delete [] out_PREDICT_VICTIM_INDEX         ;
213  delete []  in_PREDICT_VICTIM_VICTIM        ;
214  delete []  in_DECOD_VAL                    ;
215  delete [] out_DECOD_ACK                    ;
216  delete []  in_DECOD_ADDRESS_SRC            ;
217  delete [] out_DECOD_REGISTER_VAL           ;
218  delete []  in_DECOD_REGISTER_ACK           ;
219  delete [] out_DECOD_VICTIM_VAL             ;
220  delete []  in_DECOD_VICTIM_ACK             ;
221  delete [] out_DECOD_VICTIM_ADDRESS         ;
222  delete []  in_UPDATE_VAL                   ;
223  delete [] out_UPDATE_ACK                   ;
224  delete []  in_UPDATE_ADDRESS_SRC           ;
225  delete [] out_UPDATE_REGISTER_VAL          ;
226  delete []  in_UPDATE_REGISTER_ACK          ;
227  delete [] out_UPDATE_VICTIM_VAL            ;
228  delete []  in_UPDATE_VICTIM_ACK            ;
229  delete [] out_UPDATE_VICTIM_ADDRESS        ;
230
231#endif
232
233  delete _Branch_Target_Buffer_Glue;
234#ifdef STATISTICS
235  delete _parameters_statistics;
236#endif
237}
Note: See TracBrowser for help on using the repository browser.