source: branches/v5/modules/dspin_local_ring_fast_c/caba/docs/top.cpp

Last change on this file was 327, checked in by simerabe, 14 years ago

introducing topcell examples using dspin ring interconnect

  • Property svn:executable set to *
File size: 21.6 KB
Line 
1#include <systemc>
2#include <sys/time.h>
3#include <iostream>
4#include <cstdlib>
5#include <cstdarg>
6
7#include "mapping_table.h"
8#include "dspin_local_ring_fast_c.h"
9#include "soclib_vci_initiator.h"
10#include "soclib_vci_target.h"
11#include "alloc_elems.h"
12#include "vci_param.h"
13#include "virtual_dspin_router.h"
14
15// Router ports index
16#define NORTH 0
17#define SOUTH 1
18#define EAST 2
19#define WEST 3
20#define LOCAL 4
21
22#define X_MAX 2
23#define Y_MAX 2
24#define cmd_width 40
25#define rsp_width 33
26#define X_WIDTH 1
27#define Y_WIDTH 1
28#define SRCID_WIDTH 14
29
30#define cluster(x,y) (y+x*Y_MAX)
31
32#define CYCLES 10000000
33
34int _main(int argc, char *argv[])
35{
36 using namespace sc_core;
37 // Avoid repeating these everywhere
38 using soclib::common::IntTab;
39 using soclib::common::Segment;
40 using soclib::common::alloc_elems;
41 using namespace soclib::caba;
42
43 // Define VCI parameters
44 typedef soclib::caba::VciParams<4,8,32,1,1,1,14,4,4,1> vci_param;
45
46 // Mapping table primary network
47 soclib::common::MappingTable maptabp(32, IntTab(X_WIDTH + Y_WIDTH, SRCID_WIDTH - X_WIDTH - Y_WIDTH), IntTab(X_WIDTH + Y_WIDTH, SRCID_WIDTH - X_WIDTH - Y_WIDTH), 0x00FF0000);
48 for (size_t x = 0; x < X_MAX; x++)
49 {
50 for (size_t y = 0; y < Y_MAX; y++)
51 {
52 sc_uint<32> offset = cluster(x,y) << (32 - X_WIDTH - Y_WIDTH);
53
54 for ( size_t p = 0 ; p < 4 ; p++)
55 {
56 std::ostringstream sp;
57 sp << "c_seg_proc_" << x << "_" << y << "_" << p;
58 maptabp.add( Segment( sp.str() , (p << (32 - SRCID_WIDTH)) + offset , 0x10 , IntTab(cluster(x,y), p) , false));
59 }
60 }
61 }
62/*
63 soclib::common::MappingTable maptabp(32, IntTab(2,12), IntTab(2,12), 0xFF000000);
64
65 maptabp.add(Segment("target_0_0" , 0x00000000 , 0x00001000 , IntTab(0,0), true ));
66 maptabp.add(Segment("target_1_0" , 0x40000000 , 0x00001000 , IntTab(1,0), true ));
67 maptabp.add(Segment("target_1_1" , 0x40000000 , 0x00001000 , IntTab(1,1), true ));
68 maptabp.add(Segment("target_2_0" , 0x80000000 , 0x00001000 , IntTab(2,0), true ));
69 maptabp.add(Segment("target_2_1" , 0xC0000000 , 0x00001000 , IntTab(3,0), true ));
70*/
71 // Signals
72
73 sc_clock signal_clk("clk");
74 sc_signal<bool> signal_resetn("resetn");
75
76 DspinSignals<40> dspin_cmd[4][5];
77 DspinSignals<33> dspin_rsp[4][5];
78
79 //--- Dspin router
80 DspinSignals<cmd_width>*** signal_dspin_false_cmd_in = alloc_elems<DspinSignals<cmd_width> >("signal_dspin_false_cmd_in", (Y_MAX*X_MAX), 2, 2);
81 DspinSignals<cmd_width>*** signal_dspin_false_cmd_out = alloc_elems<DspinSignals<cmd_width> >("signal_dspin_false_cmd_out", (Y_MAX*X_MAX), 2, 2);
82 DspinSignals<rsp_width>*** signal_dspin_false_rsp_in = alloc_elems<DspinSignals<rsp_width> >("signal_dspin_false_rsp_in", (Y_MAX*X_MAX), 2, 2);
83 DspinSignals<rsp_width>*** signal_dspin_false_rsp_out = alloc_elems<DspinSignals<rsp_width> >("signal_dspin_false_rsp_out", (Y_MAX*X_MAX), 2, 2);
84
85
86 // DSPIN signals between local ring & global interconnects
87 DspinSignals<cmd_width>** signal_dspin_cmd_l2g_d =
88 alloc_elems<DspinSignals<cmd_width> >("signal_dspin_cmd_l2g_d", X_MAX, Y_MAX);
89 DspinSignals<cmd_width>** signal_dspin_cmd_g2l_d =
90 alloc_elems<DspinSignals<cmd_width> >("signal_dspin_cmd_g2l_d", X_MAX, Y_MAX);
91
92 DspinSignals<cmd_width>** signal_dspin_cmd_l2g_c =
93 alloc_elems<DspinSignals<cmd_width> >("signal_dspin_cmd_l2g_c", X_MAX, Y_MAX);
94 DspinSignals<cmd_width>** signal_dspin_cmd_g2l_c =
95 alloc_elems<DspinSignals<cmd_width> >("signal_dspin_cmd_g2l_c", X_MAX, Y_MAX);
96
97 DspinSignals<rsp_width>** signal_dspin_rsp_l2g_d =
98 alloc_elems<DspinSignals<rsp_width> >("signal_dspin_rsp_l2g_d", X_MAX, Y_MAX);
99 DspinSignals<rsp_width>** signal_dspin_rsp_g2l_d =
100 alloc_elems<DspinSignals<rsp_width> >("signal_dspin_rsp_g2l_d", X_MAX, Y_MAX);
101
102 DspinSignals<rsp_width>** signal_dspin_rsp_l2g_c =
103 alloc_elems<DspinSignals<rsp_width> >("signal_dspin_rsp_l2g_c", X_MAX, Y_MAX);
104 DspinSignals<rsp_width>** signal_dspin_rsp_g2l_c =
105 alloc_elems<DspinSignals<rsp_width> >("signal_dspin_rsp_g2l_c", X_MAX, Y_MAX);
106
107 // Horizontal inter-clusters DSPIN signals
108 DspinSignals<cmd_width>*** signal_dspin_h_cmd_inc =
109 alloc_elems<DspinSignals<cmd_width> >("signal_dspin_h_cmd_inc", X_MAX-1, Y_MAX, 2);
110 DspinSignals<cmd_width>*** signal_dspin_h_cmd_dec =
111 alloc_elems<DspinSignals<cmd_width> >("signal_dspin_h_cmd_dec", X_MAX-1, Y_MAX, 2);
112 DspinSignals<rsp_width>*** signal_dspin_h_rsp_inc =
113 alloc_elems<DspinSignals<rsp_width> >("signal_dspin_h_rsp_inc", X_MAX-1, Y_MAX, 2);
114 DspinSignals<rsp_width>*** signal_dspin_h_rsp_dec =
115 alloc_elems<DspinSignals<rsp_width> >("signal_dspin_h_rsp_dec", X_MAX-1, Y_MAX, 2);
116
117 // Vertical inter-clusters DSPIN signals
118 DspinSignals<cmd_width>*** signal_dspin_v_cmd_inc =
119 alloc_elems<DspinSignals<cmd_width> >("signal_dspin_v_cmd_inc", X_MAX, Y_MAX-1, 2);
120 DspinSignals<cmd_width>*** signal_dspin_v_cmd_dec =
121 alloc_elems<DspinSignals<cmd_width> >("signal_dspin_v_cmd_dec", X_MAX, Y_MAX-1, 2);
122 DspinSignals<rsp_width>*** signal_dspin_v_rsp_inc =
123 alloc_elems<DspinSignals<rsp_width> >("signal_dspin_v_rsp_inc", X_MAX, Y_MAX-1, 2);
124 DspinSignals<rsp_width>*** signal_dspin_v_rsp_dec =
125 alloc_elems<DspinSignals<rsp_width> >("signal_dspin_v_rsp_dec", X_MAX, Y_MAX-1, 2);
126
127 soclib::caba::SoclibVciInitiator<40,33> initp0("initp0", 0, 16, X_WIDTH, Y_WIDTH, X_MAX, Y_MAX);
128 soclib::caba::SoclibVciInitiator<40,33> initp1("initp1", 4096, 16, X_WIDTH, Y_WIDTH, X_MAX, Y_MAX);
129 soclib::caba::SoclibVciInitiator<40,33> initp2("initp2", 8192, 16, X_WIDTH, Y_WIDTH, X_MAX, Y_MAX);
130 soclib::caba::SoclibVciInitiator<40,33> initp3("initp3", 12288,16, X_WIDTH, Y_WIDTH, X_MAX, Y_MAX);
131
132 soclib::caba::SoclibVciTarget<40,33> target0_0("target0_0", 0 );
133 soclib::caba::SoclibVciTarget<40,33> target0_1("target0_1", 1 );
134 soclib::caba::SoclibVciTarget<40,33> target0_2("target0_2", 2 );
135 soclib::caba::SoclibVciTarget<40,33> target0_3("target0_3", 3 );
136
137 soclib::caba::SoclibVciTarget<40,33> target1_0("target1_0", 4 );
138 soclib::caba::SoclibVciTarget<40,33> target1_1("target1_1", 5 );
139 soclib::caba::SoclibVciTarget<40,33> target1_2("target1_2", 6 );
140 soclib::caba::SoclibVciTarget<40,33> target1_3("target1_3", 7 );
141
142 soclib::caba::SoclibVciTarget<40,33> target2_0("target2_0", 8 );
143 soclib::caba::SoclibVciTarget<40,33> target2_1("target2_1", 9 );
144 soclib::caba::SoclibVciTarget<40,33> target2_2("target2_2", 10 );
145 soclib::caba::SoclibVciTarget<40,33> target2_3("target2_3", 11 );
146
147 soclib::caba::SoclibVciTarget<40,33> target3_0("target3_0", 12 );
148 soclib::caba::SoclibVciTarget<40,33> target3_1("target3_1", 13 );
149 soclib::caba::SoclibVciTarget<40,33> target3_2("target3_2", 14 );
150 soclib::caba::SoclibVciTarget<40,33> target3_3("target3_3", 15 );
151
152 // Local ring interconnects : 1 direct ring per cluster
153 soclib::caba::DspinLocalRingFastC<vci_param, 40, 33> * clusterPN = (soclib::caba::DspinLocalRingFastC<vci_param, 40, 33> *) malloc(sizeof(soclib::caba::DspinLocalRingFastC<vci_param, 40, 33> )*4);
154
155 new(&clusterPN[0]) soclib::caba::DspinLocalRingFastC<vci_param, 40, 33>("clusterPN0",maptabp, IntTab(0), 2, 2, 1, 4, 1, 1 );
156 new(&clusterPN[1]) soclib::caba::DspinLocalRingFastC<vci_param, 40, 33>("clusterPN1",maptabp, IntTab(1), 2, 2, 1, 4, 1, 1 );
157 new(&clusterPN[2]) soclib::caba::DspinLocalRingFastC<vci_param, 40, 33>("clusterPN2",maptabp, IntTab(2), 2, 2, 1, 4, 1, 1 );
158 new(&clusterPN[3]) soclib::caba::DspinLocalRingFastC<vci_param, 40, 33>("clusterPN3",maptabp, IntTab(3), 2, 2, 1, 4, 1, 1 );
159
160 // Distributed Global Interconnect : one cmd router & one rsp router per cluster
161 VirtualDspinRouter<cmd_width>* cmdrouter = (VirtualDspinRouter<cmd_width>*)
162 malloc(sizeof(VirtualDspinRouter<cmd_width>) * X_MAX * Y_MAX);
163 VirtualDspinRouter<rsp_width>* rsprouter = (VirtualDspinRouter<rsp_width>*)
164 malloc(sizeof(VirtualDspinRouter<rsp_width>) * X_MAX * Y_MAX);
165
166 for ( size_t x = 0 ; x < X_MAX ; x++ )
167 {
168 for ( size_t y = 0 ; y < Y_MAX ; y++ )
169 {
170
171 std::ostringstream str_cmd;
172 std::ostringstream str_rsp;
173
174 str_cmd << "cmdrouter_" << x << "_" << y;
175 str_rsp << "rsprouter_" << x << "_" << y;
176
177 new(&cmdrouter[cluster(x,y)]) VirtualDspinRouter<cmd_width>(str_cmd.str().c_str(),
178 x,y, // coordinate in the mesh
179 X_WIDTH, Y_WIDTH, // x & y fields width
180 4,4); // input & output fifo depths
181 new(&rsprouter[cluster(x,y)]) VirtualDspinRouter<rsp_width>(str_rsp.str().c_str(),
182 x,y, // coordinates in mesh
183 X_WIDTH, Y_WIDTH, // x & y fields width
184 4,4); // input & output fifo depths
185 }
186 }
187
188 // Initiators
189 initp0.p_clk(signal_clk);
190 initp0.p_resetn(signal_resetn);
191 initp0.p_cmd_out(dspin_cmd[0][0]);
192 initp0.p_rsp_in(dspin_rsp[0][0]);
193
194 initp1.p_clk(signal_clk);
195 initp1.p_resetn(signal_resetn);
196 initp1.p_cmd_out(dspin_cmd[1][0]);
197 initp1.p_rsp_in(dspin_rsp[1][0]);
198
199 initp2.p_clk(signal_clk);
200 initp2.p_resetn(signal_resetn);
201 initp2.p_cmd_out(dspin_cmd[2][0]);
202 initp2.p_rsp_in(dspin_rsp[2][0]);
203
204 initp3.p_clk(signal_clk);
205 initp3.p_resetn(signal_resetn);
206 initp3.p_cmd_out(dspin_cmd[3][0]);
207 initp3.p_rsp_in(dspin_rsp[3][0]);
208
209 // Target
210 target0_0.p_clk(signal_clk);
211 target0_0.p_resetn(signal_resetn);
212 target0_0.p_cmd_in(dspin_cmd[0][1]);
213 target0_0.p_rsp_out(dspin_rsp[0][1]);
214
215 target0_1.p_clk(signal_clk);
216 target0_1.p_resetn(signal_resetn);
217 target0_1.p_cmd_in(dspin_cmd[0][2]);
218 target0_1.p_rsp_out(dspin_rsp[0][2]);
219
220 target0_2.p_clk(signal_clk);
221 target0_2.p_resetn(signal_resetn);
222 target0_2.p_cmd_in(dspin_cmd[0][3]);
223 target0_2.p_rsp_out(dspin_rsp[0][3]);
224
225 target0_3.p_clk(signal_clk);
226 target0_3.p_resetn(signal_resetn);
227 target0_3.p_cmd_in(dspin_cmd[0][4]);
228 target0_3.p_rsp_out(dspin_rsp[0][4]);
229
230 target1_0.p_clk(signal_clk);
231 target1_0.p_resetn(signal_resetn);
232 target1_0.p_cmd_in(dspin_cmd[1][1]);
233 target1_0.p_rsp_out(dspin_rsp[1][1]);
234
235 target1_1.p_clk(signal_clk);
236 target1_1.p_resetn(signal_resetn);
237 target1_1.p_cmd_in(dspin_cmd[1][2]);
238 target1_1.p_rsp_out(dspin_rsp[1][2]);
239
240 target1_2.p_clk(signal_clk);
241 target1_2.p_resetn(signal_resetn);
242 target1_2.p_cmd_in(dspin_cmd[1][3]);
243 target1_2.p_rsp_out(dspin_rsp[1][3]);
244
245 target1_3.p_clk(signal_clk);
246 target1_3.p_resetn(signal_resetn);
247 target1_3.p_cmd_in(dspin_cmd[1][4]);
248 target1_3.p_rsp_out(dspin_rsp[1][4]);
249
250 target2_0.p_clk(signal_clk);
251 target2_0.p_resetn(signal_resetn);
252 target2_0.p_cmd_in(dspin_cmd[2][1]);
253 target2_0.p_rsp_out(dspin_rsp[2][1]);
254
255 target2_1.p_clk(signal_clk);
256 target2_1.p_resetn(signal_resetn);
257 target2_1.p_cmd_in(dspin_cmd[2][2]);
258 target2_1.p_rsp_out(dspin_rsp[2][2]);
259
260 target2_2.p_clk(signal_clk);
261 target2_2.p_resetn(signal_resetn);
262 target2_2.p_cmd_in(dspin_cmd[2][3]);
263 target2_2.p_rsp_out(dspin_rsp[2][3]);
264
265 target2_3.p_clk(signal_clk);
266 target2_3.p_resetn(signal_resetn);
267 target2_3.p_cmd_in(dspin_cmd[2][4]);
268 target2_3.p_rsp_out(dspin_rsp[2][4]);
269
270 target3_0.p_clk(signal_clk);
271 target3_0.p_resetn(signal_resetn);
272 target3_0.p_cmd_in(dspin_cmd[3][1]);
273 target3_0.p_rsp_out(dspin_rsp[3][1]);
274
275 target3_1.p_clk(signal_clk);
276 target3_1.p_resetn(signal_resetn);
277 target3_1.p_cmd_in(dspin_cmd[3][2]);
278 target3_1.p_rsp_out(dspin_rsp[3][2]);
279
280 target3_2.p_clk(signal_clk);
281 target3_2.p_resetn(signal_resetn);
282 target3_2.p_cmd_in(dspin_cmd[3][3]);
283 target3_2.p_rsp_out(dspin_rsp[3][3]);
284
285 target3_3.p_clk(signal_clk);
286 target3_3.p_resetn(signal_resetn);
287 target3_3.p_cmd_in(dspin_cmd[3][4]);
288 target3_3.p_rsp_out(dspin_rsp[3][4]);
289
290
291 ///////////////////////////////////////////////////////
292 // Routers connections
293 ///////////////////////////////////////////////////////
294 for ( size_t x = 0 ; x < X_MAX ; x++ )
295 {
296 for ( size_t y = 0 ; y < Y_MAX ; y++ )
297 {
298 // cmd DSPIN router
299 cmdrouter[cluster(x,y)].p_clk (signal_clk);
300 cmdrouter[cluster(x,y)].p_resetn (signal_resetn);
301 cmdrouter[cluster(x,y)].p_out[0][LOCAL] (signal_dspin_cmd_g2l_d[x][y]);
302 cmdrouter[cluster(x,y)].p_out[1][LOCAL] (signal_dspin_cmd_g2l_c[x][y]);
303 cmdrouter[cluster(x,y)].p_in[0][LOCAL] (signal_dspin_cmd_l2g_d[x][y]);
304 cmdrouter[cluster(x,y)].p_in[1][LOCAL] (signal_dspin_cmd_l2g_c[x][y]);
305
306 // rsp DSPIN router
307 rsprouter[cluster(x,y)].p_clk (signal_clk);
308 rsprouter[cluster(x,y)].p_resetn (signal_resetn);
309 rsprouter[cluster(x,y)].p_out[0][LOCAL] (signal_dspin_rsp_g2l_d[x][y]);
310 rsprouter[cluster(x,y)].p_out[1][LOCAL] (signal_dspin_rsp_g2l_c[x][y]);
311 rsprouter[cluster(x,y)].p_in[0][LOCAL] (signal_dspin_rsp_l2g_d[x][y]);
312 rsprouter[cluster(x,y)].p_in[1][LOCAL] (signal_dspin_rsp_l2g_c[x][y]);
313 }
314 }
315
316 // Inter Clusters horizontal connections
317 for ( size_t x = 0 ; x < (X_MAX-1) ; x++ )
318 {
319 for ( size_t y = 0 ; y < Y_MAX ; y++ )
320 {
321 for ( size_t k = 0 ; k < 2 ; k++ )
322 {
323 cmdrouter[cluster(x,y)].p_out[k][EAST] (signal_dspin_h_cmd_inc[x][y][k]);
324 cmdrouter[cluster((x+1),y)].p_in[k][WEST] (signal_dspin_h_cmd_inc[x][y][k]);
325
326 cmdrouter[cluster(x,y)].p_in[k][EAST] (signal_dspin_h_cmd_dec[x][y][k]);
327 cmdrouter[cluster((x+1),y)].p_out[k][WEST] (signal_dspin_h_cmd_dec[x][y][k]);
328
329 rsprouter[cluster(x,y)].p_out[k][EAST] (signal_dspin_h_rsp_inc[x][y][k]);
330 rsprouter[cluster((x+1),y)].p_in[k][WEST] (signal_dspin_h_rsp_inc[x][y][k]);
331
332 rsprouter[cluster(x,y)].p_in[k][EAST] (signal_dspin_h_rsp_dec[x][y][k]);
333 rsprouter[cluster((x+1),y)].p_out[k][WEST] (signal_dspin_h_rsp_dec[x][y][k]);
334 }
335 }
336 }
337
338
339 // East & West boundary clusters connections
340 for ( size_t y = 0 ; y < Y_MAX ; y++ )
341 {
342 for ( size_t k = 0 ; k < 2 ; k++ )
343 {
344 cmdrouter[cluster(0,y)].p_in[k][WEST] (signal_dspin_false_cmd_in[cluster(0,y)][k][0]);
345 cmdrouter[cluster(0,y)].p_out[k][WEST] (signal_dspin_false_cmd_out[cluster(0,y)][k][0]);
346 rsprouter[cluster(0,y)].p_in[k][WEST] (signal_dspin_false_rsp_in[cluster(0,y)][k][0]);
347 rsprouter[cluster(0,y)].p_out[k][WEST] (signal_dspin_false_rsp_out[cluster(0,y)][k][0]);
348
349 cmdrouter[cluster((X_MAX-1),y)].p_in[k][EAST] (signal_dspin_false_cmd_in[cluster((X_MAX-1),y)][k][0]);
350 cmdrouter[cluster((X_MAX-1),y)].p_out[k][EAST] (signal_dspin_false_cmd_out[cluster((X_MAX-1),y)][k][0]);
351 rsprouter[cluster((X_MAX-1),y)].p_in[k][EAST] (signal_dspin_false_rsp_in[cluster((X_MAX-1),y)][k][0]);
352 rsprouter[cluster((X_MAX-1),y)].p_out[k][EAST] (signal_dspin_false_rsp_out[cluster((X_MAX-1),y)][k][0]);
353 }
354 }
355
356 // Inter Clusters vertical connections
357 for ( size_t y = 0 ; y < (Y_MAX-1) ; y++ )
358 {
359 for ( size_t x = 0 ; x < X_MAX ; x++ )
360 {
361 for ( size_t k = 0 ; k < 2 ; k++ )
362 {
363 cmdrouter[cluster(x,y)].p_out[k][NORTH] (signal_dspin_v_cmd_inc[x][y][k]);
364 cmdrouter[cluster(x,(y+1))].p_in[k][SOUTH] (signal_dspin_v_cmd_inc[x][y][k]);
365
366 cmdrouter[cluster(x,y)].p_in[k][NORTH] (signal_dspin_v_cmd_dec[x][y][k]);
367 cmdrouter[cluster(x,(y+1))].p_out[k][SOUTH] (signal_dspin_v_cmd_dec[x][y][k]);
368
369 rsprouter[cluster(x,y)].p_out[k][NORTH] (signal_dspin_v_rsp_inc[x][y][k]);
370 rsprouter[cluster(x,(y+1))].p_in[k][SOUTH] (signal_dspin_v_rsp_inc[x][y][k]);
371
372 rsprouter[cluster(x,y)].p_in[k][NORTH] (signal_dspin_v_rsp_dec[x][y][k]);
373 rsprouter[cluster(x,(y+1))].p_out[k][SOUTH] (signal_dspin_v_rsp_dec[x][y][k]);
374 }
375 }
376 }
377
378 // North & South boundary clusters connections
379 for ( size_t x = 0 ; x < X_MAX ; x++ )
380 {
381 for ( size_t k = 0 ; k < 2 ; k++ )
382 {
383 cmdrouter[cluster(x,0)].p_in[k][SOUTH] (signal_dspin_false_cmd_in[cluster(x,0)][k][1]);
384 cmdrouter[cluster(x,0)].p_out[k][SOUTH] (signal_dspin_false_cmd_out[cluster(x,0)][k][1]);
385 rsprouter[cluster(x,0)].p_in[k][SOUTH] (signal_dspin_false_rsp_in[cluster(x,0)][k][1]);
386 rsprouter[cluster(x,0)].p_out[k][SOUTH] (signal_dspin_false_rsp_out[cluster(x,0)][k][1]);
387
388 cmdrouter[cluster(x,(Y_MAX-1))].p_out[k][NORTH] (signal_dspin_false_cmd_out[cluster(x,(Y_MAX-1))][k][1]);
389 cmdrouter[cluster(x,(Y_MAX-1))].p_in[k][NORTH] (signal_dspin_false_cmd_in[cluster(x,(Y_MAX-1))][k][1]);
390 rsprouter[cluster(x,(Y_MAX-1))].p_out[k][NORTH] (signal_dspin_false_rsp_out[cluster(x,(Y_MAX-1))][k][1]);
391 rsprouter[cluster(x,(Y_MAX-1))].p_in[k][NORTH] (signal_dspin_false_rsp_in[cluster(x,(Y_MAX-1))][k][1]);
392 }
393 }
394
395 clusterPN[0].p_clk(signal_clk);
396 clusterPN[0].p_resetn(signal_resetn);
397
398 clusterPN[0].p_cmd_in[0](dspin_cmd[0][0]);
399 clusterPN[0].p_rsp_out[0](dspin_rsp[0][0]);
400
401
402 clusterPN[0].p_cmd_out[0](dspin_cmd[0][1]);
403 clusterPN[0].p_rsp_in[0](dspin_rsp[0][1]);
404 clusterPN[0].p_cmd_out[1](dspin_cmd[0][2]);
405 clusterPN[0].p_rsp_in[1](dspin_rsp[0][2]);
406 clusterPN[0].p_cmd_out[2](dspin_cmd[0][3]);
407 clusterPN[0].p_rsp_in[2](dspin_rsp[0][3]);
408 clusterPN[0].p_cmd_out[3](dspin_cmd[0][4]);
409 clusterPN[0].p_rsp_in[3](dspin_rsp[0][4]);
410
411 clusterPN[0].p_cmd_in[1](signal_dspin_cmd_g2l_d[0][0]);
412 clusterPN[0].p_rsp_out[1](signal_dspin_rsp_l2g_d[0][0]);
413 clusterPN[0].p_cmd_out[4](signal_dspin_cmd_l2g_d[0][0]);
414 clusterPN[0].p_rsp_in[4](signal_dspin_rsp_g2l_d[0][0]);
415
416 clusterPN[1].p_clk(signal_clk);
417 clusterPN[1].p_resetn(signal_resetn);
418
419 clusterPN[1].p_cmd_in[0](dspin_cmd[1][0]);
420 clusterPN[1].p_rsp_out[0](dspin_rsp[1][0]);
421
422 clusterPN[1].p_cmd_out[0](dspin_cmd[1][1]);
423 clusterPN[1].p_rsp_in[0](dspin_rsp[1][1]);
424 clusterPN[1].p_cmd_out[1](dspin_cmd[1][2]);
425 clusterPN[1].p_rsp_in[1](dspin_rsp[1][2]);
426 clusterPN[1].p_cmd_out[2](dspin_cmd[1][3]);
427 clusterPN[1].p_rsp_in[2](dspin_rsp[1][3]);
428 clusterPN[1].p_cmd_out[3](dspin_cmd[1][4]);
429 clusterPN[1].p_rsp_in[3](dspin_rsp[1][4]);
430
431 clusterPN[1].p_cmd_in[1](signal_dspin_cmd_g2l_d[0][1]);
432 clusterPN[1].p_rsp_out[1](signal_dspin_rsp_l2g_d[0][1]);
433 clusterPN[1].p_cmd_out[4](signal_dspin_cmd_l2g_d[0][1]);
434 clusterPN[1].p_rsp_in[4](signal_dspin_rsp_g2l_d[0][1]);
435
436 clusterPN[2].p_clk(signal_clk);
437 clusterPN[2].p_resetn(signal_resetn);
438
439 clusterPN[2].p_cmd_in[0](dspin_cmd[2][0]);
440 clusterPN[2].p_rsp_out[0](dspin_rsp[2][0]);
441
442 clusterPN[2].p_cmd_out[0](dspin_cmd[2][1]);
443 clusterPN[2].p_rsp_in[0](dspin_rsp[2][1]);
444 clusterPN[2].p_cmd_out[1](dspin_cmd[2][2]);
445 clusterPN[2].p_rsp_in[1](dspin_rsp[2][2]);
446 clusterPN[2].p_cmd_out[2](dspin_cmd[2][3]);
447 clusterPN[2].p_rsp_in[2](dspin_rsp[2][3]);
448 clusterPN[2].p_cmd_out[3](dspin_cmd[2][4]);
449 clusterPN[2].p_rsp_in[3](dspin_rsp[2][4]);
450
451 clusterPN[2].p_cmd_in[1](signal_dspin_cmd_g2l_d[1][0]);
452 clusterPN[2].p_rsp_out[1](signal_dspin_rsp_l2g_d[1][0]);
453 clusterPN[2].p_cmd_out[4](signal_dspin_cmd_l2g_d[1][0]);
454 clusterPN[2].p_rsp_in[4](signal_dspin_rsp_g2l_d[1][0]);
455
456 clusterPN[3].p_clk(signal_clk);
457 clusterPN[3].p_resetn(signal_resetn);
458
459 clusterPN[3].p_cmd_in[0](dspin_cmd[3][0]);
460 clusterPN[3].p_rsp_out[0](dspin_rsp[3][0]);
461
462 clusterPN[3].p_cmd_out[0](dspin_cmd[3][1]);
463 clusterPN[3].p_rsp_in[0](dspin_rsp[3][1]);
464 clusterPN[3].p_cmd_out[1](dspin_cmd[3][2]);
465 clusterPN[3].p_rsp_in[1](dspin_rsp[3][2]);
466 clusterPN[3].p_cmd_out[2](dspin_cmd[3][3]);
467 clusterPN[3].p_rsp_in[2](dspin_rsp[3][3]);
468 clusterPN[3].p_cmd_out[3](dspin_cmd[3][4]);
469 clusterPN[3].p_rsp_in[3](dspin_rsp[3][4]);
470
471 clusterPN[3].p_cmd_in[1](signal_dspin_cmd_g2l_d[1][1]);
472 clusterPN[3].p_rsp_out[1](signal_dspin_rsp_l2g_d[1][1]);
473 clusterPN[3].p_cmd_out[4](signal_dspin_cmd_l2g_d[1][1]);
474 clusterPN[3].p_rsp_in[4](signal_dspin_rsp_g2l_d[1][1]);
475
476////////////////////////////////////////////////////////
477
478 int ncycles;
479
480 sc_start(sc_core::sc_time(0, SC_NS));
481 signal_resetn = false;
482
483 for(size_t x = 0; x < X_MAX; x++)
484 {
485 for(size_t y = 0; y < Y_MAX; y++)
486 {
487 signal_dspin_cmd_g2l_c[x][y].write = false;
488 signal_dspin_cmd_g2l_c[x][y].read = true;
489 signal_dspin_rsp_g2l_c[x][y].write = false;
490 signal_dspin_rsp_g2l_c[x][y].read = true;
491 signal_dspin_cmd_l2g_c[x][y].write = false;
492 signal_dspin_cmd_l2g_c[x][y].read = true;
493 signal_dspin_rsp_l2g_c[x][y].write = false;
494 signal_dspin_rsp_l2g_c[x][y].read = true;
495 }
496 }
497
498 for(size_t t = 0; t < X_MAX*Y_MAX; t++)
499 {
500 for (size_t k = 0; k < 2; k++)
501 {
502 for(size_t a = 0; a < 2; a ++)
503 {
504 signal_dspin_false_cmd_in[t][k][a].write = false;
505 signal_dspin_false_cmd_in[t][k][a].read = true;
506 signal_dspin_false_cmd_out[t][k][a].write = false;
507 signal_dspin_false_cmd_out[t][k][a].read = true;
508
509 signal_dspin_false_rsp_in[t][k][a].write = false;
510 signal_dspin_false_rsp_in[t][k][a].read = true;
511 signal_dspin_false_rsp_out[t][k][a].write = false;
512 signal_dspin_false_rsp_out[t][k][a].read = true;
513 }
514 }
515 }
516
517 sc_start(sc_core::sc_time(1, SC_NS));
518 signal_resetn = true;
519
520
521 while(1)
522 {
523 //rsprouter[3].debug_trace(0);
524 //rsprouter[2].debug_trace(0);
525 sc_start(sc_core::sc_time(CYCLES, SC_NS));
526 //sc_start(sc_core::sc_time(1, SC_NS));
527
528 }
529
530 std::cout << "Hit ENTER to end simulation" << std::endl;
531 char buf[1];
532
533 std::cin.getline(buf,1);
534
535 return EXIT_SUCCESS;
536}
537
538int sc_main (int argc, char *argv[])
539{
540 try {
541 return _main(argc, argv);
542 } catch (std::exception &e) {
543 std::cout << e.what() << std::endl;
544 } catch (...) {
545 std::cout << "Unknown exception occured" << std::endl;
546 throw;
547 }
548 return 1;
549}
Note: See TracBrowser for help on using the repository browser.