source: trunk/platforms/caba-vgmn-ccxcachev1_memcachev3-mipsel/top.cpp @ 3

Last change on this file since 3 was 3, checked in by nipo, 14 years ago

Import platforms

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to "Author Date Id Rev URL Revision"
  • Property svn:mime-type set to text/plain
File size: 12.6 KB
Line 
1
2#include <systemc>
3#include <sys/time.h>
4#include <iostream>
5#include <cstdlib>
6#include <cstdarg>
7
8#include "mapping_table.h"
9#include "mips32.h"
10#include "iss2_simhelper.h"
11#include "vci_simple_ram.h"
12#include "vci_multi_tty.h"
13#include "vci_vgmn.h"
14#include "vci_mem_cache_v3.h"
15#include "vci_cc_xcache_wrapper_v1.h"
16#include "vci_logger.h"
17
18#ifdef USE_GDB_SERVER
19#include "iss/gdbserver.h"
20#endif
21
22//#define  VCI_LOGGER
23#include "segmentation.h"
24
25int _main(int argc, char *argv[])
26{
27        using namespace sc_core;
28        // Avoid repeating these everywhere
29        using soclib::common::IntTab;
30        using soclib::common::Segment;
31
32        // Define VCI parameters
33        typedef soclib::caba::VciParams<4,8,32,1,1,1,8,4,4,1> vci_param;
34        typedef soclib::common::Iss2Simhelper<soclib::common::Mips32ElIss> proc_iss;
35        // Mapping table
36
37        soclib::common::MappingTable maptabp(32, IntTab(8), IntTab(8), 0x00300000);
38
39        maptabp.add(Segment("reset", RESET_BASE, RESET_SIZE, IntTab(2), true));
40        maptabp.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(2), true));
41        maptabp.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(2), true));
42        maptabp.add(Segment("tty"  , TTY_BASE  , TTY_SIZE  , IntTab(1), false));
43        maptabp.add(Segment("mc_r" , MC_R_BASE , MC_R_SIZE , IntTab(2), false, true, IntTab(0)));
44        maptabp.add(Segment("mc_m" , MC_M_BASE , MC_M_SIZE , IntTab(2), true ));
45        maptabp.add(Segment("ptba" , PTD_ADDR , TAB_SIZE   , IntTab(2), true));
46 
47        std::cout << maptabp << std::endl;
48
49        soclib::common::MappingTable maptabc(32, IntTab(8), IntTab(8), 0x00300000);
50        maptabc.add(Segment("c_proc0" , C_PROC0_BASE , C_PROC0_SIZE , IntTab(0), false, true, IntTab(0)));
51        maptabc.add(Segment("c_proc1" , C_PROC1_BASE , C_PROC1_SIZE , IntTab(1), false, true, IntTab(1)));
52        maptabc.add(Segment("c_proc2" , C_PROC2_BASE , C_PROC2_SIZE , IntTab(2), false, true, IntTab(2)));
53        maptabc.add(Segment("c_proc3" , C_PROC3_BASE , C_PROC3_SIZE , IntTab(3), false, true, IntTab(3)));
54        maptabc.add(Segment("mc_r"    , MC_R_BASE , MC_R_SIZE , IntTab(4), false, false));
55        maptabc.add(Segment("mc_m"  , MC_M_BASE , MC_M_SIZE  , IntTab(4), false, false));
56        maptabc.add(Segment("reset", RESET_BASE, RESET_SIZE, IntTab(4), false, false));
57        maptabc.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(4), false, false));
58        maptabc.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(4), false, false));
59        maptabc.add(Segment("ptba" , PTD_ADDR  , TAB_SIZE  , IntTab(4), false, false));
60
61        std::cout << maptabc << std::endl;
62       
63        soclib::common::MappingTable maptabx(32, IntTab(8), IntTab(8), 0x00300000);
64        maptabx.add(Segment("xram" , MC_M_BASE , MC_M_SIZE , IntTab(0), false));
65        maptabx.add(Segment("reset", RESET_BASE, RESET_SIZE, IntTab(0), false));
66        maptabx.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(0), false));
67        maptabx.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(0), false));
68        maptabx.add(Segment("ptba" , PTD_ADDR  , TAB_SIZE  , IntTab(0), false));
69       
70        std::cout << maptabx << std::endl;
71
72        // Signals
73        sc_clock        signal_clk("clk");
74        sc_signal<bool> signal_resetn("resetn");
75   
76        sc_signal<bool> signal_proc0_it0("proc0_it0");
77        sc_signal<bool> signal_proc0_it1("proc0_it1");
78        sc_signal<bool> signal_proc0_it2("proc0_it2");
79        sc_signal<bool> signal_proc0_it3("proc0_it3");
80        sc_signal<bool> signal_proc0_it4("proc0_it4");
81        sc_signal<bool> signal_proc0_it5("proc0_it5");
82
83        sc_signal<bool> signal_proc1_it0("proc1_it0");
84        sc_signal<bool> signal_proc1_it1("proc1_it1");
85        sc_signal<bool> signal_proc1_it2("proc1_it2");
86        sc_signal<bool> signal_proc1_it3("proc1_it3");
87        sc_signal<bool> signal_proc1_it4("proc1_it4");
88        sc_signal<bool> signal_proc1_it5("proc1_it5");
89
90        sc_signal<bool> signal_proc2_it0("proc2_it0");
91        sc_signal<bool> signal_proc2_it1("proc2_it1");
92        sc_signal<bool> signal_proc2_it2("proc2_it2");
93        sc_signal<bool> signal_proc2_it3("proc2_it3");
94        sc_signal<bool> signal_proc2_it4("proc2_it4");
95        sc_signal<bool> signal_proc2_it5("proc2_it5");
96
97        sc_signal<bool> signal_proc3_it0("proc3_it0");
98        sc_signal<bool> signal_proc3_it1("proc3_it1");
99        sc_signal<bool> signal_proc3_it2("proc3_it2");
100        sc_signal<bool> signal_proc3_it3("proc3_it3");
101        sc_signal<bool> signal_proc3_it4("proc3_it4");
102        sc_signal<bool> signal_proc3_it5("proc3_it5");
103
104        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc0("vci_ini_rw_proc0");
105        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc0("vci_ini_c_proc0");
106
107        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc0("vci_tgt_proc0");
108
109        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc1("vci_ini_rw_proc1");
110        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc1("vci_ini_c_proc1");
111
112        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc1("vci_tgt_proc1");
113
114        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc2("vci_ini_rw_proc2");
115        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc2("vci_ini_c_proc2");
116
117        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc2("vci_tgt_proc2");
118
119        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc3("vci_ini_rw_proc3");
120        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc3("vci_ini_c_proc3");
121
122        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc3("vci_tgt_proc3");
123
124        soclib::caba::VciSignals<vci_param> signal_vci_tgt_tty("vci_tgt_tty");
125
126        soclib::caba::VciSignals<vci_param> signal_vci_tgt_rom("vci_tgt_rom");
127
128        soclib::caba::VciSignals<vci_param> signal_vci_tgt_xram("vci_tgt_xram");
129
130        soclib::caba::VciSignals<vci_param> signal_vci_ixr_memc("vci_ixr_memc");
131        soclib::caba::VciSignals<vci_param> signal_vci_ini_memc("vci_ini_memc");
132        soclib::caba::VciSignals<vci_param> signal_vci_tgt_memc("vci_tgt_memc");
133        soclib::caba::VciSignals<vci_param> signal_vci_tgt_cleanup_memc("vci_tgt_cleanup_memc");
134
135        sc_signal<bool> signal_tty_irq0("signal_tty_irq0");
136        sc_signal<bool> signal_tty_irq1("signal_tty_irq1");
137        sc_signal<bool> signal_tty_irq2("signal_tty_irq2");
138        sc_signal<bool> signal_tty_irq3("signal_tty_irq3");
139
140        soclib::common::Loader loader("soft/bin.soft");
141
142        //                                  init_rw   init_c   tgt
143/*      soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
144        proc0("proc0", 0, maptabp, maptabc, IntTab(0),IntTab(0),IntTab(0),4,64,16,4,64,16);
145
146        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
147        proc1("proc1", 1, maptabp, maptabc, IntTab(1),IntTab(1),IntTab(1),4,64,16,4,64,16);
148
149        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
150        proc2("proc2", 2, maptabp, maptabc, IntTab(2),IntTab(2),IntTab(2),4,64,16,4,64,16);
151
152        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
153        proc3("proc3", 3, maptabp, maptabc, IntTab(3),IntTab(3),IntTab(3),4,64,16,4,64,16);
154*/
155
156        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
157        proc0("proc0", 0, maptabp, maptabc, IntTab(0),IntTab(0),IntTab(0),1,8,16,1,8,16);
158
159        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
160        proc1("proc1", 1, maptabp, maptabc, IntTab(1),IntTab(1),IntTab(1),1,8,16,1,8,16);
161
162        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
163        proc2("proc2", 2, maptabp, maptabc, IntTab(2),IntTab(2),IntTab(2),1,8,16,1,8,16);
164
165        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
166        proc3("proc3", 3, maptabp, maptabc, IntTab(3),IntTab(3),IntTab(3),1,8,16,1,8,16);
167
168
169        soclib::caba::VciSimpleRam<vci_param>
170        rom("rom", IntTab(0), maptabp, loader);
171
172        soclib::caba::VciSimpleRam<vci_param>
173        xram("xram", IntTab(0), maptabx, loader);
174
175        //                                  x_init    c_init    p_tgt     c_tgt
176        soclib::caba::VciMemCacheV3<vci_param>
177        //memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(2), IntTab(4),16,256,16);
178        //memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(2), IntTab(4),4,16,16);
179        memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(2), IntTab(4),4,4,16);
180       
181        soclib::caba::VciMultiTty<vci_param>
182        tty("tty",IntTab(1),maptabp,"tty0","tty1","tty2","tty3",NULL);
183
184#ifdef VCI_LOGGER
185  soclib::caba::VciLogger<vci_param> vci_logger0("vci_logger0",maptabp);
186#endif
187
188        soclib::caba::VciVgmn<vci_param>
189        vgmnp("vgmnp",maptabp, 4, 3, 2, 8);
190
191        soclib::caba::VciVgmn<vci_param>
192        vgmnc("vgmnc",maptabc, 5, 5, 2, 8);
193
194        soclib::caba::VciVgmn<vci_param>
195        vgmnx("vgmnx",maptabx, 1, 1, 2, 8);
196
197        // Net-List
198 
199        proc0.p_clk(signal_clk); 
200        proc0.p_resetn(signal_resetn); 
201        proc0.p_irq[0](signal_proc0_it0);
202        proc0.p_irq[1](signal_proc0_it1);
203        proc0.p_irq[2](signal_proc0_it2);
204        proc0.p_irq[3](signal_proc0_it3);
205        proc0.p_irq[4](signal_proc0_it4);
206        proc0.p_irq[5](signal_proc0_it5);
207        proc0.p_vci_ini_rw(signal_vci_ini_rw_proc0);
208        proc0.p_vci_ini_c(signal_vci_ini_c_proc0);
209        proc0.p_vci_tgt(signal_vci_tgt_proc0);
210
211        proc1.p_clk(signal_clk); 
212        proc1.p_resetn(signal_resetn); 
213        proc1.p_irq[0](signal_proc1_it0);
214        proc1.p_irq[1](signal_proc1_it1);
215        proc1.p_irq[2](signal_proc1_it2);
216        proc1.p_irq[3](signal_proc1_it3);
217        proc1.p_irq[4](signal_proc1_it4);
218        proc1.p_irq[5](signal_proc1_it5);
219        proc1.p_vci_ini_rw(signal_vci_ini_rw_proc1);
220        proc1.p_vci_ini_c(signal_vci_ini_c_proc1);
221        proc1.p_vci_tgt(signal_vci_tgt_proc1);
222
223        proc2.p_clk(signal_clk); 
224        proc2.p_resetn(signal_resetn); 
225        proc2.p_irq[0](signal_proc2_it0);
226        proc2.p_irq[1](signal_proc2_it1);
227        proc2.p_irq[2](signal_proc2_it2);
228        proc2.p_irq[3](signal_proc2_it3);
229        proc2.p_irq[4](signal_proc2_it4);
230        proc2.p_irq[5](signal_proc2_it5);
231        proc2.p_vci_ini_rw(signal_vci_ini_rw_proc2);
232        proc2.p_vci_ini_c(signal_vci_ini_c_proc2);
233        proc2.p_vci_tgt(signal_vci_tgt_proc2);
234
235        proc3.p_clk(signal_clk); 
236        proc3.p_resetn(signal_resetn); 
237        proc3.p_irq[0](signal_proc3_it0);
238        proc3.p_irq[1](signal_proc3_it1);
239        proc3.p_irq[2](signal_proc3_it2);
240        proc3.p_irq[3](signal_proc3_it3);
241        proc3.p_irq[4](signal_proc3_it4);
242        proc3.p_irq[5](signal_proc3_it5);
243        proc3.p_vci_ini_rw(signal_vci_ini_rw_proc3);
244        proc3.p_vci_ini_c(signal_vci_ini_c_proc3);
245        proc3.p_vci_tgt(signal_vci_tgt_proc3);
246
247        rom.p_clk(signal_clk);
248        rom.p_resetn(signal_resetn);
249        rom.p_vci(signal_vci_tgt_rom);
250
251#ifdef VCI_LOGGER
252  vci_logger0.p_clk(signal_clk);
253  vci_logger0.p_resetn(signal_resetn);
254  vci_logger0.p_vci(signal_vci_ini_rw_proc2);
255#endif
256
257        tty.p_clk(signal_clk);
258        tty.p_resetn(signal_resetn);
259        tty.p_vci(signal_vci_tgt_tty);
260        tty.p_irq[0](signal_tty_irq0);
261        tty.p_irq[1](signal_tty_irq1);
262        tty.p_irq[2](signal_tty_irq2);
263        tty.p_irq[3](signal_tty_irq3);
264
265        memc.p_clk(signal_clk);
266        memc.p_resetn(signal_resetn);
267        memc.p_vci_tgt(signal_vci_tgt_memc);
268        memc.p_vci_tgt_cleanup(signal_vci_tgt_cleanup_memc);
269        memc.p_vci_ini(signal_vci_ini_memc);
270        memc.p_vci_ixr(signal_vci_ixr_memc);
271
272        xram.p_clk(signal_clk);
273  xram.p_resetn(signal_resetn);
274        xram.p_vci(signal_vci_tgt_xram);
275       
276        vgmnp.p_clk(signal_clk);
277        vgmnp.p_resetn(signal_resetn);
278
279        vgmnc.p_clk(signal_clk);
280        vgmnc.p_resetn(signal_resetn);
281
282        vgmnx.p_clk(signal_clk);
283        vgmnx.p_resetn(signal_resetn);
284
285        vgmnp.p_to_initiator[0](signal_vci_ini_rw_proc0);
286        vgmnp.p_to_initiator[1](signal_vci_ini_rw_proc1);
287        vgmnp.p_to_initiator[2](signal_vci_ini_rw_proc2);
288        vgmnp.p_to_initiator[3](signal_vci_ini_rw_proc3);
289
290        vgmnc.p_to_initiator[4](signal_vci_ini_memc);
291        vgmnc.p_to_initiator[0](signal_vci_ini_c_proc0);
292        vgmnc.p_to_initiator[1](signal_vci_ini_c_proc1);
293        vgmnc.p_to_initiator[2](signal_vci_ini_c_proc2);
294        vgmnc.p_to_initiator[3](signal_vci_ini_c_proc3);
295
296        vgmnx.p_to_initiator[0](signal_vci_ixr_memc);
297
298        vgmnp.p_to_target[0](signal_vci_tgt_rom);
299        vgmnp.p_to_target[1](signal_vci_tgt_tty);
300        vgmnp.p_to_target[2](signal_vci_tgt_memc);
301
302        vgmnc.p_to_target[0](signal_vci_tgt_proc0);
303        vgmnc.p_to_target[1](signal_vci_tgt_proc1);
304        vgmnc.p_to_target[2](signal_vci_tgt_proc2);
305        vgmnc.p_to_target[3](signal_vci_tgt_proc3);
306        vgmnc.p_to_target[4](signal_vci_tgt_cleanup_memc);
307
308        vgmnx.p_to_target[0](signal_vci_tgt_xram);
309
310        int ncycles;
311
312#ifndef SOCVIEW
313        if (argc == 2) {
314                ncycles = std::atoi(argv[1]);
315        } else {
316                std::cerr
317                        << std::endl
318                        << "The number of simulation cycles must "
319                           "be defined in the command line"
320                        << std::endl;
321                exit(1);
322        }
323
324        sc_start(sc_core::sc_time(0, SC_NS));
325        signal_resetn = false;
326
327        sc_start(sc_core::sc_time(1, SC_NS));
328        signal_resetn = true;
329
330/*
331  while(1){
332    char buf[2];
333          std::cin.getline(buf,1);
334                sc_start(sc_core::sc_time(1, SC_NS));
335  }
336*/
337
338        for (int i = 0; i < ncycles ; i+=10000) {
339                sc_start(sc_core::sc_time(10000, SC_NS));
340//              proc0.print_stats();
341//              memc.print_stats();
342        }
343
344        std::cout << "Hit ENTER to end simulation" << std::endl;
345        char buf[1];
346
347        std::cin.getline(buf,1);
348
349        return EXIT_SUCCESS;
350#else
351        ncycles = 1;
352        sc_start(sc_core::sc_time(0, SC_NS));
353        signal_resetn = false;
354        sc_start(sc_core::sc_time(1, SC_NS));
355        signal_resetn = true;
356
357        debug();
358        return EXIT_SUCCESS;
359#endif
360}
361
362int sc_main (int argc, char *argv[])
363{
364        try {
365                return _main(argc, argv);
366        } catch (std::exception &e) {
367                std::cout << e.what() << std::endl;
368        } catch (...) {
369                std::cout << "Unknown exception occured" << std::endl;
370                throw;
371        }
372        return 1;
373}
Note: See TracBrowser for help on using the repository browser.