Changeset 550 for trunk/platforms


Ignore:
Timestamp:
Oct 17, 2013, 8:55:19 PM (11 years ago)
Author:
alain
Message:

Compliance with the mapping_table defined in release 2462.
Modifying the L2 to L3 network, to use the dspin_router_tsar component,
in order to simplify the architecture (no more local crossbar in RAM network.

Location:
trunk/platforms/tsar_generic_iob
Files:
1 deleted
4 edited

Legend:

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

    r533 r550  
    240240
    241241#define BDEV_BASE             0x00B3000000     
    242 #define BDEV_SIZE             0x0000001000   // 4 Kbytes
     242#define BDEV_SIZE             0x0000008000   // 4 Kbytes
    243243
    244244#define MTTY_BASE             0x00B4000000     
     
    291291////////////////////////////////////////////////////////////////////////
    292292
    293 #define PROC_LOCAL_SRCID             0    // from 0 to 7
    294 #define MDMA_LOCAL_SRCID             8
    295 #define IOBX_LOCAL_SRCID             9
    296 #define BDEV_LOCAL_SRCID             10
    297 #define CDMA_LOCAL_SRCID             11
    298 #define MEMC_LOCAL_SRCID             12
    299 
    300 ////////////////////////////////////////////////////////////////////
     293#define PROC_LOCAL_SRCID             0x0    // from 0 to 7
     294#define MDMA_LOCAL_SRCID             0x8
     295#define IOBX_LOCAL_SRCID             0x9
     296#define MEMC_LOCAL_SRCID             0xA
     297#define CDMA_LOCAL_SRCID             0xE    // hard-coded in dspin_tsar
     298#define BDEV_LOCAL_SRCID             0xF    // hard-coded in dspin_tsar
     299
     300///////////////////////////////////////////////////////////////////////
    301301//     TGT_ID and INI_ID port indexing for INT local interconnect
    302 ////////////////////////////////////////////////////////////////////
     302///////////////////////////////////////////////////////////////////////
    303303
    304304#define INT_MEMC_TGT_ID              0
     
    311311#define INT_IOBX_INI_ID              (NB_PROCS_MAX+1)
    312312
    313 ////////////////////////////////////////////////////////////////////
     313///////////////////////////////////////////////////////////////////////
    314314//     TGT_ID and INI_ID port indexing for RAM local interconnect
    315 ////////////////////////////////////////////////////////////////////
     315///////////////////////////////////////////////////////////////////////
    316316
    317317#define RAM_XRAM_TGT_ID              0
     
    320320#define RAM_IOBX_INI_ID              1
    321321
    322 ////////////////////////////////////////////////////////////////////
     322///////////////////////////////////////////////////////////////////////
    323323//     TGT_ID and INI_ID port indexing for I0X local interconnect
    324 ////////////////////////////////////////////////////////////////////
     324///////////////////////////////////////////////////////////////////////
    325325
    326326#define IOX_IOB0_TGT_ID              0    // don't change this value
     
    338338#define IOX_CDMA_INI_ID              3 
    339339
    340 /////////////////////////////////////////////////////////////////////
     340////////////////////////////////////////////////////////////////////////
    341341int _main(int argc, char *argv[])
    342 /////////////////////////////////////////////////////////////////////
     342////////////////////////////////////////////////////////////////////////
    343343{
    344344   using namespace sc_core;
     
    533533         uint64_t offset = ((uint64_t)cluster(x,y))
    534534                              << (vci_address_width-x_width-y_width);
    535          bool config = true;
     535         bool config    = true;
     536         bool cacheable = true;
    536537
    537538         // the four following segments are defined in all clusters
     
    540541         smemc_conf << "int_seg_memc_conf_" << x << "_" << y;
    541542         maptab_int.add(Segment(smemc_conf.str(), MEMC_BASE+offset, MEMC_SIZE,
    542                      IntTab(cluster(x,y),INT_MEMC_TGT_ID), true, config ));
     543                     IntTab(cluster(x,y),INT_MEMC_TGT_ID), cacheable, config ));
    543544
    544545         std::ostringstream    smemc_xram;
    545546         smemc_xram << "int_seg_memc_xram_" << x << "_" << y;
    546547         maptab_int.add(Segment(smemc_xram.str(), XRAM_BASE+offset, XRAM_SIZE,
    547                      IntTab(cluster(x,y),INT_MEMC_TGT_ID), true));
     548                     IntTab(cluster(x,y),INT_MEMC_TGT_ID), cacheable));
    548549
    549550         std::ostringstream    sxicu;
    550551         sxicu << "int_seg_xicu_" << x << "_" << y;
    551552         maptab_int.add(Segment(sxicu.str(), XICU_BASE+offset, XICU_SIZE,
    552                      IntTab(cluster(x,y),INT_XICU_TGT_ID), false));
     553                     IntTab(cluster(x,y),INT_XICU_TGT_ID), not cacheable));
    553554
    554555         std::ostringstream    smdma;
    555556         smdma << "int_seg_mdma_" << x << "_" << y;
    556557         maptab_int.add(Segment(smdma.str(), MDMA_BASE+offset, MDMA_SIZE,
    557                      IntTab(cluster(x,y),INT_MDMA_TGT_ID), false));
     558                     IntTab(cluster(x,y),INT_MDMA_TGT_ID), not cacheable));
    558559
    559560         // the following segments are only defined in cluster_iob0 or in cluster_iob1
     
    564565            siobx << "int_seg_iobx_" << x << "_" << y;
    565566            maptab_int.add(Segment(siobx.str(), IOBX_BASE+offset, IOBX_SIZE,
    566                         IntTab(cluster(x,y), INT_IOBX_TGT_ID), false, config ));
     567                        IntTab(cluster(x,y), INT_IOBX_TGT_ID), not cacheable, config ));
    567568
    568569            std::ostringstream    stty;
    569570            stty << "int_seg_mtty_" << x << "_" << y;
    570571            maptab_int.add(Segment(stty.str(), MTTY_BASE+offset, MTTY_SIZE,
    571                         IntTab(cluster(x,y), INT_IOBX_TGT_ID), false));
     572                        IntTab(cluster(x,y), INT_IOBX_TGT_ID), not cacheable));
    572573
    573574            std::ostringstream    sfbf;
    574575            sfbf << "int_seg_fbuf_" << x << "_" << y;
    575576            maptab_int.add(Segment(sfbf.str(), FBUF_BASE+offset, FBUF_SIZE,
    576                         IntTab(cluster(x,y), INT_IOBX_TGT_ID), false));
     577                        IntTab(cluster(x,y), INT_IOBX_TGT_ID), not cacheable));
    577578
    578579            std::ostringstream    sbdv;
    579580            sbdv << "int_seg_bdev_" << x << "_" << y;
    580581            maptab_int.add(Segment(sbdv.str(), BDEV_BASE+offset, BDEV_SIZE,
    581                         IntTab(cluster(x,y), INT_IOBX_TGT_ID), false));
     582                        IntTab(cluster(x,y), INT_IOBX_TGT_ID), not cacheable));
    582583
    583584            std::ostringstream    snic;
    584585            snic << "int_seg_mnic_" << x << "_" << y;
    585586            maptab_int.add(Segment(snic.str(), MNIC_BASE+offset, MNIC_SIZE,
    586                         IntTab(cluster(x,y), INT_IOBX_TGT_ID), false));
     587                        IntTab(cluster(x,y), INT_IOBX_TGT_ID), not cacheable));
    587588
    588589            std::ostringstream    srom;
    589590            srom << "int_seg_brom_" << x << "_" << y;
    590591            maptab_int.add(Segment(srom.str(), BROM_BASE+offset, BROM_SIZE,
    591                         IntTab(cluster(x,y), INT_IOBX_TGT_ID), true));
     592                        IntTab(cluster(x,y), INT_IOBX_TGT_ID), cacheable ));
    592593
    593594            std::ostringstream    sdma;
    594595            sdma << "int_seg_cdma_" << x << "_" << y;
    595596            maptab_int.add(Segment(sdma.str(), CDMA_BASE+offset, CDMA_SIZE,
    596                         IntTab(cluster(x,y), INT_IOBX_TGT_ID), false));
     597                        IntTab(cluster(x,y), INT_IOBX_TGT_ID), not cacheable));
    597598         }
    598599
     
    600601         // and the port index on the local interconnect.
    601602
    602          maptab_int.srcid_map( IntTab( cluster(x,y), MDMA_LOCAL_SRCID ), INT_MDMA_INI_ID );
    603 
    604          maptab_int.srcid_map( IntTab( cluster(x,y), IOBX_LOCAL_SRCID ), INT_IOBX_INI_ID );
     603         maptab_int.srcid_map( IntTab( cluster(x,y), MDMA_LOCAL_SRCID ),
     604                               IntTab( cluster(x,y), INT_MDMA_INI_ID ) );
     605
     606         maptab_int.srcid_map( IntTab( cluster(x,y), IOBX_LOCAL_SRCID ),
     607                               IntTab( cluster(x,y), INT_IOBX_INI_ID ) );
    605608
    606609         for ( size_t p = 0 ; p < NB_PROCS_MAX ; p++ )
    607          maptab_int.srcid_map( IntTab( cluster(x,y), PROC_LOCAL_SRCID+p ), INT_PROC_INI_ID+p );
     610         maptab_int.srcid_map( IntTab( cluster(x,y), PROC_LOCAL_SRCID+p ),
     611                               IntTab( cluster(x,y), INT_PROC_INI_ID+p ) );
    608612      }
    609613   }
     
    637641    }
    638642
    639     // This define the mapping between the initiators (identified by their
    640     // global SRCID) and the port index on the RAM local interconnect.
     643    // This define the mapping between the initiators SRCID
     644    // and the port index on the RAM local interconnect.
    641645    // External initiator have two alias SRCID (iob0 / iob1) 
    642646
    643     maptab_ram.srcid_map( IntTab( cluster_iob0, CDMA_LOCAL_SRCID ), RAM_IOBX_INI_ID );
    644     maptab_ram.srcid_map( IntTab( cluster_iob1, CDMA_LOCAL_SRCID ), RAM_IOBX_INI_ID );
    645 
    646     maptab_ram.srcid_map( IntTab( cluster_iob0, BDEV_LOCAL_SRCID ), RAM_IOBX_INI_ID );
    647     maptab_ram.srcid_map( IntTab( cluster_iob1, BDEV_LOCAL_SRCID ), RAM_IOBX_INI_ID );
    648 
    649     maptab_ram.srcid_map( IntTab( cluster_iob1, MEMC_LOCAL_SRCID ), RAM_MEMC_INI_ID );
     647    maptab_ram.srcid_map( IntTab( cluster_iob0, CDMA_LOCAL_SRCID ),
     648                          IntTab( cluster_iob0, RAM_IOBX_INI_ID ) );
     649
     650    maptab_ram.srcid_map( IntTab( cluster_iob1, CDMA_LOCAL_SRCID ),
     651                          IntTab( cluster_iob1, RAM_IOBX_INI_ID ) );
     652
     653    maptab_ram.srcid_map( IntTab( cluster_iob0, BDEV_LOCAL_SRCID ),
     654                          IntTab( cluster_iob0, RAM_IOBX_INI_ID ) );
     655
     656    maptab_ram.srcid_map( IntTab( cluster_iob1, BDEV_LOCAL_SRCID ),
     657                          IntTab( cluster_iob1, RAM_IOBX_INI_ID ) );
     658
     659    maptab_ram.srcid_map( IntTab( cluster_iob1, MEMC_LOCAL_SRCID ),
     660                          IntTab( cluster_iob1, RAM_MEMC_INI_ID ) );
    650661
    651662    std::cout << "RAM network " << maptab_ram << std::endl;
     
    735746    // External initiator have two alias SRCID (iob0 / iob1 access) 
    736747
    737     maptab_iox.srcid_map( IntTab( cluster_iob0, CDMA_LOCAL_SRCID ), IOX_CDMA_INI_ID );
    738     maptab_iox.srcid_map( IntTab( cluster_iob1, CDMA_LOCAL_SRCID ), IOX_CDMA_INI_ID );
    739 
    740     maptab_iox.srcid_map( IntTab( cluster_iob0, BDEV_LOCAL_SRCID ), IOX_BDEV_INI_ID );
    741     maptab_iox.srcid_map( IntTab( cluster_iob1, BDEV_LOCAL_SRCID ), IOX_BDEV_INI_ID );
     748    maptab_iox.srcid_map( IntTab( cluster_iob0, CDMA_LOCAL_SRCID ),
     749                          IntTab( cluster_iob0, IOX_CDMA_INI_ID ) );
     750
     751    maptab_iox.srcid_map( IntTab( cluster_iob1, CDMA_LOCAL_SRCID ),
     752                          IntTab( cluster_iob1, IOX_CDMA_INI_ID ) );
     753
     754    maptab_iox.srcid_map( IntTab( cluster_iob0, BDEV_LOCAL_SRCID ),
     755                          IntTab( cluster_iob0, IOX_BDEV_INI_ID ) );
     756
     757    maptab_iox.srcid_map( IntTab( cluster_iob1, BDEV_LOCAL_SRCID ),
     758                          IntTab( cluster_iob0, IOX_BDEV_INI_ID ) );
    742759
    743760    for (size_t x = 0; x < XMAX; x++)
     
    745762        for (size_t y = 0; y < YMAX ; y++)
    746763        {
    747             if ( x < (XMAX/2) )   // send response to proc or mdma through IOB0
    748             {
    749             maptab_iox.srcid_map( IntTab( cluster(x,y), PROC_LOCAL_SRCID   ), IOX_IOB0_INI_ID );
    750             maptab_iox.srcid_map( IntTab( cluster(x,y), PROC_LOCAL_SRCID+1 ), IOX_IOB0_INI_ID );
    751             maptab_iox.srcid_map( IntTab( cluster(x,y), PROC_LOCAL_SRCID+2 ), IOX_IOB0_INI_ID );
    752             maptab_iox.srcid_map( IntTab( cluster(x,y), PROC_LOCAL_SRCID+3 ), IOX_IOB0_INI_ID );
    753             maptab_iox.srcid_map( IntTab( cluster(x,y), MDMA_LOCAL_SRCID   ), IOX_IOB0_INI_ID );
    754             }
    755             else                  // send response to proc or mdma through IOB1
    756             {
    757             maptab_iox.srcid_map( IntTab( cluster(x,y), PROC_LOCAL_SRCID   ), IOX_IOB1_INI_ID );
    758             maptab_iox.srcid_map( IntTab( cluster(x,y), PROC_LOCAL_SRCID+1 ), IOX_IOB1_INI_ID );
    759             maptab_iox.srcid_map( IntTab( cluster(x,y), PROC_LOCAL_SRCID+2 ), IOX_IOB1_INI_ID );
    760             maptab_iox.srcid_map( IntTab( cluster(x,y), PROC_LOCAL_SRCID+3 ), IOX_IOB1_INI_ID );
    761             maptab_iox.srcid_map( IntTab( cluster(x,y), MDMA_LOCAL_SRCID   ), IOX_IOB1_INI_ID );
    762             }
     764            size_t iob = ( x < (XMAX/2) ) ? IOX_IOB0_INI_ID : IOX_IOB1_INI_ID;
     765
     766            for (size_t p = 0 ; p < NB_PROCS_MAX ; p++)
     767            maptab_iox.srcid_map( IntTab( cluster(x,y), PROC_LOCAL_SRCID + p ),
     768                                  IntTab( cluster(x,y), iob ) );
     769
     770            maptab_iox.srcid_map( IntTab( cluster(x,y), MDMA_LOCAL_SRCID ),
     771                                  IntTab( cluster(x,y), IOX_IOB0_INI_ID ) );
    763772        }
    764773    }
     
    770779    ///////////////////
    771780
    772     sc_clock                    signal_clk("clk");
    773     sc_signal<bool>             signal_resetn("resetn");
    774 
    775     sc_signal<bool>             signal_unused_irq[32];
    776     sc_signal<bool>             signal_irq_bdev;
    777     sc_signal<bool>             signal_irq_mnic_rx[NB_NIC_CHANNELS];
    778     sc_signal<bool>             signal_irq_mnic_tx[NB_NIC_CHANNELS];
    779     sc_signal<bool>             signal_irq_mtty[NB_TTY_CHANNELS];
    780     sc_signal<bool>             signal_irq_cdma[NB_NIC_CHANNELS*2];
     781    sc_clock                          signal_clk("clk");
     782    sc_signal<bool>                   signal_resetn("resetn");
     783
     784    sc_signal<bool>                   signal_unused_irq[32];
     785    sc_signal<bool>                   signal_irq_bdev;
     786    sc_signal<bool>                   signal_irq_mnic_rx[NB_NIC_CHANNELS];
     787    sc_signal<bool>                   signal_irq_mnic_tx[NB_NIC_CHANNELS];
     788    sc_signal<bool>                   signal_irq_mtty[NB_TTY_CHANNELS];
     789    sc_signal<bool>                   signal_irq_cdma[NB_NIC_CHANNELS*2];
     790
     791    // DSPIN signals for loopback in cluster_iob0 & cluster_iob1
     792    DspinSignals<dspin_ram_cmd_width> signal_dspin_cmd_iob0_loopback;
     793    DspinSignals<dspin_ram_rsp_width> signal_dspin_rsp_iob0_loopback;
     794    DspinSignals<dspin_ram_cmd_width> signal_dspin_cmd_iob1_loopback;
     795    DspinSignals<dspin_ram_rsp_width> signal_dspin_rsp_iob1_loopback;
    781796
    782797    // VCI signals for IOX network
    783     VciSignals<vci_param_ext>   signal_vci_ini_iob0("signal_vci_ini_iob0");
    784     VciSignals<vci_param_ext>   signal_vci_ini_iob1("signal_vci_ini_iob1");
    785     VciSignals<vci_param_ext>   signal_vci_ini_bdev("signal_vci_ini_bdev");
    786     VciSignals<vci_param_ext>   signal_vci_ini_cdma("signal_vci_ini_cdma");
    787 
    788     VciSignals<vci_param_ext>   signal_vci_tgt_iob0("signal_vci_tgt_iob0");
    789     VciSignals<vci_param_ext>   signal_vci_tgt_iob1("signal_vci_tgt_iob1");
    790     VciSignals<vci_param_ext>   signal_vci_tgt_mtty("signal_vci_tgt_mtty");
    791     VciSignals<vci_param_ext>   signal_vci_tgt_fbuf("signal_vci_tgt_fbuf");
    792     VciSignals<vci_param_ext>   signal_vci_tgt_mnic("signal_vci_tgt_mnic");
    793     VciSignals<vci_param_ext>   signal_vci_tgt_brom("signal_vci_tgt_brom");
    794     VciSignals<vci_param_ext>   signal_vci_tgt_bdev("signal_vci_tgt_bdev");
    795     VciSignals<vci_param_ext>   signal_vci_tgt_cdma("signal_vci_tgt_cdma");
     798    VciSignals<vci_param_ext>         signal_vci_ini_iob0("signal_vci_ini_iob0");
     799    VciSignals<vci_param_ext>         signal_vci_ini_iob1("signal_vci_ini_iob1");
     800    VciSignals<vci_param_ext>         signal_vci_ini_bdev("signal_vci_ini_bdev");
     801    VciSignals<vci_param_ext>         signal_vci_ini_cdma("signal_vci_ini_cdma");
     802
     803    VciSignals<vci_param_ext>         signal_vci_tgt_iob0("signal_vci_tgt_iob0");
     804    VciSignals<vci_param_ext>         signal_vci_tgt_iob1("signal_vci_tgt_iob1");
     805    VciSignals<vci_param_ext>         signal_vci_tgt_mtty("signal_vci_tgt_mtty");
     806    VciSignals<vci_param_ext>         signal_vci_tgt_fbuf("signal_vci_tgt_fbuf");
     807    VciSignals<vci_param_ext>         signal_vci_tgt_mnic("signal_vci_tgt_mnic");
     808    VciSignals<vci_param_ext>         signal_vci_tgt_brom("signal_vci_tgt_brom");
     809    VciSignals<vci_param_ext>         signal_vci_tgt_bdev("signal_vci_tgt_bdev");
     810    VciSignals<vci_param_ext>         signal_vci_tgt_cdma("signal_vci_tgt_cdma");
    796811
    797812   // Horizontal inter-clusters INT network DSPIN
     
    881896   iox_network = new VciIoxNetwork<vci_param_ext>( "iox_network", 
    882897                                                   maptab_iox,
    883                                                    0,        // cluster_id
    884898                                                   8,        // number of targets
    885899                                                   4 );      // number of initiators
    886900   // boot ROM
    887    VciSimpleRom<vci_param_ext>*  iox_brom;
    888    iox_brom = new VciSimpleRom<vci_param_ext>( "iox_brom",
    889                                                IntTab(0, IOX_BROM_TGT_ID),
    890                                                maptab_iox,
    891                                                loader );
     901   VciSimpleRom<vci_param_ext>*  brom;
     902   brom = new VciSimpleRom<vci_param_ext>( "brom",
     903                                           IntTab(0, IOX_BROM_TGT_ID),
     904                                           maptab_iox,
     905                                           loader );
    892906   // Network Controller
    893    VciMultiNic<vci_param_ext>*  iox_mnic;
    894    iox_mnic = new VciMultiNic<vci_param_ext>( "iox_mnic",
    895                                               IntTab(0, IOX_MNIC_TGT_ID),
    896                                               maptab_iox,
    897                                               NB_NIC_CHANNELS,
    898                                               nic_rx_name,
    899                                               nic_tx_name,
    900                                               0,           // mac_4 address
    901                                               0 );         // mac_2 address
     907   VciMultiNic<vci_param_ext>*  mnic;
     908   mnic = new VciMultiNic<vci_param_ext>( "mnic",
     909                                          IntTab(0, IOX_MNIC_TGT_ID),
     910                                          maptab_iox,
     911                                          NB_NIC_CHANNELS,
     912                                          nic_rx_name,
     913                                          nic_tx_name,
     914                                          0,           // mac_4 address
     915                                          0 );         // mac_2 address
    902916
    903917   // Frame Buffer
    904    VciFrameBuffer<vci_param_ext>*  iox_fbuf;
    905    iox_fbuf = new VciFrameBuffer<vci_param_ext>( "iox_fbuf",
    906                                                  IntTab(0, IOX_FBUF_TGT_ID),
    907                                                  maptab_iox,
    908                                                  FBUF_X_SIZE, FBUF_Y_SIZE );
     918   VciFrameBuffer<vci_param_ext>*  fbuf;
     919   fbuf = new VciFrameBuffer<vci_param_ext>( "fbuf",
     920                                             IntTab(0, IOX_FBUF_TGT_ID),
     921                                             maptab_iox,
     922                                             FBUF_X_SIZE, FBUF_Y_SIZE );
    909923
    910924   // Block Device
    911    VciBlockDeviceTsar<vci_param_ext>*  iox_bdev;
    912    iox_bdev = new VciBlockDeviceTsar<vci_param_ext>( "iox_bdev",
    913                                                      maptab_iox,
    914                                                      IntTab(0, BDEV_LOCAL_SRCID),
    915                                                      IntTab(0, IOX_BDEV_TGT_ID),
    916                                                      disk_name,
    917                                                      block_size,
    918                                                      64);        // burst size (bytes)
     925   // for AHCI
     926   // std::vector<std::string> filenames;
     927   // filenames.push_back(disk_name);            // one single disk
     928   VciBlockDeviceTsar<vci_param_ext>*  bdev;
     929   bdev = new VciBlockDeviceTsar<vci_param_ext>( "bdev",
     930                                                  maptab_iox,
     931                                                  IntTab(0, BDEV_LOCAL_SRCID),
     932                                                  IntTab(0, IOX_BDEV_TGT_ID),
     933                                                  disk_name,
     934                                                  block_size,
     935                                                  64,         // burst size (bytes)
     936                                                  0 );        // disk latency
    919937
    920938   // Chained Buffer DMA controller
    921    VciChbufDma<vci_param_ext>*  iox_cdma;
    922    iox_cdma = new VciChbufDma<vci_param_ext>( "iox_cdma",
    923                                               maptab_iox,
    924                                               IntTab(0, CDMA_LOCAL_SRCID),
    925                                               IntTab(0, IOX_CDMA_TGT_ID),
    926                                               64,          // burst size (bytes)
    927                                               2*NB_NIC_CHANNELS );
     939   VciChbufDma<vci_param_ext>*  cdma;
     940   cdma = new VciChbufDma<vci_param_ext>( "cdma",
     941                                          maptab_iox,
     942                                          IntTab(0, CDMA_LOCAL_SRCID),
     943                                          IntTab(0, IOX_CDMA_TGT_ID),
     944                                          64,          // burst size (bytes)
     945                                          2*NB_NIC_CHANNELS );
    928946   // Multi-TTY controller
    929947   std::vector<std::string> vect_names;
     
    934952      vect_names.push_back(term_name.str().c_str());
    935953   }
    936    VciMultiTty<vci_param_ext>*  iox_mtty;
    937    iox_mtty = new VciMultiTty<vci_param_ext>( "iox_mtty",
    938                                               IntTab(0, IOX_MTTY_TGT_ID),
    939                                               maptab_iox,
    940                                               vect_names);
     954   VciMultiTty<vci_param_ext>*  mtty;
     955   mtty = new VciMultiTty<vci_param_ext>( "mtty",
     956                                          IntTab(0, IOX_MTTY_TGT_ID),
     957                                          maptab_iox,
     958                                          vect_names);
    941959   // Clusters
    942960   TsarIobCluster<vci_param_int,
     
    10021020
    10031021                RAM_MEMC_INI_ID,
    1004                 RAM_MEMC_INI_ID,
     1022                RAM_IOBX_INI_ID,
    10051023
    10061024                MEMC_WAYS,
     
    10521070
    10531071    // BDEV connexion
    1054          iox_bdev->p_clk                                          (signal_clk);
    1055     iox_bdev->p_resetn                                       (signal_resetn);
    1056     iox_bdev->p_irq                                          (signal_irq_bdev);
    1057     iox_bdev->p_vci_target                                   (signal_vci_tgt_bdev);
    1058     iox_bdev->p_vci_initiator                                (signal_vci_ini_bdev);
     1072         bdev->p_clk                                          (signal_clk);
     1073    bdev->p_resetn                                       (signal_resetn);
     1074    bdev->p_irq                                          (signal_irq_bdev);
     1075    // For AHCI
     1076    // bdev->p_channel_irq[0]                               (signal_irq_bdev);
     1077    bdev->p_vci_target                                   (signal_vci_tgt_bdev);
     1078    bdev->p_vci_initiator                                (signal_vci_ini_bdev);
    10591079
    10601080    std::cout << "  - BDEV connected" << std::endl;
    10611081
    10621082    // FBUF connexion
    1063     iox_fbuf->p_clk                                          (signal_clk);
    1064     iox_fbuf->p_resetn                                       (signal_resetn);
    1065     iox_fbuf->p_vci                                          (signal_vci_tgt_fbuf);
     1083    fbuf->p_clk                                          (signal_clk);
     1084    fbuf->p_resetn                                       (signal_resetn);
     1085    fbuf->p_vci                                          (signal_vci_tgt_fbuf);
    10661086
    10671087    std::cout << "  - FBUF connected" << std::endl;
    10681088
    10691089    // MNIC connexion
    1070     iox_mnic->p_clk                                          (signal_clk);
    1071     iox_mnic->p_resetn                                       (signal_resetn);
    1072     iox_mnic->p_vci                                          (signal_vci_tgt_mnic);
     1090    mnic->p_clk                                          (signal_clk);
     1091    mnic->p_resetn                                       (signal_resetn);
     1092    mnic->p_vci                                          (signal_vci_tgt_mnic);
    10731093    for ( size_t i=0 ; i<NB_NIC_CHANNELS ; i++ )
    10741094    {
    1075          iox_mnic->p_rx_irq[i]                               (signal_irq_mnic_rx[i]);
    1076          iox_mnic->p_tx_irq[i]                               (signal_irq_mnic_tx[i]);
     1095         mnic->p_rx_irq[i]                               (signal_irq_mnic_rx[i]);
     1096         mnic->p_tx_irq[i]                               (signal_irq_mnic_tx[i]);
    10771097    }
    10781098
     
    10801100
    10811101    // BROM connexion
    1082     iox_brom->p_clk                                          (signal_clk);
    1083     iox_brom->p_resetn                                       (signal_resetn);
    1084     iox_brom->p_vci                                          (signal_vci_tgt_brom);
     1102    brom->p_clk                                          (signal_clk);
     1103    brom->p_resetn                                       (signal_resetn);
     1104    brom->p_vci                                          (signal_vci_tgt_brom);
    10851105
    10861106    std::cout << "  - BROM connected" << std::endl;
    10871107
    10881108    // MTTY connexion
    1089     iox_mtty->p_clk                                          (signal_clk);
    1090     iox_mtty->p_resetn                                       (signal_resetn);
    1091     iox_mtty->p_vci                                          (signal_vci_tgt_mtty);
     1109    mtty->p_clk                                          (signal_clk);
     1110    mtty->p_resetn                                       (signal_resetn);
     1111    mtty->p_vci                                          (signal_vci_tgt_mtty);
    10921112    for ( size_t i=0 ; i<NB_TTY_CHANNELS ; i++ )
    10931113    {
    1094         iox_mtty->p_irq[i]                                         (signal_irq_mtty[i]);
     1114        mtty->p_irq[i]                                     (signal_irq_mtty[i]);
    10951115    }
    10961116
     
    10981118
    10991119    // CDMA connexion
    1100     iox_cdma->p_clk                                             (signal_clk);
    1101     iox_cdma->p_resetn                                          (signal_resetn);
    1102     iox_cdma->p_vci_target                                      (signal_vci_tgt_cdma);
    1103     iox_cdma->p_vci_initiator                                   (signal_vci_ini_cdma);
     1120    cdma->p_clk                                         (signal_clk);
     1121    cdma->p_resetn                                      (signal_resetn);
     1122    cdma->p_vci_target                                  (signal_vci_tgt_cdma);
     1123    cdma->p_vci_initiator                               (signal_vci_ini_cdma);
    11041124    for ( size_t i=0 ; i<(NB_NIC_CHANNELS*2) ; i++)
    11051125    {
    1106         iox_cdma->p_irq[i]                                   (signal_irq_cdma[i]);
     1126        cdma->p_irq[i]                                   (signal_irq_cdma[i]);
    11071127    }
    11081128
     
    11291149
    11301150    // IOB0 cluster connexion to IOX network
    1131     (*clusters[0][0]->p_vci_iox_ini)                         (signal_vci_ini_iob0);
    1132     (*clusters[0][0]->p_vci_iox_tgt)                         (signal_vci_tgt_iob0);
     1151    (*clusters[0][0]->p_vci_iob_iox_ini)                     (signal_vci_ini_iob0);
     1152    (*clusters[0][0]->p_vci_iob_iox_tgt)                     (signal_vci_tgt_iob0);
    11331153
    11341154    // IOB1 cluster connexion to IOX network
    1135     (*clusters[XMAX-1][YMAX-1]->p_vci_iox_ini)               (signal_vci_ini_iob1);
    1136     (*clusters[XMAX-1][YMAX-1]->p_vci_iox_tgt)               (signal_vci_tgt_iob1);
     1155    (*clusters[XMAX-1][YMAX-1]->p_vci_iob_iox_ini)           (signal_vci_ini_iob1);
     1156    (*clusters[XMAX-1][YMAX-1]->p_vci_iob_iox_tgt)           (signal_vci_tgt_iob1);
    11371157
    11381158    // All clusters Clock & RESET connexions
     
    12391259      }
    12401260
    1241       clusters[0][y]->p_dspin_ram_cmd_in[WEST]                (signal_dspin_false_ram_cmd_in[0][y][WEST]);
    1242       clusters[0][y]->p_dspin_ram_cmd_out[WEST]               (signal_dspin_false_ram_cmd_out[0][y][WEST]);
    1243       clusters[0][y]->p_dspin_ram_rsp_in[WEST]                (signal_dspin_false_ram_rsp_in[0][y][WEST]);
    1244       clusters[0][y]->p_dspin_ram_rsp_out[WEST]               (signal_dspin_false_ram_rsp_out[0][y][WEST]);
    1245 
    1246       clusters[XMAX-1][y]->p_dspin_ram_cmd_in[EAST]           (signal_dspin_false_ram_cmd_in[XMAX-1][y][EAST]);
    1247       clusters[XMAX-1][y]->p_dspin_ram_cmd_out[EAST]          (signal_dspin_false_ram_cmd_out[XMAX-1][y][EAST]);
    1248       clusters[XMAX-1][y]->p_dspin_ram_rsp_in[EAST]           (signal_dspin_false_ram_rsp_in[XMAX-1][y][EAST]);
    1249       clusters[XMAX-1][y]->p_dspin_ram_rsp_out[EAST]          (signal_dspin_false_ram_rsp_out[XMAX-1][y][EAST]);
     1261      if( y == 0 )        // handling IOB to RAM network connection in cluster_iob0
     1262      {
     1263         (*clusters[0][0]->p_dspin_iob_cmd_out)               (signal_dspin_cmd_iob0_loopback);
     1264         clusters[0][0]->p_dspin_ram_cmd_in[WEST]             (signal_dspin_cmd_iob0_loopback);
     1265
     1266         clusters[0][0]->p_dspin_ram_cmd_out[WEST]            (signal_dspin_false_ram_cmd_out[0][0][WEST]);
     1267         clusters[0][0]->p_dspin_ram_rsp_in[WEST]             (signal_dspin_false_ram_rsp_in[0][0][WEST]);
     1268
     1269         clusters[0][0]->p_dspin_ram_rsp_out[WEST]            (signal_dspin_rsp_iob0_loopback);
     1270         (*clusters[0][0]->p_dspin_iob_rsp_in)                (signal_dspin_rsp_iob0_loopback);
     1271
     1272      }
     1273      else
     1274      {
     1275         clusters[0][y]->p_dspin_ram_cmd_in[WEST]             (signal_dspin_false_ram_cmd_in[0][y][WEST]);
     1276         clusters[0][y]->p_dspin_ram_cmd_out[WEST]            (signal_dspin_false_ram_cmd_out[0][y][WEST]);
     1277         clusters[0][y]->p_dspin_ram_rsp_in[WEST]             (signal_dspin_false_ram_rsp_in[0][y][WEST]);
     1278         clusters[0][y]->p_dspin_ram_rsp_out[WEST]            (signal_dspin_false_ram_rsp_out[0][y][WEST]);
     1279      }
     1280
     1281      if( y == YMAX-1 )   // handling IOB to RAM network connection in cluster_iob1
     1282      {
     1283         (*clusters[XMAX-1][YMAX-1]->p_dspin_iob_cmd_out)     (signal_dspin_cmd_iob1_loopback);
     1284         clusters[XMAX-1][YMAX-1]->p_dspin_ram_cmd_in[EAST]   (signal_dspin_cmd_iob1_loopback);
     1285
     1286         clusters[XMAX-1][YMAX-1]->p_dspin_ram_cmd_out[EAST]  (signal_dspin_false_ram_cmd_out[XMAX-1][YMAX-1][EAST]);
     1287         clusters[XMAX-1][YMAX-1]->p_dspin_ram_rsp_in[EAST]   (signal_dspin_false_ram_rsp_in[XMAX-1][YMAX-1][EAST]);
     1288
     1289         clusters[XMAX-1][YMAX-1]->p_dspin_ram_rsp_out[EAST]  (signal_dspin_rsp_iob1_loopback);
     1290         (*clusters[XMAX-1][YMAX-1]->p_dspin_iob_rsp_in)      (signal_dspin_rsp_iob1_loopback);
     1291      }
     1292      else
     1293      {
     1294         clusters[XMAX-1][y]->p_dspin_ram_cmd_in[EAST]        (signal_dspin_false_ram_cmd_in[XMAX-1][y][EAST]);
     1295         clusters[XMAX-1][y]->p_dspin_ram_cmd_out[EAST]       (signal_dspin_false_ram_cmd_out[XMAX-1][y][EAST]);
     1296         clusters[XMAX-1][y]->p_dspin_ram_rsp_in[EAST]        (signal_dspin_false_ram_rsp_in[XMAX-1][y][EAST]);
     1297         clusters[XMAX-1][y]->p_dspin_ram_rsp_out[EAST]       (signal_dspin_false_ram_rsp_out[XMAX-1][y][EAST]);
     1298      }
    12501299   }
    12511300
     
    12821331   }
    12831332
    1284    std::cout << "North & South boundaries established" << std::endl;
     1333   std::cout << "North & South boundaries established" << std::endl << std::endl;
    12851334
    12861335   ////////////////////////////////////////////////////////
     
    13271376   }
    13281377
    1329    sc_start(sc_core::sc_time(1, SC_NS));
    1330    signal_resetn = true;
    1331 
    1332    for (size_t n = 1; n < ncycles; n++)
    1333    {
    1334       // Monitor a specific address for L1 & L2 caches
    1335       // clusters[1][1]->proc[0]->cache_monitor(0x8ba4ULL);
    1336       // clusters[0][0]->memc->cache_monitor(   0x12180ULL);
    1337 
    1338       if (debug_ok and (n > debug_from) and (n % debug_period == 0))
    1339       {
    1340          std::cout << "****************** cycle " << std::dec << n ;
    1341          std::cout << " ************************************************" << std::endl;
    1342 
    1343         // trace proc[debug_proc_id]
    1344         if ( debug_proc_id < XMAX*YMAX*NB_PROCS_MAX )
     1378    sc_start(sc_core::sc_time(1, SC_NS));
     1379    signal_resetn = true;
     1380
     1381    for (size_t n = 1; n < ncycles; n++)
     1382    {
     1383        // Monitor a specific address for L1 & L2 caches
     1384        // clusters[1][1]->proc[0]->cache_monitor(0x8ba4ULL);
     1385        // clusters[0][0]->memc->cache_monitor(   0x12180ULL);
     1386
     1387        if (debug_ok and (n > debug_from) and (n % debug_period == 0))
    13451388        {
    1346 
    1347         size_t l = debug_proc_id % NB_PROCS_MAX ;
    1348         size_t y = (debug_proc_id / NB_PROCS_MAX) % YMAX ;
    1349         size_t x = debug_proc_id / (YMAX * NB_PROCS_MAX) ;
    1350 
    1351         clusters[x][y]->proc[l]->print_trace(1);
    1352 
    1353         std::ostringstream proc_signame;
    1354         proc_signame << "[SIG]PROC_" << x << "_" << y << "_" << l ;
    1355         clusters[x][y]->signal_int_vci_ini_proc[l].print_trace(proc_signame.str());
    1356 
    1357         std::ostringstream p2m_signame;
    1358         p2m_signame << "[SIG]PROC_" << x << "_" << y << "_" << l << " P2M" ;
    1359         clusters[x][y]->signal_int_dspin_p2m_proc[l].print_trace(p2m_signame.str());
    1360 
    1361         std::ostringstream m2p_signame;
    1362         m2p_signame << "[SIG]PROC_" << x << "_" << y << "_" << l << " M2P" ;
    1363         clusters[x][y]->signal_int_dspin_m2p_proc[l].print_trace(m2p_signame.str());
    1364 
    1365 //      std::ostringstream p_cmd_signame;
    1366 //      p_cmd_signame << "[SIG]PROC_" << x << "_" << y << "_" << l << " CMD" ;
    1367 //      clusters[x][y]->signal_int_dspin_cmd_proc_i[l].print_trace(p_cmd_signame.str());
    1368 
    1369 //      std::ostringstream p_rsp_signame;
    1370 //      p_rsp_signame << "[SIG]PROC_" << x << "_" << y << "_" << l << " RSP" ;
    1371 //      clusters[x][y]->signal_int_dspin_rsp_proc_i[l].print_trace(p_rsp_signame.str());
    1372 
    1373         // trace INT routers and xbar in a given cluster
    1374 //      clusters[x][y]->int_xbar_m2p_c->print_trace();
    1375 //      clusters[x][y]->int_router_cmd->print_trace(1);
    1376 //      clusters[x][y]->int_xbar_rsp_d->print_trace();
    1377 //      clusters[x][y]->int_xbar_cmd_d->print_trace();
    1378 //      clusters[x][y]->signal_int_dspin_cmd_l2g_d.print_trace("[SIG]L2G CMD");
    1379 //      clusters[x][y]->signal_int_dspin_cmd_g2l_d.print_trace("[SIG]G2L CMD");
    1380 //      clusters[x][y]->signal_int_dspin_rsp_l2g_d.print_trace("[SIG]L2G RSP");
    1381 //      clusters[x][y]->signal_int_dspin_rsp_g2l_d.print_trace("[SIG]G2L RSP");
     1389            std::cout << "****************** cycle " << std::dec << n ;
     1390            std::cout << " ************************************************" << std::endl;
     1391
     1392            // trace proc[debug_proc_id]
     1393            if ( debug_proc_id < XMAX*YMAX*NB_PROCS_MAX )
     1394            {
     1395
     1396                size_t l = debug_proc_id % NB_PROCS_MAX ;
     1397                size_t y = (debug_proc_id / NB_PROCS_MAX) % YMAX ;
     1398                size_t x = debug_proc_id / (YMAX * NB_PROCS_MAX) ;
     1399
     1400                clusters[x][y]->proc[l]->print_trace(0);
     1401
     1402                std::ostringstream proc_signame;
     1403                proc_signame << "[SIG]PROC_" << x << "_" << y << "_" << l ;
     1404                clusters[x][y]->signal_int_vci_ini_proc[l].print_trace(proc_signame.str());
     1405
     1406//              std::ostringstream p2m_signame;
     1407//              p2m_signame << "[SIG]PROC_" << x << "_" << y << "_" << l << " P2M" ;
     1408//              clusters[x][y]->signal_int_dspin_p2m_proc[l].print_trace(p2m_signame.str());
     1409
     1410//              std::ostringstream m2p_signame;
     1411//              m2p_signame << "[SIG]PROC_" << x << "_" << y << "_" << l << " M2P" ;
     1412//              clusters[x][y]->signal_int_dspin_m2p_proc[l].print_trace(m2p_signame.str());
     1413
     1414//              std::ostringstream p_cmd_signame;
     1415//              p_cmd_signame << "[SIG]PROC_" << x << "_" << y << "_" << l << " CMD" ;
     1416//              clusters[x][y]->signal_int_dspin_cmd_proc_i[l].print_trace(p_cmd_signame.str());
     1417
     1418//              std::ostringstream p_rsp_signame;
     1419//              p_rsp_signame << "[SIG]PROC_" << x << "_" << y << "_" << l << " RSP" ;
     1420//              clusters[x][y]->signal_int_dspin_rsp_proc_i[l].print_trace(p_rsp_signame.str());
     1421            }   
     1422
     1423            // trace INT_CMD_D xbar and router in 1_0
     1424//          clusters[1][0]->int_xbar_cmd_d->print_trace();
     1425//          clusters[1][0]->int_xbar_rsp_d->print_trace();
     1426
     1427//          clusters[1][0]->signal_int_dspin_cmd_l2g_d.print_trace("[SIG] INT_CMD_L2G_D_1_0");
     1428//          clusters[1][0]->signal_int_dspin_rsp_g2l_d.print_trace("[SIG] INT_RSP_G2L_D_1_0");
     1429
     1430//          clusters[1][0]->int_router_cmd->print_trace(0);
     1431//          clusters[1][0]->int_router_rsp->print_trace(0);
     1432
     1433            // trace INT_CMD_D xbar and router in 0_0
     1434//          clusters[0][0]->int_xbar_cmd_d->print_trace();
     1435//          clusters[0][0]->int_xbar_rsp_d->print_trace();
     1436
     1437//          clusters[0][0]->signal_int_dspin_cmd_g2l_d.print_trace("[SIG] INT_CMD_G2L_D_0_0");
     1438//          clusters[0][0]->signal_int_dspin_rsp_l2g_d.print_trace("[SIG] INT_RSP_L2G_D_0_0");
     1439         
     1440//          clusters[0][0]->int_router_cmd->print_trace(0);
     1441//          clusters[0][0]->int_router_rsp->print_trace(0);
     1442
     1443            // trace memc[debug_memc_id] and xram[debug_memc_id]
     1444            if ( debug_memc_id < XMAX*YMAX )
     1445            {
     1446                size_t x = debug_memc_id / YMAX;
     1447                size_t y = debug_memc_id % YMAX;
     1448                clusters[x][y]->memc->print_trace(0);
     1449                std::ostringstream smemc_tgt;
     1450                smemc_tgt << "[SIG]MEMC_TGT_" << x << "_" << y;
     1451                clusters[x][y]->signal_int_vci_tgt_memc.print_trace(smemc_tgt.str());
     1452                std::ostringstream smemc_ini;
     1453                smemc_ini << "[SIG]MEMC_INI_" << x << "_" << y;
     1454                clusters[x][y]->signal_ram_vci_ini_memc.print_trace(smemc_ini.str());
     1455                clusters[x][y]->xram->print_trace();
     1456                std::ostringstream sxram_tgt;
     1457                sxram_tgt << "[SIG]XRAM_TGT_" << x << "_" << y;
     1458                clusters[x][y]->signal_ram_vci_tgt_xram.print_trace(sxram_tgt.str());
     1459            }
     1460
     1461            // trace RAM network
     1462            for( size_t cluster = 0 ; cluster < XMAX*YMAX ; cluster++ )
     1463            {
     1464                size_t x = cluster / YMAX;
     1465                size_t y = cluster % YMAX;
     1466                clusters[x][y]->ram_router_cmd->print_trace();
     1467                clusters[x][y]->ram_router_rsp->print_trace();
     1468            }
     1469       
     1470            // trace iob, iox and external peripherals 
     1471            if ( debug_iob )
     1472            {
     1473                clusters[0][0]->iob->print_trace();
     1474                clusters[0][0]->signal_int_vci_tgt_iobx.print_trace( "[SIG]IOB0_INT_TGT");
     1475                clusters[0][0]->signal_int_vci_ini_iobx.print_trace( "[SIG]IOB0_INT_INI");
     1476                clusters[0][0]->signal_ram_vci_ini_iobx.print_trace( "[SIG]IOB0_RAM_INI");
     1477
     1478                signal_vci_ini_iob0.print_trace("[SIG]IOB0_IOX_INI");
     1479                signal_vci_tgt_iob0.print_trace("[SIG]IOB0_IOX_TGT");
     1480
     1481                signal_dspin_cmd_iob0_loopback.print_trace("[SIG]IOB0_CMD_LOOPBACK");
     1482                signal_dspin_rsp_iob0_loopback.print_trace("[SIG]IOB0_RSP_LOOPBACK");
     1483
     1484//              cdma->print_trace();
     1485//              signal_vci_tgt_cdma.print_trace("[SIG]IOX_CDMA_TGT");
     1486//              signal_vci_ini_cdma.print_trace("[SIG]IOX_CDMA_INI");
     1487
     1488//              brom->print_trace();
     1489//              signal_vci_tgt_brom.print_trace("[SIG]IOX_BROM_TGT");
     1490
     1491//              mtty->print_trace();
     1492//              signal_vci_tgt_mtty.print_trace("[SIG]IOX_MTTY_TGT");
     1493
     1494                bdev->print_trace();
     1495                signal_vci_tgt_bdev.print_trace("[SIG]IOX_BDEV_TGT");
     1496                signal_vci_ini_bdev.print_trace("[SIG]IOX_BDEV_INI");
     1497
     1498//              fbuf->print_trace();
     1499//              signal_vci_tgt_fbuf.print_trace("[SIG]FBUF");
     1500
     1501                iox_network->print_trace();
     1502
     1503                // interrupts
     1504                if (signal_irq_bdev) std::cout << "### IRQ_BDEV ACTIVATED" << std::endl;
     1505            }
    13821506        }
    13831507
    1384         // trace memc[debug_memc_id]
    1385         if ( debug_memc_id < XMAX*YMAX )
    1386         {
    1387 
    1388         size_t x = debug_memc_id / YMAX;
    1389         size_t y = debug_memc_id % YMAX;
    1390 
    1391         clusters[x][y]->memc->print_trace();
    1392 
    1393         std::ostringstream smemc_tgt;
    1394         smemc_tgt << "[SIG]MEMC_TGT_" << x << "_" << y;
    1395         clusters[x][y]->signal_int_vci_tgt_memc.print_trace(smemc_tgt.str());
    1396 
    1397         std::ostringstream smemc_ini;
    1398         smemc_ini << "[SIG]MEMC_INI_" << x << "_" << y;
    1399         clusters[x][y]->signal_ram_vci_ini_memc.print_trace(smemc_ini.str());
    1400 
    1401 //      clusters[x][y]->ram_router_cmd->print_trace();
    1402 //      clusters[x][y]->ram_xbar_cmd->print_trace();
    1403 
    1404 //      std::ostringstream sg2l;
    1405 //      sg2l << "[SIG]G2L_" << x << "_" << y;
    1406 //      clusters[x][y]->signal_ram_dspin_cmd_g2l.print_trace(sg2l.str());
    1407 
    1408         clusters[x][y]->xram->print_trace();
    1409 
    1410         std::ostringstream sxram_tgt;
    1411         sxram_tgt << "[SIG]XRAM_TGT_" << x << "_" << y;
    1412         clusters[x][y]->signal_ram_vci_tgt_xram.print_trace(sxram_tgt.str());
    1413 
    1414         std::ostringstream sm2p;
    1415         sm2p << "[SIG]MEMC_" << x << "_" << y << " M2P" ;
    1416         clusters[x][y]->signal_int_dspin_m2p_memc.print_trace(sm2p.str());
    1417 
    1418         std::ostringstream sp2m;
    1419         sp2m << "[SIG]MEMC_" << x << "_" << y << " P2M" ;
    1420         clusters[x][y]->signal_int_dspin_p2m_memc.print_trace(sp2m.str());
    1421 
    1422 //      std::ostringstream m_cmd_signame;
    1423 //      m_cmd_signame << "[SIG]MEMC_" << x << "_" << y <<  " CMD" ;
    1424 //      clusters[x][y]->signal_int_dspin_cmd_memc_t.print_trace(m_cmd_signame.str());
    1425 
    1426 //      std::ostringstream m_rsp_signame;
    1427 //      m_rsp_signame << "[SIG]MEMC_" << x << "_" << y <<  " RSP" ;
    1428 //      clusters[x][y]->signal_int_dspin_rsp_memc_t.print_trace(m_rsp_signame.str());
    1429 
    1430         std::ostringstream siob_ini;
    1431         siob_ini << "[SIG]IOB_INI_" << x << "_" << y;
    1432         clusters[x][y]->signal_ram_vci_ini_iobx.print_trace(siob_ini.str());
    1433         }
    1434        
    1435         // trace components iob 
    1436         if ( debug_iob )
    1437         {
    1438         clusters[0][0]->iob->print_trace();
    1439         clusters[0][0]->signal_int_vci_tgt_iobx.print_trace( "[SIG]IOB0 INT TGT" );
    1440 //      clusters[0][0]->signal_int_dspin_cmd_iobx_t.print_trace("[SIG]IOB0 INT CMD");
    1441 //      clusters[0][0]->signal_int_dspin_rsp_iobx_t.print_trace("[SIG]IOB0 INT RSP");
    1442 
    1443         clusters[XMAX-1][YMAX-1]->iob->print_trace();
    1444         clusters[XMAX-1][YMAX-1]->signal_int_vci_tgt_iobx.print_trace( "[SIG]IOB1 INT TGT" );
    1445 //      clusters[XMAX-1][YMAX-1]->signal_int_dspin_cmd_iobx_t.print_trace("[SIG]IOB1 INT CMD");
    1446 //      clusters[XMAX-1][YMAX-1]->signal_int_dspin_rsp_iobx_t.print_trace("[SIG]IOB1 INT RSP");
    1447         }
    1448 
    1449         // trace external peripherals
    1450         iox_network->print_trace();
    1451 
    1452         signal_vci_ini_iob0.print_trace("[SIG]IOB0 IOX INI");
    1453         signal_vci_tgt_iob0.print_trace("[SIG]IOB0 IOX TGT");
    1454         signal_vci_ini_iob1.print_trace("[SIG]IOB1 IOX INI");
    1455         signal_vci_tgt_iob1.print_trace("[SIG]IOB1 IOX TGT");
    1456 
    1457         iox_cdma->print_trace();
    1458         signal_vci_tgt_cdma.print_trace("[SIG]CDMA_TGT");
    1459         signal_vci_ini_cdma.print_trace("[SIG]CDMA_INI");
    1460 
    1461 //      iox_brom->print_trace();
    1462 //      signal_vci_tgt_brom.print_trace("[SIG]BROM");
    1463 
    1464         iox_mtty->print_trace();
    1465         signal_vci_tgt_mtty.print_trace("[SIG]MTTY");
    1466 
    1467         iox_bdev->print_trace();
    1468         signal_vci_tgt_bdev.print_trace("[SIG]BDEV_TGT");
    1469         signal_vci_ini_bdev.print_trace("[SIG]BDEV_INI");
    1470 
    1471 //      iox_fbuf->print_trace();
    1472 //      signal_vci_tgt_fbuf.print_trace("[SIG]FBUF");
    1473 
    1474       }
    1475 
    1476       sc_start(sc_core::sc_time(1, SC_NS));
    1477    }
    1478    return EXIT_SUCCESS;
     1508        sc_start(sc_core::sc_time(1, SC_NS));
     1509    }
     1510    return EXIT_SUCCESS;
    14791511}
    14801512
  • trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/metadata/tsar_iob_cluster.sd

    r468 r550  
    8383              dspin_rsp_width    = parameter.Reference('dspin_ram_rsp_width')),
    8484
    85         Uses('caba:dspin_local_crossbar',
     85        Uses('caba:dspin_router_tsar',
    8686              flit_width         = parameter.Reference('dspin_ram_cmd_width')),
    8787
    88         Uses('caba:dspin_local_crossbar',
    89               flit_width         = parameter.Reference('dspin_ram_rsp_width')),
    90 
    91         Uses('caba:dspin_router',
    92               flit_width         = parameter.Reference('dspin_ram_cmd_width')),
    93 
    94         Uses('caba:dspin_router',
     88        Uses('caba:dspin_router_tsar',
    9589              flit_width         = parameter.Reference('dspin_ram_rsp_width')),
    9690
  • trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/include/tsar_iob_cluster.h

    r468 r550  
    2525#include "vci_dspin_initiator_wrapper.h"
    2626#include "vci_dspin_target_wrapper.h"
    27 #include "dspin_router.h"
     27#include "dspin_router_tsar.h"
    2828#include "virtual_dspin_router.h"
    2929#include "vci_multi_dma.h"
     
    5252    sc_in<bool>                                            p_resetn;
    5353
    54     soclib::caba::VciInitiator<vci_param_ext>*         p_vci_iox_ini;
    55     soclib::caba::VciTarget<vci_param_ext>*            p_vci_iox_tgt;
    56 
    57     sc_in<bool>*                                       p_irq[32];  // not always used
    58 
     54    // Thes two ports are used to connect IOB to IOX nework in top cell
     55    soclib::caba::VciInitiator<vci_param_ext>*         p_vci_iob_iox_ini;
     56    soclib::caba::VciTarget<vci_param_ext>*            p_vci_iob_iox_tgt;
     57
     58    // These ports are used to connect IOB to RAM network in top cell
     59    soclib::caba::DspinOutput<dspin_ram_cmd_width>*    p_dspin_iob_cmd_out; 
     60    soclib::caba::DspinInput<dspin_ram_rsp_width>*     p_dspin_iob_rsp_in; 
     61
     62    // These ports are used to connect hard IRQ from external peripherals to IOB0
     63    sc_in<bool>*                                       p_irq[32];
     64
     65    // These arrays of ports are used to connect the INT & RAM networks in top cell
    5966        soclib::caba::DspinOutput<dspin_int_cmd_width>**   p_dspin_int_cmd_out;
    6067        soclib::caba::DspinInput<dspin_int_cmd_width>**    p_dspin_int_cmd_in;
     
    124131        VciSignals<vci_param_ext>             signal_ram_vci_tgt_xram;
    125132
    126     // RAM network DSPIN signals between VCI/DSPIN wrappers and crossbars or routers
     133    // RAM network DSPIN signals between VCI/DSPIN wrappers and routers
    127134        DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_xram_t;
    128135        DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_xram_t;
    129136        DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_memc_i;
    130137        DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_memc_i;
    131         DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_iobx_i;
    132         DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_iobx_i;
    133138 
    134     // RAM network DSPIN signals between DSPIN routers and DSPIN local crossbars
    135         DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_l2g;
    136         DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_g2l;
    137         DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_l2g;
    138         DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_g2l;
    139        
    140139    //////////////////////////////////////
    141140    // Hardwate Components (pointers)
     
    194193                          dspin_ram_rsp_width>*       xram_ram_wt;
    195194       
    196     DspinRouter<dspin_ram_cmd_width>*                 ram_router_cmd;
    197     DspinRouter<dspin_ram_rsp_width>*                 ram_router_rsp;
     195    DspinRouterTsar<dspin_ram_cmd_width>*                 ram_router_cmd;
     196    DspinRouterTsar<dspin_ram_rsp_width>*             ram_router_rsp;
    198197
    199198        // IO Network Components (not instanciated in all clusters)
     
    214213                             dspin_ram_rsp_width>*    iob_ram_wi;
    215214       
    216     DspinLocalCrossbar<dspin_ram_cmd_width>*          ram_xbar_cmd;
    217     DspinLocalCrossbar<dspin_ram_rsp_width>*          ram_xbar_rsp;
    218 
    219215    // cluster constructor
    220216        TsarIobCluster( sc_module_name                     insname,
  • trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/src/tsar_iob_cluster.cpp

    r533 r550  
    4949                    size_t                             l_width,
    5050
    51                     size_t                             memc_int_tgtid,
    52                     size_t                             xicu_int_tgtid,
    53                     size_t                             mdma_int_tgtid,
    54                     size_t                             iobx_int_tgtid,
    55 
    56                     size_t                             proc_int_srcid,
    57                     size_t                             mdma_int_srcid,
    58                     size_t                             iobx_int_srcid,
    59 
    60                     size_t                             xram_ram_tgtid,
    61 
    62                     size_t                             memc_ram_srcid,
    63                     size_t                             iobx_ram_srcid,
     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
    6464
    6565                    size_t                             memc_ways,
     
    8585
    8686    size_t cluster_id = x_id * ymax + y_id;
    87     size_t cluster_iob0 = 0;
    88     size_t cluster_iob1 = xmax*ymax-1;
     87
     88    size_t cluster_iob0 = 0;                 // South-West cluster
     89    size_t cluster_iob1 = xmax*ymax-1;       // North-East cluster
    8990
    9091    // Vectors of DSPIN ports for inter-cluster communications
     
    99100    p_dspin_ram_rsp_out = alloc_elems<DspinOutput<dspin_ram_rsp_width> >("p_ext_rsp_out", 4);
    100101
    101     // VCI ports to IOB0 and IOB1 in cluster_iob0 and cluster_iob1
     102    // ports in cluster_iob0 and cluster_iob1 only
    102103    if ( (cluster_id == cluster_iob0) or (cluster_id == cluster_iob1) )
    103104    {
    104         p_vci_iox_ini = new soclib::caba::VciInitiator<vci_param_ext>;
    105         p_vci_iox_tgt = new soclib::caba::VciTarget<vci_param_ext>;
     105        // VCI ports from IOB to IOX network
     106        p_vci_iob_iox_ini = new soclib::caba::VciInitiator<vci_param_ext>;
     107        p_vci_iob_iox_tgt = new soclib::caba::VciTarget<vci_param_ext>;
     108
     109        // DSPIN ports from IOB to RAM network
     110        p_dspin_iob_cmd_out = new soclib::caba::DspinOutput<dspin_ram_cmd_width>;
     111        p_dspin_iob_rsp_in  = new soclib::caba::DspinInput<dspin_ram_rsp_width>;
    106112    }
    107113
     
    166172                     IntTab(cluster_id, memc_int_tgtid), // TGTID INT network
    167173                     (cluster_id << l_width) + nb_procs, // CC_GLOBAL_ID
    168                      x_width,                            // Number of x bits in platform
    169                      y_width,                            // Number of y bits in platform
     174                     x_width,                            // number of bits for x coordinate
     175                     y_width,                            // number of bits for y coordinate
    170176                     memc_ways, memc_sets, 16,           // CACHE SIZE
    171177                     3,                                  // MAX NUMBER OF COPIES
     
    334340    int_router_rsp = new VirtualDspinRouter<dspin_int_rsp_width>(
    335341                     s_int_router_rsp.str().c_str(),
    336                      x_id,y_id,                    // coordinates in mesh
     342                     x_id,y_id,                    // router coordinates in mesh
    337343                     x_width, y_width,             // x & y fields width
    338344                     2,                            // nb virtual channels
     
    360366    std::ostringstream s_ram_router_cmd;
    361367    s_ram_router_cmd << "ram_router_cmd_" << x_id << "_" << y_id;
    362     ram_router_cmd = new DspinRouter<dspin_ram_cmd_width>(
     368    ram_router_cmd = new DspinRouterTsar<dspin_ram_cmd_width>(
    363369                     s_ram_router_cmd.str().c_str(),
    364                      x_id,y_id,                    // coordinate in the mesh
    365                      x_width, y_width,             // x & y fields width
    366                      4,4);                         // input & output fifo depths
     370                     x_id, y_id,                  // router coordinates in mesh
     371                     x_width,                     // x field width in first flit
     372                     x_width,                     // y field width in first flit
     373                     4, 4,                        // input & output fifo depths
     374                     cluster_iob0,                // cluster containing IOB0
     375                     cluster_iob1,                // cluster containing IOB1
     376                     l_width,                     // local field width in first flit
     377                     iobx_ram_srcid );            // IOB local index
    367378
    368379    std::ostringstream s_ram_router_rsp;
    369380    s_ram_router_rsp << "ram_router_rsp_" << x_id << "_" << y_id;
    370     ram_router_rsp = new DspinRouter<dspin_ram_rsp_width>(
     381    ram_router_rsp = new DspinRouterTsar<dspin_ram_rsp_width>(
    371382                     s_ram_router_rsp.str().c_str(),
    372                      x_id,y_id,                    // coordinates in mesh
    373                      x_width, y_width,             // x & y fields width
    374                      4,4);                         // input & output fifo depths
     383                     x_id, y_id,                  // coordinates in mesh
     384                     x_width,                     // x field width in first flit
     385                     y_width,                     // y field width in first flit
     386                     4, 4,                        // input & output fifo depths
     387                     cluster_iob0,                // cluster containing IOB0
     388                     cluster_iob1,                // cluster containing IOB1
     389                     l_width,                     // local field width in first flit
     390                     iobx_ram_srcid );            // IOB local index
     391
    375392
    376393    ////////////////////// I/O  CLUSTER ONLY    ///////////////////////
     
    435452                     s_iob_ram_wi.str().c_str(),
    436453                     x_width + y_width + l_width);
    437 
    438         ///////////// RAM LOCAL_XBAR(S)
    439         std::ostringstream s_ram_xbar_cmd;
    440         s_ram_xbar_cmd << "ram_xbar_cmd_" << x_id << "_" << y_id;   
    441         ram_xbar_cmd = new DspinLocalCrossbar<dspin_ram_cmd_width>(
    442                      s_ram_xbar_cmd.str().c_str(),
    443                      mt_ram,                       // mapping table
    444                      x_id, y_id,                   // cluster coordinates
    445                      x_width, y_width, 0,          // one dest on ram_cmd network
    446                      2,                            // number of local sources
    447                      1,                            // number of local dests
    448                      2, 2,                         // fifo depths 
    449                      true,                         // CMD crossbar
    450                      false,                        // no routing table (one dest)
    451                      false );                      // no broadcast
    452 
    453         std::ostringstream s_ram_xbar_rsp;
    454         s_ram_xbar_rsp << "ram_xbar_rsp_" << x_id << "_" << y_id;   
    455         ram_xbar_rsp = new DspinLocalCrossbar<dspin_ram_rsp_width>(
    456                      s_ram_xbar_rsp.str().c_str(),
    457                      mt_ram,                       // mapping table
    458                      x_id, y_id,                   // cluster coordinates
    459                      x_width, y_width, l_width,    // two sources on ram_rsp network
    460                      1,                            // number of local sources
    461                      2,                            // number of local dests
    462                      2, 2,                         // fifo depths 
    463                      false,                        // RSP crossbar
    464                      true,                         // use routing table
    465                      false );                      // no broadcast
    466     }
     454    } // end if IO
    467455
    468456    ////////////////////////////////////
     
    682670    mdma_int_wi->p_vci                           (signal_int_vci_ini_mdma);
    683671
    684     // For the IO bridge and the RAM network components, the connexions
    685     // depend on cluster type: The vci_io_bridge and dspin_local_crossbar
    686     // components are only in cluster_iob0 & cluster_iob1
    687 
    688     if ( (cluster_id != cluster_iob0) and (cluster_id != cluster_iob1) )
    689     {
    690         // RAM network CMD & RSP routers
    691         ram_router_cmd->p_clk                    (this->p_clk);
    692         ram_router_cmd->p_resetn                 (this->p_resetn);
    693         ram_router_rsp->p_clk                    (this->p_clk);
    694         ram_router_rsp->p_resetn                 (this->p_resetn);
    695         for( size_t n=0 ; n<4 ; n++)
    696         {
    697             ram_router_cmd->p_out[n]             (this->p_dspin_ram_cmd_out[n]);
    698             ram_router_cmd->p_in[n]              (this->p_dspin_ram_cmd_in[n]);
    699             ram_router_rsp->p_out[n]             (this->p_dspin_ram_rsp_out[n]);
    700             ram_router_rsp->p_in[n]              (this->p_dspin_ram_rsp_in[n]);
    701         }
    702         ram_router_cmd->p_out[4]                 (signal_ram_dspin_cmd_xram_t);
    703         ram_router_cmd->p_in[4]                  (signal_ram_dspin_cmd_memc_i);
    704         ram_router_rsp->p_out[4]                 (signal_ram_dspin_rsp_memc_i);
    705         ram_router_rsp->p_in[4]                  (signal_ram_dspin_rsp_xram_t);
    706     }
    707     else  // IO cluster
     672    //////////////////////////// RAM network CMD & RSP routers
     673    ram_router_cmd->p_clk                    (this->p_clk);
     674    ram_router_cmd->p_resetn                 (this->p_resetn);
     675    ram_router_rsp->p_clk                    (this->p_clk);
     676    ram_router_rsp->p_resetn                 (this->p_resetn);
     677    for( size_t n=0 ; n<4 ; n++)
     678    {
     679        ram_router_cmd->p_out[n]             (this->p_dspin_ram_cmd_out[n]);
     680        ram_router_cmd->p_in[n]              (this->p_dspin_ram_cmd_in[n]);
     681        ram_router_rsp->p_out[n]             (this->p_dspin_ram_rsp_out[n]);
     682        ram_router_rsp->p_in[n]              (this->p_dspin_ram_rsp_in[n]);
     683    }
     684    ram_router_cmd->p_out[4]                 (signal_ram_dspin_cmd_xram_t);
     685    ram_router_cmd->p_in[4]                  (signal_ram_dspin_cmd_memc_i);
     686    ram_router_rsp->p_out[4]                 (signal_ram_dspin_rsp_memc_i);
     687    ram_router_rsp->p_in[4]                  (signal_ram_dspin_rsp_xram_t);
     688   
     689    ///////////////////////// IOB exists only in cluster_iob0 & cluster_iob1.
     690    if ( (cluster_id == cluster_iob0) or (cluster_id == cluster_iob1) )
    708691    {
    709692        // IO bridge
    710693        iob->p_clk                               (this->p_clk);
    711694        iob->p_resetn                            (this->p_resetn);
    712         iob->p_vci_ini_iox                       (*(this->p_vci_iox_ini));
    713         iob->p_vci_tgt_iox                       (*(this->p_vci_iox_tgt));
     695        iob->p_vci_ini_iox                       (*(this->p_vci_iob_iox_ini));
     696        iob->p_vci_tgt_iox                       (*(this->p_vci_iob_iox_tgt));
    714697        iob->p_vci_tgt_int                       (signal_int_vci_tgt_iobx);
    715698        iob->p_vci_ini_int                       (signal_int_vci_ini_iobx);
    716699        iob->p_vci_ini_ram                       (signal_ram_vci_ini_iobx);
     700
    717701        if ( cluster_id == cluster_iob0 )
    718             for ( size_t n=0 ; n<32 ; n++ )
    719                 (*iob->p_irq[n])                 (*(this->p_irq[n]));
     702               for ( size_t n=0 ; n<32 ; n++ )
     703                   (*iob->p_irq[n])                 (*(this->p_irq[n]));
    720704
    721705        // initiator wrapper to RAM network
    722706        iob_ram_wi->p_clk                        (this->p_clk);
    723707        iob_ram_wi->p_resetn                     (this->p_resetn);
    724         iob_ram_wi->p_dspin_cmd                  (signal_ram_dspin_cmd_iobx_i);
    725         iob_ram_wi->p_dspin_rsp                  (signal_ram_dspin_rsp_iobx_i);
     708        iob_ram_wi->p_dspin_cmd                  (*(this->p_dspin_iob_cmd_out));
     709        iob_ram_wi->p_dspin_rsp                  (*(this->p_dspin_iob_rsp_in));
    726710        iob_ram_wi->p_vci                        (signal_ram_vci_ini_iobx);
    727711
     
    739723        iob_int_wt->p_dspin_rsp                  (signal_int_dspin_rsp_iobx_t);
    740724        iob_int_wt->p_vci                        (signal_int_vci_tgt_iobx);
    741 
    742         // RAM network CMD local crossbar
    743         ram_xbar_cmd->p_clk                      (this->p_clk);
    744         ram_xbar_cmd->p_resetn                   (this->p_resetn);
    745         ram_xbar_cmd->p_global_out               (signal_ram_dspin_cmd_l2g);
    746         ram_xbar_cmd->p_global_in                (signal_ram_dspin_cmd_g2l);
    747         ram_xbar_cmd->p_local_in[0]              (signal_ram_dspin_cmd_memc_i);
    748         ram_xbar_cmd->p_local_in[1]              (signal_ram_dspin_cmd_iobx_i);
    749         ram_xbar_cmd->p_local_out[0]             (signal_ram_dspin_cmd_xram_t);
    750 
    751         // RAM network RSP local crossbar
    752         ram_xbar_rsp->p_clk                      (this->p_clk);
    753         ram_xbar_rsp->p_resetn                   (this->p_resetn);
    754         ram_xbar_rsp->p_global_out               (signal_ram_dspin_rsp_l2g);
    755         ram_xbar_rsp->p_global_in                (signal_ram_dspin_rsp_g2l);
    756         ram_xbar_rsp->p_local_in[0]              (signal_ram_dspin_rsp_xram_t);
    757         ram_xbar_rsp->p_local_out[0]             (signal_ram_dspin_rsp_memc_i);
    758         ram_xbar_rsp->p_local_out[1]             (signal_ram_dspin_rsp_iobx_i);
    759 
    760         // RAM network CMD & RSP routers
    761         ram_router_cmd->p_clk                    (this->p_clk);
    762         ram_router_cmd->p_resetn                 (this->p_resetn);
    763         ram_router_rsp->p_clk                    (this->p_clk);
    764         ram_router_rsp->p_resetn                 (this->p_resetn);
    765         for( size_t n=0 ; n<4 ; n++)
    766         {
    767             ram_router_cmd->p_out[n]             (this->p_dspin_ram_cmd_out[n]);
    768             ram_router_cmd->p_in[n]              (this->p_dspin_ram_cmd_in[n]);
    769             ram_router_rsp->p_out[n]             (this->p_dspin_ram_rsp_out[n]);
    770             ram_router_rsp->p_in[n]              (this->p_dspin_ram_rsp_in[n]);
    771         }
    772         ram_router_cmd->p_out[4]                 (signal_ram_dspin_cmd_g2l);
    773         ram_router_cmd->p_in[4]                  (signal_ram_dspin_cmd_l2g);
    774         ram_router_rsp->p_out[4]                 (signal_ram_dspin_rsp_g2l);
    775         ram_router_rsp->p_in[4]                  (signal_ram_dspin_rsp_l2g);
    776     }
    777    
     725    }
     726
    778727} // end constructor
    779728
Note: See TracChangeset for help on using the changeset viewer.