Ignore:
Timestamp:
Jun 12, 2015, 3:22:12 PM (9 years ago)
Author:
cfuguet
Message:

reconf: several improvements in the dspin_router synthetic test platform

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/reconfiguration/modules/dspin_router/caba/test/synthetic_test/top.cpp

    r996 r998  
    99#include <systemc>
    1010#include <cassert>
     11#include <cstdlib>
    1112
    1213#include "dspin_router.h"
     
    2526#define Y_WIDTH 4
    2627
    27 #define FIFO_DEPTH 8
    28 #define NFLITS 2
     28#define FIFO_DEPTH 2
     29#define NFLITS 8
    2930#define LOAD 1000
    30 #define BROADCAST_PERIOD 3
     31#define BROADCAST_PERIOD 1
    3132#define DSPIN_WIDTH 39
     33#define MAX_PACKETS 100
    3234
    3335/*
    3436 * Platform default values
    3537 */
    36 #define X_SIZE 4
    37 #define Y_SIZE 4
     38#define X_SIZE 5
     39#define Y_SIZE 5
    3840
    3941static inline int cluster(int x, int y)
     
    7880    int yFaulty = -1;
    7981
    80     /* enable the DSPIN router's debug */
    81     int debug = false;
    82 
    83     /* number of simulation cycles */
    84     int simCycles = 100000;
     82    /* simulation cycles */
     83    size_t simCycles = 0;
     84
     85    /* debug */
     86    bool debug = false;
    8587
    8688    /* synthetic generator load */
    8789    int load = LOAD;
     90
     91    /* broadcast period */
     92    int bcp = BROADCAST_PERIOD;
     93
     94    /* maximum number of packets per generator */
     95    size_t max = MAX_PACKETS;
    8896
    8997    for (int n = 1; n < argc; n += 2) {
     
    122130            continue;
    123131        }
    124         if ((strcmp(argv[n--], "-DEBUG") == 0)) {
     132        if ((strcmp(argv[n], "-B") == 0) && ((n + 1) < argc) ) {
     133            bcp = strtol(argv[n + 1], NULL, 0);
     134            assert(bcp >= 0);
     135            continue;
     136        }
     137        if ((strcmp(argv[n], "-P") == 0) && ((n + 1) < argc) ) {
     138            max = strtol(argv[n + 1], NULL, 0);
     139            continue;
     140        }
     141        if ((strcmp(argv[n--], "-G") == 0)) {
    125142            debug = true;
    126143            continue;
     
    154171            }
    155172
    156             int broadcast_period = 0;
    157173            int ld = 0;
    158174            const int SRCID = cluster(x,y);
    159175            bool all = (xSrc == -1) || (ySrc == -1);
    160176            if (all || (cluster(x,y) == cluster(xSrc,ySrc))) {
    161                broadcast_period = BROADCAST_PERIOD;
    162                ld = load;
     177                ld = load;
     178            }
     179            if ((x == xFaulty) && (y == yFaulty)) {
     180                ld = 0;
     181            }
     182            if (simCycles > 0) {
     183                max = 0;
    163184            }
    164185            std::ostringstream generatorStr;
     
    167188                new DspinGeneratorType(generatorStr.str().c_str(),
    168189                                       SRCID, NFLITS,
    169                                        ld, FIFO_DEPTH,
    170                                        broadcast_period);
     190                                       ld, 8,
     191                                       bcp,
     192                                       X_WIDTH, Y_WIDTH,
     193                                       X_SIZE, Y_SIZE,
     194                                       max);
    171195        }
    172196    }
     
    266290    }
    267291
     292    srandom(3);
    268293    sc_start(sc_core::SC_ZERO_TIME);
    269294    signal_resetn = 0;
     
    297322    signal_resetn = 1;
    298323
    299     for(int i = 0; i < simCycles; ++i) {
    300         if (!debug) {
     324    size_t n;
     325    if (debug) {
     326        for(n = 0; n < simCycles; ++n) {
     327            std::cout << std::endl;
     328            std::cout << "##########################################" << std::endl;
     329            std::cout << "Simulation cycle " << n << std::endl;
     330            std::cout << "##########################################" << std::endl;
     331            std::cout << std::endl;
     332            sc_start(sc_core::sc_time(1, SC_NS));
     333            for (int x = 0; x < xSize; ++x) {
     334                for (int y = 0; y < ySize; ++y) {
     335                    dspinRouter[x][y]->print_trace();
     336                    dspinGenerator[x][y]->print_trace();
     337                }
     338            }
     339        }
     340    } else {
     341        if (simCycles > 0) {
    301342            sc_start(sc_core::sc_time(simCycles, SC_NS));
    302             break;
    303         }
    304         std::cout << std::endl;
    305         std::cout << "##########################################" << std::endl;
    306         std::cout << "Simulation cycle " << i << std::endl;
    307         std::cout << "##########################################" << std::endl;
    308         std::cout << std::endl;
    309         sc_start(sc_core::sc_time(1, SC_NS));
    310         for (int x = 0; x < xSize; ++x) {
    311             for (int y = 0; y < ySize; ++y) {
    312                 dspinRouter[x][y]->print_trace();
    313             }
    314         }
    315     }
     343        }
     344        else {
     345            const int period = 3000;
     346            for (n = 0; n < (max * 200); n += period) {
     347                if ((xSrc == -1) || (ySrc == -1)) {
     348                    std::cout << "When using a packet limit, there must be one ";
     349                    std::cout << "source only" << std::endl;
     350                    std::exit(1);
     351                }
     352
     353                sc_start(sc_core::sc_time(period, SC_NS));
     354
     355                uint32_t pkts = dspinGenerator[xSrc][ySrc]->get_sent_packets();
     356                if (pkts >= max) break;
     357            }
     358            sc_start(sc_core::sc_time(period, SC_NS));
     359            std::cout << "Simulated cycles: " << n + period << std::endl;
     360        }
     361    }
     362
    316363    for (int x = 0; x < xSize; ++x) {
    317364        for (int y = 0; y < ySize; ++y) {
Note: See TracChangeset for help on using the changeset viewer.