source: trunk/platforms/caba-ring-memcache-mipsel/top_ring_4proc.cpp @ 38

Last change on this file since 38 was 3, checked in by nipo, 15 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: 10.8 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 "mips.h"
10#include "ississ2.h"
11#include "iss_simhelper.h"
12#include "vci_simple_ram.h"
13#include "vci_multi_tty.h"
14#include "vci_simple_ring_network.h"
15#include "vci_mem_cache.h"
16#include "vci_cc_xcache_wrapper.h"
17
18
19#ifdef USE_GDB_SERVER
20#include "iss/gdbserver.h"
21#endif
22
23//#define SOCVIEW 1
24#include "segmentation.h"
25
26int _main(int argc, char *argv[])
27{
28        using namespace sc_core;
29        // Avoid repeating these everywhere
30        using soclib::common::IntTab;
31        using soclib::common::Segment;
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::IssIss2<soclib::common::IssSimhelper<soclib::common::MipsElIss> > proc_iss;
36
37        // Mapping table
38
39        soclib::common::MappingTable maptabp(32, IntTab(8), IntTab(8), 0x00300000);
40
41        maptabp.add(Segment("reset", RESET_BASE, RESET_SIZE, IntTab(0), true));
42        maptabp.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(0), true));
43        maptabp.add(Segment("tty"  , TTY_BASE  , TTY_SIZE  , IntTab(1), false));
44        maptabp.add(Segment("mc_r" , MC_R_BASE , MC_R_SIZE , IntTab(2), false, true, IntTab(0)));
45        maptabp.add(Segment("mc_m" , MC_M_BASE , MC_M_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("proc0" , PROC0_BASE , PROC_SIZE , IntTab(0), false, true, IntTab(0)));
51        maptabc.add(Segment("proc1" , PROC1_BASE , PROC_SIZE , IntTab(1), false, true, IntTab(1)));
52        maptabc.add(Segment("proc2" , PROC2_BASE , PROC_SIZE , IntTab(2), false, true, IntTab(2)));
53        maptabc.add(Segment("proc3" , PROC3_BASE , PROC_SIZE , IntTab(3), false, true, IntTab(3)));
54
55        std::cout << maptabc << std::endl;
56
57        soclib::common::MappingTable maptabx(32, IntTab(8), IntTab(8), 0x00300000);
58        maptabx.add(Segment("xram" , MC_M_BASE , MC_M_SIZE , IntTab(0), false));
59
60        std::cout << maptabx << std::endl;
61
62        // Signals
63
64        sc_clock        signal_clk("clk");
65        sc_signal<bool> signal_resetn("resetn");
66   
67        sc_signal<bool> signal_proc0_it0("proc0_it0");
68        sc_signal<bool> signal_proc0_it1("proc0_it1");
69        sc_signal<bool> signal_proc0_it2("proc0_it2");
70        sc_signal<bool> signal_proc0_it3("proc0_it3");
71        sc_signal<bool> signal_proc0_it4("proc0_it4");
72        sc_signal<bool> signal_proc0_it5("proc0_it5");
73
74        sc_signal<bool> signal_proc1_it0("proc1_it0");
75        sc_signal<bool> signal_proc1_it1("proc1_it1");
76        sc_signal<bool> signal_proc1_it2("proc1_it2");
77        sc_signal<bool> signal_proc1_it3("proc1_it3");
78        sc_signal<bool> signal_proc1_it4("proc1_it4");
79        sc_signal<bool> signal_proc1_it5("proc1_it5");
80
81        sc_signal<bool> signal_proc2_it0("proc2_it0");
82        sc_signal<bool> signal_proc2_it1("proc2_it1");
83        sc_signal<bool> signal_proc2_it2("proc2_it2");
84        sc_signal<bool> signal_proc2_it3("proc2_it3");
85        sc_signal<bool> signal_proc2_it4("proc2_it4");
86        sc_signal<bool> signal_proc2_it5("proc2_it5");
87
88        sc_signal<bool> signal_proc3_it0("proc3_it0");
89        sc_signal<bool> signal_proc3_it1("proc3_it1");
90        sc_signal<bool> signal_proc3_it2("proc3_it2");
91        sc_signal<bool> signal_proc3_it3("proc3_it3");
92        sc_signal<bool> signal_proc3_it4("proc3_it4");
93        sc_signal<bool> signal_proc3_it5("proc3_it5");
94
95        soclib::caba::VciSignals<vci_param> signal_vci_ini_proc0("vci_ini_proc0");
96        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc0("vci_tgt_proc0");
97
98        soclib::caba::VciSignals<vci_param> signal_vci_ini_proc1("vci_ini_proc1");
99        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc1("vci_tgt_proc1");
100
101        soclib::caba::VciSignals<vci_param> signal_vci_ini_proc2("vci_ini_proc2");
102        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc2("vci_tgt_proc2");
103
104        soclib::caba::VciSignals<vci_param> signal_vci_ini_proc3("vci_ini_proc3");
105        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc3("vci_tgt_proc3");
106
107        soclib::caba::VciSignals<vci_param> signal_vci_tgt_tty("vci_tgt_tty");
108
109        soclib::caba::VciSignals<vci_param> signal_vci_tgt_rom("vci_tgt_rom");
110
111        soclib::caba::VciSignals<vci_param> signal_vci_tgt_xram("vci_tgt_xram");
112
113        soclib::caba::VciSignals<vci_param> signal_vci_ixr_memc("vci_ixr_memc");
114        soclib::caba::VciSignals<vci_param> signal_vci_ini_memc("vci_ini_memc");
115        soclib::caba::VciSignals<vci_param> signal_vci_tgt_memc("vci_tgt_memc");
116
117        sc_signal<bool> signal_tty_irq0("signal_tty_irq0");
118        sc_signal<bool> signal_tty_irq1("signal_tty_irq1");
119        sc_signal<bool> signal_tty_irq2("signal_tty_irq2");
120        sc_signal<bool> signal_tty_irq3("signal_tty_irq3");
121
122       
123        soclib::common::Loader loader("soft/bin.soft");
124
125        soclib::caba::VciCcXcacheWrapper<vci_param, proc_iss >
126        proc0("proc0", 0, maptabp,maptabc,IntTab(0),IntTab(0),4,64,16,4,64,16,CLEANUP_OFFSET);
127
128        soclib::caba::VciCcXcacheWrapper<vci_param, proc_iss >
129        proc1("proc1", 1, maptabp,maptabc,IntTab(1),IntTab(1),4,64,16,4,64,16,CLEANUP_OFFSET);
130
131        soclib::caba::VciCcXcacheWrapper<vci_param, proc_iss >
132        proc2("proc2", 2, maptabp,maptabc,IntTab(2),IntTab(2),4,64,16,4,64,16,CLEANUP_OFFSET);
133
134        soclib::caba::VciCcXcacheWrapper<vci_param, proc_iss >
135        proc3("proc3", 3, maptabp,maptabc,IntTab(3),IntTab(3),4,64,16,4,64,16,CLEANUP_OFFSET);
136
137        soclib::caba::VciSimpleRam<vci_param>
138        rom("rom", IntTab(0), maptabp, loader);
139
140        soclib::caba::VciSimpleRam<vci_param>
141        xram("xram",IntTab(0),maptabx, loader);
142
143        soclib::caba::VciMemCache<vci_param>
144        memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(0),IntTab(2),16,256,16);
145       
146        soclib::caba::VciMultiTty<vci_param>
147        tty("tty",IntTab(1),maptabp,"tty0", "tty1","tty2", "tty3",NULL);
148
149        soclib::caba::VciSimpleRingNetwork<vci_param>
150        ringp("ringp",maptabp, IntTab(), 2, 4, 3);
151
152        soclib::caba::VciSimpleRingNetwork<vci_param>
153        ringc("ringc",maptabc, IntTab(), 2, 1, 4);
154
155        soclib::caba::VciSimpleRingNetwork<vci_param>
156        ringx("ringx",maptabx, IntTab(), 2, 1, 1);
157
158        // Net-List
159 
160        proc0.p_clk(signal_clk); 
161        proc0.p_resetn(signal_resetn); 
162        proc0.p_irq[0](signal_proc0_it0);
163        proc0.p_irq[1](signal_proc0_it1);
164        proc0.p_irq[2](signal_proc0_it2);
165        proc0.p_irq[3](signal_proc0_it3);
166        proc0.p_irq[4](signal_proc0_it4);
167        proc0.p_irq[5](signal_proc0_it5);
168        proc0.p_vci_ini(signal_vci_ini_proc0);
169        proc0.p_vci_tgt(signal_vci_tgt_proc0);
170
171        proc1.p_clk(signal_clk); 
172        proc1.p_resetn(signal_resetn); 
173        proc1.p_irq[0](signal_proc1_it0);
174        proc1.p_irq[1](signal_proc1_it1);
175        proc1.p_irq[2](signal_proc1_it2);
176        proc1.p_irq[3](signal_proc1_it3);
177        proc1.p_irq[4](signal_proc1_it4);
178        proc1.p_irq[5](signal_proc1_it5);
179        proc1.p_vci_ini(signal_vci_ini_proc1);
180        proc1.p_vci_tgt(signal_vci_tgt_proc1);
181
182        proc2.p_clk(signal_clk); 
183        proc2.p_resetn(signal_resetn); 
184        proc2.p_irq[0](signal_proc2_it0);
185        proc2.p_irq[1](signal_proc2_it1);
186        proc2.p_irq[2](signal_proc2_it2);
187        proc2.p_irq[3](signal_proc2_it3);
188        proc2.p_irq[4](signal_proc2_it4);
189        proc2.p_irq[5](signal_proc2_it5);
190        proc2.p_vci_ini(signal_vci_ini_proc2);
191        proc2.p_vci_tgt(signal_vci_tgt_proc2);
192
193        proc3.p_clk(signal_clk); 
194        proc3.p_resetn(signal_resetn); 
195        proc3.p_irq[0](signal_proc3_it0);
196        proc3.p_irq[1](signal_proc3_it1);
197        proc3.p_irq[2](signal_proc3_it2);
198        proc3.p_irq[3](signal_proc3_it3);
199        proc3.p_irq[4](signal_proc3_it4);
200        proc3.p_irq[5](signal_proc3_it5);
201        proc3.p_vci_ini(signal_vci_ini_proc3);
202        proc3.p_vci_tgt(signal_vci_tgt_proc3);
203
204        rom.p_clk(signal_clk);
205        rom.p_resetn(signal_resetn);
206        rom.p_vci(signal_vci_tgt_rom);
207
208        tty.p_clk(signal_clk);
209        tty.p_resetn(signal_resetn);
210        tty.p_vci(signal_vci_tgt_tty);
211        tty.p_irq[0](signal_tty_irq0);
212        tty.p_irq[1](signal_tty_irq1);
213        tty.p_irq[2](signal_tty_irq2);
214        tty.p_irq[3](signal_tty_irq3);
215
216        memc.p_clk(signal_clk);
217        memc.p_resetn(signal_resetn);
218        memc.p_vci_tgt(signal_vci_tgt_memc);   
219        memc.p_vci_ini(signal_vci_ini_memc);
220        memc.p_vci_ixr(signal_vci_ixr_memc);
221
222        xram.p_clk(signal_clk);
223        xram.p_resetn(signal_resetn);
224        xram.p_vci(signal_vci_tgt_xram);       
225
226        ringp.p_clk(signal_clk);
227        ringp.p_resetn(signal_resetn);
228
229        ringc.p_clk(signal_clk);
230        ringc.p_resetn(signal_resetn);
231
232        ringx.p_clk(signal_clk);
233        ringx.p_resetn(signal_resetn);
234
235        ringp.p_to_initiator[0](signal_vci_ini_proc0);
236        ringp.p_to_initiator[1](signal_vci_ini_proc1);
237        ringp.p_to_initiator[2](signal_vci_ini_proc2);
238        ringp.p_to_initiator[3](signal_vci_ini_proc3);
239
240        ringc.p_to_initiator[0](signal_vci_ini_memc);
241
242        ringx.p_to_initiator[0](signal_vci_ixr_memc);
243
244
245        ringp.p_to_target[0](signal_vci_tgt_rom);
246        ringp.p_to_target[1](signal_vci_tgt_tty);
247        ringp.p_to_target[2](signal_vci_tgt_memc);
248
249        ringc.p_to_target[0](signal_vci_tgt_proc0);
250        ringc.p_to_target[1](signal_vci_tgt_proc1);
251        ringc.p_to_target[2](signal_vci_tgt_proc2);
252        ringc.p_to_target[3](signal_vci_tgt_proc3);
253
254        ringx.p_to_target[0](signal_vci_tgt_xram);
255
256        int ncycles;
257
258#ifndef SOCVIEW
259        if (argc == 2) {
260                ncycles = std::atoi(argv[1]);
261        } else {
262                std::cerr
263                        << std::endl
264                        << "The number of simulation cycles must "
265                           "be defined in the command line"
266                        << std::endl;
267                exit(1);
268        }
269
270        sc_start(sc_core::sc_time(0, SC_NS));
271        signal_resetn = false;
272
273        sc_start(sc_core::sc_time(1, SC_NS));
274        signal_resetn = true;
275
276        for (int i = 0; i < ncycles ; i+=1000) {
277                sc_start(sc_core::sc_time(1000, SC_NS));
278                //proc.print_stats();
279                //memc.print_stats();
280        }
281
282
283        //------------- stats           
284        float p = 100 * (float) (ringp.t_initiator_wrapper[0]->get_tot_cmd_flits()+
285                                 ringp.t_initiator_wrapper[1]->get_tot_cmd_flits()+
286                                 ringp.t_initiator_wrapper[2]->get_tot_cmd_flits()+
287                                 ringp.t_initiator_wrapper[3]->get_tot_cmd_flits() ) /
288                                 ringp.t_initiator_wrapper[0]->get_tot_cycles(); 
289        std::cout << " charge réseau P : " << p << std::endl;
290        //--------------------
291        float c = 100 * (float) (ringc.t_initiator_wrapper[0]->get_tot_cmd_flits()) /
292                                 ringc.t_initiator_wrapper[0]->get_tot_cycles(); 
293        std::cout << " charge réseau C : " << c << std::endl;
294        //--------------------
295         float x = 100 * (float) (ringx.t_initiator_wrapper[0]->get_tot_cmd_flits()) /
296                                 ringx.t_initiator_wrapper[0]->get_tot_cycles(); 
297        std::cout << " charge réseau X : " << x << std::endl;
298        //--------------------
299
300        std::cout << "Hit ENTER to end simulation" << std::endl;
301
302        char buf[1];
303
304        std::cin.getline(buf,1);
305        return EXIT_SUCCESS;
306#else
307
308        ncycles = 1;
309        sc_start(sc_core::sc_time(0, SC_NS));
310        signal_resetn = false;
311        sc_start(sc_core::sc_time(1, SC_NS));
312        signal_resetn = true;
313
314        debug();
315        return EXIT_SUCCESS;
316#endif
317}
318
319int sc_main (int argc, char *argv[])
320{
321        try {
322                return _main(argc, argv);
323        } catch (std::exception &e) {
324                std::cout << e.what() << std::endl;
325        } catch (...) {
326                std::cout << "Unknown exception occured" << std::endl;
327                throw;
328        }
329        return 1;
330}
331
Note: See TracBrowser for help on using the repository browser.