source: trunk/platforms/caba-ring-memcache-mipsel/top_wrapper_ring.cpp @ 118

Last change on this file since 118 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: 8.2 KB
Line 
1#include <systemc>
2#include <sys/time.h>
3#include <iostream>
4#include <cstdlib>
5#include <cstdarg>
6
7#include "mapping_table.h"
8#include "mips.h"
9#include "ississ2.h"
10#include "iss_simhelper.h"
11#include "vci_simple_ram.h"
12#include "vci_multi_tty.h"
13#include "vci_mem_cache.h"
14#include "vci_cc_xcache_wrapper.h"
15#include "vci_ring_initiator_wrapper.h"
16#include "vci_ring_target_wrapper.h"
17
18//#define SOCVIEW 1
19
20#ifdef USE_GDB_SERVER
21#include "iss/gdbserver.h"
22#endif
23
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("proc" , PROC0_BASE , PROC_SIZE , IntTab(0), false, true, IntTab(0)));
51        std::cout << maptabc << std::endl;
52
53        soclib::common::MappingTable maptabx(32, IntTab(8), IntTab(8), 0x00300000);
54        maptabx.add(Segment("xram" , MC_M_BASE , MC_M_SIZE , IntTab(0), false));
55
56        std::cout << maptabx << std::endl;
57
58        // Signals
59
60        sc_clock        signal_clk("clk");
61        sc_signal<bool> signal_resetn("resetn");
62   
63        sc_signal<bool> signal_proc_it0("proc_it0");
64        sc_signal<bool> signal_proc_it1("proc_it1");
65        sc_signal<bool> signal_proc_it2("proc_it2");
66        sc_signal<bool> signal_proc_it3("proc_it3");
67        sc_signal<bool> signal_proc_it4("proc_it4");
68        sc_signal<bool> signal_proc_it5("proc_it5");
69
70        soclib::caba::VciSignals<vci_param> signal_vci_ini_proc("vci_ini_proc");
71        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc("vci_tgt_proc");
72
73        soclib::caba::VciSignals<vci_param> signal_vci_tgt_tty("vci_tgt_tty");
74
75        soclib::caba::VciSignals<vci_param> signal_vci_tgt_rom("vci_tgt_rom");
76
77        soclib::caba::VciSignals<vci_param> signal_vci_tgt_xram("vci_tgt_xram");
78
79        soclib::caba::VciSignals<vci_param> signal_vci_ixr_memc("vci_ixr_memc");
80        soclib::caba::VciSignals<vci_param> signal_vci_ini_memc("vci_ini_memc");
81        soclib::caba::VciSignals<vci_param> signal_vci_tgt_memc("vci_tgt_memc");
82
83        sc_signal<bool> signal_tty_irq("signal_tty_irq");         
84 
85        // Components
86        // VCI ports indexation : 3 intiateurs et 5 cibles
87
88        // INIT0 : proc_ini
89        // INIT1 : memc_ini
90        // INIT2 : memc_ixr
91
92        // TGT 0 : rom_tgt
93        // TGT 1 : tty_tgt
94        // TGT 2 : xram_tgt
95        // TGT 3 : memc_tgt
96        // TGT 4 : proc_tgt
97
98        soclib::common::Loader loader("soft/bin.soft");
99
100        soclib::caba::VciCcXcacheWrapper<vci_param, proc_iss >
101        proc("proc", 0, maptabp,maptabc,IntTab(0),IntTab(0),4,64,16,4,64,16,CLEANUP_OFFSET);
102
103        soclib::caba::VciSimpleRam<vci_param>
104        rom("rom", IntTab(0), maptabp, loader);
105
106        soclib::caba::VciSimpleRam<vci_param>
107        xram("xram",IntTab(0),maptabx, loader);
108
109        soclib::caba::VciMemCache<vci_param>
110        memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(0),IntTab(2),16,256,16);
111       
112        soclib::caba::VciMultiTty<vci_param>
113        tty("tty",IntTab(1),maptabp,"tty",NULL);
114
115        // ring wrapppers
116        // Ring p
117        soclib::caba::VciRingInitiatorWrapper<vci_param> proc_iwrapper("proc_iwrapper", true,  2, 2, maptabp, IntTab(),0);
118        soclib::caba::VciRingTargetWrapper<vci_param> rom_wrapper("rom_wrapper", true, 2, 2, maptabp, IntTab(),0);
119        soclib::caba::VciRingTargetWrapper<vci_param> tty_wrapper("tty_wrapper", false, 2, 2, maptabp, IntTab(),1);
120        soclib::caba::VciRingTargetWrapper<vci_param> memc_twrapper("memc_twrapper", false, 2, 2, maptabp, IntTab(),2);
121
122        // Ring C
123        soclib::caba::VciRingInitiatorWrapper<vci_param> memc_iwrapper("memc_iwrapper", true, 2, 2, maptabc, IntTab(),0);
124        soclib::caba::VciRingTargetWrapper<vci_param> proc_twrapper("proc_twrapper", true, 2, 2, maptabc, IntTab(),0);
125
126        // Ring X
127        soclib::caba::VciRingInitiatorWrapper<vci_param> memc_ixwrapper("memc_ixwrapper", true, 2, 2, maptabx, IntTab(),0);
128        soclib::caba::VciRingTargetWrapper<vci_param> xram_wrapper("xram_wrapper", true, 2, 2, maptabx, IntTab(),0);
129
130        // Ring internal signals
131        soclib::caba::RingSignals signal_p[4];
132        soclib::caba::RingSignals signal_c[2];
133        soclib::caba::RingSignals signal_x[2];
134
135        // Net-List
136 
137        proc.p_clk(signal_clk); 
138        proc.p_resetn(signal_resetn); 
139        proc.p_irq[0](signal_proc_it0);
140        proc.p_irq[1](signal_proc_it1);
141        proc.p_irq[2](signal_proc_it2);
142        proc.p_irq[3](signal_proc_it3);
143        proc.p_irq[4](signal_proc_it4);
144        proc.p_irq[5](signal_proc_it5);
145        proc.p_vci_ini(signal_vci_ini_proc);
146        proc.p_vci_tgt(signal_vci_tgt_proc);
147
148        rom.p_clk(signal_clk);
149        rom.p_resetn(signal_resetn);
150        rom.p_vci(signal_vci_tgt_rom);
151
152        tty.p_clk(signal_clk);
153        tty.p_resetn(signal_resetn);
154        tty.p_vci(signal_vci_tgt_tty);
155        tty.p_irq[0](signal_tty_irq);
156
157        memc.p_clk(signal_clk);
158        memc.p_resetn(signal_resetn);
159        memc.p_vci_tgt(signal_vci_tgt_memc);   
160        memc.p_vci_ini(signal_vci_ini_memc);
161        memc.p_vci_ixr(signal_vci_ixr_memc);
162
163        xram.p_clk(signal_clk);
164        xram.p_resetn(signal_resetn);
165        xram.p_vci(signal_vci_tgt_xram);
166
167        // Ring p connection
168        proc_iwrapper.p_clk(signal_clk);
169        proc_iwrapper.p_resetn(signal_resetn);
170        proc_iwrapper.p_ring_in(signal_p[0]);
171        proc_iwrapper.p_ring_out(signal_p[1]);
172        proc_iwrapper.p_vci(signal_vci_ini_proc);
173
174        rom_wrapper.p_clk(signal_clk);
175        rom_wrapper.p_resetn(signal_resetn);
176        rom_wrapper.p_ring_in(signal_p[1]);
177        rom_wrapper.p_ring_out(signal_p[2]);
178        rom_wrapper.p_vci(signal_vci_tgt_rom);
179
180        tty_wrapper.p_clk(signal_clk);
181        tty_wrapper.p_resetn(signal_resetn);
182        tty_wrapper.p_ring_in(signal_p[2]);
183        tty_wrapper.p_ring_out(signal_p[3]);
184        tty_wrapper.p_vci(signal_vci_tgt_tty);
185
186        memc_twrapper.p_clk(signal_clk);
187        memc_twrapper.p_resetn(signal_resetn);
188        memc_twrapper.p_ring_in(signal_p[3]);
189        memc_twrapper.p_ring_out(signal_p[0]);
190        memc_twrapper.p_vci(signal_vci_tgt_memc);
191 
192        // Ring c connection
193        memc_iwrapper.p_clk(signal_clk);
194        memc_iwrapper.p_resetn(signal_resetn);
195        memc_iwrapper.p_ring_in(signal_c[0]);
196        memc_iwrapper.p_ring_out(signal_c[1]);
197        memc_iwrapper.p_vci(signal_vci_ini_memc);
198 
199        proc_twrapper.p_clk(signal_clk);
200        proc_twrapper.p_resetn(signal_resetn);
201        proc_twrapper.p_ring_in(signal_c[1]);
202        proc_twrapper.p_ring_out(signal_c[0]);
203        proc_twrapper.p_vci(signal_vci_tgt_proc);
204
205        // Ring x connection
206        memc_ixwrapper.p_clk(signal_clk);
207        memc_ixwrapper.p_resetn(signal_resetn);
208        memc_ixwrapper.p_ring_in(signal_x[0]);
209        memc_ixwrapper.p_ring_out(signal_x[1]);
210        memc_ixwrapper.p_vci(signal_vci_ixr_memc);
211
212        xram_wrapper.p_clk(signal_clk);
213        xram_wrapper.p_resetn(signal_resetn);
214        xram_wrapper.p_ring_in(signal_x[1]);
215        xram_wrapper.p_ring_out(signal_x[0]);
216        xram_wrapper.p_vci(signal_vci_tgt_xram);
217
218        int ncycles;
219
220#ifndef SOCVIEW
221        if (argc == 2) {
222                ncycles = std::atoi(argv[1]);
223        } else {
224                std::cerr
225                        << std::endl
226                        << "The number of simulation cycles must "
227                           "be defined in the command line"
228                        << std::endl;
229                exit(1);
230        }
231
232        sc_start(sc_core::sc_time(0, SC_NS));
233        signal_resetn = false;
234
235        sc_start(sc_core::sc_time(1, SC_NS));
236        signal_resetn = true;
237
238        for (int i = 0; i < ncycles ; i+=1000) {
239                sc_start(sc_core::sc_time(1000, SC_NS));
240                //proc.print_stats();
241                //memc.print_stats();
242        }
243
244        std::cout << "Hit ENTER to end simulation" << std::endl;
245
246        char buf[1];
247
248        std::cin.getline(buf,1);
249        return EXIT_SUCCESS;
250#else
251        ncycles = 1;
252        sc_start(sc_core::sc_time(0, SC_NS));
253        signal_resetn = false;
254        sc_start(sc_core::sc_time(1, SC_NS));
255        signal_resetn = true;
256
257        debug();
258        return EXIT_SUCCESS;
259#endif
260}
261
262int sc_main (int argc, char *argv[])
263{
264        try {
265                return _main(argc, argv);
266        } catch (std::exception &e) {
267                std::cout << e.what() << std::endl;
268        } catch (...) {
269                std::cout << "Unknown exception occured" << std::endl;
270                throw;
271        }
272        return 1;
273}
Note: See TracBrowser for help on using the repository browser.