source: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/SelfTest/src/test.cpp @ 5

Last change on this file since 5 was 5, checked in by rosiere, 18 years ago

Ajout du composant Meta_Predictor

File size: 6.5 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 "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
31    // Interface Predict
32  sc_signal<Tcontrol_t>           ** PREDICT_VAL                ;
33  sc_signal<Tcontrol_t>           ** PREDICT_ACK                ;
34  sc_signal<Taddress_t>           ** PREDICT_ADDRESS            ;
35  sc_signal<Thistory_t>           ** PREDICT_HISTORY            ;
36  sc_signal<Tcontrol_t>           ** PREDICT_DIRECTION          ;
37                       
38    // Interface Branch_complete
39  sc_signal<Tcontrol_t>           ** BRANCH_COMPLETE_VAL        ;
40  sc_signal<Tcontrol_t>           ** BRANCH_COMPLETE_ACK        ;
41  sc_signal<Taddress_t>           ** BRANCH_COMPLETE_ADDRESS    ;
42  sc_signal<Thistory_t>           ** BRANCH_COMPLETE_HISTORY    ;
43  sc_signal<Tcontrol_t>           ** BRANCH_COMPLETE_DIRECTION  ;
44
45  string rename;
46
47  CLOCK                                  = new sc_clock ("clock", 1.0, 0.5);
48 
49  PREDICT_VAL                 = new sc_signal<Tcontrol_t>     * [_param._nb_prediction     ];
50  PREDICT_ACK                 = new sc_signal<Tcontrol_t>     * [_param._nb_prediction     ];
51  PREDICT_ADDRESS             = new sc_signal<Taddress_t>     * [_param._nb_prediction     ];
52  PREDICT_HISTORY             = new sc_signal<Thistory_t>     * [_param._nb_prediction     ];
53  PREDICT_DIRECTION           = new sc_signal<Tcontrol_t>     * [_param._nb_prediction     ];
54
55  for (uint32_t i=0; i<_param._nb_prediction; i++)
56    {
57      rename = "PREDICT_VAL_"         +toString(i);
58      PREDICT_VAL                 [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
59      rename = "PREDICT_ACK_"        +toString(i);
60      PREDICT_ACK                 [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
61      rename = "PREDICT_ADDRESS_"     +toString(i);
62      PREDICT_ADDRESS             [i] = new sc_signal<Taddress_t>     (rename.c_str());
63      rename = "PREDICT_HISTORY_"    +toString(i);
64      PREDICT_HISTORY             [i] = new sc_signal<Thistory_t>     (rename.c_str());
65      rename = "PREDICT_DIRECTION_"  +toString(i);
66      PREDICT_DIRECTION           [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
67    }
68 
69  BRANCH_COMPLETE_VAL         = new sc_signal<Tcontrol_t>     * [_param._nb_branch_complete];
70  BRANCH_COMPLETE_ACK         = new sc_signal<Tcontrol_t>     * [_param._nb_branch_complete];
71  BRANCH_COMPLETE_ADDRESS     = new sc_signal<Taddress_t>     * [_param._nb_branch_complete];
72  BRANCH_COMPLETE_HISTORY     = new sc_signal<Thistory_t>     * [_param._nb_branch_complete];
73  BRANCH_COMPLETE_DIRECTION   = new sc_signal<Tcontrol_t>     * [_param._nb_branch_complete];
74 
75  for (uint32_t i=0; i<_param._nb_branch_complete; i++)
76    {
77      rename = "BRANCH_COMPLETE_VAL_"         +toString(i);
78      BRANCH_COMPLETE_VAL         [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
79      rename = "BRANCH_COMPLETE_ACK_"        +toString(i);
80      BRANCH_COMPLETE_ACK         [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
81      rename = "BRANCH_COMPLETE_ADDRESS_"     +toString(i);
82      BRANCH_COMPLETE_ADDRESS     [i] = new sc_signal<Taddress_t>     (rename.c_str());
83      rename = "BRANCH_COMPLETE_HISTORY_"     +toString(i);
84      BRANCH_COMPLETE_HISTORY     [i] = new sc_signal<Thistory_t>     (rename.c_str());
85      rename = "BRANCH_COMPLETE_DIRECTION_"   +toString(i);
86      BRANCH_COMPLETE_DIRECTION   [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
87    }
88
89  /********************************************************
90   * Instanciation
91   ********************************************************/
92 
93  cout << "<" << name << "> Instanciation of _Meta_Predictor" << endl;
94 
95  (*(_Meta_Predictor->in_CLOCK))        (*(CLOCK));
96
97    for (uint32_t i=0; i<_param._nb_prediction; i++)
98      {
99        (*(_Meta_Predictor-> in_PREDICT_VAL                 [i]))        (*(PREDICT_VAL                 [i]));
100        (*(_Meta_Predictor->out_PREDICT_ACK                 [i]))        (*(PREDICT_ACK                 [i]));
101        (*(_Meta_Predictor-> in_PREDICT_ADDRESS             [i]))        (*(PREDICT_ADDRESS             [i]));
102        (*(_Meta_Predictor->out_PREDICT_HISTORY             [i]))        (*(PREDICT_HISTORY             [i]));
103        (*(_Meta_Predictor->out_PREDICT_DIRECTION           [i]))        (*(PREDICT_DIRECTION           [i]));
104      }
105    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
106      {
107        (*(_Meta_Predictor-> in_BRANCH_COMPLETE_VAL         [i]))        (*(BRANCH_COMPLETE_VAL         [i]));
108        (*(_Meta_Predictor->out_BRANCH_COMPLETE_ACK         [i]))        (*(BRANCH_COMPLETE_ACK         [i]));
109        (*(_Meta_Predictor-> in_BRANCH_COMPLETE_ADDRESS     [i]))        (*(BRANCH_COMPLETE_ADDRESS     [i]));
110        (*(_Meta_Predictor-> in_BRANCH_COMPLETE_HISTORY     [i]))        (*(BRANCH_COMPLETE_HISTORY     [i]));
111        (*(_Meta_Predictor-> in_BRANCH_COMPLETE_DIRECTION   [i]))        (*(BRANCH_COMPLETE_DIRECTION   [i]));
112      }
113
114  /********************************************************
115   * Simulation - Begin
116   ********************************************************/
117
118  cout << "<" << name << "> Start Simulation ............" << endl;
119
120  // Initialisation
121  const uint32_t seed = 0;
122//const uint32_t seed = static_cast<uint32_t>(time(NULL));
123
124  srand(seed);
125
126  sc_start(0);
127  _Meta_Predictor->vhdl_testbench_label("Initialisation");
128  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Initialisation" << endl;
129
130
131  _Meta_Predictor->vhdl_testbench_label("Loop of Test");
132  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Loop of Test" << endl;
133
134  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
135    {
136      _Meta_Predictor->vhdl_testbench_label("Iteration "+toString(iteration));
137
138      sc_start(1);
139    }
140
141  /********************************************************
142   * Simulation - End
143   ********************************************************/
144
145  cout << "<" << name << "> ............ Stop Simulation" << endl;
146
147#endif
148
149  delete _Meta_Predictor;
150}
Note: See TracBrowser for help on using the repository browser.