source: trunk/platforms/caba-vdspin-vci_synthetic_initiator/top.cpp @ 133

Last change on this file since 133 was 133, checked in by choichil, 13 years ago

Platform with more parameters

File size: 25.4 KB
RevLine 
[97]1
[103]2#include <stdint.h>
[97]3#include <systemc>
4#include <sys/time.h>
5#include <iostream>
6#include <cstdlib>
7#include <cstdarg>
8
[103]9#include "arithmetics.h"
[97]10#include "mapping_table.h"
11#include "alloc_elems.h"
[103]12#include "vci_simple_ram.h"
[99]13#include "vci_local_ring_fast.h"
14#include "virtual_dspin_router.h"
[97]15#include "vci_synthetic_initiator.h"
16
17// MESH SIZE
[133]18#define X_MAX           8
19#define Y_MAX           8
[97]20#define N_CLUSTERS      X_MAX*Y_MAX
21// FLIT_WIDTH
22#define WIDTH_CMD       40
23#define WIDTH_RSP       33
24// Face of each DSPIN Router
25#define NORTH           0
26#define SOUTH           1
27#define EAST            2
28#define WEST            3
29#define LOCAL           4
[105]30// VCI parameters
31#define cell_width      4
32#define plen_width      8
33#define address_width   32
34#define error_width     1
35#define clen_width      1
36#define rflag_width     1
37#define srcid_width     11
38#define pktid_width     4
39#define trdid_width     4
40#define wrplen_width    1
41// Adress of targets
42#define TARGET_ADDR     0x00000000
43#define TARGET_SIZE     0x400
[121]44// FIFO depth in the gateways
[133]45#define DEPTH           4
[121]46// LENGTH of packets
47#define PACKET_LENGTH   2
48// FIFO depth in the routers
49#define DSPIN_FIFO      4
50// DEBUG MODE : 0 OFF, 1 only the initiators and the targets, 2 only network
51#define DEBUG           0
[97]52
53
54int _main(int argc, char *argv[])
55{
56        using namespace sc_core;
57        // Avoid repeating these everywhere
58        using soclib::common::IntTab;
59        using soclib::common::Segment;
60
[99]61        using soclib::common::uint32_log2;
62
[97]63        // Define VCI parameters
[105]64        typedef soclib::caba::VciParams<cell_width,
65                                        plen_width,
66                                        address_width,
67                                        error_width,
68                                        clen_width,
69                                        rflag_width,
70                                        srcid_width,
71                                        pktid_width,
72                                        trdid_width,
73                                        wrplen_width> vci_param;
[97]74
75        // Mapping table primary network
[112]76        soclib::common::MappingTable maptab0(address_width, IntTab(soclib::common::uint32_log2(X_MAX)+soclib::common::uint32_log2(Y_MAX) ,srcid_width-soclib::common::uint32_log2(X_MAX)-soclib::common::uint32_log2(Y_MAX)),
77                                                            IntTab(soclib::common::uint32_log2(X_MAX)+soclib::common::uint32_log2(Y_MAX) ,srcid_width-soclib::common::uint32_log2(X_MAX)-soclib::common::uint32_log2(Y_MAX)), 0xFFC0000);
78        soclib::common::MappingTable maptab1(address_width, IntTab(soclib::common::uint32_log2(X_MAX)+soclib::common::uint32_log2(Y_MAX) ,srcid_width-soclib::common::uint32_log2(X_MAX)-soclib::common::uint32_log2(Y_MAX)),
79                                                            IntTab(soclib::common::uint32_log2(X_MAX)+soclib::common::uint32_log2(Y_MAX) ,srcid_width-soclib::common::uint32_log2(X_MAX)-soclib::common::uint32_log2(Y_MAX)), 0xFFC0000);
[105]80        for(int i = 0 ; i < Y_MAX ; i++){
81                for(int j = 0 ; j < X_MAX ; j++){
82                        std::ostringstream      str0;
83                        std::ostringstream      str1;
[112]84                        str0 << "Target_c0_" << (i*Y_MAX+j) ;
85                        str1 << "Target_c1_" << (i*Y_MAX+j) ;
86                        maptab0.add(Segment(str0.str(), TARGET_ADDR + ((i*Y_MAX+j) << (address_width-soclib::common::uint32_log2(X_MAX)-soclib::common::uint32_log2(Y_MAX))), TARGET_SIZE, IntTab((i*X_MAX+j),0), false));
87                        maptab1.add(Segment(str1.str(), TARGET_ADDR + ((i*Y_MAX+j) << (address_width-soclib::common::uint32_log2(X_MAX)-soclib::common::uint32_log2(Y_MAX))), TARGET_SIZE, IntTab((i*X_MAX+j),0), false));
[105]88                }
89        }
[97]90
91
[121]92//      std::cout << maptab0 << std::endl;
[97]93
94        sc_clock        signal_clk("clk");
95        sc_signal<bool> signal_resetn("resetn");
96   
[105]97        soclib::caba::VciSignals<vci_param> ** signal_vci_ini_synth_c0 = soclib::common::alloc_elems<soclib::caba::VciSignals<vci_param> >("signal_vci_ini_synth_c0", 2, N_CLUSTERS);
98        soclib::caba::VciSignals<vci_param> ** signal_vci_ini_synth_c1 = soclib::common::alloc_elems<soclib::caba::VciSignals<vci_param> >("signal_vci_ini_synth_c1", 2, N_CLUSTERS);
[99]99        ///////////////////////////////////////////////////////////////
100        // VDSPIN Signals : one level for in and out, one level for X length in the mesh,
101        //                  one level for Y length in the mesh, last level for each port of the router
102        ///////////////////////////////////////////////////////////////
[121]103        soclib::caba::DspinSignals<WIDTH_CMD> **** dspin_signals_cmd_c0 = soclib::common::alloc_elems<soclib::caba::DspinSignals<WIDTH_CMD> >("Dspin_cmd_signals_channel_0", 2, X_MAX, Y_MAX, 5 );
104        soclib::caba::DspinSignals<WIDTH_CMD> **** dspin_signals_cmd_c1 = soclib::common::alloc_elems<soclib::caba::DspinSignals<WIDTH_CMD> >("Dspin_cmd_signals_channel_1", 2, X_MAX, Y_MAX, 5 );
105        soclib::caba::DspinSignals<WIDTH_RSP> **** dspin_signals_rsp_c0 = soclib::common::alloc_elems<soclib::caba::DspinSignals<WIDTH_RSP> >("Dspin_rsp_signals_channel_0", 2, X_MAX, Y_MAX, 5 );
106        soclib::caba::DspinSignals<WIDTH_RSP> **** dspin_signals_rsp_c1 = soclib::common::alloc_elems<soclib::caba::DspinSignals<WIDTH_RSP> >("Dspin_rsp_signals_channel_2", 2, X_MAX, Y_MAX, 5 );
[97]107
108
109        // N_CLUSTERS ring.
[99]110        soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> * local_ring_c0 = (soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> *) malloc(sizeof(soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> ) * N_CLUSTERS) ;
111        soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> * local_ring_c1 = (soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> *) malloc(sizeof(soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> ) * N_CLUSTERS) ;
112        for(int i = 0 ; i < N_CLUSTERS ; i++){                                                            // ringid, fifo, fifo, nb_init, nb_tgt
[105]113                std::ostringstream      str0;
114                std::ostringstream      str1;
115                str0 << "cluster_c0_" << i ;
116                str1 << "cluster_c1_" << i ;
[112]117                new(&local_ring_c0[i]) soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> (str0.str().c_str(),
118                                                                                                        maptab0, 
119                                                                                                        IntTab(i), 
120                                                                                                        2, 
[121]121                                                                                                        DEPTH, 
[112]122                                                                                                        1, 
123                                                                                                        1);
124                new(&local_ring_c1[i]) soclib::caba::VciLocalRingFast<vci_param, WIDTH_CMD, WIDTH_RSP> (str1.str().c_str(), 
125                                                                                                        maptab1, 
126                                                                                                        IntTab(i), 
127                                                                                                        2, 
[121]128                                                                                                        DEPTH,
[112]129                                                                                                        1,
130                                                                                                        1);
[99]131        }
132
[97]133        // Virtual dspin routers
[112]134        soclib::caba::VirtualDspinRouter<WIDTH_CMD> ** routers_cmd = (soclib::caba::VirtualDspinRouter<WIDTH_CMD> **) malloc(sizeof(soclib::caba::VirtualDspinRouter<WIDTH_CMD> *) * X_MAX);
135        soclib::caba::VirtualDspinRouter<WIDTH_RSP> ** routers_rsp = (soclib::caba::VirtualDspinRouter<WIDTH_RSP> **) malloc(sizeof(soclib::caba::VirtualDspinRouter<WIDTH_RSP> *) * X_MAX);
[97]136
[112]137        for(int i = 0; i < X_MAX; i++ ){
138          routers_cmd[i] = (soclib::caba::VirtualDspinRouter<WIDTH_CMD> * ) malloc(sizeof(soclib::caba::VirtualDspinRouter<WIDTH_CMD>) * Y_MAX);
139          routers_rsp[i] = (soclib::caba::VirtualDspinRouter<WIDTH_RSP> * ) malloc(sizeof(soclib::caba::VirtualDspinRouter<WIDTH_RSP>) * Y_MAX);
140          for(int j = 0; j < Y_MAX; j++){
141                  std::ostringstream    str0;
142                  std::ostringstream    str1;
143                  str0 << "VDspinRouterCMD" << i << j;
144                  str1 << "VDspinRouterRSP" << i << j;
[121]145                  new(&routers_cmd[i][j]) soclib::caba::VirtualDspinRouter<WIDTH_CMD> (str0.str().c_str(), i, j, soclib::common::uint32_log2(X_MAX), soclib::common::uint32_log2(Y_MAX), DSPIN_FIFO, DSPIN_FIFO);
146                  new(&routers_rsp[i][j]) soclib::caba::VirtualDspinRouter<WIDTH_RSP> (str1.str().c_str(), i, j, soclib::common::uint32_log2(X_MAX), soclib::common::uint32_log2(Y_MAX), DSPIN_FIFO, DSPIN_FIFO);
[97]147          }
148        }
149
150
151        ///////////////////////////////////////////////////////////////
152        // Components
153        ///////////////////////////////////////////////////////////////
154
155        // N_CLUSTERS VCI Synthetic Initiator (1 initiator per cluster/network)
[99]156        soclib::caba::VciSyntheticInitiator<vci_param> * initiator_c0 = (soclib::caba::VciSyntheticInitiator<vci_param> *) malloc(sizeof(soclib::caba::VciSyntheticInitiator<vci_param> )* N_CLUSTERS);
157        soclib::caba::VciSyntheticInitiator<vci_param> * initiator_c1 = (soclib::caba::VciSyntheticInitiator<vci_param> *) malloc(sizeof(soclib::caba::VciSyntheticInitiator<vci_param> )* N_CLUSTERS);
[112]158        for(int i = 0 ; i < X_MAX; i++)
159                for(int j = 0 ; j < Y_MAX ; j++){
[105]160                        std::ostringstream      str0;
161                        std::ostringstream      str1;
[112]162                        str0 << "Initiator_c0_" << (i*Y_MAX+j) ;
163                        str1 << "Initiator_c1_" << (i*Y_MAX+j) ;
[133]164                        new(&initiator_c0[Y_MAX*i+j]) soclib::caba::VciSyntheticInitiator<vci_param> (str0.str().c_str() , maptab0, IntTab((i*Y_MAX+j) ,0), PACKET_LENGTH, 0, 16, X_MAX, Y_MAX); 
165                        if( (i == X_MAX-1) && (j == Y_MAX-1)){
166                                new(&initiator_c1[Y_MAX*i+j]) soclib::caba::VciSyntheticInitiator<vci_param> (str1.str().c_str() , maptab1, IntTab((i*Y_MAX+j) ,0), PACKET_LENGTH, 0, 16, X_MAX, Y_MAX, 2000, 0, X_MAX, 0, Y_MAX); 
167                        } else {
168                                new(&initiator_c1[Y_MAX*i+j]) soclib::caba::VciSyntheticInitiator<vci_param> (str1.str().c_str() , maptab1, IntTab((i*Y_MAX+j),0), PACKET_LENGTH, 0, 16, X_MAX, Y_MAX); 
169                        }
[103]170                }
[99]171
[103]172        soclib::caba::VciSimpleRam<vci_param> * ram_c0 = (soclib::caba::VciSimpleRam<vci_param> *) malloc(sizeof(soclib::caba::VciSimpleRam<vci_param>) * N_CLUSTERS);
173        soclib::caba::VciSimpleRam<vci_param> * ram_c1 = (soclib::caba::VciSimpleRam<vci_param> *) malloc(sizeof(soclib::caba::VciSimpleRam<vci_param>) * N_CLUSTERS);
[112]174        for(int i = 0 ; i < X_MAX ; i++)
175                for(int j = 0 ; j < Y_MAX ; j++){
[105]176                        std::ostringstream      str0;
177                        std::ostringstream      str1;
[112]178                        str0 << "Ram_c0_" << (i*Y_MAX+j) ;
179                        str1 << "Ram_c1_" << (i*Y_MAX+j) ;
180                        new(&ram_c0[Y_MAX*i+j]) soclib::caba::VciSimpleRam<vci_param> (str0.str().c_str() , IntTab(i*Y_MAX+j,0), maptab0, soclib::common::Loader(), 0);
181                        new(&ram_c1[Y_MAX*i+j]) soclib::caba::VciSimpleRam<vci_param> (str1.str().c_str() , IntTab(i*Y_MAX+j,0), maptab1, soclib::common::Loader(), 0);
[103]182                }
183
[97]184        ///////////////////////////////////////////////////////////////
185        // Connection of Synthetic Initiator to each local ring per cluster
186        ///////////////////////////////////////////////////////////////
187        for(int i = 0 ; i < N_CLUSTERS ; i++){
[99]188          local_ring_c0[i].p_clk(signal_clk);
189          local_ring_c0[i].p_resetn(signal_resetn);
[103]190          local_ring_c0[i].p_to_initiator[0](signal_vci_ini_synth_c0[0][i]);
191          local_ring_c0[i].p_to_target[0](signal_vci_ini_synth_c0[1][i]);
[99]192          initiator_c0[i].p_clk(signal_clk);
193          initiator_c0[i].p_resetn(signal_resetn);
[103]194          initiator_c0[i].p_vci(signal_vci_ini_synth_c0[0][i]);
195          ram_c0[i].p_clk(signal_clk);
196          ram_c0[i].p_resetn(signal_resetn);
197          ram_c0[i].p_vci(signal_vci_ini_synth_c0[1][i]);
[99]198          local_ring_c1[i].p_clk(signal_clk);
199          local_ring_c1[i].p_resetn(signal_resetn);
[103]200          local_ring_c1[i].p_to_initiator[0](signal_vci_ini_synth_c1[0][i]);
201          local_ring_c1[i].p_to_target[0](signal_vci_ini_synth_c1[1][i]);
[99]202          initiator_c1[i].p_clk(signal_clk);
203          initiator_c1[i].p_resetn(signal_resetn);
[103]204          initiator_c1[i].p_vci(signal_vci_ini_synth_c1[0][i]);
205          ram_c1[i].p_clk(signal_clk);
206          ram_c1[i].p_resetn(signal_resetn);
207          ram_c1[i].p_vci(signal_vci_ini_synth_c1[1][i]);
[97]208        }
209       
210        ///////////////////////////////////////////////////////////////
[99]211        // Connection of each VDspin Router to each local ring and
212        // neighbors VDspin Router
[97]213        ///////////////////////////////////////////////////////////////
[112]214        for(int i = 0; i < X_MAX ; i++){
215          for(int j = 0; j < Y_MAX ; j++){
[97]216            routers_cmd[i][j].p_clk(signal_clk);
217            routers_cmd[i][j].p_resetn(signal_resetn);
[99]218            routers_rsp[i][j].p_clk(signal_clk);
219            routers_rsp[i][j].p_resetn(signal_resetn);
[112]220            local_ring_c0[i*Y_MAX+j].p_gate_cmd_in( dspin_signals_cmd_c0[0][i][j][LOCAL]);
221            local_ring_c1[i*Y_MAX+j].p_gate_cmd_in( dspin_signals_cmd_c1[0][i][j][LOCAL]);
222            local_ring_c0[i*Y_MAX+j].p_gate_cmd_out(dspin_signals_cmd_c0[1][i][j][LOCAL]);
223            local_ring_c1[i*Y_MAX+j].p_gate_cmd_out(dspin_signals_cmd_c1[1][i][j][LOCAL]);
224            local_ring_c0[i*Y_MAX+j].p_gate_rsp_in( dspin_signals_rsp_c0[0][i][j][LOCAL]);
225            local_ring_c1[i*Y_MAX+j].p_gate_rsp_in( dspin_signals_rsp_c1[0][i][j][LOCAL]);
226            local_ring_c0[i*Y_MAX+j].p_gate_rsp_out(dspin_signals_rsp_c0[1][i][j][LOCAL]);
227            local_ring_c1[i*Y_MAX+j].p_gate_rsp_out(dspin_signals_rsp_c1[1][i][j][LOCAL]);
[103]228            for(int k = 0; k < 5; k++){
[112]229                if(j == 0){
230                  if(i == 0){
231                    routers_cmd[i][j].p_out[0][k](dspin_signals_cmd_c0[0][i][j][k]);
232                    routers_cmd[i][j].p_out[1][k](dspin_signals_cmd_c1[0][i][j][k]);
233                    routers_cmd[i][j].p_in[0][k](dspin_signals_cmd_c0[1][i][j][k]);
234                    routers_cmd[i][j].p_in[1][k](dspin_signals_cmd_c1[1][i][j][k]);
235                    routers_rsp[i][j].p_out[0][k](dspin_signals_rsp_c0[0][i][j][k]);
236                    routers_rsp[i][j].p_out[1][k](dspin_signals_rsp_c1[0][i][j][k]);
237                    routers_rsp[i][j].p_in[0][k](dspin_signals_rsp_c0[1][i][j][k]);
238                    routers_rsp[i][j].p_in[1][k](dspin_signals_rsp_c1[1][i][j][k]);
239                  } else {
240                    if(k == WEST){
241                        routers_cmd[i][j].p_out[0][k](dspin_signals_cmd_c0[1][i-1][j][EAST]);
242                        routers_cmd[i][j].p_out[1][k](dspin_signals_cmd_c1[1][i-1][j][EAST]);
243                        routers_cmd[i][j].p_in[0][k](dspin_signals_cmd_c0[0][i-1][j][EAST]);
244                        routers_cmd[i][j].p_in[1][k](dspin_signals_cmd_c1[0][i-1][j][EAST]);
245                        routers_rsp[i][j].p_out[0][k](dspin_signals_rsp_c0[1][i-1][j][EAST]);
246                        routers_rsp[i][j].p_out[1][k](dspin_signals_rsp_c1[1][i-1][j][EAST]);
247                        routers_rsp[i][j].p_in[0][k](dspin_signals_rsp_c0[0][i-1][j][EAST]);
248                        routers_rsp[i][j].p_in[1][k](dspin_signals_rsp_c1[0][i-1][j][EAST]);
249                    } else {
250                        routers_cmd[i][j].p_out[0][k](dspin_signals_cmd_c0[0][i][j][k]);
251                        routers_cmd[i][j].p_out[1][k](dspin_signals_cmd_c1[0][i][j][k]);
252                        routers_cmd[i][j].p_in[0][k](dspin_signals_cmd_c0[1][i][j][k]);
253                        routers_cmd[i][j].p_in[1][k](dspin_signals_cmd_c1[1][i][j][k]);
254                        routers_rsp[i][j].p_out[0][k](dspin_signals_rsp_c0[0][i][j][k]);
255                        routers_rsp[i][j].p_out[1][k](dspin_signals_rsp_c1[0][i][j][k]);
256                        routers_rsp[i][j].p_in[0][k](dspin_signals_rsp_c0[1][i][j][k]);
257                        routers_rsp[i][j].p_in[1][k](dspin_signals_rsp_c1[1][i][j][k]);
258                    }
259                  }
260                } else {
261                  if(k == SOUTH){
262                        routers_cmd[i][j].p_out[0][k](dspin_signals_cmd_c0[1][i][j-1][NORTH]);
263                        routers_cmd[i][j].p_out[1][k](dspin_signals_cmd_c1[1][i][j-1][NORTH]);
264                        routers_cmd[i][j].p_in[0][k](dspin_signals_cmd_c0[0][i][j-1][NORTH]);
265                        routers_cmd[i][j].p_in[1][k](dspin_signals_cmd_c1[0][i][j-1][NORTH]);
266                        routers_rsp[i][j].p_out[0][k](dspin_signals_rsp_c0[1][i][j-1][NORTH]);
267                        routers_rsp[i][j].p_out[1][k](dspin_signals_rsp_c1[1][i][j-1][NORTH]);
268                        routers_rsp[i][j].p_in[0][k](dspin_signals_rsp_c0[0][i][j-1][NORTH]);
269                        routers_rsp[i][j].p_in[1][k](dspin_signals_rsp_c1[0][i][j-1][NORTH]);
270                  } else if(k == WEST){
271                     if(i == 0){
272                        routers_cmd[i][j].p_out[0][k](dspin_signals_cmd_c0[0][i][j][k]);
273                        routers_cmd[i][j].p_out[1][k](dspin_signals_cmd_c1[0][i][j][k]);
274                        routers_cmd[i][j].p_in[0][k](dspin_signals_cmd_c0[1][i][j][k]);
275                        routers_cmd[i][j].p_in[1][k](dspin_signals_cmd_c1[1][i][j][k]);
276                        routers_rsp[i][j].p_out[0][k](dspin_signals_rsp_c0[0][i][j][k]);
277                        routers_rsp[i][j].p_out[1][k](dspin_signals_rsp_c1[0][i][j][k]);
278                        routers_rsp[i][j].p_in[0][k](dspin_signals_rsp_c0[1][i][j][k]);
279                        routers_rsp[i][j].p_in[1][k](dspin_signals_rsp_c1[1][i][j][k]);
280                     } else {
281                        routers_cmd[i][j].p_out[0][k](dspin_signals_cmd_c0[1][i-1][j][EAST]);
282                        routers_cmd[i][j].p_out[1][k](dspin_signals_cmd_c1[1][i-1][j][EAST]);
283                        routers_cmd[i][j].p_in[0][k](dspin_signals_cmd_c0[0][i-1][j][EAST]);
284                        routers_cmd[i][j].p_in[1][k](dspin_signals_cmd_c1[0][i-1][j][EAST]);
285                        routers_rsp[i][j].p_out[0][k](dspin_signals_rsp_c0[1][i-1][j][EAST]);
286                        routers_rsp[i][j].p_out[1][k](dspin_signals_rsp_c1[1][i-1][j][EAST]);
287                        routers_rsp[i][j].p_in[0][k](dspin_signals_rsp_c0[0][i-1][j][EAST]);
288                        routers_rsp[i][j].p_in[1][k](dspin_signals_rsp_c1[0][i-1][j][EAST]);
289                     }
290                  } else {
291                        routers_cmd[i][j].p_out[0][k](dspin_signals_cmd_c0[0][i][j][k]);
292                        routers_cmd[i][j].p_out[1][k](dspin_signals_cmd_c1[0][i][j][k]);
293                        routers_cmd[i][j].p_in[0][k](dspin_signals_cmd_c0[1][i][j][k]);
294                        routers_cmd[i][j].p_in[1][k](dspin_signals_cmd_c1[1][i][j][k]);
295                        routers_rsp[i][j].p_out[0][k](dspin_signals_rsp_c0[0][i][j][k]);
296                        routers_rsp[i][j].p_out[1][k](dspin_signals_rsp_c1[0][i][j][k]);
297                        routers_rsp[i][j].p_in[0][k](dspin_signals_rsp_c0[1][i][j][k]);
298                        routers_rsp[i][j].p_in[1][k](dspin_signals_rsp_c1[1][i][j][k]);
299                  }
300                }
[97]301            }
302          }
303        }
304
[121]305        ////////////////////////////////////////////////
306        //             Simulation Loop                //
307        ////////////////////////////////////////////////
308        int ncycles;
309
310
311        if(argc == 2){
312          ncycles = std::atoi(argv[1]);
313        } else {
314          exit(1);
315        }
316        sc_start(sc_core::sc_time(0, SC_NS));
317        signal_resetn = false;
318
319        for(int i = 0; i < X_MAX ; i++){
[112]320                for(int j = 0; j < Y_MAX ; j++){
[121]321                        if(j == 0){
[112]322                                dspin_signals_cmd_c0[0][i][j][SOUTH].read = true   ;
323                                dspin_signals_cmd_c0[1][i][j][SOUTH].write = false ;
324                                dspin_signals_cmd_c1[0][i][j][SOUTH].read = true   ;
325                                dspin_signals_cmd_c1[1][i][j][SOUTH].write = false ;
326                                dspin_signals_rsp_c0[0][i][j][SOUTH].read = true   ;
327                                dspin_signals_rsp_c0[1][i][j][SOUTH].write = false ;
328                                dspin_signals_rsp_c1[0][i][j][SOUTH].read = true   ;
329                                dspin_signals_rsp_c1[1][i][j][SOUTH].write = false ;
330                        } 
[121]331                        if(j == Y_MAX-1){
[112]332                                dspin_signals_cmd_c0[0][i][j][NORTH].read = true   ;
333                                dspin_signals_cmd_c0[1][i][j][NORTH].write = false ;
334                                dspin_signals_cmd_c1[0][i][j][NORTH].read = true   ;
335                                dspin_signals_cmd_c1[1][i][j][NORTH].write = false ;
336                                dspin_signals_rsp_c0[0][i][j][NORTH].read = true   ;
337                                dspin_signals_rsp_c0[1][i][j][NORTH].write = false ;
338                                dspin_signals_rsp_c1[0][i][j][NORTH].read = true   ;
339                                dspin_signals_rsp_c1[1][i][j][NORTH].write = false ;
340                        } 
[121]341                        if(i == 0){
[112]342                                dspin_signals_cmd_c0[0][i][j][WEST].read = true   ;
343                                dspin_signals_cmd_c0[1][i][j][WEST].write = false ;
344                                dspin_signals_cmd_c1[0][i][j][WEST].read = true   ;
345                                dspin_signals_cmd_c1[1][i][j][WEST].write = false ;
346                                dspin_signals_rsp_c0[0][i][j][WEST].read = true   ;
347                                dspin_signals_rsp_c0[1][i][j][WEST].write = false ;
348                                dspin_signals_rsp_c1[0][i][j][WEST].read = true   ;
349                                dspin_signals_rsp_c1[1][i][j][WEST].write = false ;
350                        } 
[121]351                        if(i == X_MAX-1){
[112]352                                dspin_signals_cmd_c0[0][i][j][EAST].read = true   ;
353                                dspin_signals_cmd_c0[1][i][j][EAST].write = false ;
354                                dspin_signals_cmd_c1[0][i][j][EAST].read = true   ;
355                                dspin_signals_cmd_c1[1][i][j][EAST].write = false ;
356                                dspin_signals_rsp_c0[0][i][j][EAST].read = true   ;
357                                dspin_signals_rsp_c0[1][i][j][EAST].write = false ;
358                                dspin_signals_rsp_c1[0][i][j][EAST].read = true   ;
359                                dspin_signals_rsp_c1[1][i][j][EAST].write = false ;
360                        }
361                }
[121]362        } 
[97]363
364        sc_start(sc_core::sc_time(1, SC_NS));
365        signal_resetn = true;
366
[121]367        for(int t = 0; t < ncycles; t++){
[112]368                sc_start(sc_time(1, SC_NS));
[121]369#if defined(DEBUG)
[112]370                for(int i = 0 ; i < Y_MAX ; i++){
371                        for(int j = 0 ; j < X_MAX ; j++){
[121]372#endif
373#if DEBUG==1
374                                initiator_c0[i*Y_MAX+j].print_trace();
375                                std::cout << std::hex;
376                                std::cout << "synt_cmdval  = " << signal_vci_ini_synth_c0[0][i*Y_MAX+j].cmdval.read() << std::endl;
377                                std::cout << "synt_cmdack  = " << signal_vci_ini_synth_c0[0][i*Y_MAX+j].cmdack.read() << std::endl;
378                                std::cout << "synt_address = " << signal_vci_ini_synth_c0[0][i*Y_MAX+j].address.read() << std::endl;
379                                std::cout << "synt_cmd     = " << signal_vci_ini_synth_c0[0][i*Y_MAX+j].cmd.read() << std::endl;
380                                std::cout << "synt_srcid   = " << signal_vci_ini_synth_c0[0][i*Y_MAX+j].srcid.read() << std::endl;
[133]381                                std::cout << "synt_trdid   = " << signal_vci_ini_synth_c0[0][i*Y_MAX+j].trdid.read() << std::endl;
[121]382                                std::cout << "synt_plen    = " << signal_vci_ini_synth_c0[0][i*Y_MAX+j].plen.read() << std::endl;
383                                std::cout << "synt_eop     = " << signal_vci_ini_synth_c0[0][i*Y_MAX+j].eop.read() << std::endl;
384                                std::cout << "synt_rspval  = " << signal_vci_ini_synth_c0[0][i*Y_MAX+j].rspval.read() << std::endl;
[133]385                                std::cout << "synt_rspack  = " << signal_vci_ini_synth_c0[0][i*Y_MAX+j].rspack.read() << std::endl;
386                                std::cout << "synt_rsrcid  = " << signal_vci_ini_synth_c0[0][i*Y_MAX+j].rsrcid.read() << std::endl;
387                                std::cout << "synt_rtrdid  = " << signal_vci_ini_synth_c0[0][i*Y_MAX+j].rtrdid.read() << std::endl;
388                                std::cout << "synt_rpktid  = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].rpktid.read() << std::endl;
[121]389                                std::cout << "synt_rerror  = " << signal_vci_ini_synth_c0[0][i*Y_MAX+j].rerror.read() << std::endl;
390                                std::cout << "synt_reop    = " << signal_vci_ini_synth_c0[0][i*Y_MAX+j].reop.read() << std::endl;
391                                ram_c0[i*Y_MAX+j].print_trace();
392                                std::cout << std::hex;
393                                std::cout << "ram_cmdval  = " << signal_vci_ini_synth_c0[1][i*Y_MAX+j].cmdval.read() << std::endl;
394                                std::cout << "ram_address = " << signal_vci_ini_synth_c0[1][i*Y_MAX+j].address.read() << std::endl;
395                                std::cout << "ram_cmd     = " << signal_vci_ini_synth_c0[1][i*Y_MAX+j].cmd.read() << std::endl;
396                                std::cout << "ram_srcid   = " << signal_vci_ini_synth_c0[1][i*Y_MAX+j].srcid.read() << std::endl;
[133]397                                std::cout << "ram_trdid   = " << signal_vci_ini_synth_c0[1][i*Y_MAX+j].trdid.read() << std::endl;
[121]398                                std::cout << "ram_plen    = " << signal_vci_ini_synth_c0[1][i*Y_MAX+j].plen.read() << std::endl;
399                                std::cout << "ram_eop     = " << signal_vci_ini_synth_c0[1][i*Y_MAX+j].eop.read() << std::endl;
400                                std::cout << "ram_rspval  = " << signal_vci_ini_synth_c0[1][i*Y_MAX+j].rspval.read() << std::endl;
401                                std::cout << "ram_rspack  = " << signal_vci_ini_synth_c0[1][i*Y_MAX+j].rspack.read() << std::endl;
402                                std::cout << "ram_rsrcid  = " << signal_vci_ini_synth_c0[1][i*Y_MAX+j].rsrcid.read() << std::endl;
[133]403                                std::cout << "ram_rtrdid  = " << signal_vci_ini_synth_c0[1][i*Y_MAX+j].rtrdid.read() << std::endl;
[121]404                                std::cout << "ram_rerror  = " << signal_vci_ini_synth_c0[1][i*Y_MAX+j].rerror.read() << std::endl;
405                                std::cout << "ram_reop    = " << signal_vci_ini_synth_c0[1][i*Y_MAX+j].reop.read() << std::endl;
[133]406                                initiator_c1[i*Y_MAX+j].print_trace();
407                                std::cout << std::hex;
408                                std::cout << "synt_cmdval  = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].cmdval.read() << std::endl;
409                                std::cout << "synt_cmdack  = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].cmdack.read() << std::endl;
410                                std::cout << "synt_address = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].address.read() << std::endl;
411                                std::cout << "synt_cmd     = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].cmd.read() << std::endl;
412                                std::cout << "synt_srcid   = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].srcid.read() << std::endl;
413                                std::cout << "synt_trdid   = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].trdid.read() << std::endl;
414                                std::cout << "synt_pktid   = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].pktid.read() << std::endl;
415                                std::cout << "synt_plen    = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].plen.read() << std::endl;
416                                std::cout << "synt_eop     = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].eop.read() << std::endl;
417                                std::cout << "synt_rspval  = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].rspval.read() << std::endl;
418                                std::cout << "synt_rspack  = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].rspack.read() << std::endl;
419                                std::cout << "synt_rsrcid  = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].rsrcid.read() << std::endl;
420                                std::cout << "synt_rtrdid  = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].rtrdid.read() << std::endl;
421                                std::cout << "synt_rpktid  = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].rpktid.read() << std::endl;
422                                std::cout << "synt_rerror  = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].rerror.read() << std::endl;
423                                std::cout << "synt_reop    = " << signal_vci_ini_synth_c1[0][i*Y_MAX+j].reop.read() << std::endl;
424                                ram_c1[i*Y_MAX+j].print_trace();
425                                std::cout << std::hex;
426                                std::cout << "ram_cmdval  = " << signal_vci_ini_synth_c1[1][i*Y_MAX+j].cmdval.read() << std::endl;
427                                std::cout << "ram_address = " << signal_vci_ini_synth_c1[1][i*Y_MAX+j].address.read() << std::endl;
428                                std::cout << "ram_cmd     = " << signal_vci_ini_synth_c1[1][i*Y_MAX+j].cmd.read() << std::endl;
429                                std::cout << "ram_srcid   = " << signal_vci_ini_synth_c1[1][i*Y_MAX+j].srcid.read() << std::endl;
430                                std::cout << "ram_trdid   = " << signal_vci_ini_synth_c1[1][i*Y_MAX+j].trdid.read() << std::endl;
431                                std::cout << "ram_pktid   = " << signal_vci_ini_synth_c1[1][i*Y_MAX+j].pktid.read() << std::endl;
432                                std::cout << "ram_plen    = " << signal_vci_ini_synth_c1[1][i*Y_MAX+j].plen.read() << std::endl;
433                                std::cout << "ram_eop     = " << signal_vci_ini_synth_c1[1][i*Y_MAX+j].eop.read() << std::endl;
434                                std::cout << "ram_rspval  = " << signal_vci_ini_synth_c1[1][i*Y_MAX+j].rspval.read() << std::endl;
435                                std::cout << "ram_rspack  = " << signal_vci_ini_synth_c1[1][i*Y_MAX+j].rspack.read() << std::endl;
436                                std::cout << "ram_rsrcid  = " << signal_vci_ini_synth_c1[1][i*Y_MAX+j].rsrcid.read() << std::endl;
437                                std::cout << "ram_rtrdid  = " << signal_vci_ini_synth_c1[1][i*Y_MAX+j].rtrdid.read() << std::endl;
438                                std::cout << "ram_rpktid  = " << signal_vci_ini_synth_c1[1][i*Y_MAX+j].rpktid.read() << std::endl;
439                                std::cout << "ram_rerror  = " << signal_vci_ini_synth_c1[1][i*Y_MAX+j].rerror.read() << std::endl;
440                                std::cout << "ram_reop    = " << signal_vci_ini_synth_c1[1][i*Y_MAX+j].reop.read() << std::endl;
[121]441#endif
442#if DEBUG==2
443                                local_ring_c0[i*Y_MAX+j].print_trace();
444                                routers_cmd[i][j].print_trace(0);
445                                std::cout << std::dec << t << " ns" << std::endl;
446                                routers_rsp[i][j].print_trace(0);
447#endif
448#ifdef DEBUG
[112]449                        }
450                }
[121]451#endif
[112]452               
[97]453        }
454
[121]455        std::cout << "Results : " << std::endl;
456        for(int i = 0 ; i < Y_MAX ; i++){
457                for(int j = 0 ; j < X_MAX ; j++){
[133]458                        initiator_c1[i*Y_MAX+j].printStats();
[121]459                }
460        }
461
462
463        std::cout << "Simulation Ends" << std::endl;
464
465
[97]466        return EXIT_SUCCESS;
467}
468
469int sc_main (int argc, char *argv[])
470{
471        try {
472                return _main(argc, argv);
473        } catch (std::exception &e) {
474                std::cout << e.what() << std::endl;
475        } catch (...) {
476                std::cout << "Unknown exception occured" << std::endl;
477                throw;
478        }
479        return 1;
480}
[121]481
Note: See TracBrowser for help on using the repository browser.