source: trunk/platforms/tsar_mono_mmu/top.cpp @ 560

Last change on this file since 560 was 516, checked in by bouyer, 11 years ago

A single-cluster, single-cpu platform suitable to run regression tests.

File size: 18.3 KB
Line 
1
2#include <systemc>
3#include <sys/time.h>
4#include <iostream>
5#include <cstdlib>
6#include <cstdarg>
7#ifdef _OPENMP
8#include <omp.h>
9#endif
10
11#include "mapping_table.h"
12#include "mips32.h"
13#include "vci_simple_ram.h"
14#include "vci_multi_tty.h"
15#include "vci_mem_cache.h"
16#include "vci_cc_vcache_wrapper.h"
17#include "vci_logger.h"
18#include "vci_xicu.h"
19#include "vci_multi_dma.h"
20#include "vci_simhelper.h"
21#include "dspin_local_crossbar.h"
22#include "vci_dspin_initiator_wrapper.h"
23#include "vci_dspin_target_wrapper.h"
24
25        // Define VCI parameters
26#define    cell_width            4
27#define    cell_width_ext        8
28#define    address_width         32
29#define    plen_width            8
30#define    error_width           1
31#define    clen_width            1
32#define    rflag_width           1
33#define    srcid_width           14
34#define    pktid_width           4
35#define    trdid_width           4
36#define    wrplen_width          1
37
38#define    dspin_cmd_width       39
39#define    dspin_rsp_width       32
40//   segments definition in direct space
41
42#define    XICU_BASE    0xd8200000
43#define    XICU_SIZE    0x00001000
44
45#define    MDMA_BASE    0xe8000000
46#define    MDMA_SIZE    0x00000014
47
48#define    MTTY_BASE    0xd0200000
49#define    MTTY_SIZE    0x00000010
50
51#define    EXIT_BASE    0xe0000000
52#define    EXIT_SIZE    0x00000010
53
54#define    BOOT_BASE    0xbfc00000
55#define    BOOT_SIZE    0x00040000
56
57#define    MEMC_BASE    0x00000000
58#define    MEMC_SIZE    0x02000000
59
60int _main(int argc, char *argv[])
61{
62        using namespace sc_core;
63        // Avoid repeating these everywhere
64        using soclib::common::IntTab;
65        using soclib::common::Segment;
66        using namespace soclib::caba;
67#ifdef _OPENMP
68        omp_set_dynamic(false);
69        omp_set_num_threads(1);
70        std::cerr << "Built with openmp version " << _OPENMP << std::endl;
71#endif
72        char    soft_name[256]  = "test.elf";   // pathname to binary code
73        size_t  ncycles = 1000000000;   // max number of simulation cycles
74
75        bool    trace_ok = false;
76        size_t  from_cycle = 0;         // debug start cycle
77        size_t  max_frozen = 100000;    // max number of frozen cycles
78
79    /////////////// command line arguments ////////////////
80    if (argc > 1)
81    {
82        for( int n=1 ; n<argc ; n=n+2 )
83        {
84            if( (strcmp(argv[n],"-NCYCLES") == 0) && (n+1<argc) )
85            {
86                ncycles = atoi(argv[n+1]);
87            }
88            else if( (strcmp(argv[n],"-SOFT") == 0) && (n+1<argc) )
89            {
90                strcpy(soft_name, argv[n+1]);
91            }
92            else if( (strcmp(argv[n],"-TRACE") == 0) && (n+1<argc) )
93            {
94                trace_ok = true;
95                from_cycle = atoi(argv[n+1]);
96            }
97            else if( (strcmp(argv[n],"-MAXFROZEN") == 0) && (n+1<argc) )
98            {
99                max_frozen = atoi(argv[n+1]);
100            }
101            else
102            {
103                std::cout << "   Arguments on the command line are (key,value) couples." << std::endl;
104                std::cout << "   The order is not important." << std::endl;
105                std::cout << "   Accepted arguments are :" << std::endl << std::endl;
106                std::cout << "     -SOFT pathname_for_embedded_soft" << std::endl;
107                std::cout << "     -NCYCLES number_of_simulated_cycles" << std::endl;
108                std::cout << "     -TRACE debug_start_cycle" << std::endl;
109                exit(0);
110            }
111        }
112    }
113
114        typedef soclib::caba::VciParams<cell_width,
115                                        plen_width,
116                                        address_width,
117                                        error_width,
118                                        clen_width,
119                                        rflag_width,
120                                        srcid_width,
121                                        pktid_width,
122                                        trdid_width,
123                                        wrplen_width> vci_param;
124        typedef soclib::caba::VciParams<cell_width_ext,
125                                        plen_width,
126                                        address_width,
127                                        error_width,
128                                        clen_width,
129                                        rflag_width,
130                                        srcid_width,
131                                        pktid_width,
132                                        trdid_width,
133                                        wrplen_width> vci_param_ext;
134        typedef soclib::common::Mips32ElIss proc_iss;
135
136        // Direct DSPIN signals to local crossbars
137        DspinSignals<dspin_cmd_width>     signal_dspin_cmd_proc0_i;
138        DspinSignals<dspin_rsp_width>     signal_dspin_rsp_proc0_i;
139        DspinSignals<dspin_cmd_width>     signal_dspin_cmd_dma_i;
140        DspinSignals<dspin_rsp_width>     signal_dspin_rsp_dma_i;
141
142        DspinSignals<dspin_cmd_width>     signal_dspin_cmd_memc_t;
143        DspinSignals<dspin_rsp_width>     signal_dspin_rsp_memc_t;
144        DspinSignals<dspin_cmd_width>     signal_dspin_cmd_xicu_t;
145        DspinSignals<dspin_rsp_width>     signal_dspin_rsp_xicu_t;
146        DspinSignals<dspin_cmd_width>     signal_dspin_cmd_dma_t;
147        DspinSignals<dspin_rsp_width>     signal_dspin_rsp_dma_t;
148        DspinSignals<dspin_cmd_width>     signal_dspin_cmd_tty_t;
149        DspinSignals<dspin_rsp_width>     signal_dspin_rsp_tty_t;
150        DspinSignals<dspin_cmd_width>     signal_dspin_cmd_rom_t;
151        DspinSignals<dspin_rsp_width>     signal_dspin_rsp_rom_t;
152        DspinSignals<dspin_cmd_width>     signal_dspin_cmd_simh_t;
153        DspinSignals<dspin_rsp_width>     signal_dspin_rsp_simh_t;
154
155        // Coherence DSPIN signals to local crossbar
156        DspinSignals<dspin_cmd_width>   signal_dspin_cmd_l2g_c;
157        DspinSignals<dspin_cmd_width>   signal_dspin_cmd_g2l_c;
158        DspinSignals<dspin_rsp_width>   signal_dspin_rsp_l2g_c;
159        DspinSignals<dspin_rsp_width>   signal_dspin_rsp_g2l_c;
160        DspinSignals<dspin_cmd_width>   signal_dspin_m2p_l2g_c;
161        DspinSignals<dspin_cmd_width>   signal_dspin_m2p_g2l_c;
162        DspinSignals<dspin_rsp_width>   signal_dspin_p2m_l2g_c;
163        DspinSignals<dspin_rsp_width>   signal_dspin_p2m_g2l_c;
164        DspinSignals<dspin_cmd_width>   signal_dspin_clack_l2g_c;
165        DspinSignals<dspin_cmd_width>   signal_dspin_clack_g2l_c;
166
167        DspinSignals<dspin_cmd_width>   signal_dspin_m2p_memc;
168        DspinSignals<dspin_cmd_width>   signal_dspin_clack_memc;
169        DspinSignals<dspin_rsp_width>   signal_dspin_p2m_memc;
170        DspinSignals<dspin_cmd_width>   signal_dspin_m2p_proc[1];
171        DspinSignals<dspin_cmd_width>   signal_dspin_clack_proc[1];
172        DspinSignals<dspin_rsp_width>   signal_dspin_p2m_proc[1];
173
174        // Mapping table
175
176        soclib::common::MappingTable maptabp(32, IntTab(0, 16), IntTab(0, srcid_width), 0xF0000000);
177       
178        maptabp.add(Segment("mc_m" , MEMC_BASE , MEMC_SIZE , IntTab(0, 0), true));
179        maptabp.add(Segment("boot", BOOT_BASE, BOOT_SIZE, IntTab(0, 1), true));
180        maptabp.add(Segment("tty"  , MTTY_BASE  , MTTY_SIZE  , IntTab(0, 2), false));
181        maptabp.add(Segment("xicu" , XICU_BASE , XICU_SIZE , IntTab(0, 3), false));
182        maptabp.add(Segment("dma", MDMA_BASE, MDMA_SIZE, IntTab(0, 4), false));
183        maptabp.add(Segment("simh", EXIT_BASE, EXIT_SIZE, IntTab(0, 5), false));
184
185        std::cout << maptabp << std::endl;
186
187        soclib::common::MappingTable maptabx(32, IntTab(8), IntTab(8), 0x30000000);
188        maptabx.add(Segment("xram" , MEMC_BASE , MEMC_SIZE , IntTab(0), false));
189       
190       
191        std::cout << maptabx << std::endl;
192
193        // Signals
194
195        sc_clock        signal_clk ("clk");
196        sc_signal<bool> signal_resetn("resetn");
197
198        sc_signal<bool> signal_proc0_it0("signal_proc0_it0");
199        sc_signal<bool> signal_proc0_it1("signal_proc0_it1");
200        sc_signal<bool> signal_proc0_it2("signal_proc0_it2");
201        sc_signal<bool> signal_proc0_it3("signal_proc0_it3");
202        sc_signal<bool> signal_proc0_it4("signal_proc0_it4");
203        sc_signal<bool> signal_proc0_it5("signal_proc0_it5");
204
205        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc0
206            ("vci_ini_rw_proc0");
207        soclib::caba::VciSignals<vci_param> signal_vci_tty
208            ("signal_vci_tty");
209        soclib::caba::VciSignals<vci_param> signal_vci_simh
210            ("signal_vci_simh");
211
212        soclib::caba::VciSignals<vci_param> signal_vci_xicu
213            ("signal_vci_xicu");
214        soclib::caba::VciSignals<vci_param> signal_vci_dmai
215            ("signal_vci_dmai");
216        soclib::caba::VciSignals<vci_param> signal_vci_dmat
217            ("signal_vci_dmat");
218        soclib::caba::VciSignals<vci_param> signal_vci_tgt_rom
219            ("vci_tgt_rom");
220
221        soclib::caba::VciSignals<vci_param_ext> signal_vci_ixr_memc
222            ("vci_ixr_memc");
223        soclib::caba::VciSignals<vci_param> signal_vci_tgt_memc
224            ("vci_tgt_memc");
225        sc_signal<bool> signal_icu_irq0("signal_icu_irq0");
226        sc_signal<bool> signal_icu_irq1("signal_icu_irq1");
227
228        soclib::common::Loader loader("test.elf");
229
230        //                                  init_rw   init_c   tgt
231        soclib::caba::VciCcVCacheWrapper<vci_param, dspin_cmd_width, dspin_rsp_width, proc_iss > *proc0;
232        soclib::caba::VciSimpleRam<vci_param> *rom;
233        soclib::caba::VciSimpleRam<vci_param_ext> *xram;
234        soclib::caba::VciMemCache<vci_param, vci_param_ext, dspin_rsp_width, dspin_cmd_width> *memc;
235        soclib::caba::VciXicu<vci_param> *vcixicu;
236        soclib::caba::VciMultiTty<vci_param> *vcitty;
237        soclib::caba::VciSimhelper<vci_param> *vcisimh;
238        soclib::caba::VciMultiDma<vci_param> *vcidma;
239        DspinLocalCrossbar<dspin_cmd_width>* xbar_cmd_d;
240        DspinLocalCrossbar<dspin_rsp_width>* xbar_rsp_d;
241        DspinLocalCrossbar<dspin_cmd_width>* xbar_m2p_c;
242        DspinLocalCrossbar<dspin_rsp_width>* xbar_p2m_c;
243        DspinLocalCrossbar<dspin_cmd_width>* xbar_clack_c;
244
245        proc0 = new soclib::caba::VciCcVCacheWrapper<vci_param, dspin_cmd_width, dspin_rsp_width, proc_iss >
246          ("proc0", 0, maptabp, IntTab(0, 0), 0,
247            8,8,8,8,4,64,16,4,64,16,4, 4, 0, 0, max_frozen, from_cycle, trace_ok);
248        VciDspinInitiatorWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
249            wi_proc0("wi_proc0", srcid_width);
250
251        vcisimh = new soclib::caba::VciSimhelper<vci_param>
252          ("vcisimh",   IntTab(0, 5), maptabp);
253        VciDspinTargetWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
254            wt_simh("wt_simh", srcid_width);
255
256        vcidma = new soclib::caba::VciMultiDma<vci_param>
257          ("vcidma", maptabp, IntTab(0, 1), IntTab(0, 4), 64, 1);//(1<<(vci_param::K-1)));
258        VciDspinInitiatorWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
259            wi_dma("wi_dma", srcid_width);
260        VciDspinTargetWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
261            wt_dma("wt_dma", srcid_width);
262
263        vcitty = new soclib::caba::VciMultiTty<vci_param>
264          ("vcitty",    IntTab(0, 2), maptabp, "vcitty0", NULL);
265        VciDspinTargetWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
266            wt_tty("wt_tty", srcid_width);
267
268        rom = new soclib::caba::VciSimpleRam<vci_param>
269          ("rom", IntTab(0, 1), maptabp, loader);
270        VciDspinTargetWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
271            wt_rom("wt_rom", srcid_width);
272
273        vcixicu = new soclib::caba::VciXicu<vci_param>
274          ("vcixicu", maptabp, IntTab(0, 3), 4 /* npti */, 2 /* nhwi */, 4 /* nwti */, 6 /* nirq */);
275        VciDspinTargetWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
276            wt_xicu("wt_xicu", srcid_width);
277
278        xram = new soclib::caba::VciSimpleRam<vci_param_ext>
279          ("xram", IntTab(0), maptabx, loader);
280        memc = new soclib::caba::VciMemCache<vci_param, vci_param_ext, dspin_rsp_width, dspin_cmd_width>
281          ("memc",maptabp,maptabx,IntTab(0),IntTab(0, 0),/* (cluster_id << l_width) + nb_procs */ 1, 0, 0,16,256,16, 3, 4096, 8, 8, 8, from_cycle, trace_ok);
282        VciDspinTargetWrapper<vci_param, dspin_cmd_width, dspin_rsp_width>
283            wt_memc("wt_memc", srcid_width);
284
285        xbar_cmd_d = new DspinLocalCrossbar<dspin_cmd_width>(
286                "xbar_cmd_d",
287                maptabp,                        // mapping table
288                0, 0,                           // cluster coordinates
289                0, 0, srcid_width,
290                2,                              // number of local of sources
291                6,                              // number of local dests
292                2, 2,                           // fifo depths
293                true,                           // CMD
294                true,                            // use local routing table
295                false );                        // no broadcast
296
297        xbar_rsp_d = new DspinLocalCrossbar<dspin_rsp_width>(
298                "xbar_rsp_d",
299                maptabp,                        // mapping table
300                0, 0,                           // cluster coordinates
301                0, 0, srcid_width,
302                6,                              // number of local sources
303                2,                              // number of local dests
304                2, 2,                           // fifo depths
305                false,                          // RSP
306                false,                          // don't use local routing table
307                false );                        // no broadcast
308
309        xbar_m2p_c = new DspinLocalCrossbar<dspin_cmd_width>(
310                "xbar_m2p_c", maptabp, 0, 0, 0, 0, srcid_width,
311                1, 1, 2, 2, true, false, true);
312        xbar_p2m_c =  new DspinLocalCrossbar<dspin_rsp_width>(
313                "xbar_p2m_c", maptabp, 0, 0, 0, 0, 0,
314                1, 1, 2, 2, false, false, false);
315        xbar_clack_c = new DspinLocalCrossbar<dspin_cmd_width>(
316                "xbar_clack_c", maptabp, 0, 0, 0, 0, srcid_width,
317                1, 1, 1, 1, true, false, false);
318#ifdef VCI_LOGGER_ON_L1
319        soclib::caba::VciLogger<vci_param> vci_logger0("vci_logger0",maptabp);
320#endif
321#ifdef VCI_LOGGER_ON_ROM
322        soclib::caba::VciLogger<vci_param> vci_logger1("vci_logger1",maptabp);
323#endif
324#ifdef VCI_LOGGER_ON_L1_TGT
325        soclib::caba::VciLogger<vci_param> vci_logger2("vci_logger2",maptabp);
326#endif
327        proc0->p_clk(signal_clk);
328        proc0->p_resetn(signal_resetn);
329        proc0->p_irq[0](signal_proc0_it0);
330        proc0->p_irq[1](signal_proc0_it1);
331        proc0->p_irq[2](signal_proc0_it2);
332        proc0->p_irq[3](signal_proc0_it3);
333        proc0->p_irq[4](signal_proc0_it4);
334        proc0->p_irq[5](signal_proc0_it5);
335        proc0->p_vci(signal_vci_ini_rw_proc0);
336        proc0->p_dspin_m2p(signal_dspin_m2p_proc[0]);
337        proc0->p_dspin_p2m(signal_dspin_p2m_proc[0]);
338        proc0->p_dspin_clack(signal_dspin_clack_proc[0]);
339        wi_proc0.p_clk(signal_clk);
340        wi_proc0.p_resetn(signal_resetn);
341        wi_proc0.p_vci(signal_vci_ini_rw_proc0);
342        wi_proc0.p_dspin_cmd(signal_dspin_cmd_proc0_i);
343        wi_proc0.p_dspin_rsp(signal_dspin_rsp_proc0_i);
344
345        rom->p_clk(signal_clk);
346        rom->p_resetn(signal_resetn);
347        rom->p_vci(signal_vci_tgt_rom);
348        wt_rom.p_clk(signal_clk);
349        wt_rom.p_resetn(signal_resetn);
350        wt_rom.p_vci(signal_vci_tgt_rom);
351        wt_rom.p_dspin_cmd(signal_dspin_cmd_rom_t);
352        wt_rom.p_dspin_rsp(signal_dspin_rsp_rom_t);
353
354        vcixicu->p_resetn(signal_resetn);
355        vcixicu->p_clk(signal_clk);
356        vcixicu->p_vci(signal_vci_xicu);
357        vcixicu->p_hwi[0](signal_icu_irq0);
358        vcixicu->p_hwi[1](signal_icu_irq1);
359        vcixicu->p_irq[0](signal_proc0_it0);
360        vcixicu->p_irq[1](signal_proc0_it1);
361        vcixicu->p_irq[2](signal_proc0_it2);
362        vcixicu->p_irq[3](signal_proc0_it3);
363        vcixicu->p_irq[4](signal_proc0_it4);
364        vcixicu->p_irq[5](signal_proc0_it5);
365        wt_xicu.p_clk(signal_clk);
366        wt_xicu.p_resetn(signal_resetn);
367        wt_xicu.p_vci(signal_vci_xicu);
368        wt_xicu.p_dspin_cmd(signal_dspin_cmd_xicu_t);
369        wt_xicu.p_dspin_rsp(signal_dspin_rsp_xicu_t);
370
371        vcidma->p_clk(signal_clk);
372        vcidma->p_resetn(signal_resetn);
373        vcidma->p_irq[0](signal_icu_irq1);
374        vcidma->p_vci_target(signal_vci_dmat);
375        vcidma->p_vci_initiator(signal_vci_dmai);
376        wt_dma.p_clk(signal_clk);
377        wt_dma.p_resetn(signal_resetn);
378        wt_dma.p_vci(signal_vci_dmat);
379        wt_dma.p_dspin_cmd(signal_dspin_cmd_dma_t);
380        wt_dma.p_dspin_rsp(signal_dspin_rsp_dma_t);
381        wi_dma.p_clk(signal_clk);
382        wi_dma.p_resetn(signal_resetn);
383        wi_dma.p_vci(signal_vci_dmai);
384        wi_dma.p_dspin_cmd(signal_dspin_cmd_dma_i);
385        wi_dma.p_dspin_rsp(signal_dspin_rsp_dma_i);
386
387
388#ifdef VCI_LOGGER_ON_L1
389  vci_logger0.p_clk(signal_clk);
390  vci_logger0.p_resetn(signal_resetn);
391  vci_logger0.p_vci(signal_vci_ini_rw_proc0);
392#endif
393
394#ifdef VCI_LOGGER_ON_ROM
395  vci_logger1.p_clk(signal_clk);
396  vci_logger1.p_resetn(signal_resetn);
397  vci_logger1.p_vci(signal_vci_tgt_rom);
398#endif
399
400#ifdef VCI_LOGGER_ON_L1_TGT
401  vci_logger2.p_clk(signal_clk);
402  vci_logger2.p_resetn(signal_resetn);
403#endif
404
405        vcitty->p_clk(signal_clk);
406        vcitty->p_resetn(signal_resetn);
407        vcitty->p_vci(signal_vci_tty);
408        vcitty->p_irq[0](signal_icu_irq0);
409        wt_tty.p_clk(signal_clk);
410        wt_tty.p_resetn(signal_resetn);
411        wt_tty.p_vci(signal_vci_tty);
412        wt_tty.p_dspin_cmd(signal_dspin_cmd_tty_t);
413        wt_tty.p_dspin_rsp(signal_dspin_rsp_tty_t);
414
415        vcisimh->p_clk(signal_clk);
416        vcisimh->p_resetn(signal_resetn);
417        vcisimh->p_vci(signal_vci_simh);
418        wt_simh.p_clk(signal_clk);
419        wt_simh.p_resetn(signal_resetn);
420        wt_simh.p_vci(signal_vci_simh);
421        wt_simh.p_dspin_cmd(signal_dspin_cmd_simh_t);
422        wt_simh.p_dspin_rsp(signal_dspin_rsp_simh_t);
423
424        memc->p_clk(signal_clk);
425        memc->p_resetn(signal_resetn);
426        memc->p_vci_tgt(signal_vci_tgt_memc);
427        memc->p_dspin_p2m(signal_dspin_p2m_memc);
428        memc->p_dspin_m2p(signal_dspin_m2p_memc);
429        memc->p_dspin_clack(signal_dspin_clack_memc);
430        memc->p_vci_ixr(signal_vci_ixr_memc);
431        wt_memc.p_clk(signal_clk);
432        wt_memc.p_resetn(signal_resetn);
433        wt_memc.p_vci(signal_vci_tgt_memc);
434        wt_memc.p_dspin_cmd(signal_dspin_cmd_memc_t);
435        wt_memc.p_dspin_rsp(signal_dspin_rsp_memc_t);
436
437        xram->p_clk(signal_clk);
438        xram->p_resetn(signal_resetn);
439        xram->p_vci(signal_vci_ixr_memc);
440       
441
442        xbar_cmd_d->p_clk(signal_clk);
443        xbar_cmd_d->p_resetn(signal_resetn);
444        xbar_rsp_d->p_clk(signal_clk);
445        xbar_rsp_d->p_resetn(signal_resetn);
446        xbar_m2p_c->p_clk(signal_clk);
447        xbar_m2p_c->p_resetn(signal_resetn);
448        xbar_clack_c->p_clk(signal_clk);
449        xbar_clack_c->p_resetn(signal_resetn);
450        xbar_p2m_c->p_clk(signal_clk);
451        xbar_p2m_c->p_resetn(signal_resetn);
452
453        xbar_cmd_d->p_global_out(signal_dspin_cmd_l2g_c);
454        xbar_cmd_d->p_global_in(signal_dspin_cmd_g2l_c);
455        xbar_rsp_d->p_global_out(signal_dspin_rsp_l2g_c);
456        xbar_rsp_d->p_global_in(signal_dspin_rsp_g2l_c);
457        xbar_m2p_c->p_global_out(signal_dspin_m2p_l2g_c);
458        xbar_m2p_c->p_global_in(signal_dspin_m2p_g2l_c);
459        xbar_clack_c->p_global_out(signal_dspin_clack_l2g_c);
460        xbar_clack_c->p_global_in(signal_dspin_clack_g2l_c);
461        xbar_p2m_c->p_global_out(signal_dspin_p2m_l2g_c);
462        xbar_p2m_c->p_global_in(signal_dspin_p2m_g2l_c);
463
464        xbar_cmd_d->p_local_in[0](signal_dspin_cmd_proc0_i);
465        xbar_cmd_d->p_local_in[1](signal_dspin_cmd_dma_i);
466        xbar_cmd_d->p_local_out[0](signal_dspin_cmd_memc_t);
467        xbar_cmd_d->p_local_out[1](signal_dspin_cmd_rom_t);
468        xbar_cmd_d->p_local_out[2](signal_dspin_cmd_tty_t);
469        xbar_cmd_d->p_local_out[3](signal_dspin_cmd_xicu_t);
470        xbar_cmd_d->p_local_out[4](signal_dspin_cmd_dma_t);
471        xbar_cmd_d->p_local_out[5](signal_dspin_cmd_simh_t);
472
473        xbar_rsp_d->p_local_out[0](signal_dspin_rsp_proc0_i);
474        xbar_rsp_d->p_local_out[1](signal_dspin_rsp_dma_i);
475        xbar_rsp_d->p_local_in[0](signal_dspin_rsp_memc_t);
476        xbar_rsp_d->p_local_in[1](signal_dspin_rsp_rom_t);
477        xbar_rsp_d->p_local_in[2](signal_dspin_rsp_tty_t);
478        xbar_rsp_d->p_local_in[3](signal_dspin_rsp_xicu_t);
479        xbar_rsp_d->p_local_in[4](signal_dspin_rsp_dma_t);
480        xbar_rsp_d->p_local_in[5](signal_dspin_rsp_simh_t);
481
482        xbar_m2p_c->p_local_in[0](signal_dspin_m2p_memc);
483        xbar_m2p_c->p_local_out[0](signal_dspin_m2p_proc[0]);
484
485        xbar_clack_c->p_local_in[0](signal_dspin_clack_memc);
486        xbar_clack_c->p_local_out[0](signal_dspin_clack_proc[0]);
487
488        xbar_p2m_c->p_local_out[0](signal_dspin_p2m_memc);
489        xbar_p2m_c->p_local_in[0](signal_dspin_p2m_proc[0]);
490
491        sc_start(sc_core::sc_time(0, SC_NS));
492        signal_resetn = false;
493
494        sc_start(sc_core::sc_time(1, SC_NS));
495        signal_resetn = true;
496
497
498        for ( size_t n=1 ; n<ncycles ; n++ )
499        {
500                if ( trace_ok and (n > from_cycle) )
501                {
502                    std::cout << "****************** cycle " << std::dec << n
503                              << " ************************************************" << std::endl;
504                    proc0->print_trace();
505                    memc->print_trace();
506                    signal_vci_ini_rw_proc0.print_trace("signal_vci_ini_rw_proc0");
507                    signal_vci_tgt_memc.print_trace("signal_vci_tgt_memc");
508                    signal_vci_ixr_memc.print_trace("signal_vci_ixr_memc");
509                }
510                sc_start(sc_core::sc_time(1, SC_NS));
511        }
512        return EXIT_FAILURE;
513
514}
515
516int sc_main (int argc, char *argv[])
517{
518        try {
519                return _main(argc, argv);
520        } catch (std::exception &e) {
521                std::cout << e.what() << std::endl;
522        } catch (...) {
523                std::cout << "Unknown exception occured" << std::endl;
524                throw;
525        }
526        return 1;
527}
528
Note: See TracBrowser for help on using the repository browser.