source: branches/v4/platforms/caba-ring-ccxcachev1_memcachev1-mipsel/top.cpp @ 924

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

replacing old ring versions with new one

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