source: trunk/platforms/fpga_3_tsar_v1/top.cpp @ 42

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

Add a pf similar to the fpga one

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