source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/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: 9.5 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  1024
10#define CYCLE_MAX     (128*NB_ITERATION)
11
12#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/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::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 * _Branch_Target_Buffer = new Branch_Target_Buffer
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( in_PREDICT_CONTEXT_ID    ," in_PREDICT_CONTEXT_ID    ",Tcontext_t         ,_param->_nb_inst_predict);
45  ALLOC1_SC_SIGNAL( in_PREDICT_ADDRESS       ," in_PREDICT_ADDRESS       ",Tgeneral_data_t    ,_param->_nb_inst_predict);
46  ALLOC1_SC_SIGNAL(out_PREDICT_HIT           ,"out_PREDICT_HIT           ",Tcontrol_t         ,_param->_nb_inst_predict);
47  ALLOC1_SC_SIGNAL(out_PREDICT_ADDRESS_SRC   ,"out_PREDICT_ADDRESS_SRC   ",Tgeneral_data_t    ,_param->_nb_inst_predict);
48  ALLOC1_SC_SIGNAL(out_PREDICT_ADDRESS_DEST  ,"out_PREDICT_ADDRESS_DEST  ",Tgeneral_data_t    ,_param->_nb_inst_predict);
49  ALLOC1_SC_SIGNAL(out_PREDICT_CONDITION     ,"out_PREDICT_CONDITION     ",Tbranch_condition_t,_param->_nb_inst_predict);
50  ALLOC1_SC_SIGNAL(out_PREDICT_LAST_TAKE     ,"out_PREDICT_LAST_TAKE     ",Tcontrol_t         ,_param->_nb_inst_predict);
51  ALLOC1_SC_SIGNAL(out_PREDICT_IS_ACCURATE   ,"out_PREDICT_IS_ACCURATE   ",Tcontrol_t         ,_param->_nb_inst_predict);
52  ALLOC1_SC_SIGNAL( in_DECOD_VAL             ," in_DECOD_VAL             ",Tcontrol_t         ,_param->_nb_inst_decod);
53  ALLOC1_SC_SIGNAL(out_DECOD_ACK             ,"out_DECOD_ACK             ",Tcontrol_t         ,_param->_nb_inst_decod);
54  ALLOC1_SC_SIGNAL( in_DECOD_CONTEXT_ID      ," in_DECOD_CONTEXT_ID      ",Tcontext_t         ,_param->_nb_inst_decod);
55  ALLOC1_SC_SIGNAL( in_DECOD_ADDRESS_SRC     ," in_DECOD_ADDRESS_SRC     ",Tgeneral_data_t    ,_param->_nb_inst_decod);
56  ALLOC1_SC_SIGNAL( in_DECOD_ADDRESS_DEST    ," in_DECOD_ADDRESS_DEST    ",Tgeneral_data_t    ,_param->_nb_inst_decod);
57  ALLOC1_SC_SIGNAL( in_DECOD_CONDITION       ," in_DECOD_CONDITION       ",Tbranch_condition_t,_param->_nb_inst_decod);
58  ALLOC1_SC_SIGNAL( in_DECOD_LAST_TAKE       ," in_DECOD_LAST_TAKE       ",Tcontrol_t         ,_param->_nb_inst_decod);
59  ALLOC1_SC_SIGNAL( in_DECOD_MISS_PREDICTION ," in_DECOD_MISS_PREDICTION ",Tcontrol_t         ,_param->_nb_inst_decod);
60  ALLOC1_SC_SIGNAL( in_DECOD_IS_ACCURATE     ," in_DECOD_IS_ACCURATE     ",Tcontrol_t         ,_param->_nb_inst_decod);
61  ALLOC1_SC_SIGNAL( in_UPDATE_VAL            ," in_UPDATE_VAL            ",Tcontrol_t         ,_param->_nb_inst_update);
62  ALLOC1_SC_SIGNAL(out_UPDATE_ACK            ,"out_UPDATE_ACK            ",Tcontrol_t         ,_param->_nb_inst_update);
63  ALLOC1_SC_SIGNAL( in_UPDATE_CONTEXT_ID     ," in_UPDATE_CONTEXT_ID     ",Tcontext_t         ,_param->_nb_inst_update);
64  ALLOC1_SC_SIGNAL( in_UPDATE_ADDRESS_SRC    ," in_UPDATE_ADDRESS_SRC    ",Tgeneral_data_t    ,_param->_nb_inst_update);
65  ALLOC1_SC_SIGNAL( in_UPDATE_ADDRESS_DEST   ," in_UPDATE_ADDRESS_DEST   ",Tgeneral_data_t    ,_param->_nb_inst_update);
66  ALLOC1_SC_SIGNAL( in_UPDATE_CONDITION      ," in_UPDATE_CONDITION      ",Tbranch_condition_t,_param->_nb_inst_update);
67  ALLOC1_SC_SIGNAL( in_UPDATE_LAST_TAKE      ," in_UPDATE_LAST_TAKE      ",Tcontrol_t         ,_param->_nb_inst_update);
68  ALLOC1_SC_SIGNAL( in_UPDATE_MISS_PREDICTION," in_UPDATE_MISS_PREDICTION",Tcontrol_t         ,_param->_nb_inst_update);
69 
70  /********************************************************
71   * Instanciation
72   ********************************************************/
73 
74  msg(_("<%s> : Instanciation of _Branch_Target_Buffer.\n"),name.c_str());
75
76  (*(_Branch_Target_Buffer->in_CLOCK))        (*(in_CLOCK));
77  (*(_Branch_Target_Buffer->in_NRESET))       (*(in_NRESET));
78
79  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_PREDICT_VAL           ,_param->_nb_inst_predict);
80  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer,out_PREDICT_ACK           ,_param->_nb_inst_predict);
81  if (_param->_have_port_context_id)
82  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_PREDICT_CONTEXT_ID    ,_param->_nb_inst_predict);
83  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_PREDICT_ADDRESS       ,_param->_nb_inst_predict);
84  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer,out_PREDICT_HIT           ,_param->_nb_inst_predict);
85  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer,out_PREDICT_ADDRESS_SRC   ,_param->_nb_inst_predict);
86  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer,out_PREDICT_ADDRESS_DEST  ,_param->_nb_inst_predict);
87  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer,out_PREDICT_CONDITION     ,_param->_nb_inst_predict);
88  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer,out_PREDICT_LAST_TAKE     ,_param->_nb_inst_predict);
89  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer,out_PREDICT_IS_ACCURATE   ,_param->_nb_inst_predict);
90  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_DECOD_VAL             ,_param->_nb_inst_decod);
91  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer,out_DECOD_ACK             ,_param->_nb_inst_decod);
92  if (_param->_have_port_context_id)
93  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_DECOD_CONTEXT_ID      ,_param->_nb_inst_decod);
94  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_DECOD_ADDRESS_SRC     ,_param->_nb_inst_decod);
95  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_DECOD_ADDRESS_DEST    ,_param->_nb_inst_decod);
96  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_DECOD_CONDITION       ,_param->_nb_inst_decod);
97  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_DECOD_LAST_TAKE       ,_param->_nb_inst_decod);
98  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_DECOD_MISS_PREDICTION ,_param->_nb_inst_decod);
99  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_DECOD_IS_ACCURATE     ,_param->_nb_inst_decod);
100  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_UPDATE_VAL            ,_param->_nb_inst_update);
101  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer,out_UPDATE_ACK            ,_param->_nb_inst_update);
102  if (_param->_have_port_context_id)
103  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_UPDATE_CONTEXT_ID     ,_param->_nb_inst_update);
104  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_UPDATE_ADDRESS_SRC    ,_param->_nb_inst_update);
105  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_UPDATE_ADDRESS_DEST   ,_param->_nb_inst_update);
106  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_UPDATE_CONDITION      ,_param->_nb_inst_update);
107  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_UPDATE_LAST_TAKE      ,_param->_nb_inst_update);
108  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_UPDATE_MISS_PREDICTION,_param->_nb_inst_update);
109
110  msg(_("<%s> : Start Simulation ............\n"),name.c_str());
111   
112  Time * _time = new Time();
113
114  /********************************************************
115   * Simulation - Begin
116   ********************************************************/
117
118  // Initialisation
119
120  const uint32_t seed = 0;
121//const uint32_t seed = static_cast<uint32_t>(time(NULL));
122
123  srand(seed);
124
125  SC_START(0);
126  LABEL("Initialisation");
127
128  LABEL("Reset");
129  in_NRESET->write(0);
130  SC_START(5);
131  in_NRESET->write(1); 
132
133  LABEL("Loop of Test");
134
135  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
136    {
137      LABEL("Iteration %d",iteration);
138
139      SC_START(1);
140    }
141
142  /********************************************************
143   * Simulation - End
144   ********************************************************/
145
146  TEST_OK ("End of Simulation");
147  delete _time;
148
149  msg(_("<%s> : ............ Stop Simulation\n"),name.c_str());
150
151  delete in_CLOCK;
152  delete in_NRESET;
153
154  delete []  in_PREDICT_VAL           ;
155  delete [] out_PREDICT_ACK           ;
156  delete []  in_PREDICT_CONTEXT_ID    ;
157  delete []  in_PREDICT_ADDRESS       ;
158  delete [] out_PREDICT_HIT           ;
159  delete [] out_PREDICT_ADDRESS_SRC   ;
160  delete [] out_PREDICT_ADDRESS_DEST  ;
161  delete [] out_PREDICT_CONDITION     ;
162  delete [] out_PREDICT_LAST_TAKE     ;
163  delete [] out_PREDICT_IS_ACCURATE   ;
164 
165  delete []  in_DECOD_VAL             ;
166  delete [] out_DECOD_ACK             ;
167  delete []  in_DECOD_CONTEXT_ID      ;
168  delete []  in_DECOD_ADDRESS_SRC     ;
169  delete []  in_DECOD_ADDRESS_DEST    ;
170  delete []  in_DECOD_CONDITION       ;
171  delete []  in_DECOD_LAST_TAKE       ;
172  delete []  in_DECOD_MISS_PREDICTION ;
173  delete []  in_DECOD_IS_ACCURATE     ;
174 
175  delete []  in_UPDATE_VAL            ;
176  delete [] out_UPDATE_ACK            ;
177  delete []  in_UPDATE_CONTEXT_ID     ;
178  delete []  in_UPDATE_ADDRESS_SRC    ;
179  delete []  in_UPDATE_ADDRESS_DEST   ;
180  delete []  in_UPDATE_CONDITION      ;
181  delete []  in_UPDATE_LAST_TAKE      ;
182  delete []  in_UPDATE_MISS_PREDICTION;
183#endif
184
185  delete _Branch_Target_Buffer;
186#ifdef STATISTICS
187  delete _parameters_statistics;
188#endif
189}
Note: See TracBrowser for help on using the repository browser.