source: trunk/Platforms/Test/src/test.cpp@ 114

Last change on this file since 114 was 114, checked in by rosiere, 17 years ago

1) Fix bug with previous commit
2) Add test libc
3) Change Dhrystone

  • Property svn:keywords set to Id
File size: 29.8 KB
Line 
1/*
2 * $Id: test.cpp 114 2009-04-16 22:35:37Z rosiere $
3 *
4 * [ Description ]
5 *
6 * Platforms : Morpheo + Environment
7 */
8
9#define CYCLE_MAX 0
10
11#include "../include/test.h"
12
13#include "Environment.h"
14#include "Behavioural/include/Allocation.h"
15#include "Common/include/Time.h"
16#include "../../../IPs/systemC/shared/mapping_memory.h"
17#include "../../../IPs/systemC/processor/Morpheo/Common/include/Test.h"
18
19using namespace std;
20using namespace environment;
21using namespace morpheo;
22
23int test(string filename_simulator,
24 string filename_generator,
25 string filename_instance ,
26 string filename_software ,
27 uint32_t nb_cache_dedicated,
28 uint32_t nb_cache_shared ,
29 uint32_t cache_size ,
30 uint32_t cache_ratio ,
31 morpheo::behavioural::custom::custom_information_t (*get_custom_information) (void)
32 )
33{
34 //==============================================================================
35 //===== [ DECLARATION ]=========================================================
36 //==============================================================================
37
38
39 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
40 //~~~~~ [ Morpheo ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
42
43 // 1) Translation
44 if (setlocale (LC_ALL, "") == NULL)
45 {
46 cerr << "Error setlocale." << endl;
47 exit (EXIT_FAILURE);
48 }
49
50 // 2) Morpheo Construction
51 Morpheo * morpheo = new Morpheo
52 ("morpheo",
53 filename_simulator,
54 filename_generator,
55 filename_instance ,
56 get_custom_information
57 );
58
59 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60 //~~~~~ [ Environment ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
61 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62
63 uint32_t nb_entity = 1;
64
65 // Cache access
66 uint32_t * iaccess_nb_context = new uint32_t [nb_entity];
67 uint32_t * iaccess_nb_instruction= new uint32_t [nb_entity];
68 uint32_t * iaccess_nb_packet = new uint32_t [nb_entity];
69 uint32_t * iaccess_size_address = new uint32_t [nb_entity];
70 uint32_t * iaccess_size_data = new uint32_t [nb_entity];
71
72 uint32_t * daccess_nb_context = new uint32_t [nb_entity];
73 uint32_t * daccess_nb_packet = new uint32_t [nb_entity];
74 uint32_t * daccess_size_address = new uint32_t [nb_entity];
75 uint32_t * daccess_size_data = new uint32_t [nb_entity];
76
77 uint32_t * buffer_irsp_size = new uint32_t [nb_entity];
78 uint32_t * buffer_drsp_size = new uint32_t [nb_entity];
79
80 for (uint32_t i=0; i<nb_entity; i++)
81 {
82 iaccess_nb_context [i] = morpheo->_nb_thread;
83 iaccess_nb_instruction [i] = max<uint32_t>(morpheo->_icache_nb_instruction,morpheo->_nb_icache_port);
84 iaccess_nb_packet [i] = 1<<morpheo->_size_icache_packet_id;
85 iaccess_size_address [i] = morpheo->_size_icache_address;
86 iaccess_size_data [i] = morpheo->_size_icache_instruction;
87
88 daccess_nb_context [i] = morpheo->_nb_thread;
89 daccess_nb_packet [i] = 1<<morpheo->_size_dcache_packet_id;
90 daccess_size_address [i] = morpheo->_size_dcache_address;
91 daccess_size_data [i] = morpheo->_size_dcache_data;
92
93 buffer_irsp_size [i] = 8;
94 buffer_drsp_size [i] = 8;
95 }
96
97 uint32_t cache_nb_line ;
98 uint32_t cache_size_line ;
99 uint32_t cache_size_word ;
100 uint32_t cache_associativity ;
101 uint32_t cache_hit_latence ;
102 uint32_t cache_miss_penality ;
103
104 // Instruction/Data cache
105 uint32_t * icache_nb_level = new uint32_t [nb_entity];
106 uint32_t * icache_nb_port = new uint32_t [nb_entity];
107 uint32_t ** icache_nb_line = new uint32_t * [nb_entity];
108 uint32_t ** icache_size_line = new uint32_t * [nb_entity];
109 uint32_t ** icache_size_word = new uint32_t * [nb_entity];
110 uint32_t ** icache_associativity = new uint32_t * [nb_entity];
111 uint32_t ** icache_hit_latence = new uint32_t * [nb_entity];
112 uint32_t ** icache_miss_penality = new uint32_t * [nb_entity];
113
114 uint32_t * dcache_nb_level = new uint32_t [nb_entity];
115 uint32_t * dcache_nb_port = new uint32_t [nb_entity];
116 uint32_t ** dcache_nb_line = new uint32_t * [nb_entity];
117 uint32_t ** dcache_size_line = new uint32_t * [nb_entity];
118 uint32_t ** dcache_size_word = new uint32_t * [nb_entity];
119 uint32_t ** dcache_associativity = new uint32_t * [nb_entity];
120 uint32_t ** dcache_hit_latence = new uint32_t * [nb_entity];
121 uint32_t ** dcache_miss_penality = new uint32_t * [nb_entity];
122
123 for (uint32_t i=0; i<nb_entity; i++)
124 {
125 cache_size_word = max(max<uint32_t>(morpheo->_icache_nb_instruction,morpheo->_nb_icache_port)*morpheo->_size_icache_instruction,morpheo->_size_dcache_data)/8;
126 cache_size_line = 8;
127
128 if (cache_size<(cache_size_line*cache_size_word))
129 {
130 cerr << "cache is too small" << endl;
131 exit(EXIT_FAILURE);
132 }
133
134 cache_nb_line = cache_size/(cache_size_line*cache_size_word);
135 cache_associativity = 1;
136 cache_hit_latence = 1;
137 cache_miss_penality = 5;
138
139 icache_nb_level [i] = nb_cache_dedicated;
140 icache_nb_port [i] = morpheo->_nb_icache_port;
141 icache_nb_line [i] = new uint32_t [icache_nb_level[i]];
142 icache_size_line [i] = new uint32_t [icache_nb_level[i]];
143 icache_size_word [i] = new uint32_t [icache_nb_level[i]];
144 icache_associativity [i] = new uint32_t [icache_nb_level[i]];
145 icache_hit_latence [i] = new uint32_t [icache_nb_level[i]];
146 icache_miss_penality [i] = new uint32_t [icache_nb_level[i]];
147
148 dcache_nb_level [i] = icache_nb_level [i];
149 dcache_nb_port [i] = morpheo->_nb_dcache_port;
150 dcache_nb_line [i] = new uint32_t [dcache_nb_level[i]];
151 dcache_size_line [i] = new uint32_t [dcache_nb_level[i]];
152 dcache_size_word [i] = new uint32_t [dcache_nb_level[i]];
153 dcache_associativity [i] = new uint32_t [dcache_nb_level[i]];
154 dcache_hit_latence [i] = new uint32_t [dcache_nb_level[i]];
155 dcache_miss_penality [i] = new uint32_t [dcache_nb_level[i]];
156
157 for (uint32_t j=0; j<icache_nb_level[i]; ++j)
158 {
159 icache_nb_line [i][j] = cache_nb_line ;
160 icache_size_line [i][j] = cache_size_line ;
161 icache_size_word [i][j] = cache_size_word ;
162 icache_associativity [i][j] = cache_associativity;
163 icache_hit_latence [i][j] = cache_hit_latence ;
164 icache_miss_penality [i][j] = cache_miss_penality;
165
166 dcache_nb_line [i][j] = cache_nb_line ;
167 dcache_size_line [i][j] = cache_size_line ;
168 dcache_size_word [i][j] = cache_size_word ;
169 dcache_associativity [i][j] = cache_associativity;
170 dcache_hit_latence [i][j] = cache_hit_latence ;
171 dcache_miss_penality [i][j] = cache_miss_penality;
172
173 cache_nb_line *= cache_ratio;
174 cache_size_line *= cache_ratio;
175// cache_size_word *= cache_ratio;
176 cache_associativity *= cache_ratio;
177 cache_hit_latence *= cache_ratio;
178 cache_miss_penality *= cache_ratio;
179 }
180 }
181
182 // Cache shared
183 uint32_t * cache_shared_nb_line = new uint32_t [nb_cache_shared];
184 uint32_t * cache_shared_size_line = new uint32_t [nb_cache_shared];
185 uint32_t * cache_shared_size_word = new uint32_t [nb_cache_shared];
186 uint32_t * cache_shared_associativity = new uint32_t [nb_cache_shared];
187 uint32_t * cache_shared_hit_latence = new uint32_t [nb_cache_shared];
188 uint32_t * cache_shared_miss_penality = new uint32_t [nb_cache_shared];
189
190 for (uint32_t i=0; i<nb_cache_shared; ++i)
191 {
192 cache_shared_nb_line [i] = cache_nb_line ;
193 cache_shared_size_line [i] = cache_size_line ;
194 cache_shared_size_word [i] = cache_size_word ;
195 cache_shared_associativity [i] = cache_associativity;
196 cache_shared_hit_latence [i] = cache_hit_latence ;
197 cache_shared_miss_penality [i] = cache_miss_penality;
198
199 cache_nb_line *= cache_ratio;
200 cache_size_line *= cache_ratio;
201// cache_size_word *= cache_ratio;
202 cache_associativity *= cache_ratio;
203 cache_hit_latence *= cache_ratio;
204 cache_miss_penality *= cache_ratio;
205 }
206
207 // TTY
208 uint32_t nb_component_tty = 1;
209 uint32_t * tty_address = new uint32_t [nb_component_tty];
210 uint32_t * nb_tty = new uint32_t [nb_component_tty];
211 for (uint32_t i=0; i<nb_component_tty; ++i)
212 {
213 tty_address [i] = TTY_BASE;
214 nb_tty [i] = 4;
215 }
216 string ** name_tty = new string * [nb_component_tty];
217 for (uint32_t i=0; i<nb_component_tty; ++i)
218 {
219 name_tty [i] = new string [nb_tty[i]];
220 for (uint32_t j=0; j<nb_tty[i]; ++j)
221 name_tty [i][j] = "tty_"+toString(i)+"_"+toString(j);
222 }
223
224 // Ramlock
225 uint32_t nb_component_ramlock = 1;
226 uint32_t * ramlock_address = new uint32_t [nb_component_ramlock];
227 uint32_t * nb_lock = new uint32_t [nb_component_ramlock];
228 for (uint32_t i=0; i<nb_component_ramlock; ++i)
229 {
230 ramlock_address [i] = RAMLOCK_BASE;
231 nb_lock [i] = 10;
232 }
233
234 // Sim2OS
235 uint32_t sim2os_address = SIM2OS_BASE;
236 uint32_t sim2os_size = SIM2OS_SIZE;
237
238 SOCLIB_SEGMENT_TABLE * segtable = new SOCLIB_SEGMENT_TABLE;
239 segtable->setMSBNumber (8);
240 segtable->setDefaultTarget(0,0);
241
242 // Add a segment ,name ,address of base ,size ,global index,local index,uncache
243 segtable->addSegment("text" ,TEXT_BASE ,TEXT_SIZE ,0 ,0 ,false);
244 segtable->addSegment("data" ,DATA_CACHED_BASE ,DATA_CACHED_SIZE ,0 ,0 ,false);
245 segtable->addSegment("data_stack" ,DATA_STACK_BASE ,DATA_STACK_SIZE ,0 ,0 ,false);
246 segtable->addSegment("data_unc" ,DATA_UNCACHED_BASE,DATA_UNCACHED_SIZE,0 ,0 ,true );
247
248 Parameters * param_environment = new Parameters
249 (nb_entity,
250
251 iaccess_nb_context,
252 iaccess_nb_instruction,
253 iaccess_nb_packet,
254 iaccess_size_address,
255 iaccess_size_data,
256
257 daccess_nb_context,
258 daccess_nb_packet,
259 daccess_size_address,
260 daccess_size_data,
261
262 buffer_irsp_size,
263 buffer_drsp_size,
264
265 icache_nb_level ,
266 icache_nb_port ,
267 icache_nb_line ,
268 icache_size_line ,
269 icache_size_word ,
270 icache_associativity,
271 icache_hit_latence ,
272 icache_miss_penality,
273 dcache_nb_level ,
274 dcache_nb_port ,
275 dcache_nb_line ,
276 dcache_size_line ,
277 dcache_size_word ,
278 dcache_associativity,
279 dcache_hit_latence ,
280 dcache_miss_penality,
281
282 nb_cache_shared ,
283// cache_shared_nb_port ,
284 cache_shared_nb_line ,
285 cache_shared_size_line ,
286 cache_shared_size_word ,
287 cache_shared_associativity ,
288 cache_shared_hit_latence ,
289 cache_shared_miss_penality ,
290
291 nb_component_tty,
292 tty_address,
293 nb_tty,
294 name_tty,
295 false,
296
297 nb_component_ramlock,
298 ramlock_address,
299 nb_lock,
300
301 sim2os_address,
302 sim2os_size,
303 segtable
304 );
305
306 cout << param_environment->print(0) << endl;
307
308 segtable->print();
309
310 Environment * environment = new Environment ("environment",param_environment);
311
312 const char * sections_text [] = {".text",NULL};
313 const char * sections_data [] = {".data",".rodata",".bss",".sdata",".sbss", NULL};
314
315 if (environment->init("text" , filename_software.c_str(), sections_text) == false) exit (EXIT_FAILURE);
316 if (environment->init("data" , filename_software.c_str(), sections_data) == false) exit (EXIT_FAILURE);
317
318 //==============================================================================
319 //===== [ SIGNAL ]==============================================================
320 //==============================================================================
321
322 sc_clock * CLOCK = new sc_clock ("clock", 1.0, 0.5);
323 sc_signal<Tcontrol_t> * NRESET = new sc_signal<Tcontrol_t> ("NRESET");
324
325 sc_signal<Tcontrol_t > ** ICACHE_REQ_VAL ;
326 sc_signal<Tcontrol_t > ** ICACHE_REQ_ACK ;
327 sc_signal<Ticache_context_t > ** ICACHE_REQ_THREAD_ID ;
328 sc_signal<Ticache_packet_t > ** ICACHE_REQ_PACKET_ID ;
329 sc_signal<Ticache_address_t > ** ICACHE_REQ_ADDRESS ;
330 sc_signal<Ticache_type_t > ** ICACHE_REQ_TYPE ;
331
332 sc_signal<Tcontrol_t > ** ICACHE_RSP_VAL ;
333 sc_signal<Tcontrol_t > ** ICACHE_RSP_ACK ;
334 sc_signal<Ticache_context_t > ** ICACHE_RSP_THREAD_ID ;
335 sc_signal<Ticache_packet_t > ** ICACHE_RSP_PACKET_ID ;
336 sc_signal<Ticache_instruction_t> *** ICACHE_RSP_INSTRUCTION;
337 sc_signal<Ticache_error_t > ** ICACHE_RSP_ERROR ;
338
339 sc_signal<Tcontrol_t > ** DCACHE_REQ_VAL ;
340 sc_signal<Tcontrol_t > ** DCACHE_REQ_ACK ;
341 sc_signal<Tdcache_context_t > ** DCACHE_REQ_THREAD_ID ;
342 sc_signal<Tdcache_packet_t > ** DCACHE_REQ_PACKET_ID ;
343 sc_signal<Tdcache_address_t > ** DCACHE_REQ_ADDRESS ;
344 sc_signal<Tdcache_data_t > ** DCACHE_REQ_WDATA ;
345 sc_signal<Tdcache_type_t > ** DCACHE_REQ_TYPE ;
346
347 sc_signal<Tcontrol_t > ** DCACHE_RSP_VAL ;
348 sc_signal<Tcontrol_t > ** DCACHE_RSP_ACK ;
349 sc_signal<Tdcache_context_t > ** DCACHE_RSP_THREAD_ID ;
350 sc_signal<Tdcache_packet_t > ** DCACHE_RSP_PACKET_ID ;
351 sc_signal<Tdcache_data_t > ** DCACHE_RSP_RDATA ;
352 sc_signal<Tdcache_error_t > ** DCACHE_RSP_ERROR ;
353
354 sc_signal<Tcontrol_t > ** INTERRUPT_ENABLE ;
355
356 ALLOC1_SC_SIGNAL(ICACHE_REQ_VAL ,"ICACHE_REQ_VAL ",Tcontrol_t ,morpheo->_nb_icache_port);
357 ALLOC1_SC_SIGNAL(ICACHE_REQ_ACK ,"ICACHE_REQ_ACK ",Tcontrol_t ,morpheo->_nb_icache_port);
358 ALLOC1_SC_SIGNAL(ICACHE_REQ_THREAD_ID ,"ICACHE_REQ_THREAD_ID ",Ticache_context_t ,morpheo->_nb_icache_port);
359 ALLOC1_SC_SIGNAL(ICACHE_REQ_PACKET_ID ,"ICACHE_REQ_PACKET_ID ",Ticache_packet_t ,morpheo->_nb_icache_port);
360 ALLOC1_SC_SIGNAL(ICACHE_REQ_ADDRESS ,"ICACHE_REQ_ADDRESS ",Ticache_address_t ,morpheo->_nb_icache_port);
361 ALLOC1_SC_SIGNAL(ICACHE_REQ_TYPE ,"ICACHE_REQ_TYPE ",Ticache_type_t ,morpheo->_nb_icache_port);
362
363 ALLOC1_SC_SIGNAL(ICACHE_RSP_VAL ,"ICACHE_RSP_VAL ",Tcontrol_t ,morpheo->_nb_icache_port);
364 ALLOC1_SC_SIGNAL(ICACHE_RSP_ACK ,"ICACHE_RSP_ACK ",Tcontrol_t ,morpheo->_nb_icache_port);
365 ALLOC1_SC_SIGNAL(ICACHE_RSP_THREAD_ID ,"ICACHE_RSP_THREAD_ID ",Ticache_context_t ,morpheo->_nb_icache_port);
366 ALLOC1_SC_SIGNAL(ICACHE_RSP_PACKET_ID ,"ICACHE_RSP_PACKET_ID ",Ticache_packet_t ,morpheo->_nb_icache_port);
367 ALLOC2_SC_SIGNAL(ICACHE_RSP_INSTRUCTION ,"ICACHE_RSP_INSTRUCTION",Ticache_instruction_t,morpheo->_nb_icache_port,morpheo->_icache_nb_instruction[it1]);
368 ALLOC1_SC_SIGNAL(ICACHE_RSP_ERROR ,"ICACHE_RSP_ERROR ",Ticache_error_t ,morpheo->_nb_icache_port);
369
370 ALLOC1_SC_SIGNAL(DCACHE_REQ_VAL ,"DCACHE_REQ_VAL ",Tcontrol_t ,morpheo->_nb_dcache_port);
371 ALLOC1_SC_SIGNAL(DCACHE_REQ_ACK ,"DCACHE_REQ_ACK ",Tcontrol_t ,morpheo->_nb_dcache_port);
372 ALLOC1_SC_SIGNAL(DCACHE_REQ_THREAD_ID ,"DCACHE_REQ_THREAD_ID ",Tdcache_context_t ,morpheo->_nb_dcache_port);
373 ALLOC1_SC_SIGNAL(DCACHE_REQ_PACKET_ID ,"DCACHE_REQ_PACKET_ID ",Tdcache_packet_t ,morpheo->_nb_dcache_port);
374 ALLOC1_SC_SIGNAL(DCACHE_REQ_ADDRESS ,"DCACHE_REQ_ADDRESS ",Tdcache_address_t ,morpheo->_nb_dcache_port);
375 ALLOC1_SC_SIGNAL(DCACHE_REQ_WDATA ,"DCACHE_REQ_WDATA ",Tdcache_data_t ,morpheo->_nb_dcache_port);
376 ALLOC1_SC_SIGNAL(DCACHE_REQ_TYPE ,"DCACHE_REQ_TYPE ",Tdcache_type_t ,morpheo->_nb_dcache_port);
377
378 ALLOC1_SC_SIGNAL(DCACHE_RSP_VAL ,"DCACHE_RSP_VAL ",Tcontrol_t ,morpheo->_nb_dcache_port);
379 ALLOC1_SC_SIGNAL(DCACHE_RSP_ACK ,"DCACHE_RSP_ACK ",Tcontrol_t ,morpheo->_nb_dcache_port);
380 ALLOC1_SC_SIGNAL(DCACHE_RSP_THREAD_ID ,"DCACHE_RSP_THREAD_ID ",Tdcache_context_t ,morpheo->_nb_dcache_port);
381 ALLOC1_SC_SIGNAL(DCACHE_RSP_PACKET_ID ,"DCACHE_RSP_PACKET_ID ",Tdcache_packet_t ,morpheo->_nb_dcache_port);
382 ALLOC1_SC_SIGNAL(DCACHE_RSP_RDATA ,"DCACHE_RSP_RDATA ",Tdcache_data_t ,morpheo->_nb_dcache_port);
383 ALLOC1_SC_SIGNAL(DCACHE_RSP_ERROR ,"DCACHE_RSP_ERROR ",Tdcache_error_t ,morpheo->_nb_dcache_port);
384
385 ALLOC1_SC_SIGNAL(INTERRUPT_ENABLE ,"INTERRUPT_ENABLE ",Tcontrol_t ,morpheo->_nb_thread);
386
387 //==============================================================================
388 //===== [ INSTANCE ]============================================================
389 //==============================================================================
390
391 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
392 //~~~~~ [ Morpheo ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
393 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
394
395 (*(morpheo->in_CLOCK)) (*(CLOCK));
396 (*(morpheo->in_NRESET)) (*(NRESET));
397
398 _INSTANCE1_SC_SIGNAL(morpheo,out_ICACHE_REQ_VAL ,ICACHE_REQ_VAL ,morpheo->_nb_icache_port);
399 _INSTANCE1_SC_SIGNAL(morpheo, in_ICACHE_REQ_ACK ,ICACHE_REQ_ACK ,morpheo->_nb_icache_port);
400 if (morpheo->_have_port_icache_thread_id)
401 _INSTANCE1_SC_SIGNAL(morpheo,out_ICACHE_REQ_THREAD_ID ,ICACHE_REQ_THREAD_ID ,morpheo->_nb_icache_port);
402 if (morpheo->_have_port_icache_packet_id)
403 _INSTANCE1_SC_SIGNAL(morpheo,out_ICACHE_REQ_PACKET_ID ,ICACHE_REQ_PACKET_ID ,morpheo->_nb_icache_port);
404 _INSTANCE1_SC_SIGNAL(morpheo,out_ICACHE_REQ_ADDRESS ,ICACHE_REQ_ADDRESS ,morpheo->_nb_icache_port);
405 _INSTANCE1_SC_SIGNAL(morpheo,out_ICACHE_REQ_TYPE ,ICACHE_REQ_TYPE ,morpheo->_nb_icache_port);
406
407 _INSTANCE1_SC_SIGNAL(morpheo, in_ICACHE_RSP_VAL ,ICACHE_RSP_VAL ,morpheo->_nb_icache_port);
408 _INSTANCE1_SC_SIGNAL(morpheo,out_ICACHE_RSP_ACK ,ICACHE_RSP_ACK ,morpheo->_nb_icache_port);
409 if (morpheo->_have_port_icache_thread_id)
410 _INSTANCE1_SC_SIGNAL(morpheo, in_ICACHE_RSP_THREAD_ID ,ICACHE_RSP_THREAD_ID ,morpheo->_nb_icache_port);
411 if (morpheo->_have_port_icache_packet_id)
412 _INSTANCE1_SC_SIGNAL(morpheo, in_ICACHE_RSP_PACKET_ID ,ICACHE_RSP_PACKET_ID ,morpheo->_nb_icache_port);
413 _INSTANCE2_SC_SIGNAL(morpheo, in_ICACHE_RSP_INSTRUCTION ,ICACHE_RSP_INSTRUCTION ,morpheo->_nb_icache_port,morpheo->_icache_nb_instruction[it1]);
414 _INSTANCE1_SC_SIGNAL(morpheo, in_ICACHE_RSP_ERROR ,ICACHE_RSP_ERROR ,morpheo->_nb_icache_port);
415
416 _INSTANCE1_SC_SIGNAL(morpheo,out_DCACHE_REQ_VAL ,DCACHE_REQ_VAL ,morpheo->_nb_dcache_port);
417 _INSTANCE1_SC_SIGNAL(morpheo, in_DCACHE_REQ_ACK ,DCACHE_REQ_ACK ,morpheo->_nb_dcache_port);
418 if (morpheo->_have_port_dcache_thread_id)
419 _INSTANCE1_SC_SIGNAL(morpheo,out_DCACHE_REQ_THREAD_ID ,DCACHE_REQ_THREAD_ID ,morpheo->_nb_dcache_port);
420 if (morpheo->_have_port_dcache_packet_id)
421 _INSTANCE1_SC_SIGNAL(morpheo,out_DCACHE_REQ_PACKET_ID ,DCACHE_REQ_PACKET_ID ,morpheo->_nb_dcache_port);
422 _INSTANCE1_SC_SIGNAL(morpheo,out_DCACHE_REQ_ADDRESS ,DCACHE_REQ_ADDRESS ,morpheo->_nb_dcache_port);
423 _INSTANCE1_SC_SIGNAL(morpheo,out_DCACHE_REQ_WDATA ,DCACHE_REQ_WDATA ,morpheo->_nb_dcache_port);
424 _INSTANCE1_SC_SIGNAL(morpheo,out_DCACHE_REQ_TYPE ,DCACHE_REQ_TYPE ,morpheo->_nb_dcache_port);
425
426 _INSTANCE1_SC_SIGNAL(morpheo, in_DCACHE_RSP_VAL ,DCACHE_RSP_VAL ,morpheo->_nb_dcache_port);
427 _INSTANCE1_SC_SIGNAL(morpheo,out_DCACHE_RSP_ACK ,DCACHE_RSP_ACK ,morpheo->_nb_dcache_port);
428 if (morpheo->_have_port_dcache_thread_id)
429 _INSTANCE1_SC_SIGNAL(morpheo, in_DCACHE_RSP_THREAD_ID ,DCACHE_RSP_THREAD_ID ,morpheo->_nb_dcache_port);
430 if (morpheo->_have_port_dcache_packet_id)
431 _INSTANCE1_SC_SIGNAL(morpheo, in_DCACHE_RSP_PACKET_ID ,DCACHE_RSP_PACKET_ID ,morpheo->_nb_dcache_port);
432 _INSTANCE1_SC_SIGNAL(morpheo, in_DCACHE_RSP_RDATA ,DCACHE_RSP_RDATA ,morpheo->_nb_dcache_port);
433 _INSTANCE1_SC_SIGNAL(morpheo, in_DCACHE_RSP_ERROR ,DCACHE_RSP_ERROR ,morpheo->_nb_dcache_port);
434
435 _INSTANCE1_SC_SIGNAL(morpheo, in_INTERRUPT_ENABLE ,INTERRUPT_ENABLE ,morpheo->_nb_thread);
436
437 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
438 //~~~~~ [ Environment ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
439 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
440
441 (*(environment->CLOCK)) (*(CLOCK));
442 (*(environment->NRESET)) (*(NRESET));
443
444 for (uint32_t i=0; i<morpheo->_nb_icache_port; ++i)
445 {
446 (*(environment->ICACHE_REQ_VAL [0][i] )) (*(ICACHE_REQ_VAL [i] ));
447 (*(environment->ICACHE_REQ_ACK [0][i] )) (*(ICACHE_REQ_ACK [i] ));
448 (*(environment->ICACHE_REQ_CONTEXT_ID [0][i] )) (*(ICACHE_REQ_THREAD_ID [i] ));
449 (*(environment->ICACHE_REQ_PACKET_ID [0][i] )) (*(ICACHE_REQ_PACKET_ID [i] ));
450 (*(environment->ICACHE_REQ_ADDRESS [0][i] )) (*(ICACHE_REQ_ADDRESS [i] ));
451 (*(environment->ICACHE_REQ_TYPE [0][i] )) (*(ICACHE_REQ_TYPE [i] ));
452
453 (*(environment->ICACHE_RSP_VAL [0][i] )) (*(ICACHE_RSP_VAL [i] ));
454 (*(environment->ICACHE_RSP_ACK [0][i] )) (*(ICACHE_RSP_ACK [i] ));
455 (*(environment->ICACHE_RSP_CONTEXT_ID [0][i] )) (*(ICACHE_RSP_THREAD_ID [i] ));
456 (*(environment->ICACHE_RSP_PACKET_ID [0][i] )) (*(ICACHE_RSP_PACKET_ID [i] ));
457 (*(environment->ICACHE_RSP_ERROR [0][i] )) (*(ICACHE_RSP_ERROR [i] ));
458
459 for (uint32_t j=0; j<morpheo->_icache_nb_instruction[i]; ++j)
460 (*(environment->ICACHE_RSP_INSTRUCTION [0][i][j])) (*(ICACHE_RSP_INSTRUCTION [i][j]));
461 }
462 for (uint32_t i=0; i<morpheo->_nb_dcache_port; ++i)
463 {
464 (*(environment->DCACHE_REQ_VAL [0][i] )) (*(DCACHE_REQ_VAL [i] ));
465 (*(environment->DCACHE_REQ_ACK [0][i] )) (*(DCACHE_REQ_ACK [i] ));
466 (*(environment->DCACHE_REQ_CONTEXT_ID [0][i] )) (*(DCACHE_REQ_THREAD_ID [i] ));
467 (*(environment->DCACHE_REQ_PACKET_ID [0][i] )) (*(DCACHE_REQ_PACKET_ID [i] ));
468 (*(environment->DCACHE_REQ_ADDRESS [0][i] )) (*(DCACHE_REQ_ADDRESS [i] ));
469 (*(environment->DCACHE_REQ_WDATA [0][i] )) (*(DCACHE_REQ_WDATA [i] ));
470 (*(environment->DCACHE_REQ_TYPE [0][i] )) (*(DCACHE_REQ_TYPE [i] ));
471
472 (*(environment->DCACHE_RSP_VAL [0][i] )) (*(DCACHE_RSP_VAL [i] ));
473 (*(environment->DCACHE_RSP_ACK [0][i] )) (*(DCACHE_RSP_ACK [i] ));
474 (*(environment->DCACHE_RSP_CONTEXT_ID [0][i] )) (*(DCACHE_RSP_THREAD_ID [i] ));
475 (*(environment->DCACHE_RSP_PACKET_ID [0][i] )) (*(DCACHE_RSP_PACKET_ID [i] ));
476 (*(environment->DCACHE_RSP_RDATA [0][i] )) (*(DCACHE_RSP_RDATA [i] ));
477 (*(environment->DCACHE_RSP_ERROR [0][i] )) (*(DCACHE_RSP_ERROR [i] ));
478 }
479
480//_INSTANCE2_SC_SIGNAL(environment,INTERRUPT_ENABLE ,1,morpheo->_nb_thread);
481
482 //==============================================================================
483 //===== [ SIMULATION ]==========================================================
484 //==============================================================================
485
486 // initialisation
487 cerr << "<test> Simulation Init" << endl;
488
489 sc_start(0);
490
491 cerr << "<test> Simulation Start" << endl;
492
493 Time * _time_global = new Time();
494
495 for (uint32_t i=0; i<morpheo->_nb_thread; ++i)
496 INTERRUPT_ENABLE[i]->write(0);
497
498 NRESET->write(0);
499 SC_START(5);
500 NRESET->write(1);
501
502 // Infinite loop
503 do
504 {
505// Time * _time_local = new Time();
506 SC_START(100000);
507// delete _time_local;
508 } while (not morpheo ->simulation_end() and // morpheo condition stop
509 not environment->simulation_end()); // test ok
510 delete _time_global;
511
512 bool morpheo_end = morpheo->simulation_end();
513 bool environment_end = environment->simulation_end();
514
515
516 //==============================================================================
517 //===== [ DESTRUCTION ]=========================================================
518 //==============================================================================
519
520 delete CLOCK;
521 delete NRESET;
522
523 DELETE1_SC_SIGNAL(ICACHE_REQ_VAL ,morpheo->_nb_icache_port);
524 DELETE1_SC_SIGNAL(ICACHE_REQ_ACK ,morpheo->_nb_icache_port);
525 DELETE1_SC_SIGNAL(ICACHE_REQ_THREAD_ID ,morpheo->_nb_icache_port);
526 DELETE1_SC_SIGNAL(ICACHE_REQ_PACKET_ID ,morpheo->_nb_icache_port);
527 DELETE1_SC_SIGNAL(ICACHE_REQ_ADDRESS ,morpheo->_nb_icache_port);
528 DELETE1_SC_SIGNAL(ICACHE_REQ_TYPE ,morpheo->_nb_icache_port);
529
530 DELETE1_SC_SIGNAL(ICACHE_RSP_VAL ,morpheo->_nb_icache_port);
531 DELETE1_SC_SIGNAL(ICACHE_RSP_ACK ,morpheo->_nb_icache_port);
532 DELETE1_SC_SIGNAL(ICACHE_RSP_THREAD_ID ,morpheo->_nb_icache_port);
533 DELETE1_SC_SIGNAL(ICACHE_RSP_PACKET_ID ,morpheo->_nb_icache_port);
534 DELETE1_SC_SIGNAL(ICACHE_RSP_ERROR ,morpheo->_nb_icache_port);
535 DELETE2_SC_SIGNAL(ICACHE_RSP_INSTRUCTION ,morpheo->_nb_icache_port,morpheo->_icache_nb_instruction[it1]);
536
537 DELETE1_SC_SIGNAL(DCACHE_REQ_VAL ,morpheo->_nb_dcache_port);
538 DELETE1_SC_SIGNAL(DCACHE_REQ_ACK ,morpheo->_nb_dcache_port);
539 DELETE1_SC_SIGNAL(DCACHE_REQ_THREAD_ID ,morpheo->_nb_dcache_port);
540 DELETE1_SC_SIGNAL(DCACHE_REQ_PACKET_ID ,morpheo->_nb_dcache_port);
541 DELETE1_SC_SIGNAL(DCACHE_REQ_ADDRESS ,morpheo->_nb_dcache_port);
542 DELETE1_SC_SIGNAL(DCACHE_REQ_WDATA ,morpheo->_nb_dcache_port);
543 DELETE1_SC_SIGNAL(DCACHE_REQ_TYPE ,morpheo->_nb_dcache_port);
544
545 DELETE1_SC_SIGNAL(DCACHE_RSP_VAL ,morpheo->_nb_dcache_port);
546 DELETE1_SC_SIGNAL(DCACHE_RSP_ACK ,morpheo->_nb_dcache_port);
547 DELETE1_SC_SIGNAL(DCACHE_RSP_THREAD_ID ,morpheo->_nb_dcache_port);
548 DELETE1_SC_SIGNAL(DCACHE_RSP_PACKET_ID ,morpheo->_nb_dcache_port);
549 DELETE1_SC_SIGNAL(DCACHE_RSP_RDATA ,morpheo->_nb_dcache_port);
550 DELETE1_SC_SIGNAL(DCACHE_RSP_ERROR ,morpheo->_nb_dcache_port);
551
552 DELETE1_SC_SIGNAL(INTERRUPT_ENABLE ,morpheo->_nb_thread);
553
554 delete environment;
555
556 delete param_environment;
557 delete segtable;
558
559 delete [] nb_lock ;
560 delete [] ramlock_address;
561
562 for (uint32_t i=0;i<nb_component_tty;++i)
563 delete [] name_tty [i];
564 delete [] name_tty;
565 delete [] nb_tty;
566 delete [] tty_address;
567
568 delete [] cache_shared_miss_penality;
569 delete [] cache_shared_hit_latence ;
570 delete [] cache_shared_associativity;
571 delete [] cache_shared_size_word ;
572 delete [] cache_shared_size_line ;
573 delete [] cache_shared_nb_line ;
574
575 for (uint32_t i=0; i<nb_entity; i++)
576 {
577 delete [] dcache_miss_penality [i];
578 delete [] dcache_hit_latence [i];
579 delete [] dcache_associativity [i];
580 delete [] dcache_size_word [i];
581 delete [] dcache_size_line [i];
582 delete [] dcache_nb_line [i];
583 }
584 delete [] dcache_miss_penality ;
585 delete [] dcache_hit_latence ;
586 delete [] dcache_associativity ;
587 delete [] dcache_size_word ;
588 delete [] dcache_size_line ;
589 delete [] dcache_nb_line ;
590 delete [] dcache_nb_level ;
591 delete [] dcache_nb_port ;
592
593 for (uint32_t i=0; i<nb_entity; i++)
594 {
595 delete [] icache_miss_penality [i];
596 delete [] icache_hit_latence [i];
597 delete [] icache_associativity [i];
598 delete [] icache_size_word [i];
599 delete [] icache_size_line [i];
600 delete [] icache_nb_line [i];
601 }
602 delete [] icache_miss_penality;
603 delete [] icache_hit_latence ;
604 delete [] icache_associativity;
605 delete [] icache_size_word ;
606 delete [] icache_size_line ;
607 delete [] icache_nb_line ;
608 delete [] icache_nb_level ;
609 delete [] icache_nb_port ;
610
611 delete [] buffer_drsp_size ;
612 delete [] buffer_irsp_size ;
613 delete [] daccess_size_data ;
614 delete [] daccess_size_address ;
615 delete [] daccess_nb_packet ;
616 delete [] daccess_nb_context ;
617 delete [] iaccess_size_data ;
618 delete [] iaccess_size_address ;
619 delete [] iaccess_nb_packet ;
620 delete [] iaccess_nb_instruction;
621 delete [] iaccess_nb_context ;
622
623 delete morpheo;
624
625 bool test_ok = false;
626 if (not morpheo_end and not environment_end)
627 {
628 cerr << "<test> Simulation End : Unknow" << endl;
629 }
630 else
631 {
632 if (morpheo_end)
633 cout << "<test> Simulation End : MORPHEO" << endl;
634 if (environment_end)
635 {
636 cout << "<test> Simulation End : ENVIRONMENT" << endl;
637 test_ok = true;
638 }
639 }
640
641 if (test_ok)
642 {
643 cout << STR_OK << endl;
644 return EXIT_SUCCESS;
645 }
646 else
647 {
648 cout << STR_KO << endl;
649 return EXIT_FAILURE;
650 }
651}
Note: See TracBrowser for help on using the repository browser.