source: trunk/platforms/tsarv2_mutekh/top.cpp @ 345

Last change on this file since 345 was 137, checked in by simerabe, 14 years ago

replacing old ring versions with new one

  • Property svn:executable set to *
File size: 12.7 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 "vci_simple_ram.h"
11#include "vci_multi_tty.h"
12#include "vci_simple_ring_fast.h"
13#include "vci_vgmn.h"
14#include "vci_mem_cache_v2.h"
15#include "vci_cc_xcache_wrapper_v1.h"
16#include "vci_logger.h"
17#include "vci_xicu.h"
18
19#define USE_GDB_SERVER
20
21#ifdef USE_GDB_SERVER
22#include "gdbserver.h"
23#endif
24
25//#define  VCI_LOGGER_ON_L1
26//#define  VCI_LOGGER_ON_ROM
27//#define VCI_LOGGER_ON_DMA
28
29// If you want to use the VGMN or the RING
30//#define USE_VGMN
31
32#define CYCLES 100000
33
34#include "segmentation.h"
35
36int _main(int argc, char *argv[])
37{
38        using namespace sc_core;
39        // Avoid repeating these everywhere
40        using soclib::common::IntTab;
41        using soclib::common::Segment;
42
43        // Define VCI parameters
44        typedef soclib::caba::VciParams<4,8,32,1,1,1,8,4,4,1> vci_param;
45        typedef soclib::common::Mips32ElIss ProcessorIss;
46#ifdef USE_GDB_SERVER
47        typedef soclib::common::GdbServer<ProcessorIss> proc_iss;
48#else
49        typedef ProcessorIss proc_iss;
50#endif
51        // Mapping table
52        soclib::common::MappingTable maptabp(32, IntTab(8), IntTab(8), 0xFF000000);
53        maptabp.add(Segment("resetmips", 0xbfc00000, 0x2000, IntTab(0), true));
54        maptabp.add(Segment("excep", 0x80000000, 0x100000, IntTab(0), true));
55
56        maptabp.add(Segment("text" ,     0x60100000, 0x00100000, IntTab(1), true));
57        maptabp.add(Segment("data",      0x71600000, 0x01000000, IntTab(1), true));
58        maptabp.add(Segment("rodata" ,   0x61100000, 0x01000000, IntTab(1), true));
59
60        maptabp.add(Segment("tty"  ,     0x90600000, 0x00000010, IntTab(2), false));
61        maptabp.add(Segment("xicu",      0x20600000, 0x00001000, IntTab(3), false));
62
63 
64        std::cout << maptabp << std::endl;
65
66        soclib::common::MappingTable maptabc(32, IntTab(8), IntTab(8), 0xFF000000);
67        maptabc.add(Segment("c_proc0" , PROC0_BASE , PROC0_SIZE , IntTab(0), false, true, IntTab(0)));
68        maptabc.add(Segment("c_proc1" , PROC1_BASE , PROC1_SIZE , IntTab(1), false, true, IntTab(1)));
69        maptabc.add(Segment("c_proc2" , PROC2_BASE , PROC2_SIZE , IntTab(2), false, true, IntTab(2)));
70        maptabc.add(Segment("c_proc3" , PROC3_BASE , PROC3_SIZE , IntTab(3), false, true, IntTab(3)));
71
72        maptabc.add(Segment("resetmips", 0xbfc00000, 0x2000, IntTab(4), false));
73        maptabc.add(Segment("excep", 0x80000000, 0x100000, IntTab(4), true));
74
75        maptabc.add(Segment("text" ,     0x60100000, 0x00100000, IntTab(4), false));
76        maptabc.add(Segment("data",      0x71600000, 0x01000000, IntTab(4), false));
77        maptabc.add(Segment("rodata" ,   0x61100000, 0x01000000, IntTab(4), false));
78
79
80
81        std::cout << maptabc << std::endl;
82       
83        soclib::common::MappingTable maptabx(32, IntTab(8), IntTab(8), 0x30000000);
84        maptabx.add(Segment("data" , 0x71600000 , 0x01000000 , IntTab(0), false));
85        maptabx.add(Segment("text" , 0x60100000 , 0x00100000 , IntTab(0), false));
86        maptabx.add(Segment("rodata" , 0x61100000 , 0x01000000 , IntTab(0), false));
87       
88       
89        std::cout << maptabx << std::endl;
90
91        // Signals
92
93        sc_clock        signal_clk("clk");
94        sc_signal<bool> signal_resetn("resetn");
95   
96        sc_signal<bool> signal_proc0_it0("proc0_it0"); 
97        sc_signal<bool> signal_proc0_it1("proc0_it1"); 
98        sc_signal<bool> signal_proc0_it2("proc0_it2"); 
99        sc_signal<bool> signal_proc0_it3("proc0_it3"); 
100        sc_signal<bool> signal_proc0_it4("proc0_it4"); 
101        sc_signal<bool> signal_proc0_it5("proc0_it5");
102
103        sc_signal<bool> signal_proc1_it0("proc1_it0"); 
104        sc_signal<bool> signal_proc1_it1("proc1_it1"); 
105        sc_signal<bool> signal_proc1_it2("proc1_it2"); 
106        sc_signal<bool> signal_proc1_it3("proc1_it3"); 
107        sc_signal<bool> signal_proc1_it4("proc1_it4"); 
108        sc_signal<bool> signal_proc1_it5("proc1_it5");
109
110        sc_signal<bool> signal_proc2_it0("proc2_it0"); 
111        sc_signal<bool> signal_proc2_it1("proc2_it1"); 
112        sc_signal<bool> signal_proc2_it2("proc2_it2"); 
113        sc_signal<bool> signal_proc2_it3("proc2_it3"); 
114        sc_signal<bool> signal_proc2_it4("proc2_it4"); 
115        sc_signal<bool> signal_proc2_it5("proc2_it5");
116
117        sc_signal<bool> signal_proc3_it0("proc3_it0"); 
118        sc_signal<bool> signal_proc3_it1("proc3_it1"); 
119        sc_signal<bool> signal_proc3_it2("proc3_it2"); 
120        sc_signal<bool> signal_proc3_it3("proc3_it3"); 
121        sc_signal<bool> signal_proc3_it4("proc3_it4"); 
122        sc_signal<bool> signal_proc3_it5("proc3_it5");
123
124
125        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc0("vci_ini_rw_proc0");
126        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc0("vci_ini_c_proc0");
127
128        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc0("vci_tgt_proc0");
129
130        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc1("vci_ini_rw_proc1");
131        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc1("vci_ini_c_proc1");
132
133        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc1("vci_tgt_proc1");
134
135        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc2("vci_ini_rw_proc2");
136        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc2("vci_ini_c_proc2");
137
138        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc2("vci_tgt_proc2");
139
140        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc3("vci_ini_rw_proc3");
141        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc3("vci_ini_c_proc3");
142        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc3("vci_tgt_proc3");
143
144
145        soclib::caba::VciSignals<vci_param> signal_vci_tty("signal_vci_tty");
146        soclib::caba::VciSignals<vci_param> signal_vci_vcitimer("signal_vci_vcitimer");
147       
148        soclib::caba::VciSignals<vci_param> signal_vci_icu("signal_vci_icu");
149        soclib::caba::VciSignals<vci_param> signal_vci_dmai("signal_vci_dmai");
150        soclib::caba::VciSignals<vci_param> signal_vci_dmat("signal_vci_dmat");
151        soclib::caba::VciSignals<vci_param> signal_vci_simhelper("signal_vci_simhelper");
152        soclib::caba::VciSignals<vci_param> signal_vci_tgt_rom("vci_tgt_rom");
153
154        soclib::caba::VciSignals<vci_param> signal_vci_tgt_xram("vci_tgt_xram");
155
156        soclib::caba::VciSignals<vci_param> signal_vci_ini_memc("vci_ini_memc");
157        soclib::caba::VciSignals<vci_param> signal_vci_tgt_memc("vci_tgt_memc");
158        soclib::caba::VciSignals<vci_param> signal_vci_tgt_cleanup_memc("vci_tgt_cleanup_memc");
159
160        sc_signal<bool> signal_icu_irq0("signal_icu_irq0");
161        sc_signal<bool> signal_icu_irq1("signal_icu_irq1");
162        sc_signal<bool> signal_icu_irq2("signal_icu_irq2");
163        sc_signal<bool> signal_icu_irq3("signal_icu_irq3");
164        sc_signal<bool> signal_icu_irq4("signal_icu_irq4");
165        sc_signal<bool> signal_icu_irq5("signal_icu_irq5");
166        sc_signal<bool> signal_icu_irq6("signal_icu_irq6");
167
168        soclib::common::Loader loader("mutekh/kernel-soclib-mips.out");
169
170        //                                  init_rw   init_c   tgt
171        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
172        proc0("proc0", 0, maptabp, maptabc, IntTab(0),IntTab(0),IntTab(0),4,64,16,4,64,16);
173
174        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
175        proc1("proc1", 1, maptabp, maptabc, IntTab(1),IntTab(1),IntTab(1),4,64,16,4,64,16);
176
177        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
178        proc2("proc2", 2, maptabp, maptabc, IntTab(2),IntTab(2),IntTab(2),4,64,16,4,64,16);
179
180        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
181        proc3("proc3", 3, maptabp, maptabc, IntTab(3),IntTab(3),IntTab(3),4,64,16,4,64,16);
182
183        soclib::caba::VciSimpleRam<vci_param> 
184        rom("rom", IntTab(0), maptabp, loader);
185
186        soclib::caba::VciSimpleRam<vci_param> 
187        xram("xram", IntTab(0), maptabx, loader);
188
189        //                                  x_init    c_init    p_tgt     c_tgt
190        //soclib::caba::VciMemCacheV3<vci_param>
191        //memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(1), IntTab(4),16,256,16,1024);
192        //memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(1), IntTab(4),4,16,16,32);
193        soclib::caba::VciMemCacheV2<vci_param> 
194        memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(1), IntTab(4),16,256,16);
195       
196
197        soclib::caba::VciMultiTty<vci_param> vcitty("vcitty",   IntTab(2), maptabp, "vcitty", NULL);
198        soclib::caba::VciXicu<vci_param> vcixicu("vcixicu", maptabp, IntTab(3), 4, 1, 4, 4);
199       
200
201#ifdef VCI_LOGGER_ON_L1
202  soclib::caba::VciLogger<vci_param> vci_logger0("vci_logger0",maptabp);
203#endif
204
205#ifdef VCI_LOGGER_ON_ROM
206  soclib::caba::VciLogger<vci_param> vci_logger1("vci_logger1",maptabp);
207#endif
208#ifdef VCI_LOGGER_ON_DMA
209  soclib::caba::VciLogger<vci_param> vci_logger2("vci_logger2",maptabp);
210#endif
211
212#ifdef USE_VGMN
213        soclib::caba::VciVgmn<vci_param> 
214        ringp("ringp",maptabp, 4, 4, 2, 8);
215
216        soclib::caba::VciVgmn<vci_param> 
217        ringc("ringc",maptabc, 5, 5, 2, 8);
218
219#else
220        soclib::caba::VciSimpleRingFast<vci_param, 40, 33> 
221        ringp("ringp",maptabp, IntTab(), 2, 4, 4);
222
223        soclib::caba::VciSimpleRingFast<vci_param, 40, 33> 
224        ringc("ringc",maptabc, IntTab(), 2, 5, 5);
225
226#endif
227
228        proc0.p_clk(signal_clk); 
229        proc0.p_resetn(signal_resetn); 
230        proc0.p_irq[0](signal_proc0_it0); 
231        proc0.p_irq[1](signal_proc0_it1); 
232        proc0.p_irq[2](signal_proc0_it2); 
233        proc0.p_irq[3](signal_proc0_it3); 
234        proc0.p_irq[4](signal_proc0_it4); 
235        proc0.p_irq[5](signal_proc0_it5); 
236        proc0.p_vci_ini_rw(signal_vci_ini_rw_proc0);
237        proc0.p_vci_ini_c(signal_vci_ini_c_proc0);
238        proc0.p_vci_tgt(signal_vci_tgt_proc0);
239
240
241        proc1.p_clk(signal_clk); 
242        proc1.p_resetn(signal_resetn); 
243        proc1.p_irq[0](signal_proc1_it0); 
244        proc1.p_irq[1](signal_proc1_it1); 
245        proc1.p_irq[2](signal_proc1_it2); 
246        proc1.p_irq[3](signal_proc1_it3); 
247        proc1.p_irq[4](signal_proc1_it4); 
248        proc1.p_irq[5](signal_proc1_it5); 
249        proc1.p_vci_ini_rw(signal_vci_ini_rw_proc1);
250        proc1.p_vci_ini_c(signal_vci_ini_c_proc1);
251        proc1.p_vci_tgt(signal_vci_tgt_proc1);
252
253        proc2.p_clk(signal_clk); 
254        proc2.p_resetn(signal_resetn); 
255        proc2.p_irq[0](signal_proc2_it0); 
256        proc2.p_irq[1](signal_proc2_it1); 
257        proc2.p_irq[2](signal_proc2_it2); 
258        proc2.p_irq[3](signal_proc2_it3); 
259        proc2.p_irq[4](signal_proc2_it4); 
260        proc2.p_irq[5](signal_proc2_it5); 
261        proc2.p_vci_ini_rw(signal_vci_ini_rw_proc2);
262        proc2.p_vci_ini_c(signal_vci_ini_c_proc2);
263        proc2.p_vci_tgt(signal_vci_tgt_proc2);
264
265        proc3.p_clk(signal_clk); 
266        proc3.p_resetn(signal_resetn); 
267        proc3.p_irq[0](signal_proc3_it0); 
268        proc3.p_irq[1](signal_proc3_it1); 
269        proc3.p_irq[2](signal_proc3_it2); 
270        proc3.p_irq[3](signal_proc3_it3); 
271        proc3.p_irq[4](signal_proc3_it4); 
272        proc3.p_irq[5](signal_proc3_it5); 
273        proc3.p_vci_ini_rw(signal_vci_ini_rw_proc3);
274        proc3.p_vci_ini_c(signal_vci_ini_c_proc3);
275        proc3.p_vci_tgt(signal_vci_tgt_proc3);
276
277        rom.p_clk(signal_clk);
278        rom.p_resetn(signal_resetn);
279        rom.p_vci(signal_vci_tgt_rom);
280
281
282        vcixicu.p_clk(signal_clk);
283        vcixicu.p_vci(signal_vci_icu);
284        vcixicu.p_hwi[0](signal_icu_irq0);
285        vcixicu.p_irq[0](signal_proc0_it0);
286        vcixicu.p_irq[1](signal_proc1_it0);
287        vcixicu.p_irq[2](signal_proc2_it0);
288        vcixicu.p_irq[3](signal_proc3_it0);
289        vcixicu.p_resetn(signal_resetn);
290
291
292#ifdef VCI_LOGGER_ON_L1
293  vci_logger0.p_clk(signal_clk);
294  vci_logger0.p_resetn(signal_resetn);
295  vci_logger0.p_vci(signal_vci_ini_rw_proc0);
296#endif
297
298#ifdef VCI_LOGGER_ON_ROM
299  vci_logger1.p_clk(signal_clk);
300  vci_logger1.p_resetn(signal_resetn);
301  vci_logger1.p_vci(signal_vci_tgt_rom);
302#endif
303
304        vcitty.p_clk(signal_clk);
305        vcitty.p_resetn(signal_resetn);
306        vcitty.p_vci(signal_vci_tty);
307        vcitty.p_irq[0](signal_icu_irq0); 
308       
309
310        memc.p_clk(signal_clk);
311        memc.p_resetn(signal_resetn);
312        memc.p_vci_tgt(signal_vci_tgt_memc);
313        memc.p_vci_tgt_cleanup(signal_vci_tgt_cleanup_memc);
314        memc.p_vci_ini(signal_vci_ini_memc);
315        memc.p_vci_ixr(signal_vci_tgt_xram);
316
317        xram.p_clk(signal_clk);
318        xram.p_resetn(signal_resetn);
319        xram.p_vci(signal_vci_tgt_xram);
320       
321        ringp.p_clk(signal_clk);
322        ringp.p_resetn(signal_resetn);
323
324        ringc.p_clk(signal_clk);
325        ringc.p_resetn(signal_resetn);
326
327
328        ringp.p_to_initiator[0](signal_vci_ini_rw_proc0);
329        ringp.p_to_initiator[1](signal_vci_ini_rw_proc1);
330        ringp.p_to_initiator[2](signal_vci_ini_rw_proc2);
331        ringp.p_to_initiator[3](signal_vci_ini_rw_proc3);
332
333        ringc.p_to_initiator[4](signal_vci_ini_memc);
334        ringc.p_to_initiator[0](signal_vci_ini_c_proc0);
335        ringc.p_to_initiator[1](signal_vci_ini_c_proc1);
336        ringc.p_to_initiator[2](signal_vci_ini_c_proc2);
337        ringc.p_to_initiator[3](signal_vci_ini_c_proc3);
338
339        ringp.p_to_target[0](signal_vci_tgt_rom);
340        ringp.p_to_target[1](signal_vci_tgt_memc);
341        ringp.p_to_target[2](signal_vci_tty);
342        ringp.p_to_target[3](signal_vci_icu);
343       
344        ringc.p_to_target[0](signal_vci_tgt_proc0);
345        ringc.p_to_target[1](signal_vci_tgt_proc1);
346        ringc.p_to_target[2](signal_vci_tgt_proc2);
347        ringc.p_to_target[3](signal_vci_tgt_proc3);
348        ringc.p_to_target[4](signal_vci_tgt_cleanup_memc);
349
350
351        int ncycles;
352
353        sc_start(sc_core::sc_time(0, SC_NS));
354        signal_resetn = false;
355
356        sc_start(sc_core::sc_time(1, SC_NS));
357        signal_resetn = true;
358
359        while(1)
360        {
361          sc_start(sc_core::sc_time(CYCLES, SC_NS));
362        }
363
364        std::cout << "Hit ENTER to end simulation" << std::endl;
365        char buf[1];
366
367        std::cin.getline(buf,1);
368
369        return EXIT_SUCCESS;
370}
371
372int sc_main (int argc, char *argv[])
373{
374        try {
375                return _main(argc, argv);
376        } catch (std::exception &e) {
377                std::cout << e.what() << std::endl;
378        } catch (...) {
379                std::cout << "Unknown exception occured" << std::endl;
380                throw;
381        }
382        return 1;
383}
Note: See TracBrowser for help on using the repository browser.