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

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