source: trunk/IPs/systemC/processor/Morpheo/TopLevel/SelfTest/src/test.cpp @ 88

Last change on this file since 88 was 88, checked in by rosiere, 16 years ago

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 10.8 KB
Line 
1/*
2 * $Id: test.cpp 88 2008-12-10 18:31:39Z rosiere $
3 *
4 * [ Description ]
5 *
6 * Test
7 */
8
9#include "TopLevel/SelfTest/include/test.h"
10#include "Behavioural/include/Allocation.h"
11
12void test (std::string            name,
13           std::string            filename_simulator, 
14           std::string            filename_generator, 
15           std::string            filename_instance ,
16           custom_information_t (*get_custom_information) (void)
17           )
18{
19  msg(_("<%s> : Simulation SystemC.\n"),name.c_str());
20
21  if (setlocale (LC_ALL, "") == NULL)
22    msg(_("setlocale ko.\n"));
23  else
24    msg(_("setlocale ok : %s.\n"),setlocale (LC_ALL, ""));
25 
26  Morpheo * _Morpheo = new Morpheo
27    (name.c_str(),
28     filename_simulator, 
29     filename_generator, 
30     filename_instance ,
31     get_custom_information
32     );
33 
34#ifdef SYSTEMC
35  if (1)
36    {
37  /*********************************************************************
38   * Déclarations des signaux
39   *********************************************************************/
40  string rename;
41
42  sc_clock              *  in_CLOCK  = new sc_clock ("clock", 1.0, 0.5);         
43  sc_signal<Tcontrol_t> *  in_NRESET = new sc_signal<Tcontrol_t> ("NRESET");
44
45  ALLOC1_SC_SIGNAL(out_ICACHE_REQ_VAL         ,"out_ICACHE_REQ_VAL        ",Tcontrol_t           ,_Morpheo->_nb_icache_port);
46  ALLOC1_SC_SIGNAL( in_ICACHE_REQ_ACK         ," in_ICACHE_REQ_ACK        ",Tcontrol_t           ,_Morpheo->_nb_icache_port);
47  ALLOC1_SC_SIGNAL(out_ICACHE_REQ_THREAD_ID   ,"out_ICACHE_REQ_THREAD_ID  ",Ticache_context_t    ,_Morpheo->_nb_icache_port);
48  ALLOC1_SC_SIGNAL(out_ICACHE_REQ_PACKET_ID   ,"out_ICACHE_REQ_PACKET_ID  ",Ticache_packet_t     ,_Morpheo->_nb_icache_port);
49  ALLOC1_SC_SIGNAL(out_ICACHE_REQ_ADDRESS     ,"out_ICACHE_REQ_ADDRESS    ",Ticache_address_t    ,_Morpheo->_nb_icache_port);
50  ALLOC1_SC_SIGNAL(out_ICACHE_REQ_TYPE        ,"out_ICACHE_REQ_TYPE       ",Ticache_type_t       ,_Morpheo->_nb_icache_port);
51
52  ALLOC1_SC_SIGNAL( in_ICACHE_RSP_VAL         ," in_ICACHE_RSP_VAL        ",Tcontrol_t           ,_Morpheo->_nb_icache_port);
53  ALLOC1_SC_SIGNAL(out_ICACHE_RSP_ACK         ,"out_ICACHE_RSP_ACK        ",Tcontrol_t           ,_Morpheo->_nb_icache_port);
54  ALLOC1_SC_SIGNAL( in_ICACHE_RSP_THREAD_ID   ," in_ICACHE_RSP_THREAD_ID  ",Ticache_context_t    ,_Morpheo->_nb_icache_port);
55  ALLOC1_SC_SIGNAL( in_ICACHE_RSP_PACKET_ID   ," in_ICACHE_RSP_PACKET_ID  ",Ticache_packet_t     ,_Morpheo->_nb_icache_port);
56  ALLOC2_SC_SIGNAL( in_ICACHE_RSP_INSTRUCTION ," in_ICACHE_RSP_INSTRUCTION",Ticache_instruction_t,_Morpheo->_nb_icache_port,_Morpheo->_icache_nb_instruction[it1]);
57  ALLOC1_SC_SIGNAL( in_ICACHE_RSP_ERROR       ," in_ICACHE_RSP_ERROR      ",Ticache_error_t      ,_Morpheo->_nb_icache_port);
58
59  ALLOC1_SC_SIGNAL(out_DCACHE_REQ_VAL         ,"out_DCACHE_REQ_VAL        ",Tcontrol_t           ,_Morpheo->_nb_dcache_port);
60  ALLOC1_SC_SIGNAL( in_DCACHE_REQ_ACK         ," in_DCACHE_REQ_ACK        ",Tcontrol_t           ,_Morpheo->_nb_dcache_port);
61  ALLOC1_SC_SIGNAL(out_DCACHE_REQ_THREAD_ID   ,"out_DCACHE_REQ_THREAD_ID  ",Tdcache_context_t    ,_Morpheo->_nb_dcache_port);
62  ALLOC1_SC_SIGNAL(out_DCACHE_REQ_PACKET_ID   ,"out_DCACHE_REQ_PACKET_ID  ",Tdcache_packet_t     ,_Morpheo->_nb_dcache_port);
63  ALLOC1_SC_SIGNAL(out_DCACHE_REQ_ADDRESS     ,"out_DCACHE_REQ_ADDRESS    ",Tdcache_address_t    ,_Morpheo->_nb_dcache_port);
64  ALLOC1_SC_SIGNAL(out_DCACHE_REQ_WDATA       ,"out_DCACHE_REQ_WDATA      ",Tdcache_data_t       ,_Morpheo->_nb_dcache_port);
65  ALLOC1_SC_SIGNAL(out_DCACHE_REQ_TYPE        ,"out_DCACHE_REQ_TYPE       ",Tdcache_type_t       ,_Morpheo->_nb_dcache_port);
66                                                                                                 
67  ALLOC1_SC_SIGNAL( in_DCACHE_RSP_VAL         ," in_DCACHE_RSP_VAL        ",Tcontrol_t           ,_Morpheo->_nb_dcache_port);
68  ALLOC1_SC_SIGNAL(out_DCACHE_RSP_ACK         ,"out_DCACHE_RSP_ACK        ",Tcontrol_t           ,_Morpheo->_nb_dcache_port);
69  ALLOC1_SC_SIGNAL( in_DCACHE_RSP_THREAD_ID   ," in_DCACHE_RSP_THREAD_ID  ",Tdcache_context_t    ,_Morpheo->_nb_dcache_port);
70  ALLOC1_SC_SIGNAL( in_DCACHE_RSP_PACKET_ID   ," in_DCACHE_RSP_PACKET_ID  ",Tdcache_packet_t     ,_Morpheo->_nb_dcache_port);
71  ALLOC1_SC_SIGNAL( in_DCACHE_RSP_RDATA       ," in_DCACHE_RSP_RDATA      ",Tdcache_data_t       ,_Morpheo->_nb_dcache_port);
72  ALLOC1_SC_SIGNAL( in_DCACHE_RSP_ERROR       ," in_DCACHE_RSP_ERROR      ",Tdcache_error_t      ,_Morpheo->_nb_dcache_port);
73                                                                                                 
74  ALLOC1_SC_SIGNAL( in_INTERRUPT_ENABLE       ," in_INTERRUPT_ENABLE      ",Tcontrol_t           ,_Morpheo->_nb_thread);
75 
76  /********************************************************
77   * Instanciation
78   ********************************************************/
79 
80  msg(_("<%s> : Instanciation of _Morpheo.\n"),name.c_str());
81
82  (*(_Morpheo->in_CLOCK))        (*(in_CLOCK));
83  (*(_Morpheo->in_NRESET))       (*(in_NRESET));
84
85  INSTANCE1_SC_SIGNAL(_Morpheo,out_ICACHE_REQ_VAL         ,_Morpheo->_nb_icache_port);
86  INSTANCE1_SC_SIGNAL(_Morpheo, in_ICACHE_REQ_ACK         ,_Morpheo->_nb_icache_port);
87  if (_Morpheo->_have_port_icache_thread_id)
88  INSTANCE1_SC_SIGNAL(_Morpheo,out_ICACHE_REQ_THREAD_ID   ,_Morpheo->_nb_icache_port);
89  if (_Morpheo->_have_port_icache_packet_id)
90  INSTANCE1_SC_SIGNAL(_Morpheo,out_ICACHE_REQ_PACKET_ID   ,_Morpheo->_nb_icache_port);
91  INSTANCE1_SC_SIGNAL(_Morpheo,out_ICACHE_REQ_ADDRESS     ,_Morpheo->_nb_icache_port);
92  INSTANCE1_SC_SIGNAL(_Morpheo,out_ICACHE_REQ_TYPE        ,_Morpheo->_nb_icache_port);
93
94  INSTANCE1_SC_SIGNAL(_Morpheo, in_ICACHE_RSP_VAL         ,_Morpheo->_nb_icache_port);
95  INSTANCE1_SC_SIGNAL(_Morpheo,out_ICACHE_RSP_ACK         ,_Morpheo->_nb_icache_port);
96  if (_Morpheo->_have_port_icache_thread_id)
97  INSTANCE1_SC_SIGNAL(_Morpheo, in_ICACHE_RSP_THREAD_ID   ,_Morpheo->_nb_icache_port);
98  if (_Morpheo->_have_port_icache_packet_id)
99  INSTANCE1_SC_SIGNAL(_Morpheo, in_ICACHE_RSP_PACKET_ID   ,_Morpheo->_nb_icache_port);
100  INSTANCE2_SC_SIGNAL(_Morpheo, in_ICACHE_RSP_INSTRUCTION ,_Morpheo->_nb_icache_port,_Morpheo->_icache_nb_instruction[it1]);
101  INSTANCE1_SC_SIGNAL(_Morpheo, in_ICACHE_RSP_ERROR       ,_Morpheo->_nb_icache_port);
102
103  INSTANCE1_SC_SIGNAL(_Morpheo,out_DCACHE_REQ_VAL         ,_Morpheo->_nb_dcache_port);
104  INSTANCE1_SC_SIGNAL(_Morpheo, in_DCACHE_REQ_ACK         ,_Morpheo->_nb_dcache_port);
105  if (_Morpheo->_have_port_dcache_thread_id)
106  INSTANCE1_SC_SIGNAL(_Morpheo,out_DCACHE_REQ_THREAD_ID   ,_Morpheo->_nb_dcache_port);
107  if (_Morpheo->_have_port_dcache_packet_id)
108  INSTANCE1_SC_SIGNAL(_Morpheo,out_DCACHE_REQ_PACKET_ID   ,_Morpheo->_nb_dcache_port);
109  INSTANCE1_SC_SIGNAL(_Morpheo,out_DCACHE_REQ_ADDRESS     ,_Morpheo->_nb_dcache_port);
110  INSTANCE1_SC_SIGNAL(_Morpheo,out_DCACHE_REQ_WDATA       ,_Morpheo->_nb_dcache_port);
111  INSTANCE1_SC_SIGNAL(_Morpheo,out_DCACHE_REQ_TYPE        ,_Morpheo->_nb_dcache_port);
112
113  INSTANCE1_SC_SIGNAL(_Morpheo, in_DCACHE_RSP_VAL         ,_Morpheo->_nb_dcache_port);
114  INSTANCE1_SC_SIGNAL(_Morpheo,out_DCACHE_RSP_ACK         ,_Morpheo->_nb_dcache_port);
115  if (_Morpheo->_have_port_dcache_thread_id)
116  INSTANCE1_SC_SIGNAL(_Morpheo, in_DCACHE_RSP_THREAD_ID   ,_Morpheo->_nb_dcache_port);
117  if (_Morpheo->_have_port_dcache_packet_id)
118  INSTANCE1_SC_SIGNAL(_Morpheo, in_DCACHE_RSP_PACKET_ID   ,_Morpheo->_nb_dcache_port);
119  INSTANCE1_SC_SIGNAL(_Morpheo, in_DCACHE_RSP_RDATA       ,_Morpheo->_nb_dcache_port);
120  INSTANCE1_SC_SIGNAL(_Morpheo, in_DCACHE_RSP_ERROR       ,_Morpheo->_nb_dcache_port);
121
122  INSTANCE1_SC_SIGNAL(_Morpheo, in_INTERRUPT_ENABLE       ,_Morpheo->_nb_thread);
123
124  msg(_("<%s> : Start Simulation ............\n"),name.c_str());
125   
126  Time * _time = new Time();
127
128  /********************************************************
129   * Simulation - Begin
130   ********************************************************/
131
132  // Initialisation
133
134  const uint32_t seed = 0;
135//const uint32_t seed = static_cast<uint32_t>(time(NULL));
136
137  srand(seed);
138
139  SC_START(0);
140  LABEL("Initialisation");
141
142  LABEL("Reset");
143  in_NRESET->write(0);
144  SC_START(5);
145  in_NRESET->write(1); 
146
147  for (uint32_t i=0; i<_Morpheo->_nb_icache_port; ++i)
148    {
149      in_ICACHE_REQ_ACK   [i]->write(0);
150      in_ICACHE_RSP_VAL   [i]->write(0);
151    }
152  for (uint32_t i=0; i<_Morpheo->_nb_dcache_port; ++i)
153    {
154      in_DCACHE_REQ_ACK   [i]->write(0);
155      in_DCACHE_RSP_VAL   [i]->write(0);
156    }
157  for (uint32_t i=0; i<_Morpheo->_nb_thread; ++i)
158    in_INTERRUPT_ENABLE [i]->write(0);
159
160  LABEL("Loop of Test");
161
162  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
163    {
164      LABEL("Iteration %d",iteration);
165
166      SC_START(1);
167    }
168
169  /********************************************************
170   * Simulation - End
171   ********************************************************/
172
173  TEST_OK ("End of Simulation");
174  delete _time;
175
176  msg(_("<%s> : ............ Stop Simulation\n"),name.c_str());
177
178  delete in_CLOCK;
179  delete in_NRESET;
180
181  DELETE1_SC_SIGNAL(out_ICACHE_REQ_VAL         ,_Morpheo->_nb_icache_port);
182  DELETE1_SC_SIGNAL( in_ICACHE_REQ_ACK         ,_Morpheo->_nb_icache_port);
183  DELETE1_SC_SIGNAL(out_ICACHE_REQ_THREAD_ID   ,_Morpheo->_nb_icache_port);
184  DELETE1_SC_SIGNAL(out_ICACHE_REQ_PACKET_ID   ,_Morpheo->_nb_icache_port);
185  DELETE1_SC_SIGNAL(out_ICACHE_REQ_ADDRESS     ,_Morpheo->_nb_icache_port);
186  DELETE1_SC_SIGNAL(out_ICACHE_REQ_TYPE        ,_Morpheo->_nb_icache_port);
187 
188  DELETE1_SC_SIGNAL( in_ICACHE_RSP_VAL         ,_Morpheo->_nb_icache_port);
189  DELETE1_SC_SIGNAL(out_ICACHE_RSP_ACK         ,_Morpheo->_nb_icache_port);
190  DELETE1_SC_SIGNAL( in_ICACHE_RSP_THREAD_ID   ,_Morpheo->_nb_icache_port);
191  DELETE1_SC_SIGNAL( in_ICACHE_RSP_PACKET_ID   ,_Morpheo->_nb_icache_port);
192  DELETE1_SC_SIGNAL( in_ICACHE_RSP_ERROR       ,_Morpheo->_nb_icache_port);
193  DELETE2_SC_SIGNAL( in_ICACHE_RSP_INSTRUCTION ,_Morpheo->_nb_icache_port,_Morpheo->_icache_nb_instruction[it1]);
194 
195  DELETE1_SC_SIGNAL(out_DCACHE_REQ_VAL         ,_Morpheo->_nb_dcache_port);
196  DELETE1_SC_SIGNAL( in_DCACHE_REQ_ACK         ,_Morpheo->_nb_dcache_port);
197  DELETE1_SC_SIGNAL(out_DCACHE_REQ_THREAD_ID   ,_Morpheo->_nb_dcache_port);
198  DELETE1_SC_SIGNAL(out_DCACHE_REQ_PACKET_ID   ,_Morpheo->_nb_dcache_port);
199  DELETE1_SC_SIGNAL(out_DCACHE_REQ_ADDRESS     ,_Morpheo->_nb_dcache_port);
200  DELETE1_SC_SIGNAL(out_DCACHE_REQ_WDATA       ,_Morpheo->_nb_dcache_port);
201  DELETE1_SC_SIGNAL(out_DCACHE_REQ_TYPE        ,_Morpheo->_nb_dcache_port);
202 
203  DELETE1_SC_SIGNAL( in_DCACHE_RSP_VAL         ,_Morpheo->_nb_dcache_port);
204  DELETE1_SC_SIGNAL(out_DCACHE_RSP_ACK         ,_Morpheo->_nb_dcache_port);
205  DELETE1_SC_SIGNAL( in_DCACHE_RSP_THREAD_ID   ,_Morpheo->_nb_dcache_port);
206  DELETE1_SC_SIGNAL( in_DCACHE_RSP_PACKET_ID   ,_Morpheo->_nb_dcache_port);
207  DELETE1_SC_SIGNAL( in_DCACHE_RSP_RDATA       ,_Morpheo->_nb_dcache_port);
208  DELETE1_SC_SIGNAL( in_DCACHE_RSP_ERROR       ,_Morpheo->_nb_dcache_port);
209 
210  DELETE1_SC_SIGNAL( in_INTERRUPT_ENABLE       ,_Morpheo->_nb_thread);
211    }
212#endif
213
214  delete _Morpheo;
215}
Note: See TracBrowser for help on using the repository browser.