source: trunk/platforms/caba-ring-ccxcachev1_memcachev3-mipsel/top.cpp@ 95

Last change on this file since 95 was 86, checked in by simerabe, 16 years ago

simple_ring_fast platform

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