source: trunk/platforms/caba-ring-ccxcachev4_memcachev4-mips32el/top.cpp @ 117

Last change on this file since 117 was 107, checked in by guthmull, 14 years ago

Add a simple TsarV4 platform

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