source: branches/v4/platforms/caba-new_vdspin-test/top.cpp @ 410

Last change on this file since 410 was 87, checked in by simerabe, 14 years ago

platform for new vdspin_router/vci_local_ring_fast

File size: 46.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_mem_cache_v3.h"
14#include "vci_cc_xcache_wrapper_v1.h"
15#include "vci_local_ring_fast.h"
16#include "vci_simple_ring_fast.h"
17#include "virtual_dspin_router.h"
18
19#ifdef USE_GDB_SERVER
20#include "iss/gdbserver.h"
21#endif
22
23#include "segmentation.h"
24
25#define X_MAX           2
26#define Y_MAX           2
27#define N_PROCS         16
28#define N_CLUSTERS      X_MAX*Y_MAX
29// Router ports index
30#define NORTH           0
31#define SOUTH           1
32#define EAST            2
33#define WEST            3
34#define LOCAL           4
35
36// DSPIN flit widths
37#define cmd_width       40
38#define rsp_width       33
39
40// VCI address format
41#define adr_width       32
42#define x_width         1 //4
43#define y_width         1 //4
44#define l_width         4
45
46//  cluster index (from coordinates)
47#define cluster(x,y)    (y + Y_MAX*x)
48int _main(int argc, char *argv[])
49{
50        using namespace sc_core;
51        // Avoid repeating these everywhere
52        using soclib::common::IntTab;
53        using soclib::common::Segment;
54        using namespace soclib::caba;
55
56        // Define VCI parameters
57        typedef soclib::caba::VciParams<4,8,32,2,1,1,8,4,4,1> vci_param;
58        typedef soclib::common::Iss2Simhelper<soclib::common::Mips32ElIss> proc_iss;
59       
60        // Mapping table
61
62        soclib::common::MappingTable maptabp(32, IntTab(2,10), IntTab(2,6), 0x00F00000);
63
64        maptabp.add(Segment("text"   , TEXT_BASE   , TEXT_SIZE   , IntTab(0,0), true));
65        maptabp.add(Segment("data0"  , DATA0_BASE  , DATA0_SIZE  , IntTab(0,0), true));
66        maptabp.add(Segment("data1"  , DATA1_BASE  , DATA1_SIZE  , IntTab(1,0), true));
67        maptabp.add(Segment("data2"  , DATA2_BASE  , DATA2_SIZE  , IntTab(2,0), true));
68        maptabp.add(Segment("data3"  , DATA3_BASE  , DATA3_SIZE  , IntTab(3,0), true));
69        maptabp.add(Segment("reset"  , RESET_BASE  , RESET_SIZE  , IntTab(2,0), true));
70        maptabp.add(Segment("excep"  , EXCEP_BASE  , EXCEP_SIZE  , IntTab(2,0), true));
71        maptabp.add(Segment("tty"    , TTY_BASE    , TTY_SIZE    , IntTab(3,1), false));
72
73        std::cout << maptabp << std::endl;
74
75        soclib::common::MappingTable maptabc(32, IntTab(2,10), IntTab(2,6), 0x00F00000);
76
77        maptabc.add(Segment("proc0"  , PROC0_BASE  , PROC0_SIZE  , IntTab(0,0), false, true, IntTab(0,0)));
78        maptabc.add(Segment("proc1"  , PROC1_BASE  , PROC1_SIZE  , IntTab(0,1), false, true, IntTab(0,1)));
79        maptabc.add(Segment("proc2"  , PROC2_BASE  , PROC2_SIZE  , IntTab(0,2), false, true, IntTab(0,2)));
80        maptabc.add(Segment("proc3"  , PROC3_BASE  , PROC3_SIZE  , IntTab(0,3), false, true, IntTab(0,3)));
81        maptabc.add(Segment("proc4"  , PROC4_BASE  , PROC4_SIZE  , IntTab(1,0), false, true, IntTab(1,0)));
82        maptabc.add(Segment("proc5"  , PROC5_BASE  , PROC5_SIZE  , IntTab(1,1), false, true, IntTab(1,1)));
83        maptabc.add(Segment("proc6"  , PROC6_BASE  , PROC6_SIZE  , IntTab(1,2), false, true, IntTab(1,2)));
84        maptabc.add(Segment("proc7"  , PROC7_BASE  , PROC7_SIZE  , IntTab(1,3), false, true, IntTab(1,3)));
85        maptabc.add(Segment("proc8"  , PROC8_BASE  , PROC8_SIZE  , IntTab(2,0), false, true, IntTab(2,0)));
86        maptabc.add(Segment("proc9"  , PROC9_BASE  , PROC9_SIZE  , IntTab(2,1), false, true, IntTab(2,1)));
87        maptabc.add(Segment("proc10" , PROC10_BASE , PROC10_SIZE , IntTab(2,2), false, true, IntTab(2,2)));
88        maptabc.add(Segment("proc11" , PROC11_BASE , PROC11_SIZE , IntTab(2,3), false, true, IntTab(2,3)));
89        maptabc.add(Segment("proc12" , PROC12_BASE , PROC12_SIZE , IntTab(3,0), false, true, IntTab(3,0)));
90        maptabc.add(Segment("proc13" , PROC13_BASE , PROC13_SIZE , IntTab(3,1), false, true, IntTab(3,1)));
91        maptabc.add(Segment("proc14" , PROC14_BASE , PROC14_SIZE , IntTab(3,2), false, true, IntTab(3,2)));
92        maptabc.add(Segment("proc15" , PROC15_BASE , PROC15_SIZE , IntTab(3,3), false, true, IntTab(3,3)));
93        maptabc.add(Segment("reset"  , RESET_BASE  , RESET_SIZE  , IntTab(2,4), false, false));
94        maptabc.add(Segment("excep"  , EXCEP_BASE  , EXCEP_SIZE  , IntTab(2,4), false, false));
95        maptabc.add(Segment("text"   , TEXT_BASE   , TEXT_SIZE   , IntTab(0,4), false, false));
96        maptabc.add(Segment("data0"  , DATA0_BASE  , DATA0_SIZE  , IntTab(0,4), false,false));
97        maptabc.add(Segment("data1"  , DATA1_BASE  , DATA1_SIZE  , IntTab(1,4), false,false));
98        maptabc.add(Segment("data2"  , DATA2_BASE  , DATA2_SIZE  , IntTab(2,4), false,false));
99        maptabc.add(Segment("data3"  , DATA3_BASE  , DATA3_SIZE  , IntTab(3,4), false,false));
100
101        std::cout << maptabc << std::endl;
102
103        soclib::common::MappingTable maptabx(32, IntTab(8), IntTab(8), 0x00F00000);
104        maptabx.add(Segment("reset" , RESET_BASE , RESET_SIZE , IntTab(0), false));
105        maptabx.add(Segment("excep" , EXCEP_BASE , EXCEP_SIZE , IntTab(0), false));
106        maptabx.add(Segment("text"  , TEXT_BASE  , TEXT_SIZE  , IntTab(0), false));
107        maptabx.add(Segment("data0"  , DATA0_BASE  , DATA0_SIZE  , IntTab(0), false));
108        maptabx.add(Segment("data1"  , DATA1_BASE  , DATA1_SIZE  , IntTab(0), false));
109        maptabx.add(Segment("data2"  , DATA2_BASE  , DATA2_SIZE  , IntTab(0), false));
110        maptabx.add(Segment("data3"  , DATA3_BASE  , DATA3_SIZE  , IntTab(0), false));
111
112        std::cout << maptabx << std::endl;
113
114        // Signals
115
116        sc_clock        signal_clk("clk");
117        sc_signal<bool> signal_resetn("resetn");
118   
119        sc_signal<bool> signal_proc0_it0("proc0_it0"); 
120        sc_signal<bool> signal_proc0_it1("proc0_it1"); 
121        sc_signal<bool> signal_proc0_it2("proc0_it2"); 
122        sc_signal<bool> signal_proc0_it3("proc0_it3"); 
123        sc_signal<bool> signal_proc0_it4("proc0_it4"); 
124        sc_signal<bool> signal_proc0_it5("proc0_it5");
125
126        sc_signal<bool> signal_proc1_it0("proc1_it0"); 
127        sc_signal<bool> signal_proc1_it1("proc1_it1"); 
128        sc_signal<bool> signal_proc1_it2("proc1_it2"); 
129        sc_signal<bool> signal_proc1_it3("proc1_it3"); 
130        sc_signal<bool> signal_proc1_it4("proc1_it4"); 
131        sc_signal<bool> signal_proc1_it5("proc1_it5");
132
133        sc_signal<bool> signal_proc2_it0("proc2_it0"); 
134        sc_signal<bool> signal_proc2_it1("proc2_it1"); 
135        sc_signal<bool> signal_proc2_it2("proc2_it2"); 
136        sc_signal<bool> signal_proc2_it3("proc2_it3"); 
137        sc_signal<bool> signal_proc2_it4("proc2_it4"); 
138        sc_signal<bool> signal_proc2_it5("proc2_it5");
139
140        sc_signal<bool> signal_proc3_it0("proc3_it0"); 
141        sc_signal<bool> signal_proc3_it1("proc3_it1"); 
142        sc_signal<bool> signal_proc3_it2("proc3_it2"); 
143        sc_signal<bool> signal_proc3_it3("proc3_it3"); 
144        sc_signal<bool> signal_proc3_it4("proc3_it4"); 
145        sc_signal<bool> signal_proc3_it5("proc3_it5");
146
147        sc_signal<bool> signal_proc4_it0("proc4_it0"); 
148        sc_signal<bool> signal_proc4_it1("proc4_it1"); 
149        sc_signal<bool> signal_proc4_it2("proc4_it2"); 
150        sc_signal<bool> signal_proc4_it3("proc4_it3"); 
151        sc_signal<bool> signal_proc4_it4("proc4_it4"); 
152        sc_signal<bool> signal_proc4_it5("proc4_it5");
153
154        sc_signal<bool> signal_proc5_it0("proc5_it0"); 
155        sc_signal<bool> signal_proc5_it1("proc5_it1"); 
156        sc_signal<bool> signal_proc5_it2("proc5_it2"); 
157        sc_signal<bool> signal_proc5_it3("proc5_it3"); 
158        sc_signal<bool> signal_proc5_it4("proc5_it4"); 
159        sc_signal<bool> signal_proc5_it5("proc5_it5");
160
161        sc_signal<bool> signal_proc6_it0("proc6_it0"); 
162        sc_signal<bool> signal_proc6_it1("proc6_it1"); 
163        sc_signal<bool> signal_proc6_it2("proc6_it2"); 
164        sc_signal<bool> signal_proc6_it3("proc6_it3"); 
165        sc_signal<bool> signal_proc6_it4("proc6_it4"); 
166        sc_signal<bool> signal_proc6_it5("proc6_it5");
167
168        sc_signal<bool> signal_proc7_it0("proc7_it0"); 
169        sc_signal<bool> signal_proc7_it1("proc7_it1"); 
170        sc_signal<bool> signal_proc7_it2("proc7_it2"); 
171        sc_signal<bool> signal_proc7_it3("proc7_it3"); 
172        sc_signal<bool> signal_proc7_it4("proc7_it4"); 
173        sc_signal<bool> signal_proc7_it5("proc7_it5");
174
175        sc_signal<bool> signal_proc8_it0("proc8_it0"); 
176        sc_signal<bool> signal_proc8_it1("proc8_it1"); 
177        sc_signal<bool> signal_proc8_it2("proc8_it2"); 
178        sc_signal<bool> signal_proc8_it3("proc8_it3"); 
179        sc_signal<bool> signal_proc8_it4("proc8_it4"); 
180        sc_signal<bool> signal_proc8_it5("proc8_it5");
181
182        sc_signal<bool> signal_proc9_it0("proc9_it0"); 
183        sc_signal<bool> signal_proc9_it1("proc9_it1"); 
184        sc_signal<bool> signal_proc9_it2("proc9_it2"); 
185        sc_signal<bool> signal_proc9_it3("proc9_it3"); 
186        sc_signal<bool> signal_proc9_it4("proc9_it4"); 
187        sc_signal<bool> signal_proc9_it5("proc9_it5");
188
189        sc_signal<bool> signal_proc10_it0("proc10_it0"); 
190        sc_signal<bool> signal_proc10_it1("proc10_it1"); 
191        sc_signal<bool> signal_proc10_it2("proc10_it2"); 
192        sc_signal<bool> signal_proc10_it3("proc10_it3"); 
193        sc_signal<bool> signal_proc10_it4("proc10_it4"); 
194        sc_signal<bool> signal_proc10_it5("proc10_it5");
195
196        sc_signal<bool> signal_proc11_it0("proc11_it0"); 
197        sc_signal<bool> signal_proc11_it1("proc11_it1"); 
198        sc_signal<bool> signal_proc11_it2("proc11_it2"); 
199        sc_signal<bool> signal_proc11_it3("proc11_it3"); 
200        sc_signal<bool> signal_proc11_it4("proc11_it4"); 
201        sc_signal<bool> signal_proc11_it5("proc11_it5");
202
203        sc_signal<bool> signal_proc12_it0("proc12_it0"); 
204        sc_signal<bool> signal_proc12_it1("proc12_it1"); 
205        sc_signal<bool> signal_proc12_it2("proc12_it2"); 
206        sc_signal<bool> signal_proc12_it3("proc12_it3"); 
207        sc_signal<bool> signal_proc12_it4("proc12_it4"); 
208        sc_signal<bool> signal_proc12_it5("proc12_it5");
209
210        sc_signal<bool> signal_proc13_it0("proc13_it0"); 
211        sc_signal<bool> signal_proc13_it1("proc13_it1"); 
212        sc_signal<bool> signal_proc13_it2("proc13_it2"); 
213        sc_signal<bool> signal_proc13_it3("proc13_it3"); 
214        sc_signal<bool> signal_proc13_it4("proc13_it4"); 
215        sc_signal<bool> signal_proc13_it5("proc13_it5");
216
217        sc_signal<bool> signal_proc14_it0("proc14_it0"); 
218        sc_signal<bool> signal_proc14_it1("proc14_it1"); 
219        sc_signal<bool> signal_proc14_it2("proc14_it2"); 
220        sc_signal<bool> signal_proc14_it3("proc14_it3"); 
221        sc_signal<bool> signal_proc14_it4("proc14_it4"); 
222        sc_signal<bool> signal_proc14_it5("proc14_it5");
223
224        sc_signal<bool> signal_proc15_it0("proc15_it0"); 
225        sc_signal<bool> signal_proc15_it1("proc15_it1"); 
226        sc_signal<bool> signal_proc15_it2("proc15_it2"); 
227        sc_signal<bool> signal_proc15_it3("proc15_it3"); 
228        sc_signal<bool> signal_proc15_it4("proc15_it4"); 
229        sc_signal<bool> signal_proc15_it5("proc15_it5");
230
231//--- Dspin router
232        DspinSignals<cmd_width>*** signal_dspin_false_cmd_in = alloc_elems<DspinSignals<cmd_width> >("signal_dspin_false_cmd_in", (Y_MAX*X_MAX), 2, 2);
233        DspinSignals<cmd_width>*** signal_dspin_false_cmd_out = alloc_elems<DspinSignals<cmd_width> >("signal_dspin_false_cmd_out", (Y_MAX*X_MAX), 2, 2);
234        DspinSignals<rsp_width>*** signal_dspin_false_rsp_in = alloc_elems<DspinSignals<rsp_width> >("signal_dspin_false_rsp_in", (Y_MAX*X_MAX), 2, 2);
235        DspinSignals<rsp_width>*** signal_dspin_false_rsp_out = alloc_elems<DspinSignals<rsp_width> >("signal_dspin_false_rsp_out", (Y_MAX*X_MAX), 2, 2);
236
237
238        // DSPIN signals between local ring & global interconnects
239        DspinSignals<cmd_width>** signal_dspin_cmd_l2g_d =
240            alloc_elems<DspinSignals<cmd_width> >("signal_dspin_cmd_l2g_d", X_MAX, Y_MAX);
241        DspinSignals<cmd_width>** signal_dspin_cmd_g2l_d =
242            alloc_elems<DspinSignals<cmd_width> >("signal_dspin_cmd_g2l_d", X_MAX, Y_MAX);
243       
244        DspinSignals<cmd_width>** signal_dspin_cmd_l2g_c =
245            alloc_elems<DspinSignals<cmd_width> >("signal_dspin_cmd_l2g_c", X_MAX, Y_MAX);
246        DspinSignals<cmd_width>** signal_dspin_cmd_g2l_c =
247            alloc_elems<DspinSignals<cmd_width> >("signal_dspin_cmd_g2l_c", X_MAX, Y_MAX);
248       
249        DspinSignals<rsp_width>** signal_dspin_rsp_l2g_d =
250            alloc_elems<DspinSignals<rsp_width> >("signal_dspin_rsp_l2g_d", X_MAX, Y_MAX);
251        DspinSignals<rsp_width>** signal_dspin_rsp_g2l_d =
252            alloc_elems<DspinSignals<rsp_width> >("signal_dspin_rsp_g2l_d", X_MAX, Y_MAX);
253       
254        DspinSignals<rsp_width>** signal_dspin_rsp_l2g_c =
255            alloc_elems<DspinSignals<rsp_width> >("signal_dspin_rsp_l2g_c", X_MAX, Y_MAX);
256        DspinSignals<rsp_width>** signal_dspin_rsp_g2l_c =
257            alloc_elems<DspinSignals<rsp_width> >("signal_dspin_rsp_g2l_c", X_MAX, Y_MAX);
258       
259        // Horizontal inter-clusters DSPIN signals
260        DspinSignals<cmd_width>*** signal_dspin_h_cmd_inc =
261            alloc_elems<DspinSignals<cmd_width> >("signal_dspin_h_cmd_inc", X_MAX-1, Y_MAX, 2);
262        DspinSignals<cmd_width>*** signal_dspin_h_cmd_dec =
263            alloc_elems<DspinSignals<cmd_width> >("signal_dspin_h_cmd_dec", X_MAX-1, Y_MAX, 2);
264        DspinSignals<rsp_width>*** signal_dspin_h_rsp_inc =
265            alloc_elems<DspinSignals<rsp_width> >("signal_dspin_h_rsp_inc", X_MAX-1, Y_MAX, 2);
266        DspinSignals<rsp_width>*** signal_dspin_h_rsp_dec =
267            alloc_elems<DspinSignals<rsp_width> >("signal_dspin_h_rsp_dec", X_MAX-1, Y_MAX, 2);
268       
269        // Vertical inter-clusters DSPIN signals
270        DspinSignals<cmd_width>*** signal_dspin_v_cmd_inc =
271            alloc_elems<DspinSignals<cmd_width> >("signal_dspin_v_cmd_inc", X_MAX, Y_MAX-1, 2);
272        DspinSignals<cmd_width>*** signal_dspin_v_cmd_dec =
273            alloc_elems<DspinSignals<cmd_width> >("signal_dspin_v_cmd_dec", X_MAX, Y_MAX-1, 2);
274        DspinSignals<rsp_width>*** signal_dspin_v_rsp_inc =
275            alloc_elems<DspinSignals<rsp_width> >("signal_dspin_v_rsp_inc", X_MAX, Y_MAX-1, 2);
276        DspinSignals<rsp_width>*** signal_dspin_v_rsp_dec =
277            alloc_elems<DspinSignals<rsp_width> >("signal_dspin_v_rsp_dec", X_MAX, Y_MAX-1, 2);
278
279        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc0("vci_ini_rw_proc0");
280        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc0("vci_ini_c_proc0");
281
282        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc0("vci_tgt_proc0");
283
284        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc1("vci_ini_rw_proc1");
285        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc1("vci_ini_c_proc1");
286
287        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc1("vci_tgt_proc1");
288
289        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc2("vci_ini_rw_proc2");
290        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc2("vci_ini_c_proc2");
291
292        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc2("vci_tgt_proc2");
293
294        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc3("vci_ini_rw_proc3");
295        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc3("vci_ini_c_proc3");
296
297        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc3("vci_tgt_proc3");
298
299        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc4("vci_ini_rw_proc4");
300        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc4("vci_ini_c_proc4");
301
302        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc4("vci_tgt_proc4");
303
304        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc5("vci_ini_rw_proc5");
305        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc5("vci_ini_c_proc5");
306
307        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc5("vci_tgt_proc5");
308
309        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc6("vci_ini_rw_proc6");
310        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc6("vci_ini_c_proc6");
311
312        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc6("vci_tgt_proc6");
313
314        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc7("vci_ini_rw_proc7");
315        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc7("vci_ini_c_proc7");
316
317        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc7("vci_tgt_proc7");
318
319        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc8("vci_ini_rw_proc8");
320        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc8("vci_ini_c_proc8");
321
322        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc8("vci_tgt_proc8");
323
324        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc9("vci_ini_rw_proc9");
325        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc9("vci_ini_c_proc9");
326
327        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc9("vci_tgt_proc9");
328
329        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc10("vci_ini_rw_proc10");
330        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc10("vci_ini_c_proc10");
331
332        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc10("vci_tgt_proc10");
333
334        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc11("vci_ini_rw_proc11");
335        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc11("vci_ini_c_proc11");
336
337        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc11("vci_tgt_proc11");
338
339        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc12("vci_ini_rw_proc12");
340        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc12("vci_ini_c_proc12");
341
342        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc12("vci_tgt_proc12");
343
344        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc13("vci_ini_rw_proc13");
345        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc13("vci_ini_c_proc13");
346
347        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc13("vci_tgt_proc13");
348
349        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc14("vci_ini_rw_proc14");
350        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc14("vci_ini_c_proc14");
351
352        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc14("vci_tgt_proc14");
353
354        soclib::caba::VciSignals<vci_param> signal_vci_ini_rw_proc15("vci_ini_rw_proc15");
355        soclib::caba::VciSignals<vci_param> signal_vci_ini_c_proc15("vci_ini_c_proc15");
356
357        soclib::caba::VciSignals<vci_param> signal_vci_tgt_proc15("vci_tgt_proc15");
358
359        soclib::caba::VciSignals<vci_param> signal_vci_tgt_tty("vci_tgt_tty");
360
361
362        soclib::caba::VciSignals<vci_param> signal_vci_tgt_xram("vci_tgt_xram");
363
364        soclib::caba::VciSignals<vci_param> signal_vci_ixr_memc0("vci_ixr_memc0");
365        soclib::caba::VciSignals<vci_param> signal_vci_ini_memc0("vci_ini_memc0");
366        soclib::caba::VciSignals<vci_param> signal_vci_tgt_memc0("vci_tgt_memc0");
367        soclib::caba::VciSignals<vci_param> signal_vci_tgt_cleanup_memc0("vci_tgt_cleanup_memc0");
368
369        soclib::caba::VciSignals<vci_param> signal_vci_ixr_memc1("vci_ixr_memc1");
370        soclib::caba::VciSignals<vci_param> signal_vci_ini_memc1("vci_ini_memc1");
371        soclib::caba::VciSignals<vci_param> signal_vci_tgt_memc1("vci_tgt_memc1");
372        soclib::caba::VciSignals<vci_param> signal_vci_tgt_cleanup_memc1("vci_tgt_cleanup_memc1");
373
374        soclib::caba::VciSignals<vci_param> signal_vci_ixr_memc2("vci_ixr_memc2");
375        soclib::caba::VciSignals<vci_param> signal_vci_ini_memc2("vci_ini_memc2");
376        soclib::caba::VciSignals<vci_param> signal_vci_tgt_memc2("vci_tgt_memc2");
377        soclib::caba::VciSignals<vci_param> signal_vci_tgt_cleanup_memc2("vci_tgt_cleanup_memc2");
378
379        soclib::caba::VciSignals<vci_param> signal_vci_ixr_memc3("vci_ixr_memc3");
380        soclib::caba::VciSignals<vci_param> signal_vci_ini_memc3("vci_ini_memc3");
381        soclib::caba::VciSignals<vci_param> signal_vci_tgt_memc3("vci_tgt_memc3");
382        soclib::caba::VciSignals<vci_param> signal_vci_tgt_cleanup_memc3("vci_tgt_cleanup_memc3");
383
384        sc_signal<bool> signal_tty_irq0("signal_tty_irq0"); 
385        sc_signal<bool> signal_tty_irq1("signal_tty_irq1"); 
386        sc_signal<bool> signal_tty_irq2("signal_tty_irq2"); 
387        sc_signal<bool> signal_tty_irq3("signal_tty_irq3"); 
388        sc_signal<bool> signal_tty_irq4("signal_tty_irq4"); 
389        sc_signal<bool> signal_tty_irq5("signal_tty_irq5"); 
390        sc_signal<bool> signal_tty_irq6("signal_tty_irq6"); 
391        sc_signal<bool> signal_tty_irq7("signal_tty_irq7"); 
392        sc_signal<bool> signal_tty_irq8("signal_tty_irq8"); 
393        sc_signal<bool> signal_tty_irq9("signal_tty_irq9"); 
394        sc_signal<bool> signal_tty_irq10("signal_tty_irq10"); 
395        sc_signal<bool> signal_tty_irq11("signal_tty_irq11"); 
396        sc_signal<bool> signal_tty_irq12("signal_tty_irq12"); 
397        sc_signal<bool> signal_tty_irq13("signal_tty_irq13"); 
398        sc_signal<bool> signal_tty_irq14("signal_tty_irq14"); 
399        sc_signal<bool> signal_tty_irq15("signal_tty_irq15"); 
400
401        soclib::common::Loader loader("soft/bin.soft");
402
403        //                                  init_rw   init_c   tgt
404        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
405        proc0("proc0", 0, maptabp, maptabc, IntTab(0,0),IntTab(0,0),IntTab(0,0),4,4,16,4,4,16);
406
407        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
408        proc1("proc1", 1, maptabp, maptabc, IntTab(0,1),IntTab(0,1),IntTab(0,1),4,4,16,4,4,16);
409
410        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
411        proc2("proc2", 2, maptabp, maptabc, IntTab(0,2),IntTab(0,2),IntTab(0,2),4,4,16,4,4,16);
412
413        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
414        proc3("proc3", 3, maptabp, maptabc, IntTab(0,3),IntTab(0,3),IntTab(0,3),4,4,16,4,4,16);
415
416        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
417        proc4("proc4", 4, maptabp, maptabc, IntTab(1,0),IntTab(1,0),IntTab(1,0),4,4,16,4,4,16);
418
419        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
420        proc5("proc5", 5, maptabp, maptabc, IntTab(1,1),IntTab(1,1),IntTab(1,1),4,4,16,4,4,16);
421
422        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
423        proc6("proc6", 6, maptabp, maptabc, IntTab(1,2),IntTab(1,2),IntTab(1,2),4,4,16,4,4,16);
424
425        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
426        proc7("proc7", 7, maptabp, maptabc, IntTab(1,3),IntTab(1,3),IntTab(1,3),4,4,16,4,4,16);
427
428        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
429        proc8("proc8", 8, maptabp, maptabc, IntTab(2,0),IntTab(2,0),IntTab(2,0),4,4,16,4,4,16);
430
431        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
432        proc9("proc9", 9, maptabp, maptabc, IntTab(2,1),IntTab(2,1),IntTab(2,1),4,4,16,4,4,16);
433
434        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
435        proc10("proc10", 10, maptabp, maptabc, IntTab(2,2),IntTab(2,2),IntTab(2,2),4,4,16,4,4,16);
436
437        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
438        proc11("proc11", 11, maptabp, maptabc, IntTab(2,3),IntTab(2,3),IntTab(2,3),4,4,16,4,4,16);
439
440        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
441        proc12("proc12", 12, maptabp, maptabc, IntTab(3,0),IntTab(3,0),IntTab(3,0),4,4,16,4,4,16);
442
443        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
444        proc13("proc13", 13, maptabp, maptabc, IntTab(3,1),IntTab(3,1),IntTab(3,1),4,4,16,4,4,16);
445
446        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
447        proc14("proc14", 14, maptabp, maptabc, IntTab(3,2),IntTab(3,2),IntTab(3,2),4,4,16,4,4,16);
448
449        soclib::caba::VciCcXCacheWrapperV1<vci_param, proc_iss > 
450        proc15("proc15", 15, maptabp, maptabc, IntTab(3,3),IntTab(3,3),IntTab(3,3),4,4,16,4,4,16);
451
452
453        soclib::caba::VciSimpleRam<vci_param> 
454        xram("xram",IntTab(0),maptabx, loader);
455
456        //                                  x_init    c_init    p_tgt     c_tgt
457        soclib::caba::VciMemCacheV3<vci_param> 
458//      memc0("memc0",maptabp,maptabc,maptabx,IntTab(0),IntTab(0,4),IntTab(0,0), IntTab(0,4), 16,256,16);
459        memc0("memc0",maptabp,maptabc,maptabx,IntTab(0),IntTab(0,4),IntTab(0,0), IntTab(0,4), 4,16,16);
460
461        soclib::caba::VciMemCacheV3<vci_param> 
462        memc1("memc1",maptabp,maptabc,maptabx,IntTab(1),IntTab(1,4),IntTab(1,0), IntTab(1,4), 4,16,16);
463
464        soclib::caba::VciMemCacheV3<vci_param> 
465        memc2("memc2",maptabp,maptabc,maptabx,IntTab(2),IntTab(2,4),IntTab(2,0), IntTab(2,4), 4,16,16);
466
467        soclib::caba::VciMemCacheV3<vci_param> 
468        memc3("memc3",maptabp,maptabc,maptabx,IntTab(3),IntTab(3,4),IntTab(3,0), IntTab(3,4), 4,16,16);
469       
470        soclib::caba::VciMultiTty<vci_param> 
471        tty("tty",IntTab(3,1),maptabp,"tty0","tty1","tty2","tty3","tty4","tty5","tty6","tty7","tty8","tty9","tty10","tty11","tty12","tty13","tty14","tty15",NULL);
472
473   
474        soclib::caba::VciLocalRingFast<vci_param, 40, 33> 
475        clusterPN0("clusterPN0",maptabp, IntTab(0), 2, 18, 4, 1 );
476
477        soclib::caba::VciLocalRingFast<vci_param, 40, 33>
478        clusterPN1("clusterPN1",maptabp, IntTab(1), 2, 18, 4, 1 );
479
480        soclib::caba::VciLocalRingFast<vci_param, 40, 33>
481        clusterPN2("clusterPN2",maptabp, IntTab(2), 2, 18, 4, 1 );
482
483        soclib::caba::VciLocalRingFast<vci_param, 40, 33>
484        clusterPN3("clusterPN3",maptabp, IntTab(3), 2, 18, 4, 2 );
485
486        soclib::caba::VciLocalRingFast<vci_param, 40, 33> 
487        clusterCN0("clusterCN0",maptabc, IntTab(0), 2, 2, 5, 5 );
488
489        soclib::caba::VciLocalRingFast<vci_param, 40, 33> 
490        clusterCN1("clusterCN1",maptabc, IntTab(1), 2, 2, 5, 5 );
491
492        soclib::caba::VciLocalRingFast<vci_param, 40, 33> 
493        clusterCN2("clusterCN2",maptabc, IntTab(2), 2, 2, 5, 5 );
494
495        soclib::caba::VciLocalRingFast<vci_param, 40, 33> 
496        clusterCN3("clusterCN3",maptabc, IntTab(3), 2, 2, 5, 5 );
497
498        soclib::caba::VciSimpleRingFast<vci_param, 40, 33>
499        xring("xring",maptabx, IntTab(), 2, 4, 1);
500
501        // Distributed Global Interconnect : one cmd router & one rsp router per cluster
502        VirtualDspinRouter<cmd_width>* cmdrouter = (VirtualDspinRouter<cmd_width>*)
503            malloc(sizeof(VirtualDspinRouter<cmd_width>) * X_MAX * Y_MAX);
504        VirtualDspinRouter<rsp_width>* rsprouter = (VirtualDspinRouter<rsp_width>*)
505            malloc(sizeof(VirtualDspinRouter<rsp_width>) * X_MAX * Y_MAX);
506
507        for ( size_t x = 0 ; x < X_MAX ; x++ )
508        {
509            for ( size_t y = 0 ; y < Y_MAX ; y++ )
510            {
511       
512                std::ostringstream   str_cmd;
513                std::ostringstream   str_rsp;
514
515                str_cmd << "cmdrouter_" << x << "_" << y;
516                str_rsp << "rsprouter_" << x << "_" << y;
517
518                new(&cmdrouter[cluster(x,y)]) VirtualDspinRouter<cmd_width>(str_cmd.str().c_str(),
519                                                         x,y,           // coordinate in the mesh
520                                                         x_width, y_width,      // x & y fields width
521                                                         4,4);          // input & output fifo depths
522                new(&rsprouter[cluster(x,y)]) VirtualDspinRouter<rsp_width>(str_rsp.str().c_str(),
523                                                         x,y,           // coordinates in mesh
524                                                         x_width, y_width,      // x & y fields width
525                                                         4,4);          // input & output fifo depths
526            }
527        }
528
529        proc0.p_clk(signal_clk);
530        proc0.p_resetn(signal_resetn);
531        proc0.p_irq[0](signal_proc0_it0);
532        proc0.p_irq[1](signal_proc0_it1);
533        proc0.p_irq[2](signal_proc0_it2);
534        proc0.p_irq[3](signal_proc0_it3); 
535        proc0.p_irq[4](signal_proc0_it4); 
536        proc0.p_irq[5](signal_proc0_it5); 
537        proc0.p_vci_ini_rw(signal_vci_ini_rw_proc0);
538        proc0.p_vci_ini_c(signal_vci_ini_c_proc0);
539        proc0.p_vci_tgt(signal_vci_tgt_proc0);
540
541        proc1.p_clk(signal_clk); 
542        proc1.p_resetn(signal_resetn); 
543        proc1.p_irq[0](signal_proc1_it0); 
544        proc1.p_irq[1](signal_proc1_it1); 
545        proc1.p_irq[2](signal_proc1_it2); 
546        proc1.p_irq[3](signal_proc1_it3); 
547        proc1.p_irq[4](signal_proc1_it4); 
548        proc1.p_irq[5](signal_proc1_it5); 
549        proc1.p_vci_ini_rw(signal_vci_ini_rw_proc1);
550        proc1.p_vci_ini_c(signal_vci_ini_c_proc1);
551        proc1.p_vci_tgt(signal_vci_tgt_proc1);
552
553        proc2.p_clk(signal_clk); 
554        proc2.p_resetn(signal_resetn); 
555        proc2.p_irq[0](signal_proc2_it0); 
556        proc2.p_irq[1](signal_proc2_it1); 
557        proc2.p_irq[2](signal_proc2_it2); 
558        proc2.p_irq[3](signal_proc2_it3); 
559        proc2.p_irq[4](signal_proc2_it4); 
560        proc2.p_irq[5](signal_proc2_it5); 
561        proc2.p_vci_ini_rw(signal_vci_ini_rw_proc2);
562        proc2.p_vci_ini_c(signal_vci_ini_c_proc2);
563        proc2.p_vci_tgt(signal_vci_tgt_proc2);
564
565        proc3.p_clk(signal_clk); 
566        proc3.p_resetn(signal_resetn); 
567        proc3.p_irq[0](signal_proc3_it0); 
568        proc3.p_irq[1](signal_proc3_it1); 
569        proc3.p_irq[2](signal_proc3_it2); 
570        proc3.p_irq[3](signal_proc3_it3); 
571        proc3.p_irq[4](signal_proc3_it4); 
572        proc3.p_irq[5](signal_proc3_it5); 
573        proc3.p_vci_ini_rw(signal_vci_ini_rw_proc3);
574        proc3.p_vci_ini_c(signal_vci_ini_c_proc3);
575        proc3.p_vci_tgt(signal_vci_tgt_proc3);
576
577        proc4.p_clk(signal_clk); 
578        proc4.p_resetn(signal_resetn); 
579        proc4.p_irq[0](signal_proc4_it0); 
580        proc4.p_irq[1](signal_proc4_it1); 
581        proc4.p_irq[2](signal_proc4_it2); 
582        proc4.p_irq[3](signal_proc4_it3); 
583        proc4.p_irq[4](signal_proc4_it4); 
584        proc4.p_irq[5](signal_proc4_it5); 
585        proc4.p_vci_ini_rw(signal_vci_ini_rw_proc4);
586        proc4.p_vci_ini_c(signal_vci_ini_c_proc4);
587        proc4.p_vci_tgt(signal_vci_tgt_proc4);
588
589        proc5.p_clk(signal_clk); 
590        proc5.p_resetn(signal_resetn); 
591        proc5.p_irq[0](signal_proc5_it0); 
592        proc5.p_irq[1](signal_proc5_it1); 
593        proc5.p_irq[2](signal_proc5_it2); 
594        proc5.p_irq[3](signal_proc5_it3); 
595        proc5.p_irq[4](signal_proc5_it4); 
596        proc5.p_irq[5](signal_proc5_it5); 
597        proc5.p_vci_ini_rw(signal_vci_ini_rw_proc5);
598        proc5.p_vci_ini_c(signal_vci_ini_c_proc5);
599        proc5.p_vci_tgt(signal_vci_tgt_proc5);
600
601        proc6.p_clk(signal_clk); 
602        proc6.p_resetn(signal_resetn); 
603        proc6.p_irq[0](signal_proc6_it0); 
604        proc6.p_irq[1](signal_proc6_it1); 
605        proc6.p_irq[2](signal_proc6_it2); 
606        proc6.p_irq[3](signal_proc6_it3); 
607        proc6.p_irq[4](signal_proc6_it4); 
608        proc6.p_irq[5](signal_proc6_it5); 
609        proc6.p_vci_ini_rw(signal_vci_ini_rw_proc6);
610        proc6.p_vci_ini_c(signal_vci_ini_c_proc6);
611        proc6.p_vci_tgt(signal_vci_tgt_proc6);
612
613        proc7.p_clk(signal_clk); 
614        proc7.p_resetn(signal_resetn); 
615        proc7.p_irq[0](signal_proc7_it0); 
616        proc7.p_irq[1](signal_proc7_it1); 
617        proc7.p_irq[2](signal_proc7_it2); 
618        proc7.p_irq[3](signal_proc7_it3); 
619        proc7.p_irq[4](signal_proc7_it4); 
620        proc7.p_irq[5](signal_proc7_it5); 
621        proc7.p_vci_ini_rw(signal_vci_ini_rw_proc7);
622        proc7.p_vci_ini_c(signal_vci_ini_c_proc7);
623        proc7.p_vci_tgt(signal_vci_tgt_proc7);
624
625        proc8.p_clk(signal_clk); 
626        proc8.p_resetn(signal_resetn); 
627        proc8.p_irq[0](signal_proc8_it0); 
628        proc8.p_irq[1](signal_proc8_it1); 
629        proc8.p_irq[2](signal_proc8_it2); 
630        proc8.p_irq[3](signal_proc8_it3); 
631        proc8.p_irq[4](signal_proc8_it4); 
632        proc8.p_irq[5](signal_proc8_it5); 
633        proc8.p_vci_ini_rw(signal_vci_ini_rw_proc8);
634        proc8.p_vci_ini_c(signal_vci_ini_c_proc8);
635        proc8.p_vci_tgt(signal_vci_tgt_proc8);
636
637        proc9.p_clk(signal_clk); 
638        proc9.p_resetn(signal_resetn); 
639        proc9.p_irq[0](signal_proc9_it0); 
640        proc9.p_irq[1](signal_proc9_it1); 
641        proc9.p_irq[2](signal_proc9_it2); 
642        proc9.p_irq[3](signal_proc9_it3); 
643        proc9.p_irq[4](signal_proc9_it4); 
644        proc9.p_irq[5](signal_proc9_it5); 
645        proc9.p_vci_ini_rw(signal_vci_ini_rw_proc9);
646        proc9.p_vci_ini_c(signal_vci_ini_c_proc9);
647        proc9.p_vci_tgt(signal_vci_tgt_proc9);
648
649        proc10.p_clk(signal_clk); 
650        proc10.p_resetn(signal_resetn); 
651        proc10.p_irq[0](signal_proc10_it0); 
652        proc10.p_irq[1](signal_proc10_it1); 
653        proc10.p_irq[2](signal_proc10_it2); 
654        proc10.p_irq[3](signal_proc10_it3); 
655        proc10.p_irq[4](signal_proc10_it4); 
656        proc10.p_irq[5](signal_proc10_it5); 
657        proc10.p_vci_ini_rw(signal_vci_ini_rw_proc10);
658        proc10.p_vci_ini_c(signal_vci_ini_c_proc10);
659        proc10.p_vci_tgt(signal_vci_tgt_proc10);
660
661        proc11.p_clk(signal_clk); 
662        proc11.p_resetn(signal_resetn); 
663        proc11.p_irq[0](signal_proc11_it0); 
664        proc11.p_irq[1](signal_proc11_it1); 
665        proc11.p_irq[2](signal_proc11_it2); 
666        proc11.p_irq[3](signal_proc11_it3); 
667        proc11.p_irq[4](signal_proc11_it4); 
668        proc11.p_irq[5](signal_proc11_it5); 
669        proc11.p_vci_ini_rw(signal_vci_ini_rw_proc11);
670        proc11.p_vci_ini_c(signal_vci_ini_c_proc11);
671        proc11.p_vci_tgt(signal_vci_tgt_proc11);
672
673        proc12.p_clk(signal_clk); 
674        proc12.p_resetn(signal_resetn); 
675        proc12.p_irq[0](signal_proc12_it0); 
676        proc12.p_irq[1](signal_proc12_it1); 
677        proc12.p_irq[2](signal_proc12_it2); 
678        proc12.p_irq[3](signal_proc12_it3); 
679        proc12.p_irq[4](signal_proc12_it4); 
680        proc12.p_irq[5](signal_proc12_it5); 
681        proc12.p_vci_ini_rw(signal_vci_ini_rw_proc12);
682        proc12.p_vci_ini_c(signal_vci_ini_c_proc12);
683        proc12.p_vci_tgt(signal_vci_tgt_proc12);
684
685        proc13.p_clk(signal_clk); 
686        proc13.p_resetn(signal_resetn); 
687        proc13.p_irq[0](signal_proc13_it0); 
688        proc13.p_irq[1](signal_proc13_it1); 
689        proc13.p_irq[2](signal_proc13_it2); 
690        proc13.p_irq[3](signal_proc13_it3); 
691        proc13.p_irq[4](signal_proc13_it4); 
692        proc13.p_irq[5](signal_proc13_it5); 
693        proc13.p_vci_ini_rw(signal_vci_ini_rw_proc13);
694        proc13.p_vci_ini_c(signal_vci_ini_c_proc13);
695        proc13.p_vci_tgt(signal_vci_tgt_proc13);
696
697        proc14.p_clk(signal_clk); 
698        proc14.p_resetn(signal_resetn); 
699        proc14.p_irq[0](signal_proc14_it0); 
700        proc14.p_irq[1](signal_proc14_it1); 
701        proc14.p_irq[2](signal_proc14_it2); 
702        proc14.p_irq[3](signal_proc14_it3); 
703        proc14.p_irq[4](signal_proc14_it4); 
704        proc14.p_irq[5](signal_proc14_it5); 
705        proc14.p_vci_ini_rw(signal_vci_ini_rw_proc14);
706        proc14.p_vci_ini_c(signal_vci_ini_c_proc14);
707        proc14.p_vci_tgt(signal_vci_tgt_proc14);
708
709        proc15.p_clk(signal_clk); 
710        proc15.p_resetn(signal_resetn); 
711        proc15.p_irq[0](signal_proc15_it0); 
712        proc15.p_irq[1](signal_proc15_it1); 
713        proc15.p_irq[2](signal_proc15_it2); 
714        proc15.p_irq[3](signal_proc15_it3); 
715        proc15.p_irq[4](signal_proc15_it4); 
716        proc15.p_irq[5](signal_proc15_it5); 
717        proc15.p_vci_ini_rw(signal_vci_ini_rw_proc15);
718        proc15.p_vci_ini_c(signal_vci_ini_c_proc15);
719        proc15.p_vci_tgt(signal_vci_tgt_proc15);
720
721        tty.p_clk(signal_clk);
722        tty.p_resetn(signal_resetn);
723        tty.p_vci(signal_vci_tgt_tty);
724        tty.p_irq[0](signal_tty_irq0);
725        tty.p_irq[1](signal_tty_irq1);
726        tty.p_irq[2](signal_tty_irq2);
727        tty.p_irq[3](signal_tty_irq3);
728        tty.p_irq[4](signal_tty_irq4);
729        tty.p_irq[5](signal_tty_irq5);
730        tty.p_irq[6](signal_tty_irq6);
731        tty.p_irq[7](signal_tty_irq7); 
732        tty.p_irq[8](signal_tty_irq8);
733        tty.p_irq[9](signal_tty_irq9);
734        tty.p_irq[10](signal_tty_irq10);
735        tty.p_irq[11](signal_tty_irq11); 
736        tty.p_irq[12](signal_tty_irq12);
737        tty.p_irq[13](signal_tty_irq13);
738        tty.p_irq[14](signal_tty_irq14);
739        tty.p_irq[15](signal_tty_irq15); 
740
741        memc0.p_clk(signal_clk);
742        memc0.p_resetn(signal_resetn);
743        memc0.p_vci_tgt(signal_vci_tgt_memc0);
744        memc0.p_vci_tgt_cleanup(signal_vci_tgt_cleanup_memc0);
745        memc0.p_vci_ini(signal_vci_ini_memc0);
746        memc0.p_vci_ixr(signal_vci_ixr_memc0);
747
748        memc1.p_clk(signal_clk);
749        memc1.p_resetn(signal_resetn);
750        memc1.p_vci_tgt(signal_vci_tgt_memc1);
751        memc1.p_vci_tgt_cleanup(signal_vci_tgt_cleanup_memc1);
752        memc1.p_vci_ini(signal_vci_ini_memc1);
753        memc1.p_vci_ixr(signal_vci_ixr_memc1);
754
755        memc2.p_clk(signal_clk);
756        memc2.p_resetn(signal_resetn);
757        memc2.p_vci_tgt(signal_vci_tgt_memc2);
758        memc2.p_vci_tgt_cleanup(signal_vci_tgt_cleanup_memc2);
759        memc2.p_vci_ini(signal_vci_ini_memc2);
760        memc2.p_vci_ixr(signal_vci_ixr_memc2);
761
762        memc3.p_clk(signal_clk);
763        memc3.p_resetn(signal_resetn);
764        memc3.p_vci_tgt(signal_vci_tgt_memc3);
765        memc3.p_vci_tgt_cleanup(signal_vci_tgt_cleanup_memc3);
766        memc3.p_vci_ini(signal_vci_ini_memc3);
767        memc3.p_vci_ixr(signal_vci_ixr_memc3);
768
769
770        xram.p_clk(signal_clk);
771        xram.p_resetn(signal_resetn);
772        xram.p_vci(signal_vci_tgt_xram);       
773
774        ///////////////////////////////////////////////////////
775        // Réseau vers la XRAM
776        ///////////////////////////////////////////////////////
777
778        xring.p_clk(signal_clk);
779        xring.p_resetn(signal_resetn);
780
781        xring.p_to_initiator[0](signal_vci_ixr_memc0);
782        xring.p_to_initiator[1](signal_vci_ixr_memc1);
783        xring.p_to_initiator[2](signal_vci_ixr_memc2);
784        xring.p_to_initiator[3](signal_vci_ixr_memc3);
785
786        xring.p_to_target[0](signal_vci_tgt_xram);
787
788        ///////////////////////////////////////////////////////
789        // Routers connections
790        ///////////////////////////////////////////////////////
791
792        for ( size_t x = 0 ; x < X_MAX ; x++ )
793        {
794            for ( size_t y = 0 ; y < Y_MAX ; y++ )
795            {
796                // cmd DSPIN router
797                cmdrouter[cluster(x,y)].p_clk                   (signal_clk);
798                cmdrouter[cluster(x,y)].p_resetn                (signal_resetn);
799                cmdrouter[cluster(x,y)].p_out[0][LOCAL]         (signal_dspin_cmd_g2l_d[x][y]);
800                cmdrouter[cluster(x,y)].p_out[1][LOCAL]         (signal_dspin_cmd_g2l_c[x][y]);
801                cmdrouter[cluster(x,y)].p_in[0][LOCAL]          (signal_dspin_cmd_l2g_d[x][y]);
802                cmdrouter[cluster(x,y)].p_in[1][LOCAL]          (signal_dspin_cmd_l2g_c[x][y]);
803       
804                // rsp DSPIN router
805                rsprouter[cluster(x,y)].p_clk                   (signal_clk);
806                rsprouter[cluster(x,y)].p_resetn                (signal_resetn);
807                rsprouter[cluster(x,y)].p_out[0][LOCAL]         (signal_dspin_rsp_g2l_d[x][y]);
808                rsprouter[cluster(x,y)].p_out[1][LOCAL]         (signal_dspin_rsp_g2l_c[x][y]);
809                rsprouter[cluster(x,y)].p_in[0][LOCAL]          (signal_dspin_rsp_l2g_d[x][y]);
810                rsprouter[cluster(x,y)].p_in[1][LOCAL]          (signal_dspin_rsp_l2g_c[x][y]);
811            }
812        }
813
814        // Inter Clusters horizontal connections
815        for ( size_t x = 0 ; x < (X_MAX-1) ; x++ )
816        {
817            for ( size_t y = 0 ; y < Y_MAX ; y++ )
818            {
819                for ( size_t k = 0 ; k < 2 ; k++ )
820                {
821                    cmdrouter[cluster(x,y)].p_out[k][EAST]              (signal_dspin_h_cmd_inc[x][y][k]);             
822                    cmdrouter[cluster((x+1),y)].p_in[k][WEST]   (signal_dspin_h_cmd_inc[x][y][k]);
823       
824                    cmdrouter[cluster(x,y)].p_in[k][EAST]               (signal_dspin_h_cmd_dec[x][y][k]);             
825                    cmdrouter[cluster((x+1),y)].p_out[k][WEST]  (signal_dspin_h_cmd_dec[x][y][k]);
826       
827                    rsprouter[cluster(x,y)].p_out[k][EAST]              (signal_dspin_h_rsp_inc[x][y][k]);             
828                    rsprouter[cluster((x+1),y)].p_in[k][WEST]   (signal_dspin_h_rsp_inc[x][y][k]);
829       
830                    rsprouter[cluster(x,y)].p_in[k][EAST]               (signal_dspin_h_rsp_dec[x][y][k]);             
831                    rsprouter[cluster((x+1),y)].p_out[k][WEST]  (signal_dspin_h_rsp_dec[x][y][k]);
832               } 
833            }
834        }
835       
836//      std::cout << "returned after inter cluster are horizontally connected" << std::endl;
837       
838        // East & West boundary clusters connections
839       
840        for ( size_t y = 0 ; y < Y_MAX ; y++ )
841        {
842            for ( size_t k = 0 ; k < 2 ; k++ )
843            {
844                    cmdrouter[cluster(0,y)].p_in[k][WEST]           (signal_dspin_false_cmd_in[cluster(0,y)][k][0]);
845                    cmdrouter[cluster(0,y)].p_out[k][WEST]          (signal_dspin_false_cmd_out[cluster(0,y)][k][0]);
846                    rsprouter[cluster(0,y)].p_in[k][WEST]           (signal_dspin_false_rsp_in[cluster(0,y)][k][0]);
847                    rsprouter[cluster(0,y)].p_out[k][WEST]          (signal_dspin_false_rsp_out[cluster(0,y)][k][0]);
848       
849                    cmdrouter[cluster((X_MAX-1),y)].p_in[k][EAST]     (signal_dspin_false_cmd_in[cluster((X_MAX-1),y)][k][0]);
850                    cmdrouter[cluster((X_MAX-1),y)].p_out[k][EAST]    (signal_dspin_false_cmd_out[cluster((X_MAX-1),y)][k][0]);
851                    rsprouter[cluster((X_MAX-1),y)].p_in[k][EAST]     (signal_dspin_false_rsp_in[cluster((X_MAX-1),y)][k][0]);
852                    rsprouter[cluster((X_MAX-1),y)].p_out[k][EAST]    (signal_dspin_false_rsp_out[cluster((X_MAX-1),y)][k][0]);
853            }
854         }
855       
856//      std::cout << "returned after boundary clusters are horizontally connected" << std::endl;
857       
858        // Inter Clusters vertical connections
859        for ( size_t y = 0 ; y < (Y_MAX-1) ; y++ )
860        {
861            for ( size_t x = 0 ; x < X_MAX ; x++ )
862            {
863                for ( size_t k = 0 ; k < 2 ; k++ )
864                {
865                    cmdrouter[cluster(x,y)].p_out[k][NORTH]             (signal_dspin_v_cmd_inc[x][y][k]);             
866                    cmdrouter[cluster(x,(y+1))].p_in[k][SOUTH]  (signal_dspin_v_cmd_inc[x][y][k]);
867       
868                    cmdrouter[cluster(x,y)].p_in[k][NORTH]              (signal_dspin_v_cmd_dec[x][y][k]);             
869                    cmdrouter[cluster(x,(y+1))].p_out[k][SOUTH] (signal_dspin_v_cmd_dec[x][y][k]);
870       
871                    rsprouter[cluster(x,y)].p_out[k][NORTH]             (signal_dspin_v_rsp_inc[x][y][k]);             
872                    rsprouter[cluster(x,(y+1))].p_in[k][SOUTH]  (signal_dspin_v_rsp_inc[x][y][k]);
873       
874                    rsprouter[cluster(x,y)].p_in[k][NORTH]              (signal_dspin_v_rsp_dec[x][y][k]);             
875                    rsprouter[cluster(x,(y+1))].p_out[k][SOUTH] (signal_dspin_v_rsp_dec[x][y][k]);
876                }
877            }
878        }
879       
880        // North & South boundary clusters connections
881       
882        for ( size_t x = 0 ; x < X_MAX ; x++ )
883        {
884            for ( size_t k = 0 ; k < 2 ; k++ )
885            {
886                    cmdrouter[cluster(x,0)].p_in[k][SOUTH]          (signal_dspin_false_cmd_in[cluster(x,0)][k][1]);
887                    cmdrouter[cluster(x,0)].p_out[k][SOUTH]         (signal_dspin_false_cmd_out[cluster(x,0)][k][1]);
888                    rsprouter[cluster(x,0)].p_in[k][SOUTH]          (signal_dspin_false_rsp_in[cluster(x,0)][k][1]);
889                    rsprouter[cluster(x,0)].p_out[k][SOUTH]         (signal_dspin_false_rsp_out[cluster(x,0)][k][1]);
890       
891                    cmdrouter[cluster(x,(Y_MAX-1))].p_out[k][NORTH]   (signal_dspin_false_cmd_out[cluster(x,(Y_MAX-1))][k][1]);
892                    cmdrouter[cluster(x,(Y_MAX-1))].p_in[k][NORTH]    (signal_dspin_false_cmd_in[cluster(x,(Y_MAX-1))][k][1]);
893                    rsprouter[cluster(x,(Y_MAX-1))].p_out[k][NORTH]   (signal_dspin_false_rsp_out[cluster(x,(Y_MAX-1))][k][1]);
894                    rsprouter[cluster(x,(Y_MAX-1))].p_in[k][NORTH]    (signal_dspin_false_rsp_in[cluster(x,(Y_MAX-1))][k][1]);
895            }
896        }
897       
898//      std::cout << "returned after boundary clusters are vertically connected" << std::endl;
899
900        ///////////////////////////////////////////////////////
901        // Réseau des commandes primaires
902        ///////////////////////////////////////////////////////
903
904        clusterPN0.p_clk(signal_clk);
905        clusterPN0.p_resetn(signal_resetn);
906
907        clusterPN0.p_to_initiator[0](signal_vci_ini_rw_proc0);
908        clusterPN0.p_to_initiator[1](signal_vci_ini_rw_proc1);
909        clusterPN0.p_to_initiator[2](signal_vci_ini_rw_proc2);
910        clusterPN0.p_to_initiator[3](signal_vci_ini_rw_proc3);
911
912        clusterPN0.p_to_target[0](signal_vci_tgt_memc0);
913
914        clusterPN0.p_gate_cmd_out(signal_dspin_cmd_l2g_d[0][0]);
915        clusterPN0.p_gate_rsp_in(signal_dspin_rsp_g2l_d[0][0]);
916        clusterPN0.p_gate_cmd_in(signal_dspin_cmd_g2l_d[0][0]);
917        clusterPN0.p_gate_rsp_out(signal_dspin_rsp_l2g_d[0][0]);
918
919        clusterPN1.p_clk(signal_clk);
920        clusterPN1.p_resetn(signal_resetn);
921
922        clusterPN1.p_to_initiator[0](signal_vci_ini_rw_proc4);
923        clusterPN1.p_to_initiator[1](signal_vci_ini_rw_proc5);
924        clusterPN1.p_to_initiator[2](signal_vci_ini_rw_proc6);
925        clusterPN1.p_to_initiator[3](signal_vci_ini_rw_proc7);
926
927        clusterPN1.p_to_target[0](signal_vci_tgt_memc1);
928
929        clusterPN1.p_gate_cmd_out(signal_dspin_cmd_l2g_d[0][1]);
930        clusterPN1.p_gate_rsp_in(signal_dspin_rsp_g2l_d[0][1]);
931        clusterPN1.p_gate_cmd_in(signal_dspin_cmd_g2l_d[0][1]);
932        clusterPN1.p_gate_rsp_out(signal_dspin_rsp_l2g_d[0][1]);
933
934        clusterPN2.p_clk(signal_clk);
935        clusterPN2.p_resetn(signal_resetn);
936
937        clusterPN2.p_to_initiator[0](signal_vci_ini_rw_proc8);
938        clusterPN2.p_to_initiator[1](signal_vci_ini_rw_proc9);
939        clusterPN2.p_to_initiator[2](signal_vci_ini_rw_proc10);
940        clusterPN2.p_to_initiator[3](signal_vci_ini_rw_proc11);
941       
942        clusterPN2.p_to_target[0](signal_vci_tgt_memc2);
943
944        clusterPN2.p_gate_cmd_out(signal_dspin_cmd_l2g_d[1][0]);
945        clusterPN2.p_gate_rsp_in(signal_dspin_rsp_g2l_d[1][0]);
946        clusterPN2.p_gate_cmd_in(signal_dspin_cmd_g2l_d[1][0]);
947        clusterPN2.p_gate_rsp_out(signal_dspin_rsp_l2g_d[1][0]);
948
949        clusterPN3.p_clk(signal_clk);
950        clusterPN3.p_resetn(signal_resetn);
951
952        clusterPN3.p_to_initiator[0](signal_vci_ini_rw_proc12);
953        clusterPN3.p_to_initiator[1](signal_vci_ini_rw_proc13);
954        clusterPN3.p_to_initiator[2](signal_vci_ini_rw_proc14);
955        clusterPN3.p_to_initiator[3](signal_vci_ini_rw_proc15);
956
957        clusterPN3.p_to_target[0](signal_vci_tgt_memc3);
958        clusterPN3.p_to_target[1](signal_vci_tgt_tty);
959
960        clusterPN3.p_gate_cmd_out(signal_dspin_cmd_l2g_d[1][1]);
961        clusterPN3.p_gate_rsp_in(signal_dspin_rsp_g2l_d[1][1]);
962        clusterPN3.p_gate_cmd_in(signal_dspin_cmd_g2l_d[1][1]);
963        clusterPN3.p_gate_rsp_out(signal_dspin_rsp_l2g_d[1][1]);
964
965//      std::cout << "returned after clusterPN3 connected" << std::endl;
966       
967        ///////////////////////////////////////////////////////
968        // Réseau des commandes de cohérence
969        ///////////////////////////////////////////////////////
970        clusterCN0.p_clk(signal_clk);
971        clusterCN0.p_resetn(signal_resetn);
972
973        clusterCN0.p_to_initiator[4](signal_vci_ini_memc0);
974        clusterCN0.p_to_initiator[0](signal_vci_ini_c_proc0);
975        clusterCN0.p_to_initiator[1](signal_vci_ini_c_proc1);
976        clusterCN0.p_to_initiator[2](signal_vci_ini_c_proc2);
977        clusterCN0.p_to_initiator[3](signal_vci_ini_c_proc3);
978
979        clusterCN0.p_to_target[0](signal_vci_tgt_proc0);
980        clusterCN0.p_to_target[1](signal_vci_tgt_proc1);
981        clusterCN0.p_to_target[2](signal_vci_tgt_proc2);
982        clusterCN0.p_to_target[3](signal_vci_tgt_proc3);
983        clusterCN0.p_to_target[4](signal_vci_tgt_cleanup_memc0);
984
985        clusterCN0.p_gate_cmd_out(signal_dspin_cmd_l2g_c[0][0]);
986        clusterCN0.p_gate_rsp_in(signal_dspin_rsp_g2l_c[0][0]);
987        clusterCN0.p_gate_cmd_in(signal_dspin_cmd_g2l_c[0][0]);
988        clusterCN0.p_gate_rsp_out(signal_dspin_rsp_l2g_c[0][0]);
989
990        clusterCN1.p_clk(signal_clk);
991        clusterCN1.p_resetn(signal_resetn);
992
993        clusterCN1.p_to_initiator[4](signal_vci_ini_memc1);
994        clusterCN1.p_to_initiator[0](signal_vci_ini_c_proc4);
995        clusterCN1.p_to_initiator[1](signal_vci_ini_c_proc5);
996        clusterCN1.p_to_initiator[2](signal_vci_ini_c_proc6);
997        clusterCN1.p_to_initiator[3](signal_vci_ini_c_proc7);
998
999        clusterCN1.p_to_target[0](signal_vci_tgt_proc4);
1000        clusterCN1.p_to_target[1](signal_vci_tgt_proc5);
1001        clusterCN1.p_to_target[2](signal_vci_tgt_proc6);
1002        clusterCN1.p_to_target[3](signal_vci_tgt_proc7);
1003        clusterCN1.p_to_target[4](signal_vci_tgt_cleanup_memc1);
1004
1005        clusterCN1.p_gate_cmd_out(signal_dspin_cmd_l2g_c[0][1]);
1006        clusterCN1.p_gate_rsp_in(signal_dspin_rsp_g2l_c[0][1]);
1007        clusterCN1.p_gate_cmd_in(signal_dspin_cmd_g2l_c[0][1]);
1008        clusterCN1.p_gate_rsp_out(signal_dspin_rsp_l2g_c[0][1]);
1009
1010        clusterCN2.p_clk(signal_clk);
1011        clusterCN2.p_resetn(signal_resetn);
1012
1013        clusterCN2.p_to_initiator[4](signal_vci_ini_memc2);
1014        clusterCN2.p_to_initiator[0](signal_vci_ini_c_proc8);
1015        clusterCN2.p_to_initiator[1](signal_vci_ini_c_proc9);
1016        clusterCN2.p_to_initiator[2](signal_vci_ini_c_proc10);
1017        clusterCN2.p_to_initiator[3](signal_vci_ini_c_proc11);
1018
1019        clusterCN2.p_to_target[0](signal_vci_tgt_proc8);
1020        clusterCN2.p_to_target[1](signal_vci_tgt_proc9);
1021        clusterCN2.p_to_target[2](signal_vci_tgt_proc10);
1022        clusterCN2.p_to_target[3](signal_vci_tgt_proc11);
1023        clusterCN2.p_to_target[4](signal_vci_tgt_cleanup_memc2);
1024
1025        clusterCN2.p_gate_cmd_out(signal_dspin_cmd_l2g_c[1][0]);
1026        clusterCN2.p_gate_rsp_in(signal_dspin_rsp_g2l_c[1][0]);
1027        clusterCN2.p_gate_cmd_in(signal_dspin_cmd_g2l_c[1][0]);
1028        clusterCN2.p_gate_rsp_out(signal_dspin_rsp_l2g_c[1][0]);
1029
1030        clusterCN3.p_clk(signal_clk);
1031        clusterCN3.p_resetn(signal_resetn);
1032
1033        clusterCN3.p_to_initiator[4](signal_vci_ini_memc3);
1034        clusterCN3.p_to_initiator[0](signal_vci_ini_c_proc12);
1035        clusterCN3.p_to_initiator[1](signal_vci_ini_c_proc13);
1036        clusterCN3.p_to_initiator[2](signal_vci_ini_c_proc14);
1037        clusterCN3.p_to_initiator[3](signal_vci_ini_c_proc15);
1038
1039        clusterCN3.p_to_target[0](signal_vci_tgt_proc12);
1040        clusterCN3.p_to_target[1](signal_vci_tgt_proc13);
1041        clusterCN3.p_to_target[2](signal_vci_tgt_proc14);
1042        clusterCN3.p_to_target[3](signal_vci_tgt_proc15);
1043        clusterCN3.p_to_target[4](signal_vci_tgt_cleanup_memc3);
1044
1045        clusterCN3.p_gate_cmd_out(signal_dspin_cmd_l2g_c[1][1]);
1046        clusterCN3.p_gate_rsp_in(signal_dspin_rsp_g2l_c[1][1]);
1047        clusterCN3.p_gate_cmd_in(signal_dspin_cmd_g2l_c[1][1]);
1048        clusterCN3.p_gate_rsp_out(signal_dspin_rsp_l2g_c[1][1]);
1049
1050
1051        ////////////////////////////////////////////////////////
1052        ////////////////////////////////////////////////////////
1053
1054        int ncycles;
1055
1056#ifndef SOCVIEW
1057        if (argc == 2) {
1058                ncycles = std::atoi(argv[1]);
1059        } else {
1060                std::cerr
1061                        << std::endl
1062                        << "The number of simulation cycles must "
1063                           "be defined in the command line"
1064                        << std::endl;
1065                exit(1);
1066        }
1067
1068        sc_start(sc_core::sc_time(0, SC_NS));
1069        signal_resetn = false;
1070
1071        for(size_t t = 0; t < X_MAX*Y_MAX; t++)
1072        {
1073            for (size_t k = 0; k < 2; k++)
1074            {
1075                for(size_t a = 0; a < 2; a ++)
1076                {
1077                        signal_dspin_false_cmd_in[t][k][a].write = false;
1078                        signal_dspin_false_cmd_in[t][k][a].read = true;
1079                        signal_dspin_false_cmd_out[t][k][a].write = false;
1080                        signal_dspin_false_cmd_out[t][k][a].read = true;
1081       
1082                        signal_dspin_false_rsp_in[t][k][a].write = false;
1083                        signal_dspin_false_rsp_in[t][k][a].read = true;
1084                        signal_dspin_false_rsp_out[t][k][a].write = false;
1085                        signal_dspin_false_rsp_out[t][k][a].read = true;
1086               }
1087            }
1088        }
1089
1090
1091        sc_start(sc_core::sc_time(1, SC_NS));
1092        signal_resetn = true;
1093
1094        for (int i = 0; i < ncycles ; i+=1) {
1095                sc_start(sc_core::sc_time(1, SC_NS));
1096               //std::cout << " +++++++++ cycle : " << std::dec << i << std::endl;
1097               //cmdrouter[0].printTrace(1);   // channel 0 : Direct, channel 1 : Coherence
1098               //cmdrouter[1].printTrace(1);           
1099               //cmdrouter[2].printTrace(1);           
1100               //cmdrouter[3].printTrace(1);           
1101        }
1102
1103        std::cout << "Hit ENTER to end simulation" << std::endl;
1104        char buf[1];
1105
1106        std::cin.getline(buf,1);
1107        return EXIT_SUCCESS;
1108#else
1109        ncycles = 1;
1110        sc_start(sc_core::sc_time(0, SC_NS));
1111        signal_resetn = false;
1112        sc_start(sc_core::sc_time(1, SC_NS));
1113        signal_resetn = true;
1114
1115        debug();
1116        return EXIT_SUCCESS;
1117#endif
1118}
1119
1120int sc_main (int argc, char *argv[])
1121{
1122        try {
1123                return _main(argc, argv);
1124        } catch (std::exception &e) {
1125                std::cout << e.what() << std::endl;
1126        } catch (...) {
1127                std::cout << "Unknown exception occured" << std::endl;
1128                throw;
1129        }
1130        return 1;
1131}
1132
Note: See TracBrowser for help on using the repository browser.