source: trunk/platforms/caba-ring-ccxcachev1_memcachev3-mipsel/top.cpp @ 87

Last change on this file since 87 was 86, checked in by simerabe, 14 years ago

simple_ring_fast platform

  • 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.3 KB
RevLine 
[3]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"
[85]13#include "vci_simple_ring_fast.h"
[3]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
[86]33        typedef soclib::caba::VciParams<4,8,32,2,1,1,8,4,4,1> vci_param;
[3]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
[85]188        soclib::caba::VciSimpleRingFast<vci_param, 40, 33>
[3]189        ringp("ringp",maptabp, IntTab(), 2, 4, 3);
190
[85]191        soclib::caba::VciSimpleRingFast<vci_param, 40, 33>
[3]192        ringc("ringc",maptabc, IntTab(), 2, 5, 5);
193
[86]194        soclib::caba::VciSimpleRingFast<vci_param, 40, 33>
195        ringx("ringx",maptabx, IntTab(), 2, 1, 1);
[3]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        ringp.p_clk(signal_clk);
277        ringp.p_resetn(signal_resetn);
278
279        ringc.p_clk(signal_clk);
280        ringc.p_resetn(signal_resetn);
281
282        ringx.p_clk(signal_clk);
283        ringx.p_resetn(signal_resetn);
284
285        ringp.p_to_initiator[0](signal_vci_ini_rw_proc0);
286        ringp.p_to_initiator[1](signal_vci_ini_rw_proc1);
287        ringp.p_to_initiator[2](signal_vci_ini_rw_proc2);
288        ringp.p_to_initiator[3](signal_vci_ini_rw_proc3);
289
290        ringc.p_to_initiator[4](signal_vci_ini_memc);
291        ringc.p_to_initiator[0](signal_vci_ini_c_proc0);
292        ringc.p_to_initiator[1](signal_vci_ini_c_proc1);
293        ringc.p_to_initiator[2](signal_vci_ini_c_proc2);
294        ringc.p_to_initiator[3](signal_vci_ini_c_proc3);
295
296        ringx.p_to_initiator[0](signal_vci_ixr_memc);
297
298        ringp.p_to_target[0](signal_vci_tgt_rom);
299        ringp.p_to_target[1](signal_vci_tgt_tty);
300        ringp.p_to_target[2](signal_vci_tgt_memc);
301
302        ringc.p_to_target[0](signal_vci_tgt_proc0);
303        ringc.p_to_target[1](signal_vci_tgt_proc1);
304        ringc.p_to_target[2](signal_vci_tgt_proc2);
305        ringc.p_to_target[3](signal_vci_tgt_proc3);
306        ringc.p_to_target[4](signal_vci_tgt_cleanup_memc);
307
308        ringx.p_to_target[0](signal_vci_tgt_xram);
309
310        int ncycles;
311
312        if (argc == 2) {
313                ncycles = std::atoi(argv[1]);
314        } else {
315                std::cerr
316                        << std::endl
317                        << "The number of simulation cycles must "
318                           "be defined in the command line"
319                        << std::endl;
320                exit(1);
321        }
322
323        sc_start(sc_core::sc_time(0, SC_NS));
324        signal_resetn = false;
325
326        sc_start(sc_core::sc_time(1, SC_NS));
327        signal_resetn = true;
328
[86]329
330        for (int i = 0; i < ncycles ; i+=1) {
[3]331                sc_start(sc_core::sc_time(1, SC_NS));
332        }
333
334        std::cout << "Hit ENTER to end simulation" << std::endl;
335        char buf[1];
336
337        std::cin.getline(buf,1);
338
339        return EXIT_SUCCESS;
340}
341
342int sc_main (int argc, char *argv[])
343{
344        try {
345                return _main(argc, argv);
346        } catch (std::exception &e) {
347                std::cout << e.what() << std::endl;
348        } catch (...) {
349                std::cout << "Unknown exception occured" << std::endl;
350                throw;
351        }
352        return 1;
353}
Note: See TracBrowser for help on using the repository browser.