Ignore:
Timestamp:
Jun 24, 2014, 10:15:26 AM (10 years ago)
Author:
cfuguet
Message:

tsar_generic_iob:

  • Replacing "ad-hoc" dspin_tsar router by standard dspin_router on the RAM interconnect. To do so, in IO clusters (clusters with IOB) two crossbars are implemented:

+ One for commands which interconnects MEMC and IOB to the

local interface of RAM CMD dspin_router.

+ One for responses which interconnects local interface of RAM

RSP dspin_router to MEMC and IOB.

  • Introducing modified vci_io_bridge component
  • Modifying IOX memory segments used by IOX network for routing:

+ bugfix: all segments of IOX interconnect must have

global id = 0.

+ Adding XICU segments with special attribute. This

attribute is used by IOB to determine if a command coming
from external DMA peripheral should be routed
through INT or RAM networks.

+ Using bit 32 of physical address to determine if an

external DMA command should be routed through IOB0
or IOB1.

Location:
trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/metadata/tsar_iob_cluster.sd

    r693 r718  
    5959              flit_width         = parameter.Reference('dspin_int_rsp_width')),
    6060
     61        Uses('caba:dspin_local_crossbar',
     62              flit_width         = parameter.Reference('dspin_ram_cmd_width')),
     63
     64        Uses('caba:dspin_local_crossbar',
     65              flit_width         = parameter.Reference('dspin_ram_rsp_width')),
     66
    6167        Uses('caba:vci_dspin_initiator_wrapper',
    6268              cell_size          = parameter.Reference('vci_data_width_int'),
     
    8692              dspin_rsp_width    = parameter.Reference('dspin_ram_rsp_width')),
    8793
    88         Uses('caba:dspin_router_tsar',
     94        Uses('caba:dspin_router',
    8995              flit_width         = parameter.Reference('dspin_ram_cmd_width')),
    9096
    91         Uses('caba:dspin_router_tsar',
     97        Uses('caba:dspin_router',
    9298              flit_width         = parameter.Reference('dspin_ram_rsp_width')),
    9399
  • trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/include/tsar_iob_cluster.h

    r714 r718  
    2626#include "vci_dspin_initiator_wrapper.h"
    2727#include "vci_dspin_target_wrapper.h"
    28 #include "dspin_router_tsar.h"
     28#include "dspin_router.h"
    2929#include "virtual_dspin_router.h"
    3030#include "vci_multi_dma.h"
     
    5757    soclib::caba::VciTarget<vci_param_ext>*            p_vci_iob_iox_tgt;
    5858
    59     // These ports are used to connect IOB to RAM network in top cell
    60     soclib::caba::DspinOutput<dspin_ram_cmd_width>*    p_dspin_iob_cmd_out; 
    61     soclib::caba::DspinInput<dspin_ram_rsp_width>*     p_dspin_iob_rsp_in; 
    62 
    6359    // These arrays of ports are used to connect the INT & RAM networks in top cell
    6460    soclib::caba::DspinOutput<dspin_int_cmd_width>**   p_dspin_int_cmd_out;
     
    116112    VciSignals<vci_param_ext>             signal_ram_vci_tgt_xram;
    117113
    118     // RAM network DSPIN signals between VCI/DSPIN wrappers and routers
     114    // RAM network DSPIN signals between VCI/DSPIN wrappers, RAM dspin crossbar
     115    // and routers
    119116    DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_xram_t;
    120117    DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_xram_t;
    121118    DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_memc_i;
    122119    DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_memc_i;
     120    DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_iob_i;
     121    DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_iob_i;
     122    DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_xbar;
     123    DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_xbar;
     124    DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_false;
     125    DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_false;
    123126 
    124127    //////////////////////////////////////
     
    166169                          dspin_ram_rsp_width>*       xram_ram_wt;
    167170   
    168     DspinRouterTsar<dspin_ram_cmd_width>*             ram_router_cmd;
    169     DspinRouterTsar<dspin_ram_rsp_width>*             ram_router_rsp;
     171    DspinRouter<dspin_ram_cmd_width>*                 ram_router_cmd;
     172    DspinRouter<dspin_ram_rsp_width>*                 ram_router_rsp;
     173
     174    DspinLocalCrossbar<dspin_ram_cmd_width>*          ram_xbar_cmd;
     175    DspinLocalCrossbar<dspin_ram_rsp_width>*          ram_xbar_rsp;
     176   
    170177
    171178    // IO Network Components (not instanciated in all clusters)
     
    177184                             dspin_ram_cmd_width,
    178185                             dspin_ram_rsp_width>*    iob_ram_wi;
    179    
     186
    180187    // cluster constructor
    181188    TsarIobCluster( sc_module_name                     insname,
     
    195202                    size_t                             l_width,       // l field  bits
    196203
    197                     size_t                             int_memc_tgtid,
    198                     size_t                             int_xicu_tgtid,
    199                     size_t                             int_mdma_tgtid,
    200                     size_t                             int_iobx_tgtid,
    201 
    202                     size_t                             int_proc_srcid,
    203                     size_t                             int_mdma_srcid,
    204                     size_t                             int_iobx_srcid,
    205 
    206                     size_t                             ext_xram_tgtid,
    207 
    208                     size_t                             ext_memc_srcid,
    209                     size_t                             ext_iobx_srcid,
     204                    size_t                             int_memc_tgt_id,
     205                    size_t                             int_xicu_tgt_id,
     206                    size_t                             int_mdma_tgt_id,
     207                    size_t                             int_iobx_tgt_id,
     208                    size_t                             int_proc_ini_id,
     209                    size_t                             int_mdma_ini_id,
     210                    size_t                             int_iobx_ini_id,
     211
     212                    size_t                             ram_xram_tgt_id,
     213                    size_t                             ram_memc_ini_id,
     214                    size_t                             ram_iobx_ini_id,
     215
     216                    bool                               is_io,
     217                    size_t                             iox_iobx_tgt_id,
     218                    size_t                             iox_iobx_ini_id,
    210219
    211220                    size_t                             memc_ways,
     
    226235                    bool                               iob0_debug_ok );
    227236
     237  protected:
     238
     239    SC_HAS_PROCESS(TsarIobCluster);
     240
     241    void init();
     242 
     243
    228244};
    229245
     
    231247
    232248#endif
     249
     250// Local Variables:
     251// tab-width: 3
     252// c-basic-offset: 3
     253// c-file-offsets:((innamespace . 0)(inline-open . 0))
     254// indent-tabs-mode: nil
     255// End:
     256
     257// vim: filetype=cpp:expandtab:shiftwidth=3:tabstop=3:softtabstop=3
     258//
  • trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/src/tsar_iob_cluster.cpp

    r714 r718  
    1515#include "../include/tsar_iob_cluster.h"
    1616
     17#define tmpl(x) \
     18   template<typename vci_param_int      , typename vci_param_ext,\
     19            size_t   dspin_int_cmd_width, size_t   dspin_int_rsp_width,\
     20            size_t   dspin_ram_cmd_width, size_t   dspin_ram_rsp_width>\
     21            x TsarIobCluster<\
     22                  vci_param_int      , vci_param_ext,\
     23                  dspin_int_cmd_width, dspin_int_rsp_width,\
     24                  dspin_ram_cmd_width, dspin_ram_rsp_width>
     25
    1726namespace soclib { namespace caba  {
    1827
     
    2029//                 Constructor
    2130//////////////////////////////////////////////////////////////////////////
    22 template<typename vci_param_int,
    23          typename vci_param_ext,
    24          size_t   dspin_int_cmd_width,
    25          size_t   dspin_int_rsp_width,
    26          size_t   dspin_ram_cmd_width,
    27          size_t   dspin_ram_rsp_width>
    28 TsarIobCluster<vci_param_int,
    29                vci_param_ext,
    30                dspin_int_cmd_width,
    31                dspin_int_rsp_width,
    32                dspin_ram_cmd_width,
    33                dspin_ram_rsp_width>::TsarIobCluster(
     31tmpl(/**/)::TsarIobCluster(
    3432//////////////////////////////////////////////////////////////////////////
    3533                    sc_module_name                     insname,
     
    4947                    size_t                             l_width,
    5048
    51                     size_t                             memc_int_tgtid,  // local index
    52                     size_t                             xicu_int_tgtid,  // local index
    53                     size_t                             mdma_int_tgtid,  // local index
    54                     size_t                             iobx_int_tgtid,  // local index
    55 
    56                     size_t                             proc_int_srcid,  // local index
    57                     size_t                             mdma_int_srcid,  // local index
    58                     size_t                             iobx_int_srcid,  // local index
    59 
    60                     size_t                             xram_ram_tgtid,  // local index
    61 
    62                     size_t                             memc_ram_srcid,  // local index
    63                     size_t                             iobx_ram_srcid,  // local index
     49                    size_t                             int_memc_tgt_id, // local index
     50                    size_t                             int_xicu_tgt_id, // local index
     51                    size_t                             int_mdma_tgt_id, // local index
     52                    size_t                             int_iobx_tgt_id, // local index
     53
     54                    size_t                             int_proc_ini_id, // local index
     55                    size_t                             int_mdma_ini_id, // local index
     56                    size_t                             int_iobx_ini_id, // local index
     57
     58                    size_t                             ram_xram_tgt_id, // local index
     59                    size_t                             ram_memc_ini_id, // local index
     60                    size_t                             ram_iobx_ini_id, // local index
     61
     62                    bool                               is_io,           // is IO cluster (IOB)?
     63                    size_t                             iox_iobx_tgt_id, // local_index
     64                    size_t                             iox_iobx_ini_id, // local index
    6465
    6566                    size_t                             memc_ways,
     
    8788    size_t cluster_id = (x_id<<4) + y_id;
    8889
    89     size_t cluster_iob0 = 0;                            // South-West cluster
    90     size_t cluster_iob1 = ((xmax-1)<<4) + ymax-1;       // North-East cluster
    91 
    9290    // Vectors of DSPIN ports for inter-cluster communications
    9391    p_dspin_int_cmd_in  = alloc_elems<DspinInput<dspin_int_cmd_width> >("p_int_cmd_in", 4, 3);
     
    10199    p_dspin_ram_rsp_out = alloc_elems<DspinOutput<dspin_ram_rsp_width> >("p_ext_rsp_out", 4);
    102100
    103     // ports in cluster_iob0 and cluster_iob1 only
    104     if ( (cluster_id == cluster_iob0) or (cluster_id == cluster_iob1) )
    105     {
    106         // VCI ports from IOB to IOX network
     101    // VCI ports from IOB to IOX network (only in IO clusters)
     102    if ( is_io )
     103    {
    107104        p_vci_iob_iox_ini = new soclib::caba::VciInitiator<vci_param_ext>;
    108105        p_vci_iob_iox_tgt = new soclib::caba::VciTarget<vci_param_ext>;
    109 
    110         // DSPIN ports from IOB to RAM network
    111         p_dspin_iob_cmd_out = new soclib::caba::DspinOutput<dspin_ram_cmd_width>;
    112         p_dspin_iob_rsp_in  = new soclib::caba::DspinInput<dspin_ram_rsp_width>;
    113106    }
    114107
     
    135128                      8,                              // DTLB ways
    136129                      8,                              // DTLB sets
    137                       l1_i_ways,l1_i_sets,16,         // ICACHE size
    138                       l1_d_ways,l1_d_sets,16,         // DCACHE size
     130                      l1_i_ways, l1_i_sets, 16,       // ICACHE size
     131                      l1_d_ways, l1_d_sets, 16,       // DCACHE size
    139132                      4,                              // WBUF nlines
    140133                      4,                              // WBUF nwords
     
    154147                           dspin_int_cmd_width>(
    155148                     s_memc.str().c_str(),
    156                      mt_int,                             // Mapping Table INT network
    157                      mt_ram,                             // Mapping Table RAM network
    158                      IntTab(cluster_id, memc_ram_srcid), // SRCID RAM network
    159                      IntTab(cluster_id, memc_int_tgtid), // TGTID INT network
    160                      x_width,                            // number of bits for x coordinate
    161                      y_width,                            // number of bits for y coordinate
    162                      memc_ways, memc_sets, 16,           // CACHE SIZE
    163                      3,                                  // MAX NUMBER OF COPIES
    164                      4096,                               // HEAP SIZE
    165                      8,                                  // TRANSACTION TABLE DEPTH
    166                      8,                                  // UPDATE TABLE DEPTH
    167                      8,                                  // INVALIDATE TABLE DEPTH
     149                     mt_int,                              // Mapping Table INT network
     150                     mt_ram,                              // Mapping Table RAM network
     151                     IntTab(cluster_id, ram_memc_ini_id), // SRCID RAM network
     152                     IntTab(cluster_id, int_memc_tgt_id), // TGTID INT network
     153                     x_width,                             // number of bits for x coordinate
     154                     y_width,                             // number of bits for y coordinate
     155                     memc_ways, memc_sets, 16,            // CACHE SIZE
     156                     3,                                   // MAX NUMBER OF COPIES
     157                     4096,                                // HEAP SIZE
     158                     8,                                   // TRANSACTION TABLE DEPTH
     159                     8,                                   // UPDATE TABLE DEPTH
     160                     8,                                   // INVALIDATE TABLE DEPTH
    168161                     debug_start_cycle,
    169162                     memc_debug_ok );
     
    182175    xicu = new VciXicu<vci_param_int>(
    183176                     s_xicu.str().c_str(),
    184                      mt_int,                            // mapping table INT network
    185                      IntTab(cluster_id,xicu_int_tgtid), // TGTID direct space
    186                      xcu_nb_inputs,                     // number of timer IRQs
    187                      xcu_nb_inputs,                     // number of hard IRQs
    188                      xcu_nb_inputs,                     // number of soft IRQs
    189                      16);                               // number of output IRQs
     177                     mt_int,                              // mapping table INT network
     178                     IntTab(cluster_id, int_xicu_tgt_id), // TGTID direct space
     179                     xcu_nb_inputs,                       // number of timer IRQs
     180                     xcu_nb_inputs,                       // number of hard IRQs
     181                     xcu_nb_inputs,                       // number of soft IRQs
     182                     16);                                 // number of output IRQs
    190183
    191184    ////////////  MDMA
     
    196189                     mt_int,
    197190                     IntTab(cluster_id, nb_procs),        // SRCID
    198                      IntTab(cluster_id, mdma_int_tgtid), // TGTID
     191                     IntTab(cluster_id, int_mdma_tgt_id), // TGTID
    199192                     64,                                  // burst size
    200193                     nb_dmas);                            // number of IRQs
    201194
    202195    ///////////  Direct LOCAL_XBAR(S)
    203     size_t nb_direct_initiators      = nb_procs + 1;
    204     size_t nb_direct_targets         = 3;
    205     if ( (cluster_id == cluster_iob0) or (cluster_id == cluster_iob1) )
    206     {
    207         nb_direct_initiators         = nb_procs + 2;
    208         nb_direct_targets            = 4;
    209     }
     196    size_t nb_direct_initiators = is_io ? nb_procs + 2 : nb_procs + 1;
     197    size_t nb_direct_targets    = is_io ? 4 : 3;
    210198
    211199    std::ostringstream s_int_xbar_d;
     
    304292    xram = new VciSimpleRam<vci_param_ext>(
    305293                     s_xram.str().c_str(),
    306                      IntTab(cluster_id, xram_ram_tgtid ),
     294                     IntTab(cluster_id, ram_xram_tgt_id),
    307295                     mt_ram,
    308296                     loader,
     
    320308    std::ostringstream s_ram_router_cmd;
    321309    s_ram_router_cmd << "ram_router_cmd_" << x_id << "_" << y_id;
    322     size_t is_iob0 = (x_id == 0) and (y_id == 0);
    323     size_t is_iob1 = (x_id == (xmax-1)) and (y_id == (ymax-1));
    324     ram_router_cmd = new DspinRouterTsar<dspin_ram_cmd_width>(
     310    ram_router_cmd = new DspinRouter<dspin_ram_cmd_width>(
    325311                     s_ram_router_cmd.str().c_str(),
    326312                     x_id, y_id,                     // router coordinates in mesh
    327313                     x_width,                        // x field width in first flit
    328314                     y_width,                        // y field width in first flit
    329                      4, 4,                           // input & output fifo depths
    330                      is_iob0,                        // cluster contains IOB0
    331                      is_iob1,                        // cluster contains IOB1
    332                      false,                          // not a response router
    333                      l_width);                       // local field width in first flit
     315                     4, 4);                          // input & output fifo depths
    334316
    335317    std::ostringstream s_ram_router_rsp;
    336318    s_ram_router_rsp << "ram_router_rsp_" << x_id << "_" << y_id;
    337     ram_router_rsp = new DspinRouterTsar<dspin_ram_rsp_width>(
     319    ram_router_rsp = new DspinRouter<dspin_ram_rsp_width>(
    338320                     s_ram_router_rsp.str().c_str(),
    339321                     x_id, y_id,                     // coordinates in mesh
    340322                     x_width,                        // x field width in first flit
    341323                     y_width,                        // y field width in first flit
    342                      4, 4,                           // input & output fifo depths
    343                      is_iob0,                        // cluster contains IOB0
    344                      is_iob1,                        // cluster contains IOB1
    345                      true,                           // response router
    346                      l_width);                       // local field width in first flit
     324                     4, 4);                          // input & output fifo depths
    347325
    348326
    349327    ////////////////////// I/O  CLUSTER ONLY    ///////////////////////
    350     if ( (cluster_id == cluster_iob0) or (cluster_id == cluster_iob1) )
     328    if ( is_io )
    351329    {
    352330        ///////////  IO_BRIDGE
    353         size_t iox_local_id;
    354         size_t global_id;
    355         if ( cluster_id == cluster_iob0 )
    356         {
    357             iox_local_id = 0;
    358             global_id    = cluster_iob0;
    359         }
    360         else
    361         {
    362             iox_local_id = 1;
    363             global_id    = cluster_iob1;
    364         }
    365 
    366331        std::ostringstream s_iob;
    367332        s_iob << "iob_" << x_id << "_" << y_id;   
     
    369334                              vci_param_ext>( 
    370335                     s_iob.str().c_str(),
    371                      mt_ram,                               // EXT network maptab
    372                      mt_int,                               // INT network maptab
    373                      mt_iox,                               // IOX network maptab
    374                      IntTab( global_id, iobx_int_tgtid ),  // INT TGTID
    375                      IntTab( global_id, iobx_int_srcid ),  // INT SRCID
    376                      IntTab( global_id, iox_local_id   ),  // IOX TGTID
    377                      16,                                   // cache line words
    378                      8,                                    // IOTLB ways
    379                      8,                                    // IOTLB sets
     336                     mt_ram,                                // EXT network maptab
     337                     mt_int,                                // INT network maptab
     338                     mt_iox,                                // IOX network maptab
     339                     IntTab( cluster_id, int_iobx_tgt_id ), // INT TGTID
     340                     IntTab( cluster_id, int_iobx_ini_id ), // INT SRCID
     341                     IntTab( 0         , iox_iobx_tgt_id ), // IOX TGTID
     342                     IntTab( 0         , iox_iobx_ini_id ), // IOX SRCID
     343                     16,                                    // cache line words
     344                     8,                                     // IOTLB ways
     345                     8,                                     // IOTLB sets
    380346                     debug_start_cycle,
    381347                     iob_debug_ok );
     
    387353                                                  dspin_ram_rsp_width>(
    388354                     s_iob_ram_wi.str().c_str(),
    389                      x_width + y_width + l_width);
     355                     vci_param_int::S);
     356
     357        std::ostringstream s_ram_xbar_cmd;
     358        s_ram_xbar_cmd << "s_ram_xbar_cmd_" << x_id << "_" << y_id;
     359        ram_xbar_cmd = new DspinLocalCrossbar<dspin_ram_cmd_width>(
     360              s_ram_xbar_cmd.str().c_str(), // name
     361              mt_ram,                       // mapping table
     362              x_id, y_id,                   // x, y
     363              x_width, y_width, l_width,    // x_width, y_width, l_width
     364              2, 0,                         // local inputs, local outputs
     365              2, 2,                         // in fifo, out fifo depths
     366              true,                         // is cmd ?
     367              false,                        // use routing table ?
     368              false);                       // support broadcast ?
     369
     370        std::ostringstream s_ram_xbar_rsp;
     371        s_ram_xbar_rsp << "s_ram_xbar_rsp_" << x_id << "_" << y_id;
     372        ram_xbar_rsp = new DspinLocalCrossbar<dspin_ram_rsp_width>(
     373              s_ram_xbar_rsp.str().c_str(), // name
     374              mt_ram,                       // mapping table
     375              x_id, y_id,                   // x, y
     376              x_width, y_width, l_width,    // x_width, y_width, l_width
     377              0, 2,                         // local inputs, local outputs
     378              2, 2,                         // in fifo, out fifo depths
     379              false,                        // is cmd ?
     380              true,                         // use routing table ?
     381              false);                       // support broadcast ?
    390382    } // end if IO
    391383
     
    396388    // on coherence network : local srcid[proc] in [0...nb_procs-1]
    397389    //                      : local srcid[memc] = nb_procs
    398     // In cluster_iob0, 32 HWI interrupts from external peripherals
    399     // are connected to the XICU ports p_hwi[0:31]
    400     // In other clusters, no HWI interrupts are connected to XICU
    401390 
    402391    //////////////////////// internal CMD & RSP routers
     
    440429    int_xbar_d->p_target_to_up                        (signal_int_vci_g2l);
    441430
    442     int_xbar_d->p_to_target[memc_int_tgtid]           (signal_int_vci_tgt_memc);
    443     int_xbar_d->p_to_target[xicu_int_tgtid]           (signal_int_vci_tgt_xicu);
    444     int_xbar_d->p_to_target[mdma_int_tgtid]           (signal_int_vci_tgt_mdma);
    445     int_xbar_d->p_to_initiator[mdma_int_srcid]        (signal_int_vci_ini_mdma);
     431    int_xbar_d->p_to_target[int_memc_tgt_id]          (signal_int_vci_tgt_memc);
     432    int_xbar_d->p_to_target[int_xicu_tgt_id]          (signal_int_vci_tgt_xicu);
     433    int_xbar_d->p_to_target[int_mdma_tgt_id]          (signal_int_vci_tgt_mdma);
     434    int_xbar_d->p_to_initiator[int_mdma_ini_id]       (signal_int_vci_ini_mdma);
    446435    for (size_t p = 0; p < nb_procs; p++)
    447        int_xbar_d->p_to_initiator[proc_int_srcid + p] (signal_int_vci_ini_proc[p]);
    448 
    449     if ( (cluster_id == cluster_iob0) or (cluster_id == cluster_iob1) )
    450     {
    451        int_xbar_d->p_to_target[iobx_int_tgtid]        (signal_int_vci_tgt_iobx);
    452        int_xbar_d->p_to_initiator[iobx_int_srcid]     (signal_int_vci_ini_iobx);
     436       int_xbar_d->p_to_initiator[int_proc_ini_id + p] (signal_int_vci_ini_proc[p]);
     437
     438    if ( is_io )
     439    {
     440       int_xbar_d->p_to_target[int_iobx_tgt_id]        (signal_int_vci_tgt_iobx);
     441       int_xbar_d->p_to_initiator[int_iobx_ini_id]     (signal_int_vci_ini_iobx);
    453442    }
    454443
     
    573562        ram_router_rsp->p_in[n]                  (this->p_dspin_ram_rsp_in[n]);
    574563    }
     564
    575565    ram_router_cmd->p_out[4]                     (signal_ram_dspin_cmd_xram_t);
    576     ram_router_cmd->p_in[4]                      (signal_ram_dspin_cmd_memc_i);
    577     ram_router_rsp->p_out[4]                     (signal_ram_dspin_rsp_memc_i);
    578566    ram_router_rsp->p_in[4]                      (signal_ram_dspin_rsp_xram_t);
     567
     568    if ( is_io )
     569    {
     570       ram_router_cmd->p_in[4]                   (signal_ram_dspin_cmd_xbar);
     571       ram_router_rsp->p_out[4]                  (signal_ram_dspin_rsp_xbar);
     572    }
     573    else
     574    {
     575       ram_router_cmd->p_in[4]                   (signal_ram_dspin_cmd_memc_i);
     576       ram_router_rsp->p_out[4]                  (signal_ram_dspin_rsp_memc_i);
     577    }
    579578   
    580579    ///////////////////////// IOB exists only in cluster_iob0 & cluster_iob1.
    581     if ( (cluster_id == cluster_iob0) or (cluster_id == cluster_iob1) )
     580    if ( is_io )
    582581    {
    583582        // IO bridge
    584         iob->p_clk                               (this->p_clk);
    585         iob->p_resetn                            (this->p_resetn);
    586         iob->p_vci_ini_iox                       (*(this->p_vci_iob_iox_ini));
    587         iob->p_vci_tgt_iox                       (*(this->p_vci_iob_iox_tgt));
    588         iob->p_vci_tgt_int                       (signal_int_vci_tgt_iobx);
    589         iob->p_vci_ini_int                       (signal_int_vci_ini_iobx);
    590         iob->p_vci_ini_ram                       (signal_ram_vci_ini_iobx);
     583        iob->p_clk                                 (this->p_clk);
     584        iob->p_resetn                              (this->p_resetn);
     585        iob->p_vci_ini_iox                         (*(this->p_vci_iob_iox_ini));
     586        iob->p_vci_tgt_iox                         (*(this->p_vci_iob_iox_tgt));
     587        iob->p_vci_tgt_int                         (signal_int_vci_tgt_iobx);
     588        iob->p_vci_ini_int                         (signal_int_vci_ini_iobx);
     589        iob->p_vci_ini_ram                         (signal_ram_vci_ini_iobx);
    591590
    592591        // initiator wrapper to RAM network
    593         iob_ram_wi->p_clk                        (this->p_clk);
    594         iob_ram_wi->p_resetn                     (this->p_resetn);
    595         iob_ram_wi->p_dspin_cmd                  (*(this->p_dspin_iob_cmd_out));
    596         iob_ram_wi->p_dspin_rsp                  (*(this->p_dspin_iob_rsp_in));
    597         iob_ram_wi->p_vci                        (signal_ram_vci_ini_iobx);
    598     }
    599 
     592        iob_ram_wi->p_clk                          (this->p_clk);
     593        iob_ram_wi->p_resetn                       (this->p_resetn);
     594        iob_ram_wi->p_dspin_cmd                    (signal_ram_dspin_cmd_iob_i);
     595        iob_ram_wi->p_dspin_rsp                    (signal_ram_dspin_rsp_iob_i);
     596        iob_ram_wi->p_vci                          (signal_ram_vci_ini_iobx);
     597
     598        // crossbar between MEMC and IOB to RAM network
     599        ram_xbar_cmd->p_clk                        (this->p_clk);
     600        ram_xbar_cmd->p_resetn                     (this->p_resetn);
     601        ram_xbar_cmd->p_global_out                 (signal_ram_dspin_cmd_xbar);
     602        ram_xbar_cmd->p_global_in                  (signal_ram_dspin_cmd_false);
     603        ram_xbar_cmd->p_local_in[ram_memc_ini_id]  (signal_ram_dspin_cmd_memc_i);
     604        ram_xbar_cmd->p_local_in[ram_iobx_ini_id]  (signal_ram_dspin_cmd_iob_i);
     605
     606        ram_xbar_rsp->p_clk                        (this->p_clk);
     607        ram_xbar_rsp->p_resetn                     (this->p_resetn);
     608        ram_xbar_rsp->p_global_out                 (signal_ram_dspin_rsp_false);
     609        ram_xbar_rsp->p_global_in                  (signal_ram_dspin_rsp_xbar);
     610        ram_xbar_rsp->p_local_out[ram_memc_ini_id] (signal_ram_dspin_rsp_memc_i);
     611        ram_xbar_rsp->p_local_out[ram_iobx_ini_id] (signal_ram_dspin_rsp_iob_i);
     612    }
     613
     614   SC_METHOD(init);
    600615} // end constructor
     616
     617tmpl(void)::init()
     618{
     619   signal_ram_dspin_cmd_false.write = false;
     620   signal_ram_dspin_cmd_false.read = true;
     621   signal_ram_dspin_rsp_false.write = false;
     622   signal_ram_dspin_rsp_false.read = true;
     623} // end init
    601624
    602625}}
     
    612635// vim: filetype=cpp:expandtab:shiftwidth=3:tabstop=3:softtabstop=3
    613636
    614 
    615 
Note: See TracChangeset for help on using the changeset viewer.