source: trunk/platforms/caba-ring-ccxcachev1_memcachev1-mipsel/top.cpp@ 85

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

removing duplicate ring_signals_2

  • 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.4 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_vgmn.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,6,6,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(2), true));
39 maptabp.add(Segment("excep", EXCEP_BASE, EXCEP_SIZE, IntTab(2), true));
40 maptabp.add(Segment("text" , TEXT_BASE , TEXT_SIZE , IntTab(2), 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(2), 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_rom("vci_tgt_rom");
117
118 soclib::caba::VciSignals<vci_param> signal_vci_tgt_xram("vci_tgt_xram");
119
120 soclib::caba::VciSignals<vci_param> signal_vci_ixr_memc("vci_ixr_memc");
121 soclib::caba::VciSignals<vci_param> signal_vci_ini_memc("vci_ini_memc");
122 soclib::caba::VciSignals<vci_param> signal_vci_tgt_memc("vci_tgt_memc");
123 soclib::caba::VciSignals<vci_param> signal_vci_tgt_cleanup_memc("vci_tgt_cleanup_memc");
124
125 sc_signal<bool> signal_tty_irq0("signal_tty_irq0");
126 sc_signal<bool> signal_tty_irq1("signal_tty_irq1");
127 sc_signal<bool> signal_tty_irq2("signal_tty_irq2");
128 sc_signal<bool> signal_tty_irq3("signal_tty_irq3");
129
130 sc_signal<bool> signal_stuck0("signal_stuck0");
131
132 soclib::common::Loader loader("soft/bin.soft");
133
134 // Components
135 soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
136 proc0("proc0", 0, maptabp, maptabc, IntTab(0),IntTab(0),IntTab(0),4,64,16,4,64,16);
137
138 soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
139 proc1("proc1", 1, maptabp, maptabc, IntTab(1),IntTab(1),IntTab(1),4,64,16,4,64,16);
140
141 soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
142 proc2("proc2", 2, maptabp, maptabc, IntTab(2),IntTab(2),IntTab(2),4,64,16,4,64,16);
143
144 soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss >
145 proc3("proc3", 3, maptabp, maptabc, IntTab(3),IntTab(3),IntTab(3),4,64,16,4,64,16);
146
147 soclib::caba::VciSimpleRam<vci_param>
148 rom("rom", IntTab(0), maptabp, loader);
149
150 soclib::caba::VciSimpleRam<vci_param>
151 xram("xram", IntTab(0), maptabx, loader);
152
153 soclib::caba::VciMemCacheV1<vci_param>
154 memc("memc",maptabp,maptabc,maptabx,IntTab(0),IntTab(4),IntTab(2), IntTab(4),4,16,16);
155
156 soclib::caba::VciMultiTty<vci_param>
157 tty("tty",IntTab(1),maptabp,"tty0","tty1","tty2","tty3",NULL);
158
159// soclib::caba::VciLogger<vci_param> vci_logger_proc0("vci_logger_proc0",maptabp);
160// soclib::caba::VciLogger<vci_param> vci_logger_proc1("vci_logger_proc1",maptabp);
161// soclib::caba::VciLogger<vci_param> vci_logger_proc2("vci_logger_proc2",maptabp);
162// soclib::caba::VciLogger<vci_param> vci_logger_proc3("vci_logger_proc3",maptabp);
163// soclib::caba::VciLogger<vci_param> vci_logger_memc("vci_logger_memc",maptabp);
164
165// soclib::caba::VciSimpleRingNetwork<vci_param>
166// ringd("ringd",maptabp, IntTab(), 2, 4, 3);
167 soclib::caba::VciVgmn<vci_param>
168 ringd("ringd",maptabp, 4, 3, 2, 2);
169
170// soclib::caba::VciSimpleRingNetwork<vci_param>
171// ringc("ringc",maptabc, IntTab(), 2, 5, 5);
172 soclib::caba::VciVgmn<vci_param>
173 ringc("ringc",maptabc, 5, 5, 2, 2);
174
175// soclib::caba::VciSimpleRingNetwork<vci_param>
176// ringx("ringx",maptabx, IntTab(), 2, 1, 1);
177 soclib::caba::VciVgmn<vci_param>
178 ringx("ringx",maptabx, 1, 1, 2, 2);
179
180 // Net-List
181
182 proc0.p_clk(signal_clk);
183 proc0.p_resetn(signal_resetn);
184 proc0.p_irq[0](signal_proc0_it0);
185 proc0.p_irq[1](signal_proc0_it1);
186 proc0.p_irq[2](signal_proc0_it2);
187 proc0.p_irq[3](signal_proc0_it3);
188 proc0.p_irq[4](signal_proc0_it4);
189 proc0.p_irq[5](signal_proc0_it5);
190 proc0.p_vci_ini_rw(signal_vci_ini_rw_proc0);
191 proc0.p_vci_ini_c(signal_vci_ini_c_proc0);
192 proc0.p_vci_tgt(signal_vci_tgt_proc0);
193
194 proc1.p_clk(signal_clk);
195 proc1.p_resetn(signal_resetn);
196 proc1.p_irq[0](signal_proc1_it0);
197 proc1.p_irq[1](signal_proc1_it1);
198 proc1.p_irq[2](signal_proc1_it2);
199 proc1.p_irq[3](signal_proc1_it3);
200 proc1.p_irq[4](signal_proc1_it4);
201 proc1.p_irq[5](signal_proc1_it5);
202 proc1.p_vci_ini_rw(signal_vci_ini_rw_proc1);
203 proc1.p_vci_ini_c(signal_vci_ini_c_proc1);
204 proc1.p_vci_tgt(signal_vci_tgt_proc1);
205
206 proc2.p_clk(signal_clk);
207 proc2.p_resetn(signal_resetn);
208 proc2.p_irq[0](signal_proc2_it0);
209 proc2.p_irq[1](signal_proc2_it1);
210 proc2.p_irq[2](signal_proc2_it2);
211 proc2.p_irq[3](signal_proc2_it3);
212 proc2.p_irq[4](signal_proc2_it4);
213 proc2.p_irq[5](signal_proc2_it5);
214 proc2.p_vci_ini_rw(signal_vci_ini_rw_proc2);
215 proc2.p_vci_ini_c(signal_vci_ini_c_proc2);
216 proc2.p_vci_tgt(signal_vci_tgt_proc2);
217
218 proc3.p_clk(signal_clk);
219 proc3.p_resetn(signal_resetn);
220 proc3.p_irq[0](signal_proc3_it0);
221 proc3.p_irq[1](signal_proc3_it1);
222 proc3.p_irq[2](signal_proc3_it2);
223 proc3.p_irq[3](signal_proc3_it3);
224 proc3.p_irq[4](signal_proc3_it4);
225 proc3.p_irq[5](signal_proc3_it5);
226 proc3.p_vci_ini_rw(signal_vci_ini_rw_proc3);
227 proc3.p_vci_ini_c(signal_vci_ini_c_proc3);
228 proc3.p_vci_tgt(signal_vci_tgt_proc3);
229
230 rom.p_clk(signal_clk);
231 rom.p_resetn(signal_resetn);
232 rom.p_vci(signal_vci_tgt_rom);
233
234// vci_logger_proc0.p_clk(signal_clk);
235// vci_logger_proc0.p_resetn(signal_resetn);
236// vci_logger_proc0.p_vci(signal_vci_ini_rw_proc0);
237
238// vci_logger_proc1.p_clk(signal_clk);
239// vci_logger_proc1.p_resetn(signal_resetn);
240// vci_logger_proc1.p_vci(signal_vci_ini_rw_proc2);
241
242// vci_logger_proc2.p_clk(signal_clk);
243// vci_logger_proc2.p_resetn(signal_resetn);
244// vci_logger_proc2.p_vci(signal_vci_ini_rw_proc2);
245
246// vci_logger_proc3.p_clk(signal_clk);
247// vci_logger_proc3.p_resetn(signal_resetn);
248// vci_logger_proc3.p_vci(signal_vci_ini_rw_proc3);
249
250// vci_logger_memc.p_clk(signal_clk);
251// vci_logger_memc.p_resetn(signal_resetn);
252// vci_logger_memc.p_vci(signal_vci_tgt_memc);
253
254 tty.p_clk(signal_clk);
255 tty.p_resetn(signal_resetn);
256 tty.p_vci(signal_vci_tgt_tty);
257 tty.p_irq[0](signal_tty_irq0);
258 tty.p_irq[1](signal_tty_irq1);
259 tty.p_irq[2](signal_tty_irq2);
260 tty.p_irq[3](signal_tty_irq3);
261
262 memc.p_clk(signal_clk);
263 memc.p_resetn(signal_resetn);
264 memc.p_vci_tgt(signal_vci_tgt_memc);
265 memc.p_vci_tgt_cleanup(signal_vci_tgt_cleanup_memc);
266 memc.p_vci_ini(signal_vci_ini_memc);
267 memc.p_vci_ixr(signal_vci_ixr_memc);
268
269 xram.p_clk(signal_clk);
270 xram.p_resetn(signal_resetn);
271 xram.p_vci(signal_vci_tgt_xram);
272
273 ringd.p_clk(signal_clk);
274 ringd.p_resetn(signal_resetn);
275 ringd.p_to_initiator[0](signal_vci_ini_rw_proc0);
276 ringd.p_to_initiator[1](signal_vci_ini_rw_proc1);
277 ringd.p_to_initiator[2](signal_vci_ini_rw_proc2);
278 ringd.p_to_initiator[3](signal_vci_ini_rw_proc3);
279 ringd.p_to_target[0](signal_vci_tgt_rom);
280 ringd.p_to_target[1](signal_vci_tgt_tty);
281 ringd.p_to_target[2](signal_vci_tgt_memc);
282
283 ringc.p_clk(signal_clk);
284 ringc.p_resetn(signal_resetn);
285 ringc.p_to_initiator[0](signal_vci_ini_c_proc0);
286 ringc.p_to_initiator[1](signal_vci_ini_c_proc1);
287 ringc.p_to_initiator[2](signal_vci_ini_c_proc2);
288 ringc.p_to_initiator[3](signal_vci_ini_c_proc3);
289 ringc.p_to_initiator[4](signal_vci_ini_memc);
290 ringc.p_to_target[0](signal_vci_tgt_proc0);
291 ringc.p_to_target[1](signal_vci_tgt_proc1);
292 ringc.p_to_target[2](signal_vci_tgt_proc2);
293 ringc.p_to_target[3](signal_vci_tgt_proc3);
294 ringc.p_to_target[4](signal_vci_tgt_cleanup_memc);
295
296 ringx.p_clk(signal_clk);
297 ringx.p_resetn(signal_resetn);
298 ringx.p_to_initiator[0](signal_vci_ixr_memc);
299 ringx.p_to_target[0](signal_vci_tgt_xram);
300
301 int ncycles;
302
303#ifndef SOCVIEW
304 if (argc == 2) {
305 ncycles = std::atoi(argv[1]);
306 } else {
307 std::cerr
308 << std::endl
309 << "The number of simulation cycles must "
310 "be defined in the command line"
311 << std::endl;
312 exit(1);
313 }
314
315 sc_start(sc_core::sc_time(0, SC_NS));
316 signal_resetn = false;
317 signal_stuck0 = false;
318
319 sc_start(sc_core::sc_time(1, SC_NS));
320 signal_resetn = true;
321
322 for (int i = 0; i < ncycles ; i++)
323 {
324 sc_start(sc_core::sc_time(1, SC_NS));
325
326 }
327
328 std::cout << "Hit ENTER to end simulation" << std::endl;
329 char buf[1];
330 std::cin.getline(buf,1);
331
332 return EXIT_SUCCESS;
333#else
334 ncycles = 1;
335 sc_start(sc_core::sc_time(0, SC_NS));
336 signal_resetn = false;
337 sc_start(sc_core::sc_time(1, SC_NS));
338 signal_resetn = true;
339
340 debug();
341 return EXIT_SUCCESS;
342#endif
343}
344
345int sc_main (int argc, char *argv[])
346{
347 try {
348 return _main(argc, argv);
349 } catch (std::exception &e) {
350 std::cout << e.what() << std::endl;
351 } catch (...) {
352 std::cout << "Unknown exception occured" << std::endl;
353 throw;
354 }
355 return 1;
356}
Note: See TracBrowser for help on using the repository browser.