source: branches/v4/platforms/caba-vgmn-memcache-mipsel/top.cpp @ 643

Last change on this file since 643 was 3, checked in by nipo, 14 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: 5.9 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_vgmn.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#include "segmentation.h"
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
32        // Define VCI parameters
33        typedef soclib::caba::VciParams<4,8,32,1,1,1,8,4,4,1> vci_param;
34        typedef soclib::common::IssIss2<soclib::common::IssSimhelper<soclib::common::MipsElIss> > proc_iss;
35
36        // Mapping table
37
38        soclib::common::MappingTable maptabp(32, IntTab(8), IntTab(8), 0x00C00000);
39
40        maptabp.add(Segment("reset", RESET_BASE, RESET_SIZE, IntTab(0), true));
41        maptabp.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(0), true));
42        maptabp.add(Segment("tty"  , TTY_BASE  , TTY_SIZE  , IntTab(1), false));
43        maptabp.add(Segment("mc_r" , MC_R_BASE , MC_R_SIZE , IntTab(2), false, true, IntTab(0)));
44        maptabp.add(Segment("mc_m" , MC_M_BASE , MC_M_SIZE , IntTab(2), true ));
45
46        std::cout << maptabp << std::endl;
47
48        soclib::common::MappingTable maptabc(32, IntTab(8), IntTab(8), 0x00C00000);
49        maptabc.add(Segment("proc" , PROC_BASE , PROC_SIZE , IntTab(0), false, true, IntTab(0)));
50        std::cout << maptabc << std::endl;
51
52        soclib::common::MappingTable maptabx(32, IntTab(8), IntTab(8), 0x00C00000);
53        maptabx.add(Segment("xram" , MC_M_BASE , MC_M_SIZE , IntTab(0), false));
54
55        std::cout << maptabx << std::endl;
56
57        // Signals
58
59        sc_clock        signal_clk("clk");
60        sc_signal<bool> signal_resetn("resetn");
61   
62        sc_signal<bool> signal_proc_it0("proc_it0");
63        sc_signal<bool> signal_proc_it1("proc_it1");
64        sc_signal<bool> signal_proc_it2("proc_it2");
65        sc_signal<bool> signal_proc_it3("proc_it3");
66        sc_signal<bool> signal_proc_it4("proc_it4");
67        sc_signal<bool> signal_proc_it5("proc_it5");
68
69        soclib::caba::VciSignals<vci_param> signal_vci_ini_proc("vci_ini_proc");
70        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc("vci_tgt_proc");
71
72        soclib::caba::VciSignals<vci_param> signal_vci_tgt_tty("vci_tgt_tty");
73
74        soclib::caba::VciSignals<vci_param> signal_vci_tgt_rom("vci_tgt_rom");
75
76        soclib::caba::VciSignals<vci_param> signal_vci_tgt_xram("vci_tgt_xram");
77
78        soclib::caba::VciSignals<vci_param> signal_vci_ixr_memc("vci_ixr_memc");
79        soclib::caba::VciSignals<vci_param> signal_vci_ini_memc("vci_ini_memc");
80        soclib::caba::VciSignals<vci_param> signal_vci_tgt_memc("vci_tgt_memc");
81
82        sc_signal<bool> signal_tty_irq("signal_tty_irq");
83
84        // Components
85        // VCI ports indexation : 3 intiateurs et 5 cibles
86
87        // INIT0 : proc_ini
88        // INIT1 : memc_ini
89        // INIT2 : memc_ixr
90
91        // TGT 0 : rom_tgt
92        // TGT 1 : tty_tgt
93        // TGT 2 : xram_tgt
94        // TGT 3 : memc_tgt
95        // TGT 4 : proc_tgt
96
97        soclib::common::Loader loader("soft/bin.soft");
98
99        soclib::caba::VciCcXcacheWrapper<vci_param, proc_iss >
100        proc("proc", 0, maptabp,maptabc,IntTab(0),IntTab(0),4,64,16,4,64,16,CLEANUP_OFFSET);
101
102        soclib::caba::VciSimpleRam<vci_param>
103        rom("rom", IntTab(0), maptabp, loader);
104
105        soclib::caba::VciSimpleRam<vci_param>
106        xram("xram",IntTab(0),maptabx, loader);
107
108        soclib::caba::VciMemCache<vci_param>
109        memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(0),IntTab(2),16,256,16);
110       
111        soclib::caba::VciMultiTty<vci_param>
112        tty("tty",IntTab(1),maptabp,"tty",NULL);
113
114        soclib::caba::VciVgmn<vci_param>
115        vgmnp("vgmnp",maptabp, 1, 3, 1, 8);
116
117        soclib::caba::VciVgmn<vci_param>
118        vgmnc("vgmnc",maptabc, 1, 1, 1, 8);
119
120        soclib::caba::VciVgmn<vci_param>
121        vgmnx("vgmnx",maptabx, 1, 1, 1, 8);
122
123        // Net-List
124 
125        proc.p_clk(signal_clk); 
126        proc.p_resetn(signal_resetn); 
127        proc.p_irq[0](signal_proc_it0);
128        proc.p_irq[1](signal_proc_it1);
129        proc.p_irq[2](signal_proc_it2);
130        proc.p_irq[3](signal_proc_it3);
131        proc.p_irq[4](signal_proc_it4);
132        proc.p_irq[5](signal_proc_it5);
133        proc.p_vci_ini(signal_vci_ini_proc);
134        proc.p_vci_tgt(signal_vci_tgt_proc);
135
136        rom.p_clk(signal_clk);
137        rom.p_resetn(signal_resetn);
138        rom.p_vci(signal_vci_tgt_rom);
139
140        tty.p_clk(signal_clk);
141        tty.p_resetn(signal_resetn);
142        tty.p_vci(signal_vci_tgt_tty);
143        tty.p_irq[0](signal_tty_irq);
144
145        memc.p_clk(signal_clk);
146        memc.p_resetn(signal_resetn);
147        memc.p_vci_tgt(signal_vci_tgt_memc);   
148        memc.p_vci_ini(signal_vci_ini_memc);
149        memc.p_vci_ixr(signal_vci_ixr_memc);
150
151        xram.p_clk(signal_clk);
152        xram.p_resetn(signal_resetn);
153        xram.p_vci(signal_vci_tgt_xram);       
154
155        vgmnp.p_clk(signal_clk);
156        vgmnp.p_resetn(signal_resetn);
157
158        vgmnc.p_clk(signal_clk);
159        vgmnc.p_resetn(signal_resetn);
160
161        vgmnx.p_clk(signal_clk);
162        vgmnx.p_resetn(signal_resetn);
163
164        vgmnp.p_to_initiator[0](signal_vci_ini_proc);
165
166        vgmnc.p_to_initiator[0](signal_vci_ini_memc);
167
168        vgmnx.p_to_initiator[0](signal_vci_ixr_memc);
169
170
171        vgmnp.p_to_target[0](signal_vci_tgt_rom);
172        vgmnp.p_to_target[1](signal_vci_tgt_tty);
173        vgmnp.p_to_target[2](signal_vci_tgt_memc);
174
175        vgmnc.p_to_target[0](signal_vci_tgt_proc);
176
177        vgmnx.p_to_target[0](signal_vci_tgt_xram);
178
179        int ncycles;
180
181#ifndef SOCVIEW
182        if (argc == 2) {
183                ncycles = std::atoi(argv[1]);
184        } else {
185                std::cerr
186                        << std::endl
187                        << "The number of simulation cycles must "
188                           "be defined in the command line"
189                        << std::endl;
190                exit(1);
191        }
192
193        sc_start(sc_core::sc_time(0, SC_NS));
194        signal_resetn = false;
195
196        sc_start(sc_core::sc_time(1, SC_NS));
197        signal_resetn = true;
198
199        for (int i = 0; i < ncycles ; i+=1000) {
200                sc_start(sc_core::sc_time(1000, SC_NS));
201                proc.print_stats();
202                memc.print_stats();
203        }
204        return EXIT_SUCCESS;
205#else
206        ncycles = 1;
207        sc_start(sc_core::sc_time(0, SC_NS));
208        signal_resetn = false;
209        sc_start(sc_core::sc_time(1, SC_NS));
210        signal_resetn = true;
211
212        debug();
213        return EXIT_SUCCESS;
214#endif
215}
216
217int sc_main (int argc, char *argv[])
218{
219        try {
220                return _main(argc, argv);
221        } catch (std::exception &e) {
222                std::cout << e.what() << std::endl;
223        } catch (...) {
224                std::cout << "Unknown exception occured" << std::endl;
225                throw;
226        }
227        return 1;
228}
Note: See TracBrowser for help on using the repository browser.