source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/SelfTest/src/test.cpp @ 45

Last change on this file since 45 was 45, checked in by rosiere, 17 years ago
  • Documentation : specification d'un cache de donnée non bloquant
  • Modification de l'aborescence
File size: 6.6 KB
Line 
1/*
2 * $Id$
3 *
4 * [ Description ]
5 *
6 * Test
7 */
8
9#define NB_ITERATION 1
10
11#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/SelfTest/include/test.h"
12#include "Common/include/Test.h"
13
14void test (string name,
15           morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::Parameters _param)
16{
17  cout << "<" << name << "> : Simulation SystemC" << endl;
18 
19  Meta_Predictor * _Meta_Predictor = new Meta_Predictor (name.c_str(),
20#ifdef STATISTICS
21                                                         morpheo::behavioural::Parameters_Statistics(5,50),
22#endif
23                                                         _param);
24 
25#ifdef SYSTEMC
26  /*********************************************************************
27   * Déclarations des signaux
28   *********************************************************************/
29  sc_clock                         * CLOCK                      ;
30  sc_signal<Tcontrol_t>            * NRESET                     ;
31
32    // Interface Predict
33  sc_signal<Tcontrol_t>           ** PREDICT_VAL                ;
34  sc_signal<Tcontrol_t>           ** PREDICT_ACK                ;
35  sc_signal<Taddress_t>           ** PREDICT_ADDRESS            ;
36  sc_signal<Thistory_t>           ** PREDICT_HISTORY            ;
37  sc_signal<Tcontrol_t>           ** PREDICT_DIRECTION          ;
38                       
39    // Interface Branch_complete
40  sc_signal<Tcontrol_t>           ** BRANCH_COMPLETE_VAL        ;
41  sc_signal<Tcontrol_t>           ** BRANCH_COMPLETE_ACK        ;
42  sc_signal<Taddress_t>           ** BRANCH_COMPLETE_ADDRESS    ;
43  sc_signal<Thistory_t>           ** BRANCH_COMPLETE_HISTORY    ;
44  sc_signal<Tcontrol_t>           ** BRANCH_COMPLETE_DIRECTION  ;
45
46  string rename;
47
48  CLOCK                       = new sc_clock ("clock", 1.0, 0.5);
49  NRESET                      = new sc_signal<Tcontrol_t> ("NRESET");
50
51  PREDICT_VAL                 = new sc_signal<Tcontrol_t>     * [_param._nb_prediction     ];
52  PREDICT_ACK                 = new sc_signal<Tcontrol_t>     * [_param._nb_prediction     ];
53  PREDICT_ADDRESS             = new sc_signal<Taddress_t>     * [_param._nb_prediction     ];
54  PREDICT_HISTORY             = new sc_signal<Thistory_t>     * [_param._nb_prediction     ];
55  PREDICT_DIRECTION           = new sc_signal<Tcontrol_t>     * [_param._nb_prediction     ];
56
57  for (uint32_t i=0; i<_param._nb_prediction; i++)
58    {
59      rename = "PREDICT_VAL_"         +toString(i);
60      PREDICT_VAL                 [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
61      rename = "PREDICT_ACK_"        +toString(i);
62      PREDICT_ACK                 [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
63      rename = "PREDICT_ADDRESS_"     +toString(i);
64      PREDICT_ADDRESS             [i] = new sc_signal<Taddress_t>     (rename.c_str());
65      rename = "PREDICT_HISTORY_"    +toString(i);
66      PREDICT_HISTORY             [i] = new sc_signal<Thistory_t>     (rename.c_str());
67      rename = "PREDICT_DIRECTION_"  +toString(i);
68      PREDICT_DIRECTION           [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
69    }
70 
71  BRANCH_COMPLETE_VAL         = new sc_signal<Tcontrol_t>     * [_param._nb_branch_complete];
72  BRANCH_COMPLETE_ACK         = new sc_signal<Tcontrol_t>     * [_param._nb_branch_complete];
73  BRANCH_COMPLETE_ADDRESS     = new sc_signal<Taddress_t>     * [_param._nb_branch_complete];
74  BRANCH_COMPLETE_HISTORY     = new sc_signal<Thistory_t>     * [_param._nb_branch_complete];
75  BRANCH_COMPLETE_DIRECTION   = new sc_signal<Tcontrol_t>     * [_param._nb_branch_complete];
76 
77  for (uint32_t i=0; i<_param._nb_branch_complete; i++)
78    {
79      rename = "BRANCH_COMPLETE_VAL_"         +toString(i);
80      BRANCH_COMPLETE_VAL         [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
81      rename = "BRANCH_COMPLETE_ACK_"        +toString(i);
82      BRANCH_COMPLETE_ACK         [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
83      rename = "BRANCH_COMPLETE_ADDRESS_"     +toString(i);
84      BRANCH_COMPLETE_ADDRESS     [i] = new sc_signal<Taddress_t>     (rename.c_str());
85      rename = "BRANCH_COMPLETE_HISTORY_"     +toString(i);
86      BRANCH_COMPLETE_HISTORY     [i] = new sc_signal<Thistory_t>     (rename.c_str());
87      rename = "BRANCH_COMPLETE_DIRECTION_"   +toString(i);
88      BRANCH_COMPLETE_DIRECTION   [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
89    }
90
91  /********************************************************
92   * Instanciation
93   ********************************************************/
94 
95  cout << "<" << name << "> Instanciation of _Meta_Predictor" << endl;
96 
97  (*(_Meta_Predictor->in_CLOCK ))        (*(CLOCK ));
98  (*(_Meta_Predictor->in_NRESET))        (*(NRESET));
99
100    for (uint32_t i=0; i<_param._nb_prediction; i++)
101      {
102        (*(_Meta_Predictor-> in_PREDICT_VAL                 [i]))        (*(PREDICT_VAL                 [i]));
103        (*(_Meta_Predictor->out_PREDICT_ACK                 [i]))        (*(PREDICT_ACK                 [i]));
104        (*(_Meta_Predictor-> in_PREDICT_ADDRESS             [i]))        (*(PREDICT_ADDRESS             [i]));
105        (*(_Meta_Predictor->out_PREDICT_HISTORY             [i]))        (*(PREDICT_HISTORY             [i]));
106        (*(_Meta_Predictor->out_PREDICT_DIRECTION           [i]))        (*(PREDICT_DIRECTION           [i]));
107      }
108    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
109      {
110        (*(_Meta_Predictor-> in_BRANCH_COMPLETE_VAL         [i]))        (*(BRANCH_COMPLETE_VAL         [i]));
111        (*(_Meta_Predictor->out_BRANCH_COMPLETE_ACK         [i]))        (*(BRANCH_COMPLETE_ACK         [i]));
112        (*(_Meta_Predictor-> in_BRANCH_COMPLETE_ADDRESS     [i]))        (*(BRANCH_COMPLETE_ADDRESS     [i]));
113        (*(_Meta_Predictor-> in_BRANCH_COMPLETE_HISTORY     [i]))        (*(BRANCH_COMPLETE_HISTORY     [i]));
114        (*(_Meta_Predictor-> in_BRANCH_COMPLETE_DIRECTION   [i]))        (*(BRANCH_COMPLETE_DIRECTION   [i]));
115      }
116
117  /********************************************************
118   * Simulation - Begin
119   ********************************************************/
120
121  cout << "<" << name << "> Start Simulation ............" << endl;
122
123  // Initialisation
124  const uint32_t seed = 0;
125//const uint32_t seed = static_cast<uint32_t>(time(NULL));
126
127  srand(seed);
128
129  sc_start(0);
130
131  NRESET->write(0);
132  sc_start(5);
133  NRESET->write(1);
134
135  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Initialisation" << endl;
136
137  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Loop of Test" << endl;
138
139  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
140    {
141
142      sc_start(1);
143    }
144
145  /********************************************************
146   * Simulation - End
147   ********************************************************/
148
149  cout << "Test OK" << endl;
150
151  cout << "<" << name << "> ............ Stop Simulation" << endl;
152
153#endif
154
155  delete _Meta_Predictor;
156}
Note: See TracBrowser for help on using the repository browser.