Ignore:
Timestamp:
May 18, 2014, 8:33:04 PM (10 years ago)
Author:
cfuguet
Message:

branches/fault-tolerance/tsar_generic_iob:

  • Introducing multi-tty component in all clusters for debug. Number of channels is set by a proprocessor contant in the tsar_iob_cluster.h file. Number of channels can be 0 if tty isn't needed.
  • Reducing number of parameters for cluster class. Using constants defined in hard_config.h instead.
Location:
branches/fault_tolerance/platform/tsar_generic_iob/tsar_iob_cluster/caba
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/fault_tolerance/platform/tsar_generic_iob/tsar_iob_cluster/caba/metadata/tsar_iob_cluster.sd

    r658 r695  
    33
    44Module('caba:tsar_iob_cluster',
    5         classname = 'soclib::caba::TsarIobCluster',
     5    classname = 'soclib::caba::TsarIobCluster',
    66
    7         tmpl_parameters = [
    8                 parameter.Module('vci_param_int', default = 'caba:vci_param',
     7    tmpl_parameters = [
     8        parameter.Module('vci_param_int', default = 'caba:vci_param',
    99                          cell_size = parameter.Reference('vci_data_width_int')),
    10                 parameter.Module('vci_param_ext', default = 'caba:vci_param',
     10        parameter.Module('vci_param_ext', default = 'caba:vci_param',
    1111                          cell_size = parameter.Reference('vci_data_width_ext')),
    12                 parameter.Int('dspin_int_cmd_width'),
    13                 parameter.Int('dspin_int_rsp_width'),
    14                 parameter.Int('dspin_ram_cmd_width'),
    15                 parameter.Int('dspin_ram_rsp_width'),
    16         ],
     12        parameter.Int('dspin_int_cmd_width'),
     13        parameter.Int('dspin_int_rsp_width'),
     14        parameter.Int('dspin_ram_cmd_width'),
     15        parameter.Int('dspin_ram_rsp_width'),
     16    ],
    1717
    18         header_files = [
     18    header_files = [
     19        '../source/include/tsar_iob_cluster.h',
    1920        '../source/include/tsar_iob_cluster.h',
    2021    ],
    2122
    22         implementation_files = [
     23    implementation_files = [
    2324        '../source/src/tsar_iob_cluster.cpp',
    2425    ],
    2526
    26         uses = [
    27                 Uses('caba:base_module'),
    28                 Uses('common:mapping_table'),
    29                 Uses('common:iss2'),
    30                 Uses('common:elf_file_loader'),
     27    uses = [
     28        Uses('caba:base_module'),
     29        Uses('common:mapping_table'),
     30        Uses('common:iss2'),
     31        Uses('common:elf_file_loader'),
    3132
    3233        # internal network components
    33                 Uses('caba:vci_cc_vcache_wrapper',
     34        Uses('caba:vci_cc_vcache_wrapper',
    3435              cell_size          = parameter.Reference('vci_data_width_int'),
    3536              dspin_in_width     = parameter.Reference('dspin_int_cmd_width'),
     
    3839              gdb_iss_t          = 'common:mips32el'),
    3940
    40                 Uses('caba:vci_mem_cache',
     41        Uses('caba:vci_mem_cache',
    4142              memc_cell_size_int = parameter.Reference('vci_data_width_int'),
    4243              memc_cell_size_ext = parameter.Reference('vci_data_width_ext'),
     
    4748              cell_size          = parameter.Reference('vci_data_width_int')),
    4849
    49                 Uses('caba:vci_simple_rom',
     50        Uses('caba:vci_simple_rom',
    5051              cell_size          = parameter.Reference('vci_data_width_int')),
    5152
    52                 Uses('caba:vci_multi_dma',
     53        Uses('caba:vci_multi_tty',
     54              cell_size          = parameter.Reference('vci_data_width_int')),
     55
     56        Uses('caba:vci_multi_dma',
    5357              cell_size          = parameter.Reference('vci_data_width_int')),
    5458
     
    9296              flit_width         = parameter.Reference('dspin_ram_rsp_width')),
    9397
    94                 Uses('caba:vci_simple_ram',
     98        Uses('caba:vci_simple_ram',
    9599              cell_size          = parameter.Reference('vci_data_width_ext')),
    96100
     
    99103              iob_cell_size_int  = parameter.Reference('vci_data_width_int'),
    100104              iob_cell_size_ext  = parameter.Reference('vci_data_width_ext')),
    101                 ],
     105        ],
    102106
    103         ports = [
    104                 Port('caba:bit_in', 'p_resetn', auto = 'resetn'),
    105                 Port('caba:clock_in', 'p_clk', auto = 'clock'),
     107    ports = [
     108        Port('caba:bit_in', 'p_resetn', auto = 'resetn'),
     109        Port('caba:clock_in', 'p_clk', auto = 'clock'),
    106110
    107                 Port('caba:dspin_output', 'p_int_cmd_out', [4, 3],
     111        Port('caba:dspin_output', 'p_int_cmd_out', [4, 3],
    108112              dspin_data_size = parameter.Reference('dspin_int_cmd_width')),
    109                 Port('caba:dspin_input', 'p_int_cmd_in', [4, 3],
     113        Port('caba:dspin_input', 'p_int_cmd_in', [4, 3],
    110114              dspin_data_size = parameter.Reference('dspin_int_cmd_width')),
    111                 Port('caba:dspin_output', 'p_int_rsp_out', [4, 2],
     115        Port('caba:dspin_output', 'p_int_rsp_out', [4, 2],
    112116              dspin_data_size = parameter.Reference('dspin_int_rsp_width')),
    113                 Port('caba:dspin_input', 'p_int_rsp_in', [4, 2],
     117        Port('caba:dspin_input', 'p_int_rsp_in', [4, 2],
    114118              dspin_data_size = parameter.Reference('dspin_int_rsp_width')),
    115119
    116                 Port('caba:dspin_output', 'p_ram_cmd_out', [4],
     120        Port('caba:dspin_output', 'p_ram_cmd_out', [4],
    117121              dspin_data_size = parameter.Reference('dspin_ram_cmd_width')),
    118                 Port('caba:dspin_input', 'p_ram_cmd_in', [4],
     122        Port('caba:dspin_input', 'p_ram_cmd_in', [4],
    119123              dspin_data_size = parameter.Reference('dspin_ram_cmd_width')),
    120                 Port('caba:dspin_output', 'p_ram_rsp_out', [4],
     124        Port('caba:dspin_output', 'p_ram_rsp_out', [4],
    121125              dspin_data_size = parameter.Reference('dspin_ram_rsp_width')),
    122                 Port('caba:dspin_input', 'p_ram_rsp_in', [4],
     126        Port('caba:dspin_input', 'p_ram_rsp_in', [4],
    123127              dspin_data_size = parameter.Reference('dspin_ram_rsp_width')),
    124                 ],
     128        ],
    125129)
    126130
  • branches/fault_tolerance/platform/tsar_generic_iob/tsar_iob_cluster/caba/source/include/tsar_iob_cluster.h

    r658 r695  
    3232#include "vci_cc_vcache_wrapper.h"
    3333#include "vci_io_bridge.h"
     34#include "vci_multi_tty.h"
     35#include "hard_config.h"
     36
     37///////////////////////////////////////////////////////////////////////
     38//     Number of channels for debug TTY (may be 0)
     39///////////////////////////////////////////////////////////////////////
     40#define NB_DEBUG_TTY_CHANNELS 1
     41
     42///////////////////////////////////////////////////////////////////////
     43//     TGT_ID and INI_ID port indexing for INT local interconnect
     44///////////////////////////////////////////////////////////////////////
     45
     46#define INT_MEMC_TGT_ID 0
     47#define INT_XICU_TGT_ID 1
     48#define INT_BROM_TGT_ID 2
     49#define INT_MDMA_TGT_ID 3
     50#define INT_MTTY_TGT_ID 4
     51#define INT_IOBX_TGT_ID (4 + (NB_DEBUG_TTY_CHANNELS ? 1 : 0))
     52
     53#define INT_PROC_INI_ID 0 // from 0 to 7
     54#define INT_MDMA_INI_ID NB_PROCS
     55#define INT_IOBX_INI_ID (NB_PROCS + 1)
     56
     57///////////////////////////////////////////////////////////////////////
     58//     TGT_ID and INI_ID port indexing for RAM local interconnect
     59///////////////////////////////////////////////////////////////////////
     60
     61#define RAM_XRAM_TGT_ID 0
     62
     63#define RAM_MEMC_INI_ID 0
     64#define RAM_IOBX_INI_ID 1
    3465
    3566namespace soclib { namespace caba {
     
    81112      sc_signal<bool> signal_proc_it[8];
    82113      sc_signal<bool> signal_irq_mdma[8];
     114      sc_signal<bool> signal_irq_mtty[8];
    83115      sc_signal<bool> signal_irq_memc;
    84116
     
    104136      VciSignals<vci_param_int> signal_int_vci_tgt_xicu;
    105137      VciSignals<vci_param_int> signal_int_vci_tgt_brom;
     138      VciSignals<vci_param_int> signal_int_vci_tgt_mtty;
    106139      VciSignals<vci_param_int> signal_int_vci_tgt_mdma;
    107140      VciSignals<vci_param_int> signal_int_vci_tgt_iobx;
     
    122155      DspinSignals<dspin_int_cmd_width> signal_int_dspin_cmd_brom_t;
    123156      DspinSignals<dspin_int_rsp_width> signal_int_dspin_rsp_brom_t;
     157      DspinSignals<dspin_int_cmd_width> signal_int_dspin_cmd_mtty_t;
     158      DspinSignals<dspin_int_rsp_width> signal_int_dspin_rsp_mtty_t;
    124159      DspinSignals<dspin_int_cmd_width> signal_int_dspin_cmd_mdma_t;
    125160      DspinSignals<dspin_int_rsp_width> signal_int_dspin_rsp_mdma_t;
     
    186221      VciIntDspinTargetWrapperType*    brom_int_wt;
    187222
     223      VciMultiTty<vci_param_int>*      mtty;
     224      VciIntDspinTargetWrapperType*    mtty_int_wt;
     225
    188226      DspinLocalCrossbar<dspin_int_cmd_width>* int_xbar_cmd_d;
    189227      DspinLocalCrossbar<dspin_int_rsp_width>* int_xbar_rsp_d;
     
    213251         sc_module_name insname;
    214252
    215          size_t nb_procs;
    216          size_t nb_dmas;
    217253         size_t x_id;
    218254         size_t y_id;
    219          size_t x_size;
    220          size_t y_size;
    221255
    222256         const soclib::common::MappingTable &mt_int;
    223257         const soclib::common::MappingTable &mt_ext;
    224258         const soclib::common::MappingTable &mt_iox;
    225 
    226          size_t x_width;
    227          size_t y_width;
    228          size_t l_width;
    229 
    230          size_t int_memc_tgtid;
    231          size_t int_xicu_tgtid;
    232          size_t int_mdma_tgtid;
    233          size_t int_iobx_tgtid;
    234          size_t int_brom_tgtid;
    235          size_t int_proc_srcid;
    236          size_t int_mdma_srcid;
    237          size_t int_iobx_srcid;
    238          size_t ext_xram_tgtid;
    239          size_t ext_memc_srcid;
    240          size_t ext_iobx_srcid;
    241259
    242260         size_t memc_ways;
     
    257275      };
    258276
     277      // utility functions
     278      static uint32_t clusterId(size_t x_id, size_t y_id) {
     279         return ((x_id << Y_WIDTH) | y_id);
     280      };
     281
    259282      // cluster constructor
    260283      TsarIobCluster(struct ClusterParams& params);
  • branches/fault_tolerance/platform/tsar_generic_iob/tsar_iob_cluster/caba/source/src/tsar_iob_cluster.cpp

    r658 r695  
    3333//////////////////////////////////////////////////////////////////////////
    3434tmpl(/**/)::TsarIobCluster(struct ClusterParams& params) :
    35    soclib::caba::BaseModule(params.insname), p_clk("clk"), p_resetn("resetn")
    36 {
    37    assert((params.x_id < params.x_size) and (params.y_id < params.y_size));
    38 
    39    this->m_procs = params.nb_procs;
    40    size_t cluster_id = (params.x_id << 4) + params.y_id;
    41 
    42    size_t cluster_iob0 = 0;
    43    size_t cluster_iob1 = ((params.x_size - 1) << 4) + params.y_size - 1;
     35   soclib::caba::BaseModule(params.insname),
     36   p_clk("clk"),
     37   p_resetn("resetn") {
     38
     39   assert((params.x_id < X_MAX) && (params.y_id < Y_MAX));
     40
     41   size_t cid           = this->clusterId(params.x_id, params.y_id);
     42   size_t cluster_iob0  = this->clusterId(0, 0);
     43   size_t cluster_iob1  = this->clusterId(X_SIZE - 1, Y_SIZE - 1);
     44   size_t is_iob0       = (cid == cluster_iob0);
     45   size_t is_iob1       = (cid == cluster_iob1);
     46   bool   is_io_cluster = is_iob0 || is_iob1;
     47
     48   size_t l_width = vci_param_int::S - X_WIDTH - Y_WIDTH;
    4449
    4550   // Vectors of DSPIN ports for inter-cluster communications
     
    6368
    6469   // ports in cluster_iob0 and cluster_iob1 only
    65    if ( (cluster_id == cluster_iob0) or (cluster_id == cluster_iob1) )
    66    {
     70   p_vci_iob_iox_ini   = NULL;
     71   p_vci_iob_iox_tgt   = NULL;
     72   p_dspin_iob_cmd_out = NULL;
     73   p_dspin_iob_rsp_in  = NULL;
     74   if ( is_io_cluster ) {
    6775      // VCI ports from IOB to IOX network
    6876      p_vci_iob_iox_ini = new soclib::caba::VciInitiator<vci_param_ext>;
     
    7078
    7179      // DSPIN ports from IOB to RAM network
    72       p_dspin_iob_cmd_out =
    73          new soclib::caba::DspinOutput<dspin_ram_cmd_width>;
    74       p_dspin_iob_rsp_in  =
    75          new soclib::caba::DspinInput<dspin_ram_rsp_width>;
    76    }
    77    else
    78    {
    79       p_vci_iob_iox_ini   = NULL;
    80       p_vci_iob_iox_tgt   = NULL;
    81       p_dspin_iob_cmd_out = NULL;
    82       p_dspin_iob_rsp_in  = NULL;
     80      p_dspin_iob_cmd_out = new soclib::caba::DspinOutput<dspin_ram_cmd_width>;
     81      p_dspin_iob_rsp_in  = new soclib::caba::DspinInput<dspin_ram_rsp_width>;
    8382   }
    8483
    8584   // IRQ ports in cluster_iob0 only
    86    for ( size_t n = 0 ; n < 32 ; n++ )
    87    {
    88       if ( cluster_id == cluster_iob0 )
    89       {
    90          p_irq[n] = new sc_in<bool>;
    91       }
    92       else
    93       {
    94          p_irq[n] = NULL;
    95       }
     85   for ( size_t n = 0 ; n < 32 ; n++ ) {
     86      p_irq[n] = ( is_iob0 ) ? new sc_in<bool> : NULL;
    9687   }
    9788
     
    10192
    10293   ////////////  PROCS
    103    for (size_t p = 0; p < params.nb_procs; p++)
    104    {
     94   for (size_t p = 0; p < NB_PROCS; p++) {
    10595      std::ostringstream s_proc;
    10696      s_proc << "proc_" << params.x_id << "_" << params.y_id << "_" << p;
    10797      proc[p] = new VciCcVCacheWrapperType (
    10898            s_proc.str().c_str(),
    109             cluster_id * params.nb_procs + p,
     99            cid * NB_PROCS + p,
    110100            params.mt_int,
    111             IntTab(cluster_id,p),
    112             (cluster_id << params.l_width) + p,
     101            IntTab(cid,p),
     102            (cid << l_width) + p,
    113103            8, 8,
    114104            8, 8,
     
    116106            params.l1_d_ways, params.l1_d_sets, 16,
    117107            4, 4,
    118             params.x_width, params.y_width,
     108            X_WIDTH, Y_WIDTH,
    119109            params.frozen_cycles,
    120110            params.debug_start_cycle, params.proc_debug_ok);
    121111
     112      proc[p]->set_dcache_paddr_ext_reset(cid);
     113      proc[p]->set_icache_paddr_ext_reset(cid);
     114
    122115      std::ostringstream s_wi_proc;
    123       s_wi_proc << "proc_wi_" << params.x_id << "_" << params.y_id << "_"
    124          << p;
     116      s_wi_proc << "proc_wi_" << params.x_id << "_" << params.y_id << "_" << p;
    125117      proc_wi[p] = new VciIntDspinInitiatorWrapperType(
    126118            s_wi_proc.str().c_str(),
    127             params.x_width + params.y_width + params.l_width);
     119            vci_param_int::S);
    128120   }
    129121
     
    135127         params.mt_int,
    136128         params.mt_ext,
    137          IntTab(cluster_id, params.ext_memc_srcid),
    138          IntTab(cluster_id, params.int_memc_tgtid),
    139          params.x_width,
    140          params.y_width,
     129         IntTab(cid, RAM_MEMC_INI_ID),
     130         IntTab(cid, INT_MEMC_TGT_ID),
     131         X_WIDTH,
     132         Y_WIDTH,
    141133         params.memc_ways, params.memc_sets, 16,
    142134         3,
    143135         4096,
    144          8,
    145          8,
    146          8,
     136         8, 8, 8,
    147137         params.debug_start_cycle,
    148138         params.memc_debug_ok);
     
    152142   memc_int_wt = new VciIntDspinTargetWrapperType (
    153143         s_wt_memc.str().c_str(),
    154          params.x_width + params.y_width + params.l_width);
     144         vci_param_int::S);
    155145
    156146   std::ostringstream s_wi_memc;
     
    158148   memc_ram_wi = new VciExtDspinInitiatorWrapperType (
    159149         s_wi_memc.str().c_str(),
    160          params.x_width + params.y_width + params.l_width);
     150         vci_param_int::S);
    161151
    162152   ///////////   LOCAL ROM
     153   std::ostringstream s_brom;
     154   s_brom << "brom_" << params.x_id << "_" << params.y_id;
    163155   brom = new VciSimpleRom<vci_param_int>(
    164          "brom",
    165          IntTab(cluster_id, params.int_brom_tgtid),
     156         s_brom.str().c_str(),
     157         IntTab(cid, INT_BROM_TGT_ID),
    166158         params.mt_int,
    167159         params.loader,
    168          params.x_width + params.y_width);
     160         X_WIDTH + Y_WIDTH);
    169161
    170162   std::ostringstream s_wt_brom;
     
    172164   brom_int_wt = new VciIntDspinTargetWrapperType (
    173165         s_wt_brom.str().c_str(),
    174          params.x_width + params.y_width + params.l_width);
     166         vci_param_int::S);
     167
     168   // Multi-TTY controller
     169   mtty        = NULL;
     170   mtty_int_wt = NULL;
     171   if (NB_DEBUG_TTY_CHANNELS) {
     172      assert(NB_DEBUG_TTY_CHANNELS < 8);
     173
     174      std::ostringstream s_mtty;
     175      s_mtty << "mtty_" << params.x_id << "_" << params.y_id;
     176      std::vector<std::string> vect_names;
     177      for( size_t tid = 0 ; tid < NB_DEBUG_TTY_CHANNELS ; tid++ ) {
     178         std::ostringstream term_name;
     179         term_name << s_mtty.str() << "_" << tid;
     180         vect_names.push_back(term_name.str().c_str());
     181      }
     182      mtty = new VciMultiTty<vci_param_int>(
     183            s_mtty.str().c_str(),
     184            IntTab(cid, INT_MTTY_TGT_ID),
     185            params.mt_int,
     186            vect_names);
     187
     188      std::ostringstream s_wt_mtty;
     189      s_wt_mtty << "mtty_wt_" << params.x_id << "_" << params.y_id;
     190      mtty_int_wt = new VciIntDspinTargetWrapperType (
     191            s_wt_mtty.str().c_str(),
     192            vci_param_int::S);
     193   }
    175194
    176195   ///////////   XICU
     
    180199         s_xicu.str().c_str(),
    181200         params.mt_int,
    182          IntTab(cluster_id,params.int_xicu_tgtid),
     201         IntTab(cid, INT_XICU_TGT_ID),
    183202         32, 32, 32,
    184          params.nb_procs);
     203         NB_PROCS);
    185204
    186205   std::ostringstream s_wt_xicu;
     
    188207   xicu_int_wt = new VciIntDspinTargetWrapperType (
    189208         s_wt_xicu.str().c_str(),
    190          params.x_width + params.y_width + params.l_width);
     209         vci_param_int::S);
    191210
    192211   ////////////  MDMA
     
    196215         s_mdma.str().c_str(),
    197216         params.mt_int,
    198          IntTab(cluster_id, params.nb_procs),
    199          IntTab(cluster_id, params.int_mdma_tgtid),
     217         IntTab(cid, NB_PROCS),
     218         IntTab(cid, INT_MDMA_TGT_ID),
    200219         64,
    201          params.nb_dmas);
     220         NB_DMA_CHANNELS);
    202221
    203222   std::ostringstream s_wt_mdma;
     
    205224   mdma_int_wt = new VciIntDspinTargetWrapperType(
    206225         s_wt_mdma.str().c_str(),
    207          params.x_width + params.y_width + params.l_width);
     226         vci_param_int::S);
    208227
    209228   std::ostringstream s_wi_mdma;
     
    211230   mdma_int_wi = new VciIntDspinInitiatorWrapperType(
    212231         s_wi_mdma.str().c_str(),
    213          params.x_width + params.y_width + params.l_width);
     232         vci_param_int::S);
    214233
    215234   ///////////  Direct LOCAL_XBAR(S)
    216    size_t nb_direct_initiators = params.nb_procs + 1;
     235   size_t nb_direct_initiators = NB_PROCS + 1;
    217236   size_t nb_direct_targets    = 4;
    218    if ((cluster_id == cluster_iob0) or (cluster_id == cluster_iob1))
    219    {
    220       nb_direct_initiators = params.nb_procs + 2;
    221       nb_direct_targets    = 5;
     237   if (NB_DEBUG_TTY_CHANNELS) {
     238      nb_direct_targets++;
     239   }
     240   if ( is_io_cluster ) {
     241      nb_direct_initiators++;
     242      nb_direct_targets++;
    222243   }
    223244
     
    228249         params.mt_int,
    229250         params.x_id, params.y_id,
    230          params.x_width, params.y_width, params.l_width,
     251         X_WIDTH, Y_WIDTH, l_width,
    231252         nb_direct_initiators,
    232253         nb_direct_targets,
     
    242263         params.mt_int,
    243264         params.x_id, params.y_id,
    244          params.x_width, params.y_width, params.l_width,
     265         X_WIDTH, Y_WIDTH, l_width,
    245266         nb_direct_targets,
    246267         nb_direct_initiators,
     
    257278         params.mt_int,
    258279         params.x_id, params.y_id,
    259          params.x_width, params.y_width, params.l_width,
     280         X_WIDTH, Y_WIDTH, l_width,
    260281         1,
    261          params.nb_procs,
     282         NB_PROCS,
    262283         2, 2,
    263284         true,
     
    271292         params.mt_int,
    272293         params.x_id, params.y_id,
    273          params.x_width, params.y_width, 0,
    274          params.nb_procs,
     294         X_WIDTH, Y_WIDTH, 0,
     295         NB_PROCS,
    275296         1,
    276297         2, 2,
     
    281302   std::ostringstream s_int_xbar_clack_c;
    282303   s_int_xbar_clack_c << "int_xbar_clack_c_" << params.x_id << "_"
    283       << params.y_id;
     304                                             << params.y_id;
    284305   int_xbar_clack_c = new DspinLocalCrossbar<dspin_int_cmd_width>(
    285306         s_int_xbar_clack_c.str().c_str(),
    286307         params.mt_int,
    287308         params.x_id, params.y_id,
    288          params.x_width, params.y_width, params.l_width,
     309         X_WIDTH, Y_WIDTH, l_width,
    289310         1,
    290          params.nb_procs,
     311         NB_PROCS,
    291312         1, 1,
    292313         true,
     
    299320   int_router_cmd = new VirtualDspinRouter<dspin_int_cmd_width>(
    300321         s_int_router_cmd.str().c_str(),
    301          params.x_id,params.y_id,
    302          params.x_width, params.y_width,
     322         params.x_id, params.y_id,
     323         X_WIDTH, Y_WIDTH,
    303324         3,
    304325         4,4);
     
    308329   int_router_rsp = new VirtualDspinRouter<dspin_int_rsp_width>(
    309330         s_int_router_rsp.str().c_str(),
    310          params.x_id,params.y_id,
    311          params.x_width, params.y_width,
     331         params.x_id, params.y_id,
     332         X_WIDTH, Y_WIDTH,
    312333         2,
    313334         4,4);
     
    318339   xram = new VciSimpleRam<vci_param_ext>(
    319340         s_xram.str().c_str(),
    320          IntTab(cluster_id, params.ext_xram_tgtid),
     341         IntTab(cid, RAM_XRAM_TGT_ID),
    321342         params.mt_ext,
    322343         params.loader,
     
    327348   xram_ram_wt = new VciExtDspinTargetWrapperType(
    328349         s_wt_xram.str().c_str(),
    329          params.x_width + params.y_width + params.l_width);
     350         vci_param_int::S);
    330351
    331352   /////////////  RAM ROUTER(S)
    332353   std::ostringstream s_ram_router_cmd;
    333354   s_ram_router_cmd << "ram_router_cmd_" << params.x_id << "_" << params.y_id;
    334    size_t is_iob0 = (params.x_id == 0) and (params.y_id == 0);
    335    size_t is_iob1 = (params.x_id == (params.x_size-1)) and
    336       (params.y_id == (params.y_size-1));
    337355   ram_router_cmd = new DspinRouterTsar<dspin_ram_cmd_width>(
    338356         s_ram_router_cmd.str().c_str(),
    339357         params.x_id, params.y_id,
    340          params.x_width,
    341          params.y_width,
     358         X_WIDTH, Y_WIDTH,
    342359         4, 4,
    343          is_iob0,
    344          is_iob1,
     360         is_iob0, is_iob1,
    345361         false,
    346          params.l_width);
     362         l_width);
    347363
    348364   std::ostringstream s_ram_router_rsp;
     
    351367         s_ram_router_rsp.str().c_str(),
    352368         params.x_id, params.y_id,
    353          params.x_width,
    354          params.y_width,
     369         X_WIDTH, Y_WIDTH,
    355370         4, 4,
    356          is_iob0,
    357          is_iob1,
     371         is_iob0, is_iob1,
    358372         true,
    359          params.l_width);
     373         l_width);
    360374
    361375   ////////////////////// I/O  CLUSTER ONLY ///////////////////////
    362    if ((cluster_id == cluster_iob0) or (cluster_id == cluster_iob1))
    363    {
     376   iob        = NULL;
     377   iob_int_wi = NULL;
     378   iob_int_wt = NULL;
     379   iob_ram_wi = NULL;
     380   if ( is_io_cluster ) {
    364381      ///////////  IO_BRIDGE
    365382      size_t iox_local_id;
    366       size_t global_id;
    367383      bool   has_irqs;
    368       if (cluster_id == cluster_iob0 )
    369       {
     384      if ( is_iob0 ) {
    370385         iox_local_id = 0;
    371          global_id    = cluster_iob0;
    372386         has_irqs     = true;
    373387      }
    374       else
    375       {
     388      else {
    376389         iox_local_id = 1;
    377          global_id    = cluster_iob1;
    378390         has_irqs     = false;
    379391      }
     
    386398            params.mt_int,
    387399            params.mt_iox,
    388             IntTab( global_id, params.int_iobx_tgtid),
    389             IntTab( global_id, params.int_iobx_srcid),
    390             IntTab( global_id, iox_local_id ),
     400            IntTab(cid, INT_IOBX_TGT_ID),
     401            IntTab(cid, INT_IOBX_INI_ID),
     402            IntTab(cid, iox_local_id ),
    391403            has_irqs,
    392404            16,
     
    400412      iob_int_wi = new VciIntDspinInitiatorWrapperType(
    401413            s_iob_int_wi.str().c_str(),
    402             params.x_width + params.y_width + params.l_width);
     414            vci_param_int::S);
    403415
    404416      std::ostringstream s_iob_int_wt;
     
    406418      iob_int_wt = new VciIntDspinTargetWrapperType(
    407419            s_iob_int_wt.str().c_str(),
    408             params.x_width + params.y_width + params.l_width);
     420            vci_param_int::S);
    409421
    410422      std::ostringstream s_iob_ram_wi;
     
    412424      iob_ram_wi = new VciExtDspinInitiatorWrapperType(
    413425            s_iob_ram_wi.str().c_str(),
    414             params.x_width + params.y_width + params.l_width);
    415    }
    416    else
    417    {
    418       iob        = NULL;
    419       iob_int_wi = NULL;
    420       iob_int_wt = NULL;
    421       iob_ram_wi = NULL;
     426            vci_param_int::S);
    422427   }
    423428
     
    426431   ////////////////////////////////////
    427432
    428    // on coherence network : local srcid[proc] in [0...nb_procs-1]
    429    //                      : local srcid[memc] = nb_procs
     433   // on coherence network : local srcid[proc] in [0...NB_PROCS-1]
     434   //                      : local srcid[memc] = NB_PROCS
    430435   // In cluster_iob0, 32 HWI interrupts from external peripherals
    431436   // are connected to the XICU ports p_hwi[0:31]
     
    438443   int_router_rsp->p_resetn (this->p_resetn);
    439444
    440    for (int i = 0; i < 4; i++)
    441    {
    442       for(int k = 0; k < 3; k++)
    443       {
     445   for (int i = 0; i < 4; i++) {
     446      for(int k = 0; k < 3; k++) {
    444447         int_router_cmd->p_out[i][k] (this->p_dspin_int_cmd_out[i][k]);
    445448         int_router_cmd->p_in[i][k]  (this->p_dspin_int_cmd_in[i][k]);
    446449      }
    447 
    448       for(int k = 0; k < 2; k++)
    449       {
     450      for(int k = 0; k < 2; k++) {
    450451         int_router_rsp->p_out[i][k] (this->p_dspin_int_rsp_out[i][k]);
    451452         int_router_rsp->p_in[i][k]  (this->p_dspin_int_rsp_in[i][k]);
     
    472473   int_xbar_cmd_d->p_global_in  (signal_int_dspin_cmd_g2l_d);
    473474
    474    int_xbar_cmd_d->p_local_out[params.int_memc_tgtid](
    475          signal_int_dspin_cmd_memc_t);
    476    int_xbar_cmd_d->p_local_out[params.int_xicu_tgtid](
    477          signal_int_dspin_cmd_xicu_t);
    478    int_xbar_cmd_d->p_local_out[params.int_brom_tgtid](
    479          signal_int_dspin_cmd_brom_t);
    480    int_xbar_cmd_d->p_local_out[params.int_mdma_tgtid](
    481          signal_int_dspin_cmd_mdma_t);
    482    int_xbar_cmd_d->p_local_in[params.int_mdma_srcid](
    483          signal_int_dspin_cmd_mdma_i);
    484 
    485    for (size_t p = 0; p < params.nb_procs; p++) {
    486       int_xbar_cmd_d->p_local_in[params.int_proc_srcid + p](
     475   int_xbar_cmd_d->p_local_out[INT_MEMC_TGT_ID] (signal_int_dspin_cmd_memc_t);
     476   int_xbar_cmd_d->p_local_out[INT_XICU_TGT_ID] (signal_int_dspin_cmd_xicu_t);
     477   int_xbar_cmd_d->p_local_out[INT_BROM_TGT_ID] (signal_int_dspin_cmd_brom_t);
     478   int_xbar_cmd_d->p_local_out[INT_MDMA_TGT_ID] (signal_int_dspin_cmd_mdma_t);
     479   if (NB_DEBUG_TTY_CHANNELS) {
     480      int_xbar_cmd_d->p_local_out[INT_MTTY_TGT_ID] (signal_int_dspin_cmd_mtty_t);
     481   }
     482   int_xbar_cmd_d->p_local_in[INT_MDMA_INI_ID]  (signal_int_dspin_cmd_mdma_i);
     483
     484   for (size_t p = 0; p < NB_PROCS; p++) {
     485      int_xbar_cmd_d->p_local_in[INT_PROC_INI_ID + p](
    487486            signal_int_dspin_cmd_proc_i[p]);
    488487   }
    489488
    490    if ((cluster_id == cluster_iob0) or (cluster_id == cluster_iob1))
    491    {
    492       int_xbar_cmd_d->p_local_out[params.int_iobx_tgtid](
     489   if ( is_io_cluster ) {
     490      int_xbar_cmd_d->p_local_out[INT_IOBX_TGT_ID](
    493491            signal_int_dspin_cmd_iobx_t);
    494       int_xbar_cmd_d->p_local_in[params.int_iobx_srcid](
     492      int_xbar_cmd_d->p_local_in[INT_IOBX_INI_ID](
    495493            signal_int_dspin_cmd_iobx_i);
    496494   }
     
    502500   int_xbar_rsp_d->p_global_in  (signal_int_dspin_rsp_g2l_d);
    503501
    504    int_xbar_rsp_d->p_local_in[params.int_memc_tgtid](
    505          signal_int_dspin_rsp_memc_t);
    506    int_xbar_rsp_d->p_local_in[params.int_xicu_tgtid](
    507          signal_int_dspin_rsp_xicu_t);
    508    int_xbar_rsp_d->p_local_in[params.int_brom_tgtid](
    509          signal_int_dspin_rsp_brom_t);
    510    int_xbar_rsp_d->p_local_in[params.int_mdma_tgtid](
    511          signal_int_dspin_rsp_mdma_t);
    512 
    513    int_xbar_rsp_d->p_local_out[params.int_mdma_srcid](
    514          signal_int_dspin_rsp_mdma_i);
    515    for (size_t p = 0; p < params.nb_procs; p++)
    516       int_xbar_rsp_d->p_local_out[params.int_proc_srcid + p](
     502   int_xbar_rsp_d->p_local_in[INT_MEMC_TGT_ID] (signal_int_dspin_rsp_memc_t);
     503   int_xbar_rsp_d->p_local_in[INT_XICU_TGT_ID] (signal_int_dspin_rsp_xicu_t);
     504   int_xbar_rsp_d->p_local_in[INT_BROM_TGT_ID] (signal_int_dspin_rsp_brom_t);
     505   if (NB_DEBUG_TTY_CHANNELS) {
     506      int_xbar_rsp_d->p_local_in[INT_MTTY_TGT_ID] (signal_int_dspin_rsp_mtty_t);
     507   }
     508   int_xbar_rsp_d->p_local_in[INT_MDMA_TGT_ID] (signal_int_dspin_rsp_mdma_t);
     509
     510   int_xbar_rsp_d->p_local_out[INT_MDMA_INI_ID](signal_int_dspin_rsp_mdma_i);
     511   for (size_t p = 0; p < NB_PROCS; p++)
     512      int_xbar_rsp_d->p_local_out[INT_PROC_INI_ID + p](
    517513            signal_int_dspin_rsp_proc_i[p]);
    518514
    519    if ((cluster_id == cluster_iob0) or (cluster_id == cluster_iob1))
    520    {
    521       int_xbar_rsp_d->p_local_in[params.int_iobx_tgtid](
     515   if ( is_io_cluster ) {
     516      int_xbar_rsp_d->p_local_in[INT_IOBX_TGT_ID](
    522517            signal_int_dspin_rsp_iobx_t);
    523       int_xbar_rsp_d->p_local_out[params.int_iobx_srcid](
     518      int_xbar_rsp_d->p_local_out[INT_IOBX_INI_ID](
    524519            signal_int_dspin_rsp_iobx_i);
    525520   }
     
    531526   int_xbar_m2p_c->p_global_in        (signal_int_dspin_m2p_g2l_c);
    532527   int_xbar_m2p_c->p_local_in[0]      (signal_int_dspin_m2p_memc);
    533    for (size_t p = 0; p < params.nb_procs; p++)
    534    {
     528   for (size_t p = 0; p < NB_PROCS; p++) {
    535529      int_xbar_m2p_c->p_local_out[p] (signal_int_dspin_m2p_proc[p]);
    536530   }
     
    542536   int_xbar_p2m_c->p_global_in       (signal_int_dspin_p2m_g2l_c);
    543537   int_xbar_p2m_c->p_local_out[0]    (signal_int_dspin_p2m_memc);
    544    for (size_t p = 0; p < params.nb_procs; p++)
    545    {
     538   for (size_t p = 0; p < NB_PROCS; p++) {
    546539      int_xbar_p2m_c->p_local_in[p]   (signal_int_dspin_p2m_proc[p]);
    547540   }
     
    553546   int_xbar_clack_c->p_global_in       (signal_int_dspin_clack_g2l_c);
    554547   int_xbar_clack_c->p_local_in[0]     (signal_int_dspin_clack_memc);
    555    for (size_t p = 0; p < params.nb_procs; p++)
    556    {
     548   for (size_t p = 0; p < NB_PROCS; p++) {
    557549      int_xbar_clack_c->p_local_out[p] (signal_int_dspin_clack_proc[p]);
    558550   }
    559551
    560552   //////////////////////////////////// Processors
    561    for (size_t p = 0; p < params.nb_procs; p++)
    562    {
     553   for (size_t p = 0; p < NB_PROCS; p++) {
    563554      proc[p]->p_clk          (this->p_clk);
    564555      proc[p]->p_resetn       (this->p_resetn);
     
    568559      proc[p]->p_dspin_clack  (signal_int_dspin_clack_proc[p]);
    569560      proc[p]->p_irq[0]       (signal_proc_it[p]);
    570       for ( size_t j = 1 ; j < 6 ; j++)
    571       {
     561      for ( size_t j = 1 ; j < 6 ; j++) {
    572562         proc[p]->p_irq[j]    (signal_false);
    573563      }
     
    584574   xicu->p_resetn (this->p_resetn);
    585575   xicu->p_vci    (signal_int_vci_tgt_xicu);
    586    for ( size_t p = 0 ; p < params.nb_procs ; p++)
    587    {
     576   for ( size_t p = 0 ; p < NB_PROCS ; p++) {
    588577      xicu->p_irq[p] (signal_proc_it[p]);
    589578   }
    590    for ( size_t i=0 ; i<32 ; i++)
    591    {
    592       if (cluster_id == cluster_iob0)
     579   for ( size_t i=0 ; i<32 ; i++) {
     580      if ( is_iob0 )
    593581         xicu->p_hwi[i] (*(this->p_irq[i]));
    594582      else 
     
    639627   brom_int_wt->p_vci       (signal_int_vci_tgt_brom);
    640628
     629   if (NB_DEBUG_TTY_CHANNELS) {
     630      //////////////////////////////////// MTTY
     631      mtty->p_clk              (this->p_clk);
     632      mtty->p_resetn           (this->p_resetn);
     633      mtty->p_vci              (signal_int_vci_tgt_mtty);
     634
     635      for ( size_t i=0 ; i < NB_DEBUG_TTY_CHANNELS ; i++ ) {
     636         mtty->p_irq[i] (signal_irq_mtty[i]);
     637      }
     638
     639      //wrapper to INT network
     640      mtty_int_wt->p_clk       (this->p_clk);
     641      mtty_int_wt->p_resetn    (this->p_resetn);
     642      mtty_int_wt->p_dspin_cmd (signal_int_dspin_cmd_mtty_t);
     643      mtty_int_wt->p_dspin_rsp (signal_int_dspin_rsp_mtty_t);
     644      mtty_int_wt->p_vci       (signal_int_vci_tgt_mtty);
     645   }
     646
    641647   //////////////////////////////////// XRAM
    642648   xram->p_clk              (this->p_clk);
     
    656662   mdma->p_vci_target       (signal_int_vci_tgt_mdma);
    657663   mdma->p_vci_initiator    (signal_int_vci_ini_mdma);
    658    for (size_t i = 0 ; i < params.nb_dmas ; i++)
     664   for (size_t i = 0 ; i < NB_DMA_CHANNELS ; i++)
    659665      mdma->p_irq[i]        (signal_irq_mdma[i]);
    660666
     
    678684   ram_router_rsp->p_clk       (this->p_clk);
    679685   ram_router_rsp->p_resetn    (this->p_resetn);
    680    for( size_t n=0 ; n<4 ; n++)
    681    {
     686   for( size_t n=0 ; n<4 ; n++) {
    682687      ram_router_cmd->p_out[n] (this->p_dspin_ram_cmd_out[n]);
    683688      ram_router_cmd->p_in[n]  (this->p_dspin_ram_cmd_in[n]);
     
    691696
    692697   ///////////////////////// IOB exists only in cluster_iob0 & cluster_iob1.
    693    if ( (cluster_id == cluster_iob0) or (cluster_id == cluster_iob1) )
    694    {
     698   if ( is_io_cluster ) {
    695699      // IO bridge
    696700      iob->p_clk         (this->p_clk);
     
    702706      iob->p_vci_ini_ram (signal_ram_vci_ini_iobx);
    703707
    704       if ( cluster_id == cluster_iob0 )
     708      if ( is_iob0 )
    705709         for ( size_t n = 0 ; n < 32 ; n++ )
    706710            (*iob->p_irq[n]) (*(this->p_irq[n]));
     
    729733} // end constructor
    730734
    731 tmpl(/**/)::~TsarIobCluster()
    732 {
     735tmpl(/**/)::~TsarIobCluster() {
    733736   if (p_vci_iob_iox_ini)   delete p_vci_iob_iox_ini;
    734737   if (p_vci_iob_iox_tgt)   delete p_vci_iob_iox_tgt;
     
    740743   if (iob_ram_wi)          delete iob_ram_wi;
    741744
    742    for (size_t n = 0 ; n < 32 ; n++)
    743    {
     745   for (size_t n = 0 ; n < 32 ; n++) {
    744746      if (p_irq[n]) delete p_irq[n];
    745747   }
    746748
    747    for (size_t p = 0; p < m_procs; p++)
    748    {
     749   for (size_t p = 0; p < NB_PROCS; p++) {
    749750      delete proc[p];
    750751      delete proc_wi[p];
     
    758759   delete brom;
    759760   delete brom_int_wt;
     761   delete mtty;
     762   delete mtty_int_wt;
    760763   delete mdma;
    761764   delete mdma_int_wt;
Note: See TracChangeset for help on using the changeset viewer.