Ignore:
Timestamp:
Aug 16, 2012, 7:36:04 PM (12 years ago)
Author:
alain
Message:

Two modifications in the "tsarv4_generic_mmu" platform:
1) improving the debug mechanisms (better control on the command line)
2) changing/simplifying the IRQs wiring to ICU in the tsarV4_cluster_mmu.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/platforms/tsarv4_generic_mmu/top.cpp

    r249 r255  
    33// Author: Alain Greiner
    44// Copyright: UPMC/LIP6
    5 // Date : june 2011
     5// Date : august 2012
    66// This program is released under the GNU public license
    77/////////////////////////////////////////////////////////////////////////
     
    1111// - It uses the vci_cc_vcache_wrapper_v4
    1212// - It uses the vci_mem_cache_v4
    13 // - It uses one vci_xicu, one vci_multi_tty,
    14 //   and one vci_multi_dma controler per cluster.
    15 //
     13// - It contains one vci_xicu and one vci_multi_dma per cluster.
     14// The peripherals BDEV, FBUF, MTTY, and the boot BROM
     15// are in the cluster containing address 0xBFC00000.
     16//
    1617// It is build with one single component implementing a cluster:
    1718// The Tsarv4ClusterMmu component is defined in files
    1819// tsarv4_cluster_mmu.* (with * = cpp, h, sd)
    1920//
     21// The IRQs are connected to XICUs as follow:
     22// - The IRQ_IN[0] to IRQ_IN[7] ports are not used in all clusters.
     23// - The DMA IRQs are connected to IRQ_IN[8] to IRQ_IN[15] in all clusters.
     24// - The TTY IRQs are connected to IRQ_IN[16] to IRQ_IN[30] in I/O cluster.
     25// - The BDEV IRQ is connected to IRQ_IN[31] in I/O cluster.
     26//
    2027// The physical address space is 32 bits.
    2128// The number of clusters cannot be larger than 256.
    22 // The number of processors per cluster cannot be larger than 4.
    23 // The parameters must be power of 2.
    24 // - xmax   : number of clusters in a row
    25 // - ymax   : number of clusters in a column
    26 // - nprocs : number of processors per cluster
     29// The number of processors per cluster cannot be larger than 8.
    2730//
    28 // The peripherals BDEV, FBUF, and the boot BROM
    29 // are in the cluster containing address 0xBFC00000.
    30 // - The nprocs TTY IRQs are connected to IRQ_IN[0] to IRQ_IN[3]
    31 // - The nprocs DMA IRQs are connected to IRQ_IN[4] to IRQ_IN[7]
    32 // - The IOC IRQ is connected to IRQ_IN[8]
     31// The hardware parameters are :
     32// - xmax     : number of clusters in a row (power of 2)
     33// - ymax     : number of clusters in a column (power of 2)
     34// - nb_procs : number of processors per cluster (power of 2)
     35// - nb_dmas  : number of DMA channels per cluster (< 9)
     36// - nb_ttys  : number of TTYs in I/O cluster (< 16)
    3337//
    3438// General policy for 32 bits physical address decoding:
     
    97101///////////////////////////////////////////////////
    98102
    99 #define MESH_XMAX      2
    100 #define MESH_YMAX      2
    101 
    102 #define NPROCS         4
    103 #define XRAM_LATENCY            0
    104 
    105 #define MEMC_WAYS               16
    106 #define MEMC_SETS               256
    107 
    108 #define L1_IWAYS                4
    109 #define L1_ISETS                64
    110 
    111 #define L1_DWAYS                4
    112 #define L1_DSETS                64
    113 
    114 #define FBUF_X_SIZE             512
    115 #define FBUF_Y_SIZE             512
    116 
    117 #define   BDEV_SECTOR_SIZE    128
    118 #define BDEV_IMAGE_NAME           "../../softs/soft_transpose_giet/couple_512.raw"
    119 
    120 #define BOOT_SOFT_NAME       "../../softs/soft_transpose_giet/bin.soft"
    121 
    122 #define MAX_FROZEN_CYCLES   100000
     103#define MESH_XMAX             2
     104#define MESH_YMAX             2
     105
     106#define NB_PROCS              1
     107#define NB_TTYS               8
     108#define NB_DMAS               1
     109
     110#define XRAM_LATENCY          0
     111
     112#define MEMC_WAYS             16
     113#define MEMC_SETS             256
     114
     115#define L1_IWAYS              4
     116#define L1_ISETS              64
     117
     118#define L1_DWAYS              4
     119#define L1_DSETS              64
     120
     121#define FBUF_X_SIZE           128
     122#define FBUF_Y_SIZE           128
     123
     124#define BDEV_SECTOR_SIZE      512
     125#define BDEV_IMAGE_NAME       "/Users/alain/Documents/licence/almo_svn_2011/soft/giet_vm/display/images.raw"
     126
     127#define BOOT_SOFT_NAME        "/Users/alain/Documents/licence/almo_svn_2011/soft/giet_vm/soft.elf"
     128
     129#define MAX_FROZEN_CYCLES     10000
     130
     131#define TRACE_MEMC_ID         1000000
     132#define TRACE_PROC_ID         1000000
    123133
    124134/////////////////////////////////////////////////////////
     
    132142// There is 4 specific segments in the "IO" cluster
    133143// (containing address 0xBF000000)
    134 // - seg_reset   -> BROM / BASE = 0xBFC00000   (1 Mbytes)
     144// - seg_reset  -> BROM / BASE = 0xBFC00000   (1 Mbytes)
    135145// - seg_fbuf   -> FBUF / BASE = 0xBFD00000   (2 M bytes)
    136146// - seg_bdev   -> BDEV / BASE = 0xBFF10000
     
    142152///////////////////////////////////////////////////
    143153
    144 // specific segments in "IO" cluster
     154// specific segments in "IO" cluster : absolute physical address
    145155
    146156#define BROM_BASE               0xBFC00000     
    147157#define BROM_SIZE               0x00100000
    148158
    149 #define FBUF_BASE               0xBFD00000     
     159#define FBUF_BASE               0x80D00000     
    150160#define FBUF_SIZE               0x00200000
    151161
    152 #define BDEV_BASE               0xBFF10000     
    153 #define BDEV_SIZE               0x00000020
    154 
    155 #define MTTY_BASE               0xBFF20000     
    156 #define MTTY_SIZE               0x00000040
    157 
    158 // replicated segments
     162#define BDEV_BASE               0x80F10000     
     163#define BDEV_SIZE               0x00001000
     164
     165#define MTTY_BASE               0x80F20000     
     166#define MTTY_SIZE               0x00001000
     167
     168// replicated segments : physical address is incremented by an offset
     169//     offset  = cluster(x,y) << (address_width-x_width-y_width);
    159170
    160171#define MEMC_BASE               0x00000000     
     
    165176
    166177#define CDMA_BASE               0x00F30000     
    167 #define CDMA_SIZE               0x00004000
    168 
    169 #define PROC_BASE               0x00D00000     
    170 #define PROC_SIZE               0x00000010
     178#define CDMA_SIZE               0x00008000
    171179
    172180////////////////////////////////////////////////////////////////////
     
    191199
    192200
    193    char     soft_name[256] = BOOT_SOFT_NAME;       // pathname to binary code
     201   char     soft_name[256] = BOOT_SOFT_NAME;     // pathname to binary code
    194202   size_t   ncycles        = 1000000000;         // simulated cycles
    195    size_t   xmax           = MESH_XMAX;       // number of clusters in a row
     203   size_t   xmax           = MESH_XMAX;          // number of clusters in a row
    196204   size_t   ymax           = MESH_YMAX;          // number of clusters in a column
    197    size_t   nprocs         = NPROCS;         // number of processors per cluster
    198    size_t   xfb            = FBUF_X_SIZE;     // frameBuffer column number
     205   size_t   nb_procs       = NB_PROCS;           // number of processors per cluster
     206   size_t   nb_dmas        = NB_DMAS;            // number of RDMA channels per cluster
     207   size_t   nb_ttys        = NB_TTYS;            // number of TTY terminals in I/O cluster
     208   size_t   xfb            = FBUF_X_SIZE;        // frameBuffer column number
    199209   size_t   yfb            = FBUF_Y_SIZE;        // frameBuffer lines number
    200210   size_t   memc_ways      = MEMC_WAYS;
     
    206216   char     disk_name[256] = BDEV_IMAGE_NAME;    // pathname to the disk image
    207217   size_t   blk_size       = BDEV_SECTOR_SIZE;   // block size (in bytes)
    208    size_t   xram_latency   = XRAM_LATENCY;     // external RAM latency
    209    bool     trace_ok       = false;              // trace activated
    210    size_t   trace_period   = 1;                  // trace period
    211    uint32_t from_cycle     = 0;                  // debug start cycle
     218   size_t   xram_latency   = XRAM_LATENCY;       // external RAM latency
     219   bool     debug_ok       = false;              // trace activated
     220   size_t   debug_period   = 1;                  // trace period
     221   size_t   debug_memc_id  = TRACE_MEMC_ID;      // index of memc to be traced (cluster_id) 
     222   size_t   debug_proc_id  = TRACE_PROC_ID;      // index of proc to be traced
     223   uint32_t debug_from     = 0;                  // trace start cycle
    212224   uint32_t frozen_cycles  = MAX_FROZEN_CYCLES;  // monitoring frozen processor
    213225
    214226   ////////////// command line arguments //////////////////////
    215    if (argc > 1){
    216       for (int n = 1; n < argc; n = n + 2){
    217          if ((strcmp(argv[n],"-NCYCLES") == 0) && (n+1<argc)){
     227   if (argc > 1)
     228   {
     229      for (int n = 1; n < argc; n = n + 2)
     230      {
     231         if ((strcmp(argv[n],"-NCYCLES") == 0) && (n+1<argc))
     232         {
    218233            ncycles = atoi(argv[n+1]);
    219234         }
    220          else if ((strcmp(argv[n],"-NPROCS") == 0) && (n+1<argc)){
    221             nprocs = atoi(argv[n+1]);
    222             assert( ((nprocs == 1) || (nprocs == 2) || (nprocs == 4)) &&
    223                   "NPROCS must be equal to 1, 2, or 4");
    224          }
    225          else if ((strcmp(argv[n],"-XMAX") == 0) && (n+1<argc)){
     235         else if ((strcmp(argv[n],"-NPROCS") == 0) && (n+1<argc))
     236         {
     237            nb_procs = atoi(argv[n+1]);
     238            assert( ((nb_procs == 1) || (nb_procs == 2) ||
     239                     (nb_procs == 4) || (nb_procs == 8)) &&
     240                  "NPROCS must be equal to 1, 2, 4, or 8");
     241         }
     242         else if ((strcmp(argv[n],"-NTTYS") == 0) && (n+1<argc))
     243         {
     244            nb_ttys = atoi(argv[n+1]);
     245            assert( (nb_ttys < 16) &&
     246                   "The number of TTY terminals cannot be larger than 15");
     247         }
     248         else if ((strcmp(argv[n],"-NDMAS") == 0) && (n+1<argc))
     249         {
     250            nb_dmas = atoi(argv[n+1]);
     251            assert( (nb_dmas < 9) &&
     252                   "The number of DMA channels per cluster cannot be larger than 8");
     253         }
     254         else if ((strcmp(argv[n],"-XMAX") == 0) && (n+1<argc))
     255         {
    226256            xmax = atoi(argv[n+1]);
    227257            assert( ((xmax == 1) || (xmax == 2) || (xmax == 4) || (xmax == 8) || (xmax == 16))
     
    229259         }
    230260
    231          else if ((strcmp(argv[n],"-YMAX") == 0) && (n+1<argc)){
     261         else if ((strcmp(argv[n],"-YMAX") == 0) && (n+1<argc))
     262         {
    232263            ymax = atoi(argv[n+1]);
    233264            assert( ((ymax == 1) || (ymax == 2) || (ymax == 4) || (ymax == 8) || (ymax == 16))
    234265                  && "The YMAX parameter must be 2, 4, 8, or 16" );
    235266         }
    236          else if ((strcmp(argv[n],"-XFB") == 0) && (n+1<argc)){
     267         else if ((strcmp(argv[n],"-XFB") == 0) && (n+1<argc))
     268         {
    237269            xfb = atoi(argv[n+1]);
    238270         }
    239          else if ((strcmp(argv[n],"-YFB") == 0) && (n+1<argc) ){
     271         else if ((strcmp(argv[n],"-YFB") == 0) && (n+1<argc) )
     272         {
    240273            yfb = atoi(argv[n+1]);
    241274         }
    242          else if ((strcmp(argv[n],"-SOFT") == 0) && (n+1<argc) ){
     275         else if ((strcmp(argv[n],"-SOFT") == 0) && (n+1<argc) )
     276         {
    243277            strcpy(soft_name, argv[n+1]);
    244278         }
    245          else if ((strcmp(argv[n],"-DISK") == 0) && (n+1<argc) ){
     279         else if ((strcmp(argv[n],"-DISK") == 0) && (n+1<argc) )
     280         {
    246281            strcpy(disk_name, argv[n+1]);
    247282         }
    248          else if ((strcmp(argv[n],"-TRACE") == 0) && (n+1<argc) ){
    249             trace_ok = true;
    250             from_cycle = atoi(argv[n+1]);
    251          }
    252          else if ((strcmp(argv[n], "-MCWAYS") == 0) && (n+1 < argc)){
     283         else if ((strcmp(argv[n],"-TRACE") == 0) && (n+1<argc) )
     284         {
     285            debug_ok = true;
     286            debug_from = atoi(argv[n+1]);
     287         }
     288         else if ((strcmp(argv[n],"-MEMCID") == 0) && (n+1<argc) )
     289         {
     290            debug_memc_id = atoi(argv[n+1]);
     291            assert( (debug_memc_id < (xmax*ymax) ) &&
     292                   "debug_memc_id larger than XMAX * YMAX" );
     293         }
     294         else if ((strcmp(argv[n],"-PROCID") == 0) && (n+1<argc) )
     295         {
     296            debug_proc_id = atoi(argv[n+1]);
     297            assert( (debug_proc_id < (xmax*ymax*nb_procs) ) &&
     298                   "debug_proc_id larger than XMAX * YMAX * BN_PROCS" );
     299         }
     300         else if ((strcmp(argv[n], "-MCWAYS") == 0) && (n+1 < argc))
     301         {
    253302            memc_ways = atoi(argv[n+1]);
    254303         }
    255          else if ((strcmp(argv[n], "-MCSETS") == 0) && (n+1 < argc)){
     304         else if ((strcmp(argv[n], "-MCSETS") == 0) && (n+1 < argc))
     305         {
    256306            memc_sets = atoi(argv[n+1]);
    257307         }
    258          else if ((strcmp(argv[n], "-XLATENCY") == 0) && (n+1 < argc)){
     308         else if ((strcmp(argv[n], "-XLATENCY") == 0) && (n+1 < argc))
     309         {
    259310            xram_latency = atoi(argv[n+1]);
    260311         }
    261          else if ((strcmp(argv[n], "-FROZEN") == 0) && (n+1 < argc)){
     312         else if ((strcmp(argv[n], "-FROZEN") == 0) && (n+1 < argc))
     313         {
    262314            frozen_cycles = atoi(argv[n+1]);
    263315         }
    264          else if ((strcmp(argv[n], "-PERIOD") == 0) && (n+1 < argc)){
    265             trace_period = atoi(argv[n+1]);
     316         else if ((strcmp(argv[n], "-PERIOD") == 0) && (n+1 < argc))
     317         {
     318            debug_period = atoi(argv[n+1]);
    266319         }
    267320         else
     
    274327            std::cout << "     -NCYCLES number_of_simulated_cycles" << std::endl;
    275328            std::cout << "     -NPROCS number_of_processors_per_cluster" << std::endl;
     329            std::cout << "     -NTTYS total_number_of_TTY_terminals" << std::endl;
     330            std::cout << "     -NDMAS number_of_DMA_channels_per_cluster" << std::endl;
    276331            std::cout << "     -XMAX number_of_clusters_in_a_row" << std::endl;
    277332            std::cout << "     -YMAX number_of_clusters_in_a_column" << std::endl;
     
    284339            std::cout << "     -FROZEN max_number_of_lines" << std::endl;
    285340            std::cout << "     -PERIOD number_of_cycles between trace" << std::endl;
     341            std::cout << "     -MEMCID index_memc_to_be_traced" << std::endl;
     342            std::cout << "     -PROCID index_proc_to_be_traced" << std::endl;
    286343            exit(0);
    287344         }
     
    290347
    291348   std::cout << std::endl;
    292    std::cout << " - NPROCS      = " << nprocs <<  std::endl;
    293    std::cout << " - NCLUSTERS   = " << xmax*ymax << std::endl;
    294    std::cout << " - MAX FROZEN  = " << frozen_cycles << std::endl;
     349   std::cout << " - NB_CLUSTERS = " << xmax*ymax << std::endl;
     350   std::cout << " - NB_PROCS    = " << nb_procs <<  std::endl;
     351   std::cout << " - NB_TTYS     = " << nb_ttys <<  std::endl;
     352   std::cout << " - NB_DMAS     = " << nb_dmas <<  std::endl;
     353   std::cout << " - MAX_FROZEN  = " << frozen_cycles << std::endl;
    295354   std::cout << " - MEMC_WAYS   = " << memc_ways << std::endl;
    296355   std::cout << " - MEMC_SETS   = " << memc_sets << std::endl;
     
    317376           wrplen_width> vci_param;
    318377
    319    size_t   cluster_io_index;
     378   // Define parameters depending on mesh size
     379   size_t   cluster_io_id;
    320380   size_t   x_width;
    321381   size_t   y_width;
     
    333393   else                y_width = 4;
    334394
    335    cluster_io_index = 0xBF >> (8 - x_width - y_width);
     395   cluster_io_id = 0xBF >> (8 - x_width - y_width);
    336396
    337397   /////////////////////
     
    345405         0x00FF0000);
    346406
    347    for (size_t x = 0; x < xmax; x++){
    348       for (size_t y = 0; y < ymax; y++){
     407   for (size_t x = 0; x < xmax; x++)
     408   {
     409      for (size_t y = 0; y < ymax; y++)
     410      {
    349411         sc_uint<address_width> offset  = cluster(x,y) << (address_width-x_width-y_width);
    350412
     
    361423         maptabd.add(Segment(sd.str(), CDMA_BASE+offset, CDMA_SIZE, IntTab(cluster(x,y),CDMA_TGTID), false));
    362424
    363          if ( cluster(x,y) == cluster_io_index )
    364          {
    365             maptabd.add(Segment("d_seg_mtty    ", MTTY_BASE, MTTY_SIZE, IntTab(cluster(x,y),MTTY_TGTID), false));
    366             maptabd.add(Segment("d_seg_fbuf    ", FBUF_BASE, FBUF_SIZE, IntTab(cluster(x,y),FBUF_TGTID), false));
    367             maptabd.add(Segment("d_seg_bdev    ", BDEV_BASE, BDEV_SIZE, IntTab(cluster(x,y),BDEV_TGTID), false));
    368             maptabd.add(Segment("d_seg_brom    ", BROM_BASE, BROM_SIZE, IntTab(cluster(x,y),BROM_TGTID), true));
     425         if ( cluster(x,y) == cluster_io_id )
     426         {
     427            maptabd.add(Segment("d_seg_mtty", MTTY_BASE, MTTY_SIZE, IntTab(cluster(x,y),MTTY_TGTID), false));
     428            maptabd.add(Segment("d_seg_fbuf", FBUF_BASE, FBUF_SIZE, IntTab(cluster(x,y),FBUF_TGTID), false));
     429            maptabd.add(Segment("d_seg_bdev", BDEV_BASE, BDEV_SIZE, IntTab(cluster(x,y),BDEV_TGTID), false));
     430            maptabd.add(Segment("d_seg_brom", BROM_BASE, BROM_SIZE, IntTab(cluster(x,y),BROM_TGTID), true));
    369431         }
    370432      }
     
    374436   // coherence network
    375437   // - tgtid_c_proc = srcid_c_proc = local procid
    376    // - tgtid_c_memc = srcid_c_memc = nprocs
     438   // - tgtid_c_memc = srcid_c_memc = nb_procs
    377439   MappingTable maptabc(address_width,
    378440         IntTab(x_width + y_width, srcid_width - x_width - y_width),
     
    380442         0x00FF0000);
    381443
    382    for (size_t x = 0; x < xmax; x++){
    383       for (size_t y = 0; y < ymax; y++){
     444   for (size_t x = 0; x < xmax; x++)
     445   {
     446      for (size_t y = 0; y < ymax; y++)
     447      {
    384448         sc_uint<address_width> offset  = cluster(x,y) << (address_width-x_width-y_width);
    385449
    386          // cleanup requests regarding the memc segment must be routed to the memory cache
     450         // cleanup requests must be routed to the memory cache
    387451         std::ostringstream sh;
    388452         sh << "c_seg_memc_" << x << "_" << y;
    389          maptabc.add(Segment(sh.str(), (nprocs << (address_width - srcid_width)) + offset, 0x10, IntTab(cluster(x,y), nprocs), false));
     453         maptabc.add(Segment(sh.str(), (nb_procs << (address_width - srcid_width)) + offset,
     454                     0x10, IntTab(cluster(x,y), nb_procs), false));
    390455
    391456         // update & invalidate requests must be routed to the proper processor
    392          for ( size_t p = 0 ; p < nprocs ; p++) {
     457         for ( size_t p = 0 ; p < nb_procs ; p++)
     458         {
    393459            std::ostringstream sp;
    394460            sp << "c_seg_proc_" << x << "_" << y << "_" << p;
    395             maptabc.add( Segment( sp.str() , (p << (address_width - srcid_width)) + offset , 0x10 , IntTab(cluster(x,y), p) , false));
     461            maptabc.add( Segment( sp.str() , (p << (address_width - srcid_width)) + offset ,
     462                         0x10 , IntTab(cluster(x,y), p) , false));
    396463         }
    397464      }
     
    402469   MappingTable maptabx(address_width, IntTab(1), IntTab(x_width+y_width), 0xF0000000);
    403470
    404    for (size_t x = 0; x < xmax; x++){
    405       for (size_t y = 0; y < ymax ; y++){
     471   for (size_t x = 0; x < xmax; x++)
     472   {
     473      for (size_t y = 0; y < ymax ; y++)
     474      {
    406475         sc_uint<address_width> offset  = cluster(x,y) << (address_width-x_width-y_width);
    407476         std::ostringstream sh;
    408477         sh << "x_seg_memc_" << x << "_" << y;
    409          maptabx.add(Segment(sh.str(), MEMC_BASE+offset, MEMC_SIZE, IntTab(cluster(x,y)), false));
     478         maptabx.add(Segment(sh.str(), MEMC_BASE+offset,
     479                     MEMC_SIZE, IntTab(cluster(x,y)), false));
    410480      }
    411481   }
     
    472542   {
    473543#pragma omp for
    474       for(size_t i = 0; i  < (xmax * ymax); i++){
    475          size_t x = i / ymax;
    476          size_t y = i % ymax;
    477 
     544      for(size_t i = 0; i  < (xmax * ymax); i++)
     545      {
     546          size_t x = i / ymax;
     547          size_t y = i % ymax;
    478548#pragma omp critical
    479          std::ostringstream sc;
    480          sc << "cluster_" << x << "_" << y;
    481          clusters[x][y] = new TsarV4ClusterMmu<vci_param, proc_iss, cmd_width, rsp_width>
     549
     550          std::cout << "building cluster_" << x << "_" << y << std::endl;
     551
     552          std::ostringstream sc;
     553          sc << "cluster_" << x << "_" << y;
     554          clusters[x][y] = new TsarV4ClusterMmu<vci_param, proc_iss, cmd_width, rsp_width>
    482555            (sc.str().c_str(),
    483              nprocs,
     556             nb_procs,
     557             nb_ttys, 
     558             nb_dmas,
    484559             x,
    485560             y,
     
    504579             l1_d_sets,
    505580             xram_latency,
    506              (cluster(x,y) == cluster_io_index),
     581             (cluster(x,y) == cluster_io_id),
    507582             xfb,
    508583             yfb,
     
    511586             loader,
    512587             frozen_cycles,
    513              from_cycle,
    514              trace_ok and (cluster_io_index == cluster(x,y)) );
    515       }
     588             debug_from,
     589             debug_ok and (cluster(x,y) == debug_memc_id),
     590             debug_ok and (cluster(x,y) == debug_proc_id) );
     591
     592         std::cout << "cluster_" << x << "_" << y << " constructed" << std::endl;
     593
     594       }
    516595   }
    517596
    518597#else  // NO OPENMP
    519598
    520    for (size_t x = 0; x  < xmax; x++){
    521       for (size_t y = 0; y < ymax; y++){
     599   for (size_t x = 0; x  < xmax; x++)
     600   {
     601       for (size_t y = 0; y < ymax; y++)
     602       {
    522603
    523604         std::cout << "building cluster_" << x << "_" << y << std::endl;
     
    527608         clusters[x][y] = new TsarV4ClusterMmu<vci_param, proc_iss, cmd_width, rsp_width>
    528609            (sc.str().c_str(),
    529              nprocs,
     610             nb_procs,
     611             nb_ttys,
     612             nb_dmas,
    530613             x,
    531614             y,
     
    550633             l1_d_sets,
    551634             xram_latency,
    552              (cluster(x,y) == cluster_io_index),
     635             (cluster(x,y) == cluster_io_id),
    553636             xfb,
    554637             yfb,
     
    557640             loader,
    558641             frozen_cycles,
    559              from_cycle,
    560              trace_ok and (cluster_io_index == cluster(x,y)) );
     642             debug_from,
     643             debug_ok and ( cluster(x,y) == debug_memc_id ),
     644             debug_ok and ( cluster(x,y) == debug_proc_id ) );
    561645
    562646         std::cout << "cluster_" << x << "_" << y << " constructed" << std::endl;
     
    618702
    619703   // East & West boundary cluster connections
    620    for (size_t y = 0; y < ymax; y++){
    621       for (size_t k = 0; k < 2; k++){
     704   for (size_t y = 0; y < ymax; y++)
     705   {
     706      for (size_t k = 0; k < 2; k++)
     707      {
    622708         clusters[0][y]->p_cmd_in[k][WEST]          (signal_dspin_false_cmd_in[0][y][k][WEST]);
    623709         clusters[0][y]->p_cmd_out[k][WEST]         (signal_dspin_false_cmd_out[0][y][k][WEST]);
     
    633719
    634720   // North & South boundary clusters connections
    635    for (size_t x = 0; x < xmax; x++){
    636       for (size_t k = 0; k < 2; k++){
     721   for (size_t x = 0; x < xmax; x++)
     722   {
     723      for (size_t k = 0; k < 2; k++)
     724      {
    637725         clusters[x][0]->p_cmd_in[k][SOUTH]         (signal_dspin_false_cmd_in[x][0][k][SOUTH]);
    638726         clusters[x][0]->p_cmd_out[k][SOUTH]        (signal_dspin_false_cmd_out[x][0][k][SOUTH]);
     
    677765   signal_resetn = true;
    678766
    679    for (size_t n = 1; n < ncycles; n++){
    680       if (trace_ok and (n > from_cycle) and (n % trace_period == 0)){
     767   for (size_t n = 1; n < ncycles; n++)
     768   {
     769
     770      if (debug_ok and (n > debug_from) and (n % debug_period == 0))
     771      {
    681772         std::cout << "****************** cycle " << std::dec << n ;
    682773         std::cout << " ************************************************" << std::endl;
    683774
    684          // components cluster 00 /////////////////////
    685          //            clusters[0][0]->proc[0]->print_trace();
    686          //            clusters[0][0]->memc->print_trace();
    687 
    688          // signals cluster 00 ////////////////////////
    689          //            clusters[0][0]->signal_vci_ini_d_proc[0].print_trace("proc_0_0_0_ini_d");
    690          //            clusters[0][0]->signal_vci_ini_c_proc[0].print_trace("proc_0_0_0_ini_c");
    691          //            clusters[0][0]->signal_vci_tgt_c_proc[0].print_trace("proc_0_0_0_tgt_c");
    692          //            clusters[0][0]->signal_vci_xram.print_trace("memc_0_0_xram");
    693 
    694          // components cluster 01 /////////////////////
    695          //            clusters[0][1]->proc[0]->print_trace();
    696          //            clusters[0][1]->memc->print_trace();
    697 
    698          // signals cluster 01 ///////////////////////
    699          //            clusters[0][1]->signal_vci_ini_d_proc[0].print_trace("proc_0_1_0_ini_d");
    700          //            clusters[0][1]->signal_vci_ini_c_proc[0].print_trace("proc_0_1_0_ini_c");
    701          //            clusters[0][1]->signal_vci_tgt_c_proc[0].print_trace("proc_0_1_0_tgt_c");
    702          //            clusters[0][1]->signal_vci_xram.print_trace("memc_0_1_xram");
    703 
    704          // components cluster 10 ////////////////////
    705          clusters[1][0]->proc[0]->print_trace(1);
    706          clusters[1][0]->memc->print_trace();
    707          //            clusters[1][0]->bdev->print_trace();
    708          //            clusters[1][0]->mdma->print_trace();
    709 
    710          // signals cluster 10 ///////////////////////
    711          clusters[1][0]->signal_vci_ini_d_proc[0].print_trace("proc_1_0_0_ini_d");
    712          //            clusters[1][0]->signal_vci_ini_c_proc[0].print_trace("proc_1_0_0_ini_c");
    713          //            clusters[1][0]->signal_vci_tgt_c_proc[0].print_trace("proc_1_0_0_tgt_c");
    714          clusters[1][0]->signal_vci_tgt_d_memc.print_trace("memc_1_0_tgt_d  ");
    715          //            clusters[1][0]->signal_vci_ini_c_memc.print_trace("memc_1_0_ini_c  ");
    716          //            clusters[1][0]->signal_vci_tgt_c_memc.print_trace("memc_1_0_tgt_c  ");
    717          //            clusters[1][0]->signal_vci_tgt_d_bdev.print_trace("bdev_1_0_tgt_d  ");
    718          //            clusters[1][0]->signal_vci_ini_d_bdev.print_trace("bdev_1_0_ini_d  ");
    719          //            clusters[1][0]->signal_vci_tgt_d_mdma.print_trace("mdma_1_0_tgt_d  ");
    720          //            clusters[1][0]->signal_vci_ini_d_mdma.print_trace("mdma_1_0_ini_d  ");
    721          clusters[1][0]->signal_vci_tgt_d_mtty.print_trace("mtty_1_0_tgt_d  ");
    722          clusters[1][0]->signal_vci_xram.print_trace("memc_1_0_xram");
    723 
    724          // components cluster 11 /////////////////////
    725          //            clusters[1][1]->proc[0]->print_trace();
    726          //            clusters[1][1]->memc->print_trace();
    727 
    728          // signals cluster 11 ////////////////////////
    729          //            clusters[1][1]->signal_vci_ini_d_proc[0].print_trace("proc_1_1_0_ini_d");
    730          //            clusters[1][1]->signal_vci_ini_c_proc[0].print_trace("proc_1_1_0_ini_c");
    731          //            clusters[1][1]->signal_vci_tgt_c_proc[0].print_trace("proc_1_1_0_tgt_c");
    732          //            clusters[1][1]->signal_vci_xram.print_trace("memc_1_1_xram");
     775         // trace proc[debug_proc_id]
     776         if ( debug_proc_id < (xmax * ymax * nb_procs) )
     777         {
     778             size_t proc_x = debug_proc_id / ymax;
     779             size_t proc_y = debug_proc_id % ymax;
     780
     781             clusters[proc_x][proc_y]->proc[0]->print_trace();
     782
     783             clusters[proc_x][proc_y]->signal_vci_ini_d_proc[0].print_trace("proc_ini_d");
     784             clusters[proc_x][proc_y]->signal_vci_ini_c_proc[0].print_trace("proc_ini_c");
     785             clusters[proc_x][proc_y]->signal_vci_tgt_c_proc[0].print_trace("proc_tgt_c");
     786         }
     787
     788         // trace memc[debug_memc_id]
     789         if ( debug_memc_id < (xmax * ymax) )
     790         {
     791             size_t memc_x = debug_memc_id / ymax;
     792             size_t memc_y = debug_memc_id % ymax;
     793
     794             clusters[memc_x][memc_y]->memc->print_trace();
     795
     796             clusters[memc_x][memc_y]->signal_vci_tgt_d_memc.print_trace("memc_tgt_d");
     797             clusters[memc_x][memc_y]->signal_vci_ini_c_memc.print_trace("memc_ini_c");
     798             clusters[memc_x][memc_y]->signal_vci_tgt_c_memc.print_trace("memc_tgt_c");
     799         }
     800
     801         // clusters[0][0]->signal_vci_tgt_d_xicu.print_trace("xicu_0_0");
     802         // clusters[0][1]->signal_vci_tgt_d_xicu.print_trace("xicu_0_1");
     803         // clusters[1][0]->signal_vci_tgt_d_xicu.print_trace("xicu_1_0");
     804         // clusters[1][1]->signal_vci_tgt_d_xicu.print_trace("xicu_1_1");
     805
     806         clusters[1][1]->mdma->print_trace();
     807         clusters[1][1]->signal_vci_tgt_d_mdma.print_trace("dma_tgt_1_1");
     808         clusters[1][1]->signal_vci_ini_d_mdma.print_trace("dma_ini_1_1");
     809         if ( clusters[1][1]->signal_irq_mdma[0].read() )
     810             std::cout << std::endl << " IRQ_DMA_1_1 activated" << std::endl;
     811         if ( clusters[1][1]->signal_proc_it[0].read() )
     812             std::cout <<  " IRQ_PROC_1_1 activated" << std::endl << std::endl;
     813
     814         // trace peripherals components
     815         if ( false )
     816         {
     817            size_t io_x   = cluster_io_id / ymax;
     818            size_t io_y   = cluster_io_id % ymax;
     819
     820            clusters[io_x][io_y]->bdev->print_trace();
     821            clusters[io_x][io_y]->mdma->print_trace();
     822
     823            clusters[io_x][io_y]->signal_vci_tgt_d_bdev.print_trace("bdev_1_0_tgt_d  ");
     824            clusters[io_x][io_y]->signal_vci_ini_d_bdev.print_trace("bdev_1_0_ini_d  ");
     825            clusters[io_x][io_y]->signal_vci_tgt_d_mdma.print_trace("mdma_1_0_tgt_d  ");
     826            clusters[io_x][io_y]->signal_vci_ini_d_mdma.print_trace("mdma_1_0_ini_d  ");
     827         }
    733828      }
    734829
Note: See TracChangeset for help on using the changeset viewer.