source: branches/v4/platforms/almos-tsarv3-platforms/mono-cluster/top.cpp @ 983

Last change on this file since 983 was 259, checked in by almaless, 12 years ago

Introduce ALMOS used platforms for TSAR.
See the package's README file for more information.

File size: 20.7 KB
Line 
1#define yes 1
2#define no  0
3
4#define USE_RING       no
5#define USE_TSAR_V3    yes
6#define SECTOR_SIZE    4096
7
8#define L1_WAYS        4
9#define L1_SETS        64
10
11#define MEMC_WAYS      16
12#define MEMC_SETS      256
13
14#define MEMC_HEAP      1024 //4096
15
16#define XRAM_LATENCY   0
17
18#define USE_VCI_LOGGER_ON_L1_CPU0  no
19#define USE_VCI_LOGGER_ON_L1_CPU1  no
20#define USE_VCI_LOGGER_ON_L1_CPU2  no
21#define USE_VCI_LOGGER_ON_L1_CPU3  no
22
23#define USE_VCI_LOGGER_ON_ROM      no
24
25#define USE_VCI_PROFILER_ON_CPU0   yes
26#define USE_VCI_PROFILER_ON_CPU1   yes
27#define USE_VCI_PROFILER_ON_CPU2   yes
28#define USE_VCI_PROFILER_ON_CPU3   yes
29
30#define USE_VCI_PROFILER (USE_VCI_PROFILER_ON_CPU0 || USE_VCI_PROFILER_ON_CPU1 || USE_VCI_PROFILER_ON_CPU2 || USE_VCI_PROFILER_ON_CPU3)
31
32#include <systemc>
33#include <sys/time.h>
34#include <iostream>
35#include <cstdlib>
36#include <cstdarg>
37#include <unistd.h>
38#include <getopt.h>
39
40#include "mapping_table.h"
41#include "mips32.h"
42#include "vci_simple_ram.h"
43#include "vci_multi_tty.h"
44
45#if USE_RING
46#include "vci_simple_ring_fast.h"
47#else
48#include "vci_vgmn.h"
49#endif
50
51#if USE_VCI_PROFILER
52#include "vci_profiler.h"
53#endif
54
55
56#if USE_TSAR_V3
57#include "vci_mem_cache_v3.h"
58#else
59#include "vci_mem_cache_v2.h"
60#endif
61
62#include "vci_cc_vcache_wrapper2_v1.h"
63#include "vci_logger.h"
64#include "vci_xicu.h"
65#include "vci_framebuffer.h"
66#include "vci_dma_tsar_v2.h"
67#include "vci_block_device_tsar_v2.h"
68
69#ifdef USE_GDB_SERVER
70#include "iss/gdbserver.h"
71#endif
72
73//#define  VCI_LOGGER_ON_L1
74//#define  VCI_LOGGER_ON_ROM
75//#define VCI_LOGGER_ON_L1_TGT
76
77#define _TO_STR(x) #x
78#define TO_STR(x) _TO_STR(x)
79
80#include "segmentation.h"
81
82#if  !(defined(KERNEL_BIN_IMG) || defined(BOOT_INFO_BLOCK))
83#error KERNEL_BIN_IMG or BOOT_INFO_BLOCK macros definition are missed
84#endif
85
86#include <config.h>
87
88
89static const struct option opts[] = {{"XFB",    required_argument, NULL, 'x'},
90                                     {"YFB",    required_argument, NULL, 'y'},
91                                     {"FBMODE", required_argument, NULL, 'm'},
92                                     {"SSTEP",  required_argument, NULL, 's'},
93                                     {"LOGMC0", required_argument, NULL, 'l'},
94                                     {"BLKSZ",  required_argument, NULL, 'b'},
95                                     {"HELP",   no_argument,       NULL, 'h'},
96                                     {NULL,     no_argument,       NULL,  0}};
97
98int _main(int argc, char *argv[])
99{
100        uint64_t       ms1, ms2;
101        struct timeval t1, t2;
102        uint64_t     sstep    = 10000000000ULL;
103        uint64_t     ncycles  = 10000000000ULL;
104        size_t       xfb      = FB_XSIZE;
105        size_t       yfb      = FB_YSIZE;
106        size_t       fb_mode  = 420;
107        size_t       blksz    = SECTOR_SIZE;
108        int          longIndex;
109        int          c;
110        bool         do_loggerMc0 = false;
111
112        using namespace sc_core;
113        // Avoid repeating these everywhere
114        using soclib::common::IntTab;
115        using soclib::common::Segment;
116
117        // Define VCI parameters
118        typedef soclib::caba::VciParams<4,8,32,1,1,1,8,4,4,1> vci_param;
119        typedef soclib::common::Mips32ElIss proc_iss;
120        // Mapping table
121
122        while ((c = getopt_long(argc, argv, "x:y:s:m:l:b:h", opts, &longIndex)) != -1) 
123        {
124          switch(c) 
125          {
126          case 'x':
127            xfb = atoi(optarg);
128            break;
129
130          case 'y':
131            yfb = atoi(optarg); 
132            break;
133
134          case 'm':
135            fb_mode = atoi(optarg);
136            break;
137
138          case 's':
139            sstep = atoll(optarg);
140            break;
141
142          case 'l':
143            if(strcmp(optarg, "ON") == 0)
144              do_loggerMc0 = true;
145            break;
146
147          case 'b':
148            blksz = atoi(optarg);
149            break;
150     
151          case 'h':
152            std::cout << "Usage: "<< argv[0] << " <options>" << std::endl << std::endl;
153            std::cout << "Options:" << std::endl;
154            std::cout << "  --XFB     : FrameBuffer XSIZE" << std::endl;
155            std::cout << "  --YFB     : FrameBuffer YSIZE" << std::endl;
156            std::cout << "  --FBMODE  : FrameBuffer MODE {YUV:420, YUV:422, RGB:0, RGB:16, RGB:32, RGBPAL:256}" << std::endl;
157            std::cout << "  --SSTEP   : Statistics period" << std::endl;
158            std::cout << "  --LOGMC0  : {ON|OFF} Trace the charge of directe network input of MemCache0" << std::endl;
159            std::cout << "  --BLKSZ   : Sector Size (in bytes)" << std::endl;
160            std::cout << "  --HELP    : Print out command line options" << std::endl << std::endl;
161            std::cout << "Default: "  << argv[0] 
162                      << " --XFB "    << xfb
163                      << " --YFB "    << yfb
164                      << " --FBMODE " << fb_mode
165                      << " --SSTEP "  << sstep
166                      << " --LOGMC0 " << "OFF"
167                      << " --BLKSZ "  << blksz
168                      << std::endl;
169            exit(0);
170            break;
171          }
172        }
173
174        std::cout << "CONFIG_MEMC_UPDATE_TAB_LINES = " << CONFIG_MEMC_UPDATE_TAB_LINES << std::endl;
175
176        soclib::common::MappingTable maptabp(32, IntTab(8), IntTab(8), 0xF0000000);
177       
178        maptabp.add(Segment("mc_m" , RAM_BASE , RAM_SIZE , IntTab(0), true));
179        maptabp.add(Segment("rom", ROM_BASE, ROM_SIZE, IntTab(1), true));
180
181        maptabp.add(Segment("bd", BD_BASE, BD_SIZE, IntTab(2), false));
182        maptabp.add(Segment("tty"  , TTY_BASE  , TTY_SIZE  , IntTab(3), false));
183        maptabp.add(Segment("xicu" , XICU_BASE , XICU_SIZE , IntTab(4), false));
184        maptabp.add(Segment("dma", DMA_BASE, DMA_SIZE, IntTab(5), false));
185        maptabp.add(Segment("fb", FB_BASE, FB_SIZE, IntTab(6), false));
186
187        std::cout << maptabp << std::endl;
188
189        soclib::common::MappingTable maptabc(32, IntTab(8), IntTab(8), 0xF0000000);
190        maptabc.add(Segment("c_proc0" , PROC0_BASE , PROC0_SIZE , IntTab(0), false, true, IntTab(0)));
191        maptabc.add(Segment("c_proc1" , PROC1_BASE , PROC1_SIZE , IntTab(1), false, true, IntTab(1)));
192        maptabc.add(Segment("c_proc2" , PROC2_BASE , PROC2_SIZE , IntTab(2), false, true, IntTab(2)));
193        maptabc.add(Segment("c_proc3" , PROC3_BASE , PROC3_SIZE , IntTab(3), false, true, IntTab(3)));
194        maptabc.add(Segment("mc_m" , RAM_BASE , RAM_SIZE , IntTab(4), false ));
195       
196        maptabc.add(Segment("rom", ROM_BASE, ROM_SIZE, IntTab(4), true));
197
198        std::cout << maptabc << std::endl;
199       
200        soclib::common::MappingTable maptabx(32, IntTab(8), IntTab(8), 0xF0000000);
201        maptabx.add(Segment("xram" , RAM_BASE , RAM_SIZE , IntTab(0), false));
202       
203       
204        std::cout << maptabx << std::endl;
205
206        //soclib::caba::VciLogger<vci_param> vci_logger0("vci_logger_mc0", maptabp, do_loggerMc0);
207       
208        // Signals
209
210        sc_clock        signal_clk("clk");
211        sc_signal<bool> signal_resetn("resetn");
212   
213        sc_signal<bool> signal_proc0_it0("mips0_it0"); 
214        sc_signal<bool> signal_proc0_it1("mips0_it1"); 
215        sc_signal<bool> signal_proc0_it2("mips0_it2"); 
216        sc_signal<bool> signal_proc0_it3("mips0_it3"); 
217        sc_signal<bool> signal_proc0_it4("mips0_it4"); 
218        sc_signal<bool> signal_proc0_it5("mips0_it5");
219
220        sc_signal<bool> signal_proc1_it0("mips1_it0"); 
221        sc_signal<bool> signal_proc1_it1("mips1_it1"); 
222        sc_signal<bool> signal_proc1_it2("mips1_it2"); 
223        sc_signal<bool> signal_proc1_it3("mips1_it3"); 
224        sc_signal<bool> signal_proc1_it4("mips1_it4"); 
225        sc_signal<bool> signal_proc1_it5("mips1_it5");
226
227        sc_signal<bool> signal_proc2_it0("mips2_it0"); 
228        sc_signal<bool> signal_proc2_it1("mips2_it1"); 
229        sc_signal<bool> signal_proc2_it2("mips2_it2"); 
230        sc_signal<bool> signal_proc2_it3("mips2_it3"); 
231        sc_signal<bool> signal_proc2_it4("mips2_it4"); 
232        sc_signal<bool> signal_proc2_it5("mips2_it5");
233
234        sc_signal<bool> signal_proc3_it0("mips3_it0"); 
235        sc_signal<bool> signal_proc3_it1("mips3_it1"); 
236        sc_signal<bool> signal_proc3_it2("mips3_it2"); 
237        sc_signal<bool> signal_proc3_it3("mips3_it3"); 
238        sc_signal<bool> signal_proc3_it4("mips3_it4"); 
239        sc_signal<bool> signal_proc3_it5("mips3_it5");
240
241        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc0("vci_ini_rw_proc0");
242        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc0("vci_ini_c_proc0");
243        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc0("vci_tgt_proc0");
244
245        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc1("vci_ini_rw_proc1");
246        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc1("vci_ini_c_proc1");
247        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc1("vci_tgt_proc1");
248
249        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc2("vci_ini_rw_proc2");
250        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc2("vci_ini_c_proc2");
251        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc2("vci_tgt_proc2");
252
253        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc3("vci_ini_rw_proc3");
254        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc3("vci_ini_c_proc3");
255        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc3("vci_tgt_proc3");
256
257        soclib::caba::VciSignals<vci_param> signal_vci_tty("signal_vci_tty");
258
259       
260        soclib::caba::VciSignals<vci_param> signal_vci_xicu("signal_vci_xicu");
261        soclib::caba::VciSignals<vci_param> signal_vci_dmai("signal_vci_dmai");
262        soclib::caba::VciSignals<vci_param> signal_vci_dmat("signal_vci_dmat");
263        soclib::caba::VciSignals<vci_param> signal_vci_vcifb("signal_vci_vcifb");
264        soclib::caba::VciSignals<vci_param> signal_vci_vcibd_i("signal_vci_vcibd_i");
265        soclib::caba::VciSignals<vci_param> signal_vci_vcibd_t("signal_vci_vcibd_t");
266        soclib::caba::VciSignals<vci_param> signal_vci_tgt_rom("vci_tgt_rom");
267
268        soclib::caba::VciSignals<vci_param> signal_vci_tgt_xram("vci_tgt_xram");
269
270        soclib::caba::VciSignals<vci_param> signal_vci_ixr_memc("vci_ixr_memc");
271        soclib::caba::VciSignals<vci_param> signal_vci_ini_memc("vci_ini_memc");
272        soclib::caba::VciSignals<vci_param> signal_vci_tgt_memc("vci_tgt_memc");
273        soclib::caba::VciSignals<vci_param> signal_vci_tgt_cleanup_memc("vci_tgt_cleanup_memc");
274
275        sc_signal<bool> signal_icu_irq0("signal_xicu_irq0");
276        sc_signal<bool> signal_icu_irq1("signal_xicu_irq1");
277        sc_signal<bool> signal_icu_irq2("signal_xicu_irq2");
278        sc_signal<bool> signal_icu_irq3("signal_xicu_irq3");
279        sc_signal<bool> signal_icu_irq4("signal_xicu_irq4");
280        sc_signal<bool> signal_icu_irq5("signal_xicu_irq5");
281        sc_signal<bool> signal_icu_irq6("signal_xicu_irq6");
282
283       
284        soclib::common::Loader loader("bootloader.bin",
285                                      "kernel-soclib.bin@"TO_STR(KERNEL_BIN_IMG)":D",
286                                      "arch-info.bin@"TO_STR(BOOT_INFO_BLOCK)":D");
287
288
289        //                                  init_rw   init_c   tgt
290        soclib::caba::VciCcVCacheWrapper2V1<vci_param, proc_iss > 
291        proc0("proc_0", 0, maptabp, maptabc, IntTab(0),IntTab(0),IntTab(0),
292              4,16,4,16,
293              L1_WAYS,L1_SETS,16,
294              L1_WAYS,L1_SETS,16,
295              16);
296
297        soclib::caba::VciCcVCacheWrapper2V1<vci_param, proc_iss > 
298        proc1("proc_1", 1, maptabp, maptabc, IntTab(1),IntTab(1),IntTab(1),
299              4,16,4,16,
300              L1_WAYS,L1_SETS,16,
301              L1_WAYS,L1_SETS,16,
302              16);
303
304        soclib::caba::VciCcVCacheWrapper2V1<vci_param, proc_iss > 
305        proc2("proc_2", 2, maptabp, maptabc, IntTab(2),IntTab(2),IntTab(2),
306              4,16,4,16,
307              L1_WAYS,L1_SETS,16,
308              L1_WAYS,L1_SETS,16,
309              16);
310
311        soclib::caba::VciCcVCacheWrapper2V1<vci_param, proc_iss > 
312        proc3("proc_3", 3, maptabp, maptabc, IntTab(3),IntTab(3),IntTab(3),
313              4,16,4,16,
314              L1_WAYS,L1_SETS,16,
315              L1_WAYS,L1_SETS,16,
316              16);
317
318        soclib::caba::VciSimpleRam<vci_param> 
319        rom("rom", IntTab(1), maptabp, loader);
320
321        soclib::caba::VciSimpleRam<vci_param> 
322          xram("xram", IntTab(0), maptabx, loader, XRAM_LATENCY);
323
324        //                                  x_init    c_init    p_tgt     c_tgt
325       
326#if USE_TSAR_V3
327        soclib::caba::VciMemCacheV3<vci_param> 
328          memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(0), IntTab(4),MEMC_WAYS,MEMC_SETS,16,MEMC_HEAP);
329#else
330        soclib::caba::VciMemCacheV2<vci_param> 
331        memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(0), IntTab(4),16,256,16);
332#endif
333        //memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(2), IntTab(4),4,16,16,32);
334       
335        soclib::caba::VciXicu<vci_param> vcixicu("vcixicu", maptabp, IntTab(4), 4 /* npti */, 6 /* nhwi */, 4 /* nwti */, 4 /* nirq */);
336
337        soclib::caba::VciMultiTty<vci_param> vcitty("vcitty",   IntTab(3), maptabp, "tty0" ,"tty1", "tty2", "tty3", NULL);
338        soclib::caba::VciDmaTsarV2<vci_param> vcidma("vcidma", maptabp, IntTab(4), IntTab(5), 64);//(1<<(vci_param::K-1)));
339
340        soclib::caba::VciBlockDeviceTsarV2<vci_param> vcibd("vcitbd", 
341                                                            maptabp, 
342                                                            IntTab(5), 
343                                                            IntTab(2), 
344                                                            "hdd-img.bin", 
345                                                            blksz);
346
347        soclib::caba::VciFrameBuffer<vci_param> vcifb("vcifb", IntTab(6), maptabp, xfb, yfb, fb_mode);
348       
349
350#if USE_VCI_LOGGER_ON_L1_CPU0
351  soclib::caba::VciLogger<vci_param> vci_logger0("vci_logger0",maptabp);
352#endif
353
354#if USE_VCI_LOGGER_ON_CPU1
355  soclib::caba::VciLogger<vci_param> vci_logger1("vci_logger1",maptabp);
356#endif
357
358#if USE_VCI_LOGGER_ON_CPU2
359  soclib::caba::VciLogger<vci_param> vci_logger2("vci_logger2",maptabp);
360#endif
361
362#if USE_VCI_LOGGER_ON_CPU3
363  soclib::caba::VciLogger<vci_param> vci_logger3("vci_logger3",maptabp);
364#endif
365
366#if USE_VCI_LOGGER_ON_ROM
367  soclib::caba::VciLogger<vci_param> vci_logger4("vci_logger4",maptabp);
368#endif
369
370
371#if USE_VCI_PROFILER_ON_CPU0
372  soclib::caba::VciProfiler<vci_param, proc_iss> vci_prof0("vci_prof0", 0, 0, 0, 1, 1, 32);
373#endif
374
375#if USE_VCI_PROFILER_ON_CPU1
376  soclib::caba::VciProfiler<vci_param, proc_iss> vci_prof1("vci_prof1", 0, 0, 0, 1, 1, 32);
377#endif
378
379#if USE_VCI_PROFILER_ON_CPU2
380  soclib::caba::VciProfiler<vci_param, proc_iss> vci_prof2("vci_prof2", 0, 0, 0, 1, 1, 32);
381#endif
382
383#if USE_VCI_PROFILER_ON_CPU3
384  soclib::caba::VciProfiler<vci_param, proc_iss> vci_prof3("vci_prof3", 0, 0, 0, 1, 1, 32);
385#endif
386
387#if USE_RING
388  std::cout << "Local Interconnect Type : RING" << std::endl;
389        //soclib::caba::VciVgmn<vci_param>
390        soclib::caba::VciSimpleRingFast<vci_param, 40, 33> 
391          ringp("ringp",maptabp, IntTab(), 4, 6, 7);//, /*3*/1, 8);
392       
393        //soclib::caba::VciVgmn<vci_param>
394        soclib::caba::VciSimpleRingFast<vci_param, 40, 33> 
395          ringc("ringc",maptabc, IntTab(), 4, 5, 5);//, /*2*/1, 8);
396
397#else
398        std::cout << "Local Interconnect Type : VGMN" << std::endl;
399        soclib::caba::VciVgmn<vci_param> 
400          ringp("ringp",maptabp, 6, 7, 1, 8);
401       
402        soclib::caba::VciVgmn<vci_param> 
403          ringc("ringc",maptabc, 5, 5, 1, 8);
404#endif
405
406        proc0.p_clk(signal_clk); 
407        proc0.p_resetn(signal_resetn); 
408        proc0.p_irq[0](signal_proc0_it0); 
409        proc0.p_irq[1](signal_proc0_it1); 
410        proc0.p_irq[2](signal_proc0_it2); 
411        proc0.p_irq[3](signal_proc0_it3); 
412        proc0.p_irq[4](signal_proc0_it4); 
413        proc0.p_irq[5](signal_proc0_it5); 
414        proc0.p_vci_ini_rw(signal_vci_ini_rw_proc0);
415        proc0.p_vci_ini_c(signal_vci_ini_c_proc0);
416        proc0.p_vci_tgt(signal_vci_tgt_proc0);
417
418        proc1.p_clk(signal_clk); 
419        proc1.p_resetn(signal_resetn); 
420        proc1.p_irq[0](signal_proc1_it0); 
421        proc1.p_irq[1](signal_proc1_it1); 
422        proc1.p_irq[2](signal_proc1_it2); 
423        proc1.p_irq[3](signal_proc1_it3); 
424        proc1.p_irq[4](signal_proc1_it4); 
425        proc1.p_irq[5](signal_proc1_it5); 
426        proc1.p_vci_ini_rw(signal_vci_ini_rw_proc1);
427        proc1.p_vci_ini_c(signal_vci_ini_c_proc1);
428        proc1.p_vci_tgt(signal_vci_tgt_proc1);
429
430        proc2.p_clk(signal_clk); 
431        proc2.p_resetn(signal_resetn); 
432        proc2.p_irq[0](signal_proc2_it0); 
433        proc2.p_irq[1](signal_proc2_it1); 
434        proc2.p_irq[2](signal_proc2_it2); 
435        proc2.p_irq[3](signal_proc2_it3); 
436        proc2.p_irq[4](signal_proc2_it4); 
437        proc2.p_irq[5](signal_proc2_it5); 
438        proc2.p_vci_ini_rw(signal_vci_ini_rw_proc2);
439        proc2.p_vci_ini_c(signal_vci_ini_c_proc2);
440        proc2.p_vci_tgt(signal_vci_tgt_proc2);
441
442        proc3.p_clk(signal_clk); 
443        proc3.p_resetn(signal_resetn); 
444        proc3.p_irq[0](signal_proc3_it0); 
445        proc3.p_irq[1](signal_proc3_it1); 
446        proc3.p_irq[2](signal_proc3_it2); 
447        proc3.p_irq[3](signal_proc3_it3); 
448        proc3.p_irq[4](signal_proc3_it4); 
449        proc3.p_irq[5](signal_proc3_it5); 
450        proc3.p_vci_ini_rw(signal_vci_ini_rw_proc3);
451        proc3.p_vci_ini_c(signal_vci_ini_c_proc3);
452        proc3.p_vci_tgt(signal_vci_tgt_proc3);
453
454        rom.p_clk(signal_clk);
455        rom.p_resetn(signal_resetn);
456        rom.p_vci(signal_vci_tgt_rom);
457
458#if USE_VCI_LOGGER_ON_L1_CPU0
459        vci_logger0.p_clk(signal_clk);
460        vci_logger0.p_resetn(signal_resetn);
461        vci_logger0.p_vci(signal_vci_ini_rw_proc0);
462#endif
463
464
465#if USE_VCI_LOGGER_ON_L1_CPU1
466        vci_logger1.p_clk(signal_clk);
467        vci_logger1.p_resetn(signal_resetn);
468        vci_logger1.p_vci(signal_vci_ini_rw_proc1);
469#endif
470
471#if USE_VCI_LOGGER_ON_L1_CPU2
472        vci_logger2.p_clk(signal_clk);
473        vci_logger2.p_resetn(signal_resetn);
474        vci_logger2.p_vci(signal_vci_ini_rw_proc2);
475#endif
476
477#if USE_VCI_LOGGER_ON_L1_CPU3
478        vci_logger3.p_clk(signal_clk);
479        vci_logger3.p_resetn(signal_resetn);
480        vci_logger3.p_vci(signal_vci_ini_rw_proc3);
481#endif
482
483#if USE_VCI_LOGGER_ON_ROM
484        vci_logger4.p_clk(signal_clk);
485        vci_logger4.p_resetn(signal_resetn);
486        vci_logger4.p_vci(signal_vci_tgt_rom);
487#endif
488
489
490#if USE_VCI_PROFILER_ON_CPU0
491        vci_prof0.p_clk(signal_clk);
492        vci_prof0.p_resetn(signal_resetn);
493        vci_prof0.p_vci(signal_vci_ini_rw_proc0);
494        vci_prof0.set_L1_cache(&proc0);
495#endif
496
497#if USE_VCI_PROFILER_ON_CPU1
498        vci_prof1.p_clk(signal_clk);
499        vci_prof1.p_resetn(signal_resetn);
500        vci_prof1.p_vci(signal_vci_ini_rw_proc1);
501        vci_prof1.set_L1_cache(&proc1);
502#endif
503
504#if USE_VCI_PROFILER_ON_CPU2
505        vci_prof2.p_clk(signal_clk);
506        vci_prof2.p_resetn(signal_resetn);
507        vci_prof2.p_vci(signal_vci_ini_rw_proc2);
508        vci_prof2.set_L1_cache(&proc2);
509#endif
510
511#if USE_VCI_PROFILER_ON_CPU3
512        vci_prof3.p_clk(signal_clk);
513        vci_prof3.p_resetn(signal_resetn);
514        vci_prof3.p_vci(signal_vci_ini_rw_proc3);
515        vci_prof3.set_L1_cache(&proc3);
516#endif
517
518        vcixicu.p_resetn(signal_resetn);
519        vcixicu.p_clk(signal_clk);
520        vcixicu.p_vci(signal_vci_xicu);
521        vcixicu.p_hwi[0](signal_icu_irq0);
522        vcixicu.p_hwi[1](signal_icu_irq1);
523        vcixicu.p_hwi[2](signal_icu_irq2);
524        vcixicu.p_hwi[3](signal_icu_irq3);
525        vcixicu.p_hwi[4](signal_icu_irq4);
526        vcixicu.p_hwi[5](signal_icu_irq5);
527
528        vcixicu.p_irq[0](signal_proc0_it0);
529        vcixicu.p_irq[1](signal_proc1_it0);
530        vcixicu.p_irq[2](signal_proc2_it0);
531        vcixicu.p_irq[3](signal_proc3_it0);
532        vcidma.p_clk(signal_clk);
533        vcidma.p_resetn(signal_resetn);
534        vcidma.p_irq(signal_icu_irq4); 
535
536        vcifb.p_clk(signal_clk);
537        vcifb.p_resetn(signal_resetn);
538        vcifb.p_vci(signal_vci_vcifb);
539
540        vcitty.p_clk(signal_clk);
541        vcitty.p_resetn(signal_resetn);
542        vcitty.p_vci(signal_vci_tty);
543        vcitty.p_irq[0](signal_icu_irq0); 
544        vcitty.p_irq[1](signal_icu_irq1); 
545        vcitty.p_irq[2](signal_icu_irq2); 
546        vcitty.p_irq[3](signal_icu_irq3); 
547
548
549        vcidma.p_vci_target(signal_vci_dmat);
550        vcidma.p_vci_initiator(signal_vci_dmai);
551       
552        memc.p_clk(signal_clk);
553        memc.p_resetn(signal_resetn);
554        memc.p_vci_tgt(signal_vci_tgt_memc);
555        memc.p_vci_tgt_cleanup(signal_vci_tgt_cleanup_memc);
556        memc.p_vci_ini(signal_vci_ini_memc);
557        memc.p_vci_ixr(signal_vci_ixr_memc);
558
559        vcibd.p_clk(signal_clk);
560        vcibd.p_resetn(signal_resetn);
561        vcibd.p_vci_target(signal_vci_vcibd_t);
562        vcibd.p_vci_initiator(signal_vci_vcibd_i);
563        vcibd.p_irq(signal_icu_irq5);
564
565
566        xram.p_clk(signal_clk);
567        xram.p_resetn(signal_resetn);
568        xram.p_vci(signal_vci_ixr_memc);
569       
570
571        ringp.p_clk(signal_clk);
572        ringp.p_resetn(signal_resetn);
573
574        ringc.p_clk(signal_clk);
575        ringc.p_resetn(signal_resetn);
576
577        ringp.p_to_initiator[0](signal_vci_ini_rw_proc0);
578        ringp.p_to_initiator[1](signal_vci_ini_rw_proc1);
579        ringp.p_to_initiator[2](signal_vci_ini_rw_proc2);
580        ringp.p_to_initiator[3](signal_vci_ini_rw_proc3);
581        ringp.p_to_initiator[4](signal_vci_dmai);
582        ringp.p_to_initiator[5](signal_vci_vcibd_i);
583       
584
585        ringc.p_to_initiator[0](signal_vci_ini_c_proc0);
586        ringc.p_to_initiator[1](signal_vci_ini_c_proc1);
587        ringc.p_to_initiator[2](signal_vci_ini_c_proc2);
588        ringc.p_to_initiator[3](signal_vci_ini_c_proc3);
589        ringc.p_to_initiator[4](signal_vci_ini_memc);
590
591
592        ringp.p_to_target[0](signal_vci_tgt_memc);
593        ringp.p_to_target[1](signal_vci_tgt_rom);
594        ringp.p_to_target[2](signal_vci_vcibd_t);
595        ringp.p_to_target[3](signal_vci_tty);
596        ringp.p_to_target[4](signal_vci_xicu);
597        ringp.p_to_target[5](signal_vci_dmat);
598        ringp.p_to_target[6](signal_vci_vcifb);
599
600        ringc.p_to_target[0](signal_vci_tgt_proc0);
601        ringc.p_to_target[1](signal_vci_tgt_proc1);
602        ringc.p_to_target[2](signal_vci_tgt_proc2);
603        ringc.p_to_target[3](signal_vci_tgt_proc3);
604        ringc.p_to_target[4](signal_vci_tgt_cleanup_memc);
605
606
607        sc_start(sc_core::sc_time(0, SC_NS));
608        signal_resetn = false;
609
610        sc_start(sc_core::sc_time(1, SC_NS));
611        signal_resetn = true;
612
613        if (gettimeofday(&t1, NULL) != 0) {
614              perror("gettimeofday");
615              return EXIT_FAILURE;
616        }
617       
618        for(uint64_t i=1 ; i<ncycles ; i++)
619        {
620          sc_start(sc_core::sc_time(1, SC_NS));
621         
622          if ( (i % sstep) == 0)
623          {
624            memc.print_stats();
625            proc0.print_trace();
626            proc0.print_stats();
627            proc0.clear_stats();
628           
629#if 1
630            proc1.print_trace();
631            proc1.print_stats();
632            proc1.clear_stats();
633           
634            proc2.print_trace();
635            proc2.print_stats();
636            proc2.clear_stats();
637           
638            proc3.print_trace();
639            proc3.print_stats();
640            proc3.clear_stats();
641#endif
642          }
643
644          /*
645           * execute 10 million cycle, compute how many time it took and
646           * print the clock frequency
647           */
648         
649          if( (i % 10000000) == 0)
650          {
651
652            if (gettimeofday(&t2, NULL) != 0) 
653            {
654              perror("gettimeofday");
655              return EXIT_FAILURE;
656            }
657           
658            ms1 = (uint64_t)t1.tv_sec * 1000ULL + (uint64_t)t1.tv_usec / 1000;
659            ms2 = (uint64_t)t2.tv_sec * 1000ULL + (uint64_t)t2.tv_usec / 1000;
660            std::cerr << "platform clock frequency " << (double)10000000ULL / (double)(ms2 - ms1) << "Khz" << std::endl;
661           
662            if (gettimeofday(&t1, NULL) != 0) 
663            {
664              perror("gettimeofday");
665              return EXIT_FAILURE;
666            }
667          }
668        }
669
670        return EXIT_SUCCESS;
671}
672
673int sc_main (int argc, char *argv[])
674{
675        try {
676                return _main(argc, argv);
677        } catch (std::exception &e) {
678                std::cout << e.what() << std::endl;
679        } catch (...) {
680                std::cout << "Unknown exception occured" << std::endl;
681                throw;
682        }
683        return 1;
684}
Note: See TracBrowser for help on using the repository browser.