Changeset 1002


Ignore:
Timestamp:
Jul 2, 2015, 3:17:14 PM (8 years ago)
Author:
alain
Message:

Introducing the BDV / SDC / HBA switch in the tsar_generic_iob plat-form

Location:
trunk/platforms/tsar_generic_iob
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/platforms/tsar_generic_iob/arch.py

    r979 r1002  
    2727#  - nb_ttys        : number of TTY channels
    2828#  - fbf_width      : frame_buffer width = frame_buffer heigth
    29 #  - ioc_type       : can be 'BDV','HBA','SDC', but not 'RDK'
     29#  - ioc_type       : can be 'BDV','HBA','SDC', 'SPI' but not 'RDK'
    3030#   
    3131#
     
    7676    irq_per_proc    = 4         
    7777    peri_increment  = 0x10000 
    78     mwr_type        = 'GCD'
     78    mwr_type        = 'CPY'
    7979
    8080    ### constructor parameters checking
     
    9393            ((x_io == x_size-1) and (y_io == y_size-1)) )
    9494
    95     assert( ioc_type in [ 'BDV' , 'HBA' , 'SDC' ] )
     95    assert( ioc_type in [ 'BDV' , 'HBA' , 'SDC' , 'SPI' ] )
    9696
    9797    assert( mwr_type in [ 'GCD' , 'DCT' , 'CPY' , 'NONE' ] )
     
    294294                if ( ioc_type == 'HBA' ): isr_ioc = 'ISR_HBA'
    295295                if ( ioc_type == 'SDC' ): isr_ioc = 'ISR_SDC'
     296                if ( ioc_type == 'SPI' ): isr_ioc = 'ISR_SPI'
    296297
    297298                mapping.addIrq( pic, index = 8, src = ioc,
  • trunk/platforms/tsar_generic_iob/top.cpp

    r982 r1002  
    141141#include "vci_multi_ahci.h"
    142142#include "vci_block_device_tsar.h"
     143#include "vci_ahci_sdc.h"
     144#include "sd_card.h"
    143145#include "vci_framebuffer.h"
    144146#include "vci_iox_network.h"
     
    856858    VciSignals<vci_param_ext>         signal_vci_tgt_iopi("signal_vci_tgt_iopi");
    857859
    858    // Horizontal inter-clusters INT network DSPIN
    859    DspinSignals<dspin_int_cmd_width>*** signal_dspin_int_cmd_h_inc =
    860       alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cmd_h_inc", XMAX-1, YMAX, 3);
    861    DspinSignals<dspin_int_cmd_width>*** signal_dspin_int_cmd_h_dec =
    862       alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cmd_h_dec", XMAX-1, YMAX, 3);
    863    DspinSignals<dspin_int_rsp_width>*** signal_dspin_int_rsp_h_inc =
    864       alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_rsp_h_inc", XMAX-1, YMAX, 2);
    865    DspinSignals<dspin_int_rsp_width>*** signal_dspin_int_rsp_h_dec =
    866       alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_rsp_h_dec", XMAX-1, YMAX, 2);
    867 
    868    // Vertical inter-clusters INT network DSPIN
    869    DspinSignals<dspin_int_cmd_width>*** signal_dspin_int_cmd_v_inc =
    870       alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cmd_v_inc", XMAX, YMAX-1, 3);
    871    DspinSignals<dspin_int_cmd_width>*** signal_dspin_int_cmd_v_dec =
    872       alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cmd_v_dec", XMAX, YMAX-1, 3);
    873    DspinSignals<dspin_int_rsp_width>*** signal_dspin_int_rsp_v_inc =
    874       alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_rsp_v_inc", XMAX, YMAX-1, 2);
    875    DspinSignals<dspin_int_rsp_width>*** signal_dspin_int_rsp_v_dec =
    876       alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_rsp_v_dec", XMAX, YMAX-1, 2);
    877 
    878    // Mesh boundaries INT network DSPIN
    879    DspinSignals<dspin_int_cmd_width>**** signal_dspin_false_int_cmd_in =
    880       alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_false_int_cmd_in", XMAX, YMAX, 4, 3);
    881    DspinSignals<dspin_int_cmd_width>**** signal_dspin_false_int_cmd_out =
    882       alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_false_int_cmd_out", XMAX, YMAX, 4, 3);
    883    DspinSignals<dspin_int_rsp_width>**** signal_dspin_false_int_rsp_in =
    884       alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_false_int_rsp_in", XMAX, YMAX, 4, 2);
    885    DspinSignals<dspin_int_rsp_width>**** signal_dspin_false_int_rsp_out =
    886       alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_false_int_rsp_out", XMAX, YMAX, 4, 2);
    887 
    888 
    889    // Horizontal inter-clusters RAM network DSPIN
     860   // Horizontal inter-clusters INT_CMD DSPIN
     861   DspinSignals<dspin_int_cmd_width>** signal_dspin_int_cmd_h_inc =
     862      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cmd_h_inc", XMAX-1, YMAX);
     863   DspinSignals<dspin_int_cmd_width>** signal_dspin_int_cmd_h_dec =
     864      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cmd_h_dec", XMAX-1, YMAX);
     865
     866   // Horizontal inter-clusters INT_RSP DSPIN
     867   DspinSignals<dspin_int_rsp_width>** signal_dspin_int_rsp_h_inc =
     868      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_rsp_h_inc", XMAX-1, YMAX);
     869   DspinSignals<dspin_int_rsp_width>** signal_dspin_int_rsp_h_dec =
     870      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_rsp_h_dec", XMAX-1, YMAX);
     871
     872   // Horizontal inter-clusters INT_M2P DSPIN
     873   DspinSignals<dspin_int_cmd_width>** signal_dspin_int_m2p_h_inc =
     874      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_m2p_h_inc", XMAX-1, YMAX);
     875   DspinSignals<dspin_int_cmd_width>** signal_dspin_int_m2p_h_dec =
     876      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_m2p_h_dec", XMAX-1, YMAX);
     877
     878   // Horizontal inter-clusters INT_P2M DSPIN
     879   DspinSignals<dspin_int_rsp_width>** signal_dspin_int_p2m_h_inc =
     880      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_p2m_h_inc", XMAX-1, YMAX);
     881   DspinSignals<dspin_int_rsp_width>** signal_dspin_int_p2m_h_dec =
     882      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_p2m_h_dec", XMAX-1, YMAX);
     883
     884   // Horizontal inter-clusters INT_CLA DSPIN
     885   DspinSignals<dspin_int_cmd_width>** signal_dspin_int_cla_h_inc =
     886      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cla_h_inc", XMAX-1, YMAX);
     887   DspinSignals<dspin_int_cmd_width>** signal_dspin_int_cla_h_dec =
     888      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cla_h_dec", XMAX-1, YMAX);
     889
     890
     891   // Vertical inter-clusters INT_CMD DSPIN
     892   DspinSignals<dspin_int_cmd_width>** signal_dspin_int_cmd_v_inc =
     893      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cmd_v_inc", XMAX, YMAX-1);
     894   DspinSignals<dspin_int_cmd_width>** signal_dspin_int_cmd_v_dec =
     895      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cmd_v_dec", XMAX, YMAX-1);
     896
     897   // Vertical inter-clusters INT_RSP DSPIN
     898   DspinSignals<dspin_int_rsp_width>** signal_dspin_int_rsp_v_inc =
     899      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_rsp_v_inc", XMAX, YMAX-1);
     900   DspinSignals<dspin_int_rsp_width>** signal_dspin_int_rsp_v_dec =
     901      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_rsp_v_dec", XMAX, YMAX-1);
     902
     903   // Vertical inter-clusters INT_M2P DSPIN
     904   DspinSignals<dspin_int_cmd_width>** signal_dspin_int_m2p_v_inc =
     905      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_m2p_v_inc", XMAX, YMAX-1);
     906   DspinSignals<dspin_int_cmd_width>** signal_dspin_int_m2p_v_dec =
     907      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_m2p_v_dec", XMAX, YMAX-1);
     908
     909   // Vertical inter-clusters INT_P2M DSPIN
     910   DspinSignals<dspin_int_rsp_width>** signal_dspin_int_p2m_v_inc =
     911      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_p2m_v_inc", XMAX, YMAX-1);
     912   DspinSignals<dspin_int_rsp_width>** signal_dspin_int_p2m_v_dec =
     913      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_int_p2m_v_dec", XMAX, YMAX-1);
     914
     915   // Vertical inter-clusters INT_CLA DSPIN
     916   DspinSignals<dspin_int_cmd_width>** signal_dspin_int_cla_v_inc =
     917      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cla_v_inc", XMAX, YMAX-1);
     918   DspinSignals<dspin_int_cmd_width>** signal_dspin_int_cla_v_dec =
     919      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_int_cla_v_dec", XMAX, YMAX-1);
     920
     921
     922   // Mesh boundaries INT_CMD DSPIN
     923   DspinSignals<dspin_int_cmd_width>*** signal_dspin_false_int_cmd_in =
     924      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_false_int_cmd_in", XMAX, YMAX, 4);
     925   DspinSignals<dspin_int_cmd_width>*** signal_dspin_false_int_cmd_out =
     926      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_false_int_cmd_out", XMAX, YMAX, 4);
     927
     928   // Mesh boundaries INT_RSP DSPIN
     929   DspinSignals<dspin_int_rsp_width>*** signal_dspin_false_int_rsp_in =
     930      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_false_int_rsp_in", XMAX, YMAX, 4);
     931   DspinSignals<dspin_int_rsp_width>*** signal_dspin_false_int_rsp_out =
     932      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_false_int_rsp_out", XMAX, YMAX, 4);
     933
     934   // Mesh boundaries INT_M2P DSPIN
     935   DspinSignals<dspin_int_cmd_width>*** signal_dspin_false_int_m2p_in =
     936      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_false_int_m2p_in", XMAX, YMAX, 4);
     937   DspinSignals<dspin_int_cmd_width>*** signal_dspin_false_int_m2p_out =
     938      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_false_int_m2P_out", XMAX, YMAX, 4);
     939
     940   // Mesh boundaries INT_P2M DSPIN
     941   DspinSignals<dspin_int_rsp_width>*** signal_dspin_false_int_p2m_in =
     942      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_false_int_p2m_in", XMAX, YMAX, 4);
     943   DspinSignals<dspin_int_rsp_width>*** signal_dspin_false_int_p2m_out =
     944      alloc_elems<DspinSignals<dspin_int_rsp_width> >("signal_dspin_false_int_p2m_out", XMAX, YMAX, 4);
     945
     946   // Mesh boundaries INT_CLA DSPIN
     947   DspinSignals<dspin_int_cmd_width>*** signal_dspin_false_int_cla_in =
     948      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_false_int_cla_in", XMAX, YMAX, 4);
     949   DspinSignals<dspin_int_cmd_width>*** signal_dspin_false_int_cla_out =
     950      alloc_elems<DspinSignals<dspin_int_cmd_width> >("signal_dspin_false_int_cla_out", XMAX, YMAX, 4);
     951
     952
     953   // Horizontal inter-clusters RAM_CMD DSPIN
    890954   DspinSignals<dspin_ram_cmd_width>** signal_dspin_ram_cmd_h_inc =
    891955      alloc_elems<DspinSignals<dspin_ram_cmd_width> >("signal_dspin_ram_cmd_h_inc", XMAX-1, YMAX);
    892956   DspinSignals<dspin_ram_cmd_width>** signal_dspin_ram_cmd_h_dec =
    893957      alloc_elems<DspinSignals<dspin_ram_cmd_width> >("signal_dspin_ram_cmd_h_dec", XMAX-1, YMAX);
     958
     959   // Horizontal inter-clusters RAM_RSP DSPIN
    894960   DspinSignals<dspin_ram_rsp_width>** signal_dspin_ram_rsp_h_inc =
    895961      alloc_elems<DspinSignals<dspin_ram_rsp_width> >("signal_dspin_ram_rsp_h_inc", XMAX-1, YMAX);
     
    897963      alloc_elems<DspinSignals<dspin_ram_rsp_width> >("signal_dspin_ram_rsp_h_dec", XMAX-1, YMAX);
    898964
    899    // Vertical inter-clusters RAM network DSPIN
     965   // Vertical inter-clusters RAM_CMD DSPIN
    900966   DspinSignals<dspin_ram_cmd_width>** signal_dspin_ram_cmd_v_inc =
    901967      alloc_elems<DspinSignals<dspin_ram_cmd_width> >("signal_dspin_ram_cmd_v_inc", XMAX, YMAX-1);
    902968   DspinSignals<dspin_ram_cmd_width>** signal_dspin_ram_cmd_v_dec =
    903969      alloc_elems<DspinSignals<dspin_ram_cmd_width> >("signal_dspin_ram_cmd_v_dec", XMAX, YMAX-1);
     970
     971   // Vertical inter-clusters RAM_RSP DSPIN
    904972   DspinSignals<dspin_ram_rsp_width>** signal_dspin_ram_rsp_v_inc =
    905973      alloc_elems<DspinSignals<dspin_ram_rsp_width> >("signal_dspin_ram_rsp_v_inc", XMAX, YMAX-1);
     
    907975      alloc_elems<DspinSignals<dspin_ram_rsp_width> >("signal_dspin_ram_rsp_v_dec", XMAX, YMAX-1);
    908976
    909    // Mesh boundaries RAM network DSPIN
     977   // Mesh boundaries RAM_CMD DSPIN
    910978   DspinSignals<dspin_ram_cmd_width>*** signal_dspin_false_ram_cmd_in =
    911979      alloc_elems<DspinSignals<dspin_ram_cmd_width> >("signal_dspin_false_ram_cmd_in", XMAX, YMAX, 4);
    912980   DspinSignals<dspin_ram_cmd_width>*** signal_dspin_false_ram_cmd_out =
    913981      alloc_elems<DspinSignals<dspin_ram_cmd_width> >("signal_dspin_false_ram_cmd_out", XMAX, YMAX, 4);
     982
     983   // Mesh boundaries RAM_RSP DSPIN
    914984   DspinSignals<dspin_ram_rsp_width>*** signal_dspin_false_ram_rsp_in =
    915985      alloc_elems<DspinSignals<dspin_ram_rsp_width> >("signal_dspin_false_ram_rsp_in", XMAX, YMAX, 4);
    916986   DspinSignals<dspin_ram_rsp_width>*** signal_dspin_false_ram_rsp_out =
    917987      alloc_elems<DspinSignals<dspin_ram_rsp_width> >("signal_dspin_false_ram_rsp_out", XMAX, YMAX, 4);
     988
     989   // SD card signals
     990   sc_signal<bool>   signal_sdc_clk;
     991   sc_signal<bool>   signal_sdc_cmd_enable_to_card;
     992   sc_signal<bool>   signal_sdc_cmd_value_to_card;
     993   sc_signal<bool>   signal_sdc_dat_enable_to_card;
     994   sc_signal<bool>   signal_sdc_dat_value_to_card[4];
     995   sc_signal<bool>   signal_sdc_cmd_enable_from_card;
     996   sc_signal<bool>   signal_sdc_cmd_value_from_card;
     997   sc_signal<bool>   signal_sdc_dat_enable_from_card;
     998   sc_signal<bool>   signal_sdc_dat_value_from_card[4];
    918999
    9191000    ////////////////////////////
     
    9851066                                            64,         // burst size (bytes)
    9861067                                            0 );        // disk latency
    987 #elif ( USE_IOC_BDV or USE_IOC_SDC )
     1068#elif ( USE_IOC_BDV )
    9881069
    9891070    VciBlockDeviceTsar<vci_param_ext>*  disk;
     
    9961077                                                  64,         // burst size (bytes)
    9971078                                                  0 );        // disk latency
     1079#elif ( USE_IOC_SDC )
     1080
     1081    VciAhciSdc<vci_param_ext>*  disk;
     1082    disk = new VciAhciSdc<vci_param_ext>( "disk",
     1083                                          maptab_iox,
     1084                                          IntTab(0, DISK_LOCAL_SRCID),
     1085                                          IntTab(0, IOX_DISK_TGT_ID),
     1086                                          64 );       // burst size (bytes)
     1087    SdCard* card;
     1088    card = new SdCard( "card",
     1089                       disk_name,
     1090                       10,         // RX one block latency
     1091                       10 );       // TX one block latency
    9981092#endif
    9991093
     
    11751269
    11761270    // DISK connexion
     1271
     1272#if ( USE_IOC_HBA )
     1273
    11771274    disk->p_clk                                          (signal_clk);
    11781275    disk->p_resetn                                       (signal_resetn);
    11791276    disk->p_vci_target                                   (signal_vci_tgt_disk);
    11801277    disk->p_vci_initiator                                (signal_vci_ini_disk);
    1181 #if ( USE_IOC_HBA )
    11821278    disk->p_channel_irq[0]                               (signal_irq_disk);
    1183 #else
     1279
     1280#elif ( USE_IOC_BDV )
     1281
     1282    disk->p_clk                                          (signal_clk);
     1283    disk->p_resetn                                       (signal_resetn);
     1284    disk->p_vci_target                                   (signal_vci_tgt_disk);
     1285    disk->p_vci_initiator                                (signal_vci_ini_disk);
    11841286    disk->p_irq                                          (signal_irq_disk);
     1287
     1288#elif ( USE_IOC_SDC )
     1289
     1290    disk->p_clk                                          (signal_clk);
     1291    disk->p_resetn                                       (signal_resetn);
     1292    disk->p_vci_target                                   (signal_vci_tgt_disk);
     1293    disk->p_vci_initiator                                (signal_vci_ini_disk);
     1294    disk->p_irq                                          (signal_irq_disk);
     1295
     1296    disk->p_sdc_clk                                      (signal_sdc_clk);
     1297    disk->p_sdc_cmd_enable_out                           (signal_sdc_cmd_enable_to_card);
     1298    disk->p_sdc_cmd_value_out                            (signal_sdc_cmd_value_to_card);
     1299    disk->p_sdc_cmd_enable_in                            (signal_sdc_cmd_enable_from_card);
     1300    disk->p_sdc_cmd_value_in                             (signal_sdc_cmd_value_from_card);
     1301    disk->p_sdc_dat_enable_out                           (signal_sdc_dat_enable_to_card);
     1302    disk->p_sdc_dat_value_out[0]                         (signal_sdc_dat_value_to_card[0]);
     1303    disk->p_sdc_dat_value_out[1]                         (signal_sdc_dat_value_to_card[1]);
     1304    disk->p_sdc_dat_value_out[2]                         (signal_sdc_dat_value_to_card[2]);
     1305    disk->p_sdc_dat_value_out[3]                         (signal_sdc_dat_value_to_card[3]);
     1306    disk->p_sdc_dat_enable_in                            (signal_sdc_dat_enable_from_card);
     1307    disk->p_sdc_dat_value_in[0]                          (signal_sdc_dat_value_from_card[0]);
     1308    disk->p_sdc_dat_value_in[1]                          (signal_sdc_dat_value_from_card[1]);
     1309    disk->p_sdc_dat_value_in[2]                          (signal_sdc_dat_value_from_card[2]);
     1310    disk->p_sdc_dat_value_in[3]                          (signal_sdc_dat_value_from_card[3]);
     1311   
     1312    card->p_clk                                          (signal_clk);
     1313    card->p_resetn                                       (signal_resetn);
     1314
     1315    card->p_sdc_clk                                      (signal_sdc_clk);
     1316    card->p_sdc_cmd_enable_out                           (signal_sdc_cmd_enable_from_card);
     1317    card->p_sdc_cmd_value_out                            (signal_sdc_cmd_value_from_card);
     1318    card->p_sdc_cmd_enable_in                            (signal_sdc_cmd_enable_to_card);
     1319    card->p_sdc_cmd_value_in                             (signal_sdc_cmd_value_to_card);
     1320    card->p_sdc_dat_enable_out                           (signal_sdc_dat_enable_from_card);
     1321    card->p_sdc_dat_value_out[0]                         (signal_sdc_dat_value_from_card[0]);
     1322    card->p_sdc_dat_value_out[1]                         (signal_sdc_dat_value_from_card[1]);
     1323    card->p_sdc_dat_value_out[2]                         (signal_sdc_dat_value_from_card[2]);
     1324    card->p_sdc_dat_value_out[3]                         (signal_sdc_dat_value_from_card[3]);
     1325    card->p_sdc_dat_enable_in                            (signal_sdc_dat_enable_to_card);
     1326    card->p_sdc_dat_value_in[0]                          (signal_sdc_dat_value_to_card[0]);
     1327    card->p_sdc_dat_value_in[1]                          (signal_sdc_dat_value_to_card[1]);
     1328    card->p_sdc_dat_value_in[2]                          (signal_sdc_dat_value_to_card[2]);
     1329    card->p_sdc_dat_value_in[3]                          (signal_sdc_dat_value_to_card[3]);
     1330   
    11851331#endif
    11861332
     
    12861432         for (size_t y = 0; y < YMAX; y++)
    12871433         {
    1288             for (size_t k = 0; k < 3; k++)
    1289             {
    1290                clusters[x][y]->p_dspin_int_cmd_out[EAST][k]      (signal_dspin_int_cmd_h_inc[x][y][k]);
    1291                clusters[x+1][y]->p_dspin_int_cmd_in[WEST][k]     (signal_dspin_int_cmd_h_inc[x][y][k]);
    1292                clusters[x][y]->p_dspin_int_cmd_in[EAST][k]       (signal_dspin_int_cmd_h_dec[x][y][k]);
    1293                clusters[x+1][y]->p_dspin_int_cmd_out[WEST][k]    (signal_dspin_int_cmd_h_dec[x][y][k]);
    1294             }
    1295 
    1296             for (size_t k = 0; k < 2; k++)
    1297             {
    1298                clusters[x][y]->p_dspin_int_rsp_out[EAST][k]      (signal_dspin_int_rsp_h_inc[x][y][k]);
    1299                clusters[x+1][y]->p_dspin_int_rsp_in[WEST][k]     (signal_dspin_int_rsp_h_inc[x][y][k]);
    1300                clusters[x][y]->p_dspin_int_rsp_in[EAST][k]       (signal_dspin_int_rsp_h_dec[x][y][k]);
    1301                clusters[x+1][y]->p_dspin_int_rsp_out[WEST][k]    (signal_dspin_int_rsp_h_dec[x][y][k]);
    1302             }
     1434            clusters[x][y]->p_dspin_int_cmd_out[EAST]      (signal_dspin_int_cmd_h_inc[x][y]);
     1435            clusters[x+1][y]->p_dspin_int_cmd_in[WEST]     (signal_dspin_int_cmd_h_inc[x][y]);
     1436            clusters[x][y]->p_dspin_int_cmd_in[EAST]       (signal_dspin_int_cmd_h_dec[x][y]);
     1437            clusters[x+1][y]->p_dspin_int_cmd_out[WEST]    (signal_dspin_int_cmd_h_dec[x][y]);
     1438
     1439            clusters[x][y]->p_dspin_int_rsp_out[EAST]      (signal_dspin_int_rsp_h_inc[x][y]);
     1440            clusters[x+1][y]->p_dspin_int_rsp_in[WEST]     (signal_dspin_int_rsp_h_inc[x][y]);
     1441            clusters[x][y]->p_dspin_int_rsp_in[EAST]       (signal_dspin_int_rsp_h_dec[x][y]);
     1442            clusters[x+1][y]->p_dspin_int_rsp_out[WEST]    (signal_dspin_int_rsp_h_dec[x][y]);
     1443
     1444            clusters[x][y]->p_dspin_int_m2p_out[EAST]      (signal_dspin_int_m2p_h_inc[x][y]);
     1445            clusters[x+1][y]->p_dspin_int_m2p_in[WEST]     (signal_dspin_int_m2p_h_inc[x][y]);
     1446            clusters[x][y]->p_dspin_int_m2p_in[EAST]       (signal_dspin_int_m2p_h_dec[x][y]);
     1447            clusters[x+1][y]->p_dspin_int_m2p_out[WEST]    (signal_dspin_int_m2p_h_dec[x][y]);
     1448
     1449            clusters[x][y]->p_dspin_int_p2m_out[EAST]      (signal_dspin_int_p2m_h_inc[x][y]);
     1450            clusters[x+1][y]->p_dspin_int_p2m_in[WEST]     (signal_dspin_int_p2m_h_inc[x][y]);
     1451            clusters[x][y]->p_dspin_int_p2m_in[EAST]       (signal_dspin_int_p2m_h_dec[x][y]);
     1452            clusters[x+1][y]->p_dspin_int_p2m_out[WEST]    (signal_dspin_int_p2m_h_dec[x][y]);
     1453
     1454            clusters[x][y]->p_dspin_int_cla_out[EAST]      (signal_dspin_int_cla_h_inc[x][y]);
     1455            clusters[x+1][y]->p_dspin_int_cla_in[WEST]     (signal_dspin_int_cla_h_inc[x][y]);
     1456            clusters[x][y]->p_dspin_int_cla_in[EAST]       (signal_dspin_int_cla_h_dec[x][y]);
     1457            clusters[x+1][y]->p_dspin_int_cla_out[WEST]    (signal_dspin_int_cla_h_dec[x][y]);
    13031458
    13041459            clusters[x][y]->p_dspin_ram_cmd_out[EAST]      (signal_dspin_ram_cmd_h_inc[x][y]);
     
    13061461            clusters[x][y]->p_dspin_ram_cmd_in[EAST]       (signal_dspin_ram_cmd_h_dec[x][y]);
    13071462            clusters[x+1][y]->p_dspin_ram_cmd_out[WEST]    (signal_dspin_ram_cmd_h_dec[x][y]);
     1463
    13081464            clusters[x][y]->p_dspin_ram_rsp_out[EAST]      (signal_dspin_ram_rsp_h_inc[x][y]);
    13091465            clusters[x+1][y]->p_dspin_ram_rsp_in[WEST]     (signal_dspin_ram_rsp_h_inc[x][y]);
     
    13231479         for (size_t x = 0; x < XMAX; x++)
    13241480         {
    1325             for (size_t k = 0; k < 3; k++)
    1326             {
    1327                clusters[x][y]->p_dspin_int_cmd_out[NORTH][k]     (signal_dspin_int_cmd_v_inc[x][y][k]);
    1328                clusters[x][y+1]->p_dspin_int_cmd_in[SOUTH][k]    (signal_dspin_int_cmd_v_inc[x][y][k]);
    1329                clusters[x][y]->p_dspin_int_cmd_in[NORTH][k]      (signal_dspin_int_cmd_v_dec[x][y][k]);
    1330                clusters[x][y+1]->p_dspin_int_cmd_out[SOUTH][k]   (signal_dspin_int_cmd_v_dec[x][y][k]);
    1331             }
    1332 
    1333             for (size_t k = 0; k < 2; k++)
    1334             {
    1335                clusters[x][y]->p_dspin_int_rsp_out[NORTH][k]     (signal_dspin_int_rsp_v_inc[x][y][k]);
    1336                clusters[x][y+1]->p_dspin_int_rsp_in[SOUTH][k]    (signal_dspin_int_rsp_v_inc[x][y][k]);
    1337                clusters[x][y]->p_dspin_int_rsp_in[NORTH][k]      (signal_dspin_int_rsp_v_dec[x][y][k]);
    1338                clusters[x][y+1]->p_dspin_int_rsp_out[SOUTH][k]   (signal_dspin_int_rsp_v_dec[x][y][k]);
    1339             }
     1481            clusters[x][y]->p_dspin_int_cmd_out[NORTH]     (signal_dspin_int_cmd_v_inc[x][y]);
     1482            clusters[x][y+1]->p_dspin_int_cmd_in[SOUTH]    (signal_dspin_int_cmd_v_inc[x][y]);
     1483            clusters[x][y]->p_dspin_int_cmd_in[NORTH]      (signal_dspin_int_cmd_v_dec[x][y]);
     1484            clusters[x][y+1]->p_dspin_int_cmd_out[SOUTH]   (signal_dspin_int_cmd_v_dec[x][y]);
     1485
     1486            clusters[x][y]->p_dspin_int_rsp_out[NORTH]     (signal_dspin_int_rsp_v_inc[x][y]);
     1487            clusters[x][y+1]->p_dspin_int_rsp_in[SOUTH]    (signal_dspin_int_rsp_v_inc[x][y]);
     1488            clusters[x][y]->p_dspin_int_rsp_in[NORTH]      (signal_dspin_int_rsp_v_dec[x][y]);
     1489            clusters[x][y+1]->p_dspin_int_rsp_out[SOUTH]   (signal_dspin_int_rsp_v_dec[x][y]);
     1490
     1491            clusters[x][y]->p_dspin_int_m2p_out[NORTH]     (signal_dspin_int_m2p_v_inc[x][y]);
     1492            clusters[x][y+1]->p_dspin_int_m2p_in[SOUTH]    (signal_dspin_int_m2p_v_inc[x][y]);
     1493            clusters[x][y]->p_dspin_int_m2p_in[NORTH]      (signal_dspin_int_m2p_v_dec[x][y]);
     1494            clusters[x][y+1]->p_dspin_int_m2p_out[SOUTH]   (signal_dspin_int_m2p_v_dec[x][y]);
     1495
     1496            clusters[x][y]->p_dspin_int_p2m_out[NORTH]     (signal_dspin_int_p2m_v_inc[x][y]);
     1497            clusters[x][y+1]->p_dspin_int_p2m_in[SOUTH]    (signal_dspin_int_p2m_v_inc[x][y]);
     1498            clusters[x][y]->p_dspin_int_p2m_in[NORTH]      (signal_dspin_int_p2m_v_dec[x][y]);
     1499            clusters[x][y+1]->p_dspin_int_p2m_out[SOUTH]   (signal_dspin_int_p2m_v_dec[x][y]);
     1500
     1501            clusters[x][y]->p_dspin_int_cla_out[NORTH]     (signal_dspin_int_cla_v_inc[x][y]);
     1502            clusters[x][y+1]->p_dspin_int_cla_in[SOUTH]    (signal_dspin_int_cla_v_inc[x][y]);
     1503            clusters[x][y]->p_dspin_int_cla_in[NORTH]      (signal_dspin_int_cla_v_dec[x][y]);
     1504            clusters[x][y+1]->p_dspin_int_cla_out[SOUTH]   (signal_dspin_int_cla_v_dec[x][y]);
    13401505
    13411506            clusters[x][y]->p_dspin_ram_cmd_out[NORTH]     (signal_dspin_ram_cmd_v_inc[x][y]);
     
    13431508            clusters[x][y]->p_dspin_ram_cmd_in[NORTH]      (signal_dspin_ram_cmd_v_dec[x][y]);
    13441509            clusters[x][y+1]->p_dspin_ram_cmd_out[SOUTH]   (signal_dspin_ram_cmd_v_dec[x][y]);
     1510
    13451511            clusters[x][y]->p_dspin_ram_rsp_out[NORTH]     (signal_dspin_ram_rsp_v_inc[x][y]);
    13461512            clusters[x][y+1]->p_dspin_ram_rsp_in[SOUTH]    (signal_dspin_ram_rsp_v_inc[x][y]);
     
    13561522   for (size_t y = 0; y < YMAX; y++)
    13571523   {
    1358       for (size_t k = 0; k < 3; k++)
    1359       {
    1360          clusters[0][y]->p_dspin_int_cmd_in[WEST][k]          (signal_dspin_false_int_cmd_in[0][y][WEST][k]);
    1361          clusters[0][y]->p_dspin_int_cmd_out[WEST][k]         (signal_dspin_false_int_cmd_out[0][y][WEST][k]);
    1362          clusters[XMAX-1][y]->p_dspin_int_cmd_in[EAST][k]     (signal_dspin_false_int_cmd_in[XMAX-1][y][EAST][k]);
    1363          clusters[XMAX-1][y]->p_dspin_int_cmd_out[EAST][k]    (signal_dspin_false_int_cmd_out[XMAX-1][y][EAST][k]);
    1364       }
    1365 
    1366       for (size_t k = 0; k < 2; k++)
    1367       {
    1368          clusters[0][y]->p_dspin_int_rsp_in[WEST][k]          (signal_dspin_false_int_rsp_in[0][y][WEST][k]);
    1369          clusters[0][y]->p_dspin_int_rsp_out[WEST][k]         (signal_dspin_false_int_rsp_out[0][y][WEST][k]);
    1370          clusters[XMAX-1][y]->p_dspin_int_rsp_in[EAST][k]     (signal_dspin_false_int_rsp_in[XMAX-1][y][EAST][k]);
    1371          clusters[XMAX-1][y]->p_dspin_int_rsp_out[EAST][k]    (signal_dspin_false_int_rsp_out[XMAX-1][y][EAST][k]);
    1372       }
    1373 
    1374      clusters[0][y]->p_dspin_ram_cmd_in[WEST]       (signal_dspin_false_ram_cmd_in[0][y][WEST]);
    1375      clusters[0][y]->p_dspin_ram_cmd_out[WEST]      (signal_dspin_false_ram_cmd_out[0][y][WEST]);
    1376      clusters[0][y]->p_dspin_ram_rsp_in[WEST]       (signal_dspin_false_ram_rsp_in[0][y][WEST]);
    1377      clusters[0][y]->p_dspin_ram_rsp_out[WEST]      (signal_dspin_false_ram_rsp_out[0][y][WEST]);
    1378 
    1379      clusters[XMAX-1][y]->p_dspin_ram_cmd_in[EAST]  (signal_dspin_false_ram_cmd_in[XMAX-1][y][EAST]);
    1380      clusters[XMAX-1][y]->p_dspin_ram_cmd_out[EAST] (signal_dspin_false_ram_cmd_out[XMAX-1][y][EAST]);
    1381      clusters[XMAX-1][y]->p_dspin_ram_rsp_in[EAST]  (signal_dspin_false_ram_rsp_in[XMAX-1][y][EAST]);
    1382      clusters[XMAX-1][y]->p_dspin_ram_rsp_out[EAST] (signal_dspin_false_ram_rsp_out[XMAX-1][y][EAST]);
     1524      clusters[0][y]->p_dspin_int_cmd_in[WEST]         (signal_dspin_false_int_cmd_in[0][y][WEST]);
     1525      clusters[0][y]->p_dspin_int_cmd_out[WEST]        (signal_dspin_false_int_cmd_out[0][y][WEST]);
     1526      clusters[XMAX-1][y]->p_dspin_int_cmd_in[EAST]    (signal_dspin_false_int_cmd_in[XMAX-1][y][EAST]);
     1527      clusters[XMAX-1][y]->p_dspin_int_cmd_out[EAST]   (signal_dspin_false_int_cmd_out[XMAX-1][y][EAST]);
     1528
     1529      clusters[0][y]->p_dspin_int_rsp_in[WEST]         (signal_dspin_false_int_rsp_in[0][y][WEST]);
     1530      clusters[0][y]->p_dspin_int_rsp_out[WEST]        (signal_dspin_false_int_rsp_out[0][y][WEST]);
     1531      clusters[XMAX-1][y]->p_dspin_int_rsp_in[EAST]    (signal_dspin_false_int_rsp_in[XMAX-1][y][EAST]);
     1532      clusters[XMAX-1][y]->p_dspin_int_rsp_out[EAST]   (signal_dspin_false_int_rsp_out[XMAX-1][y][EAST]);
     1533
     1534      clusters[0][y]->p_dspin_int_m2p_in[WEST]         (signal_dspin_false_int_m2p_in[0][y][WEST]);
     1535      clusters[0][y]->p_dspin_int_m2p_out[WEST]        (signal_dspin_false_int_m2p_out[0][y][WEST]);
     1536      clusters[XMAX-1][y]->p_dspin_int_m2p_in[EAST]    (signal_dspin_false_int_m2p_in[XMAX-1][y][EAST]);
     1537      clusters[XMAX-1][y]->p_dspin_int_m2p_out[EAST]   (signal_dspin_false_int_m2p_out[XMAX-1][y][EAST]);
     1538
     1539      clusters[0][y]->p_dspin_int_p2m_in[WEST]         (signal_dspin_false_int_p2m_in[0][y][WEST]);
     1540      clusters[0][y]->p_dspin_int_p2m_out[WEST]        (signal_dspin_false_int_p2m_out[0][y][WEST]);
     1541      clusters[XMAX-1][y]->p_dspin_int_p2m_in[EAST]    (signal_dspin_false_int_p2m_in[XMAX-1][y][EAST]);
     1542      clusters[XMAX-1][y]->p_dspin_int_p2m_out[EAST]   (signal_dspin_false_int_p2m_out[XMAX-1][y][EAST]);
     1543
     1544      clusters[0][y]->p_dspin_int_cla_in[WEST]         (signal_dspin_false_int_cla_in[0][y][WEST]);
     1545      clusters[0][y]->p_dspin_int_cla_out[WEST]        (signal_dspin_false_int_cla_out[0][y][WEST]);
     1546      clusters[XMAX-1][y]->p_dspin_int_cla_in[EAST]    (signal_dspin_false_int_cla_in[XMAX-1][y][EAST]);
     1547      clusters[XMAX-1][y]->p_dspin_int_cla_out[EAST]   (signal_dspin_false_int_cla_out[XMAX-1][y][EAST]);
     1548
     1549      clusters[0][y]->p_dspin_ram_cmd_in[WEST]         (signal_dspin_false_ram_cmd_in[0][y][WEST]);
     1550      clusters[0][y]->p_dspin_ram_cmd_out[WEST]        (signal_dspin_false_ram_cmd_out[0][y][WEST]);
     1551      clusters[XMAX-1][y]->p_dspin_ram_cmd_in[EAST]    (signal_dspin_false_ram_cmd_in[XMAX-1][y][EAST]);
     1552      clusters[XMAX-1][y]->p_dspin_ram_cmd_out[EAST]   (signal_dspin_false_ram_cmd_out[XMAX-1][y][EAST]);
     1553
     1554      clusters[0][y]->p_dspin_ram_rsp_in[WEST]         (signal_dspin_false_ram_rsp_in[0][y][WEST]);
     1555      clusters[0][y]->p_dspin_ram_rsp_out[WEST]        (signal_dspin_false_ram_rsp_out[0][y][WEST]);
     1556      clusters[XMAX-1][y]->p_dspin_ram_rsp_in[EAST]    (signal_dspin_false_ram_rsp_in[XMAX-1][y][EAST]);
     1557      clusters[XMAX-1][y]->p_dspin_ram_rsp_out[EAST]   (signal_dspin_false_ram_rsp_out[XMAX-1][y][EAST]);
    13831558   }
    13841559
     
    13881563   for (size_t x = 0; x < XMAX; x++)
    13891564   {
    1390       for (size_t k = 0; k < 3; k++)
    1391       {
    1392          clusters[x][0]->p_dspin_int_cmd_in[SOUTH][k]         (signal_dspin_false_int_cmd_in[x][0][SOUTH][k]);
    1393          clusters[x][0]->p_dspin_int_cmd_out[SOUTH][k]        (signal_dspin_false_int_cmd_out[x][0][SOUTH][k]);
    1394          clusters[x][YMAX-1]->p_dspin_int_cmd_in[NORTH][k]    (signal_dspin_false_int_cmd_in[x][YMAX-1][NORTH][k]);
    1395          clusters[x][YMAX-1]->p_dspin_int_cmd_out[NORTH][k]   (signal_dspin_false_int_cmd_out[x][YMAX-1][NORTH][k]);
    1396       }
    1397 
    1398       for (size_t k = 0; k < 2; k++)
    1399       {
    1400          clusters[x][0]->p_dspin_int_rsp_in[SOUTH][k]         (signal_dspin_false_int_rsp_in[x][0][SOUTH][k]);
    1401          clusters[x][0]->p_dspin_int_rsp_out[SOUTH][k]        (signal_dspin_false_int_rsp_out[x][0][SOUTH][k]);
    1402          clusters[x][YMAX-1]->p_dspin_int_rsp_in[NORTH][k]    (signal_dspin_false_int_rsp_in[x][YMAX-1][NORTH][k]);
    1403          clusters[x][YMAX-1]->p_dspin_int_rsp_out[NORTH][k]   (signal_dspin_false_int_rsp_out[x][YMAX-1][NORTH][k]);
    1404       }
    1405 
    1406       clusters[x][0]->p_dspin_ram_cmd_in[SOUTH]       (signal_dspin_false_ram_cmd_in[x][0][SOUTH]);
    1407       clusters[x][0]->p_dspin_ram_cmd_out[SOUTH]      (signal_dspin_false_ram_cmd_out[x][0][SOUTH]);
    1408       clusters[x][0]->p_dspin_ram_rsp_in[SOUTH]       (signal_dspin_false_ram_rsp_in[x][0][SOUTH]);
    1409       clusters[x][0]->p_dspin_ram_rsp_out[SOUTH]      (signal_dspin_false_ram_rsp_out[x][0][SOUTH]);
    1410 
    1411       clusters[x][YMAX-1]->p_dspin_ram_cmd_in[NORTH]  (signal_dspin_false_ram_cmd_in[x][YMAX-1][NORTH]);
    1412       clusters[x][YMAX-1]->p_dspin_ram_cmd_out[NORTH] (signal_dspin_false_ram_cmd_out[x][YMAX-1][NORTH]);
    1413       clusters[x][YMAX-1]->p_dspin_ram_rsp_in[NORTH]  (signal_dspin_false_ram_rsp_in[x][YMAX-1][NORTH]);
    1414       clusters[x][YMAX-1]->p_dspin_ram_rsp_out[NORTH] (signal_dspin_false_ram_rsp_out[x][YMAX-1][NORTH]);
     1565      clusters[x][0]->p_dspin_int_cmd_in[SOUTH]        (signal_dspin_false_int_cmd_in[x][0][SOUTH]);
     1566      clusters[x][0]->p_dspin_int_cmd_out[SOUTH]       (signal_dspin_false_int_cmd_out[x][0][SOUTH]);
     1567      clusters[x][YMAX-1]->p_dspin_int_cmd_in[NORTH]   (signal_dspin_false_int_cmd_in[x][YMAX-1][NORTH]);
     1568      clusters[x][YMAX-1]->p_dspin_int_cmd_out[NORTH]  (signal_dspin_false_int_cmd_out[x][YMAX-1][NORTH]);
     1569
     1570      clusters[x][0]->p_dspin_int_rsp_in[SOUTH]        (signal_dspin_false_int_rsp_in[x][0][SOUTH]);
     1571      clusters[x][0]->p_dspin_int_rsp_out[SOUTH]       (signal_dspin_false_int_rsp_out[x][0][SOUTH]);
     1572      clusters[x][YMAX-1]->p_dspin_int_rsp_in[NORTH]   (signal_dspin_false_int_rsp_in[x][YMAX-1][NORTH]);
     1573      clusters[x][YMAX-1]->p_dspin_int_rsp_out[NORTH]  (signal_dspin_false_int_rsp_out[x][YMAX-1][NORTH]);
     1574
     1575      clusters[x][0]->p_dspin_int_m2p_in[SOUTH]        (signal_dspin_false_int_m2p_in[x][0][SOUTH]);
     1576      clusters[x][0]->p_dspin_int_m2p_out[SOUTH]       (signal_dspin_false_int_m2p_out[x][0][SOUTH]);
     1577      clusters[x][YMAX-1]->p_dspin_int_m2p_in[NORTH]   (signal_dspin_false_int_m2p_in[x][YMAX-1][NORTH]);
     1578      clusters[x][YMAX-1]->p_dspin_int_m2p_out[NORTH]  (signal_dspin_false_int_m2p_out[x][YMAX-1][NORTH]);
     1579
     1580      clusters[x][0]->p_dspin_int_p2m_in[SOUTH]        (signal_dspin_false_int_p2m_in[x][0][SOUTH]);
     1581      clusters[x][0]->p_dspin_int_p2m_out[SOUTH]       (signal_dspin_false_int_p2m_out[x][0][SOUTH]);
     1582      clusters[x][YMAX-1]->p_dspin_int_p2m_in[NORTH]   (signal_dspin_false_int_p2m_in[x][YMAX-1][NORTH]);
     1583      clusters[x][YMAX-1]->p_dspin_int_p2m_out[NORTH]  (signal_dspin_false_int_p2m_out[x][YMAX-1][NORTH]);
     1584
     1585      clusters[x][0]->p_dspin_int_cla_in[SOUTH]        (signal_dspin_false_int_cla_in[x][0][SOUTH]);
     1586      clusters[x][0]->p_dspin_int_cla_out[SOUTH]       (signal_dspin_false_int_cla_out[x][0][SOUTH]);
     1587      clusters[x][YMAX-1]->p_dspin_int_cla_in[NORTH]   (signal_dspin_false_int_cla_in[x][YMAX-1][NORTH]);
     1588      clusters[x][YMAX-1]->p_dspin_int_cla_out[NORTH]  (signal_dspin_false_int_cla_out[x][YMAX-1][NORTH]);
     1589
     1590      clusters[x][0]->p_dspin_ram_cmd_in[SOUTH]        (signal_dspin_false_ram_cmd_in[x][0][SOUTH]);
     1591      clusters[x][0]->p_dspin_ram_cmd_out[SOUTH]       (signal_dspin_false_ram_cmd_out[x][0][SOUTH]);
     1592      clusters[x][YMAX-1]->p_dspin_ram_cmd_in[NORTH]   (signal_dspin_false_ram_cmd_in[x][YMAX-1][NORTH]);
     1593      clusters[x][YMAX-1]->p_dspin_ram_cmd_out[NORTH]  (signal_dspin_false_ram_cmd_out[x][YMAX-1][NORTH]);
     1594
     1595      clusters[x][0]->p_dspin_ram_rsp_in[SOUTH]        (signal_dspin_false_ram_rsp_in[x][0][SOUTH]);
     1596      clusters[x][0]->p_dspin_ram_rsp_out[SOUTH]       (signal_dspin_false_ram_rsp_out[x][0][SOUTH]);
     1597      clusters[x][YMAX-1]->p_dspin_ram_rsp_in[NORTH]   (signal_dspin_false_ram_rsp_in[x][YMAX-1][NORTH]);
     1598      clusters[x][YMAX-1]->p_dspin_ram_rsp_out[NORTH]  (signal_dspin_false_ram_rsp_out[x][YMAX-1][NORTH]);
    14151599   }
    14161600
     
    14331617         for (size_t a = 0; a < 4; a++)
    14341618         {
    1435             for (size_t k = 0; k < 3; k++)
    1436             {
    1437                signal_dspin_false_int_cmd_in[x][y][a][k].write = false;
    1438                signal_dspin_false_int_cmd_in[x][y][a][k].read = true;
    1439                signal_dspin_false_int_cmd_out[x][y][a][k].write = false;
    1440                signal_dspin_false_int_cmd_out[x][y][a][k].read = true;
    1441             }
    1442 
    1443             for (size_t k = 0; k < 2; k++)
    1444             {
    1445                signal_dspin_false_int_rsp_in[x][y][a][k].write = false;
    1446                signal_dspin_false_int_rsp_in[x][y][a][k].read = true;
    1447                signal_dspin_false_int_rsp_out[x][y][a][k].write = false;
    1448                signal_dspin_false_int_rsp_out[x][y][a][k].read = true;
    1449             }
     1619            signal_dspin_false_int_cmd_in[x][y][a].write = false;
     1620            signal_dspin_false_int_cmd_in[x][y][a].read = true;
     1621            signal_dspin_false_int_cmd_out[x][y][a].write = false;
     1622            signal_dspin_false_int_cmd_out[x][y][a].read = true;
     1623
     1624            signal_dspin_false_int_rsp_in[x][y][a].write = false;
     1625            signal_dspin_false_int_rsp_in[x][y][a].read = true;
     1626            signal_dspin_false_int_rsp_out[x][y][a].write = false;
     1627            signal_dspin_false_int_rsp_out[x][y][a].read = true;
     1628
     1629            signal_dspin_false_int_m2p_in[x][y][a].write = false;
     1630            signal_dspin_false_int_m2p_in[x][y][a].read = true;
     1631            signal_dspin_false_int_m2p_out[x][y][a].write = false;
     1632            signal_dspin_false_int_m2p_out[x][y][a].read = true;
     1633
     1634            signal_dspin_false_int_p2m_in[x][y][a].write = false;
     1635            signal_dspin_false_int_p2m_in[x][y][a].read = true;
     1636            signal_dspin_false_int_p2m_out[x][y][a].write = false;
     1637            signal_dspin_false_int_p2m_out[x][y][a].read = true;
     1638
     1639            signal_dspin_false_int_cla_in[x][y][a].write = false;
     1640            signal_dspin_false_int_cla_in[x][y][a].read = true;
     1641            signal_dspin_false_int_cla_out[x][y][a].write = false;
     1642            signal_dspin_false_int_cla_out[x][y][a].read = true;
    14501643
    14511644            signal_dspin_false_ram_cmd_in[x][y][a].write = false;
     
    14931686        // clusters[0][0]->proc[0]->cache_monitor(0x800080ULL);
    14941687
    1495         // Monitor a specific address for one L2 cache
    1496         // clusters[0][0]->memc->cache_monitor( 0x800080ULL, false );   // full line
     1688        // Monitor a specific address for one L2 cache (single word if second argument true)
     1689        // clusters[0][0]->memc->cache_monitor( 0x00FF8000ULL, false );
    14971690
    14981691        // Monitor a specific address for one XRAM
     
    15231716
    15241717                // coprocessor in cluster(x,y)
    1525                 clusters[x][y]->mwmr->print_trace();
    1526                 std::ostringstream mwmr_tgt_signame;
    1527                 mwmr_tgt_signame << "[SIG]MWMR_TGT_" << x << "_" << y;
    1528                 clusters[x][y]->signal_int_vci_tgt_mwmr.print_trace(mwmr_tgt_signame.str());
    1529                 std::ostringstream mwmr_ini_signame;
    1530                 mwmr_ini_signame << "[SIG]MWMR_INI_" << x << "_" << y;
    1531                 clusters[x][y]->signal_int_vci_ini_mwmr.print_trace(mwmr_ini_signame.str());
    1532                 if ( USE_MWR_CPY ) clusters[x][y]->cpy->print_trace();
    1533                 if ( USE_MWR_DCT ) clusters[x][y]->dct->print_trace();
    1534                 if ( USE_MWR_GCD ) clusters[x][y]->gcd->print_trace();
     1718//              clusters[x][y]->mwmr->print_trace();
     1719//              std::ostringstream mwmr_tgt_signame;
     1720//              mwmr_tgt_signame << "[SIG]MWMR_TGT_" << x << "_" << y;
     1721//              clusters[x][y]->signal_int_vci_tgt_mwmr.print_trace(mwmr_tgt_signame.str());
     1722//              std::ostringstream mwmr_ini_signame;
     1723//              mwmr_ini_signame << "[SIG]MWMR_INI_" << x << "_" << y;
     1724//              clusters[x][y]->signal_int_vci_ini_mwmr.print_trace(mwmr_ini_signame.str());
     1725//              if ( USE_MWR_CPY ) clusters[x][y]->cpy->print_trace();
     1726//              if ( USE_MWR_DCT ) clusters[x][y]->dct->print_trace();
     1727//              if ( USE_MWR_GCD ) clusters[x][y]->gcd->print_trace();
    15351728
    15361729                // local interrupts in cluster(x,y)
     
    15971790//              signal_vci_tgt_iob0.print_trace("[SIG]IOB0_IOX_TGT");
    15981791
    1599                 cdma->print_trace();
    1600                 signal_vci_tgt_cdma.print_trace("[SIG]CDMA_TGT");
    1601                 signal_vci_ini_cdma.print_trace("[SIG]CDMA_INI");
     1792//              cdma->print_trace();
     1793//              signal_vci_tgt_cdma.print_trace("[SIG]CDMA_TGT");
     1794//              signal_vci_ini_cdma.print_trace("[SIG]CDMA_INI");
    16021795
    16031796//              brom->print_trace();
     
    16071800//              signal_vci_tgt_mtty.print_trace("[SIG]MTTY_TGT");
    16081801
    1609 //              disk->print_trace();
    1610 //              signal_vci_tgt_disk.print_trace("[SIG]DISK_TGT");
    1611 //              signal_vci_ini_disk.print_trace("[SIG]DISK_INI");
    1612 
    1613                 mnic->print_trace( 0x000 );
    1614                 signal_vci_tgt_mnic.print_trace("[SIG]MNIC_TGT");
     1802                disk->print_trace();
     1803                signal_vci_tgt_disk.print_trace("[SIG]DISK_TGT");
     1804                signal_vci_ini_disk.print_trace("[SIG]DISK_INI");
     1805
     1806#if ( USE_IOC_SDC )
     1807                card->print_trace();
     1808#endif
     1809
     1810//              mnic->print_trace( 0x000 );
     1811//              signal_vci_tgt_mnic.print_trace("[SIG]MNIC_TGT");
    16151812
    16161813//              fbuf->print_trace();
     
    16241821
    16251822                // interrupts
    1626                 if (signal_irq_disk)       std::cout << "### IRQ_DISK ACTIVE"       << std::endl;
    1627                 if (signal_irq_mtty_rx[0]) std::cout << "### IRQ_MTTY_RX[0] ACTIVE" << std::endl;
    1628                 if (signal_irq_mnic_rx[0]) std::cout << "### IRQ_MNIC_RX[0] ACTIVE" << std::endl;
    1629                 if (signal_irq_mnic_rx[1]) std::cout << "### IRQ_MNIC_RX[1] ACTIVE" << std::endl;
    1630                 if (signal_irq_mnic_tx[0]) std::cout << "### IRQ_MNIC_TX[0] ACTIVE" << std::endl;
    1631                 if (signal_irq_mnic_tx[1]) std::cout << "### IRQ_MNIC_TX[1] ACTIVE" << std::endl;
     1823                if ( signal_irq_disk.read() )     
     1824                std::cout << "### IRQ_DISK ACTIVE" << std::endl;
     1825
     1826                if ( signal_irq_mtty_rx[0].read() )
     1827                std::cout << "### IRQ_MTTY_RX[0] ACTIVE" << std::endl;
     1828
     1829                if ( signal_irq_mnic_rx[0].read() )
     1830                std::cout << "### IRQ_MNIC_RX[0] ACTIVE" << std::endl;
     1831
     1832                if ( signal_irq_mnic_tx[0].read() )
     1833                std::cout << "### IRQ_MNIC_TX[0] ACTIVE" << std::endl;
    16321834            }
    16331835        }
  • trunk/platforms/tsar_generic_iob/top.desc

    r965 r1002  
    5555                  cell_size = vci_cell_size_ext),
    5656
     57            Uses('caba:vci_ahci_sdc',
     58                  cell_size = vci_cell_size_ext),
     59
     60            Uses('caba:sd_card'),
     61
    5762            # NIC
    5863            Uses('caba:vci_multi_nic',
  • trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/metadata/tsar_iob_cluster.sd

    r972 r1002  
    8080              dspin_rsp_width    = parameter.Reference('dspin_int_rsp_width')),
    8181
    82         Uses('caba:virtual_dspin_router',
     82        Uses('caba:dspin_router',
    8383              flit_width         = parameter.Reference('dspin_int_cmd_width')),
    8484
    85         Uses('caba:virtual_dspin_router',
     85        Uses('caba:dspin_router',
    8686              flit_width         = parameter.Reference('dspin_int_rsp_width')),
    8787
  • trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/include/tsar_iob_cluster.h

    r972 r1002  
    2727#include "vci_dspin_target_wrapper.h"
    2828#include "dspin_router.h"
    29 #include "virtual_dspin_router.h"
    3029#include "vci_mwmr_dma.h"
    3130#include "vci_mem_cache.h"
     
    6261
    6362    // These arrays of ports are used to connect the INT & RAM networks in top cell
    64     soclib::caba::DspinOutput<dspin_int_cmd_width>**   p_dspin_int_cmd_out;
    65     soclib::caba::DspinInput<dspin_int_cmd_width>**    p_dspin_int_cmd_in;
    66     soclib::caba::DspinOutput<dspin_int_rsp_width>**   p_dspin_int_rsp_out;
    67     soclib::caba::DspinInput<dspin_int_rsp_width>**    p_dspin_int_rsp_in;
     63    soclib::caba::DspinOutput<dspin_int_cmd_width>*    p_dspin_int_cmd_out;
     64    soclib::caba::DspinInput<dspin_int_cmd_width>*     p_dspin_int_cmd_in;
     65    soclib::caba::DspinOutput<dspin_int_rsp_width>*    p_dspin_int_rsp_out;
     66    soclib::caba::DspinInput<dspin_int_rsp_width>*     p_dspin_int_rsp_in;
     67    soclib::caba::DspinOutput<dspin_int_cmd_width>*    p_dspin_int_m2p_out;
     68    soclib::caba::DspinInput<dspin_int_cmd_width>*     p_dspin_int_m2p_in;
     69    soclib::caba::DspinOutput<dspin_int_rsp_width>*    p_dspin_int_p2m_out;
     70    soclib::caba::DspinInput<dspin_int_rsp_width>*     p_dspin_int_p2m_in;
     71    soclib::caba::DspinOutput<dspin_int_cmd_width>*    p_dspin_int_cla_out;
     72    soclib::caba::DspinInput<dspin_int_cmd_width>*     p_dspin_int_cla_in;
    6873
    6974    soclib::caba::DspinOutput<dspin_ram_cmd_width>*    p_dspin_ram_cmd_out;
     
    8792    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_cmd_l2g_d;
    8893    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_cmd_g2l_d;
     94
     95    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_rsp_l2g_d;
     96    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_rsp_g2l_d;
     97
    8998    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_l2g_c;
    9099    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_g2l_c;
    91     DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_l2g_c;
    92     DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_g2l_c;
    93     DspinSignals<dspin_int_rsp_width>     signal_int_dspin_rsp_l2g_d;
    94     DspinSignals<dspin_int_rsp_width>     signal_int_dspin_rsp_g2l_d;
     100
    95101    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_p2m_l2g_c;
    96102    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_p2m_g2l_c;
     103
     104    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_cla_l2g_c;
     105    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_cla_g2l_c;
    97106
    98107    // INT network VCI signals between VCI components and VCI local crossbar
     
    111120    // Coherence DSPIN signals between DSPIN local crossbars and CC components
    112121    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_memc;
    113     DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_memc;
     122    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_cla_memc;
    114123    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_p2m_memc;
    115124    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_proc[8];
    116     DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_proc[8];
     125    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_cla_proc[8];
    117126    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_p2m_proc[8];
    118127
     
    174183    DspinLocalCrossbar<dspin_int_cmd_width>*          int_xbar_clack_c;
    175184
    176     VirtualDspinRouter<dspin_int_cmd_width>*          int_router_cmd;
    177     VirtualDspinRouter<dspin_int_rsp_width>*          int_router_rsp;
     185    DspinRouter<dspin_int_cmd_width>*                 int_router_cmd;
     186    DspinRouter<dspin_int_rsp_width>*                 int_router_rsp;
     187    DspinRouter<dspin_int_cmd_width>*                 int_router_m2p;
     188    DspinRouter<dspin_int_rsp_width>*                 int_router_p2m;
     189    DspinRouter<dspin_int_cmd_width>*                 int_router_cla;
    178190
    179191    VciSimpleRam<vci_param_ext>*                      xram;
  • trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/src/tsar_iob_cluster.cpp

    r972 r1002  
    9797
    9898    // Vectors of DSPIN ports for inter-cluster communications
    99     p_dspin_int_cmd_in  = alloc_elems<DspinInput<dspin_int_cmd_width> >("p_int_cmd_in", 4, 3);
    100     p_dspin_int_cmd_out = alloc_elems<DspinOutput<dspin_int_cmd_width> >("p_int_cmd_out", 4, 3);
    101     p_dspin_int_rsp_in  = alloc_elems<DspinInput<dspin_int_rsp_width> >("p_int_rsp_in", 4, 2);
    102     p_dspin_int_rsp_out = alloc_elems<DspinOutput<dspin_int_rsp_width> >("p_int_rsp_out", 4, 2);
     99    p_dspin_int_cmd_in  = alloc_elems<DspinInput<dspin_int_cmd_width> >("p_int_cmd_in", 4);
     100    p_dspin_int_cmd_out = alloc_elems<DspinOutput<dspin_int_cmd_width> >("p_int_cmd_out", 4);
     101
     102    p_dspin_int_rsp_in  = alloc_elems<DspinInput<dspin_int_rsp_width> >("p_int_rsp_in", 4);
     103    p_dspin_int_rsp_out = alloc_elems<DspinOutput<dspin_int_rsp_width> >("p_int_rsp_out", 4);
     104
     105    p_dspin_int_m2p_in  = alloc_elems<DspinInput<dspin_int_cmd_width> >("p_int_m2p_in", 4);
     106    p_dspin_int_m2p_out = alloc_elems<DspinOutput<dspin_int_cmd_width> >("p_int_m2p_out", 4);
     107
     108    p_dspin_int_p2m_in  = alloc_elems<DspinInput<dspin_int_rsp_width> >("p_int_p2m_in", 4);
     109    p_dspin_int_p2m_out = alloc_elems<DspinOutput<dspin_int_rsp_width> >("p_int_p2m_out", 4);
     110
     111    p_dspin_int_cla_in  = alloc_elems<DspinInput<dspin_int_cmd_width> >("p_int_cla_in", 4);
     112    p_dspin_int_cla_out = alloc_elems<DspinOutput<dspin_int_cmd_width> >("p_int_cla_out", 4);
    103113
    104114    p_dspin_ram_cmd_in  = alloc_elems<DspinInput<dspin_ram_cmd_width> >("p_ext_cmd_in", 4);
    105115    p_dspin_ram_cmd_out = alloc_elems<DspinOutput<dspin_ram_cmd_width> >("p_ext_cmd_out", 4);
     116
    106117    p_dspin_ram_rsp_in  = alloc_elems<DspinInput<dspin_ram_rsp_width> >("p_ext_rsp_in", 4);
    107118    p_dspin_ram_rsp_out = alloc_elems<DspinOutput<dspin_ram_rsp_width> >("p_ext_rsp_out", 4);
     
    114125    }
    115126
    116     /////////////////////////////////////////////////////////////////////////////
     127    //////////////////////////////////////////////////////////////////////////////////
    117128    //    Hardware components
    118     /////////////////////////////////////////////////////////////////////////////
    119 
    120     ////////////  PROCS
     129    //////////////////////////////////////////////////////////////////////////////////
     130
     131    ////////////  PROCS  /////////////////////////////////////////////////////////////
    121132    for (size_t p = 0; p < nb_procs; p++)
    122133    {
     
    147158    }
    148159
    149     ///////////  MEMC
     160    ////////////  MEMC   /////////////////////////////////////////////////////////////
    150161    std::ostringstream s_memc;
    151162    s_memc << "memc_" << x_id << "_" << y_id;
     
    178189                     x_width + y_width + l_width);
    179190
    180     ///////////   XICU
     191    ///////////   XICU  //////////////////////////////////////////////////////////////
    181192    std::ostringstream s_xicu;
    182193    s_xicu << "xicu_" << x_id << "_" << y_id;
     
    190201                     xcu_nb_out);                         // number of output IRQs
    191202
    192     ////////////  MWMR controller and coprocessor
     203    ////////////  MWMR controller and COPROC  ////////////////////////////////////////
    193204    std::ostringstream s_mwmr;
    194205    std::ostringstream s_copro;
     
    244255    }
    245256
    246     ///////////  Direct LOCAL_XBAR(S)
     257    ///////////  VCI INT_CMD/RSP LOCAL_XBAR  //////////////////////////////////////
    247258    size_t nb_direct_initiators = is_io ? nb_procs + 2 : nb_procs + 1;
    248259    size_t nb_direct_targets    = is_io ? 4 : 3;
     
    276287                     x_width + y_width + l_width);
    277288
    278     ////////////  Coherence LOCAL_XBAR(S)
     289    ////////////  DSPIN INT_M2P LOCAL_XBAR  ////////////////////////////////////////
    279290    std::ostringstream s_int_xbar_m2p_c;
    280291    s_int_xbar_m2p_c << "int_xbar_m2p_c_" << x_id << "_" << y_id;
     
    291302                     true );                       // broacast
    292303
     304    ////////////  DSPIN INT_P2M LOCAL_XBAR  ////////////////////////////////////////
    293305    std::ostringstream s_int_xbar_p2m_c;
    294306    s_int_xbar_p2m_c << "int_xbar_p2m_c_" << x_id << "_" << y_id;
     
    305317                     false );                      // no broacast
    306318
     319    ////////////  DSPIN INT_CLA LOCAL_XBAR  ////////////////////////////////////////
    307320    std::ostringstream s_int_xbar_clack_c;
    308321    s_int_xbar_clack_c << "int_xbar_clack_c_" << x_id << "_" << y_id;
     
    319332                     false);                       // broadcast
    320333
    321     //////////////  INT ROUTER(S)
     334    ////////////  DSPIN INT_CMD ROUTER ////////////////////////////////////////////
    322335    std::ostringstream s_int_router_cmd;
    323     s_int_router_cmd << "router_cmd_" << x_id << "_" << y_id;
    324     int_router_cmd = new VirtualDspinRouter<dspin_int_cmd_width>(
     336    s_int_router_cmd << "int_router_cmd_" << x_id << "_" << y_id;
     337    int_router_cmd = new DspinRouter<dspin_int_cmd_width>(
    325338                     s_int_router_cmd.str().c_str(),
    326339                     x_id,y_id,                    // coordinate in the mesh
    327340                     x_width, y_width,             // x & y fields width
    328                      3,                            // nb virtual channels
    329341                     4,4);                         // input & output fifo depths
    330342
     343    ////////////  DSPIN INT_RSP ROUTER ////////////////////////////////////////////
    331344    std::ostringstream s_int_router_rsp;
    332     s_int_router_rsp << "router_rsp_" << x_id << "_" << y_id;
    333     int_router_rsp = new VirtualDspinRouter<dspin_int_rsp_width>(
     345    s_int_router_rsp << "int_router_rsp_" << x_id << "_" << y_id;
     346    int_router_rsp = new DspinRouter<dspin_int_rsp_width>(
    334347                     s_int_router_rsp.str().c_str(),
    335                      x_id,y_id,                    // router coordinates in mesh
     348                     x_id,y_id,                    // coordinates in mesh
    336349                     x_width, y_width,             // x & y fields width
    337                      2,                            // nb virtual channels
    338350                     4,4);                         // input & output fifo depths
    339351
    340     //////////////  XRAM
     352    ////////////  DSPIN INT_M2P ROUTER ////////////////////////////////////////////
     353    std::ostringstream s_int_router_m2p;
     354    s_int_router_m2p << "int_router_m2p_" << x_id << "_" << y_id;
     355    int_router_m2p = new DspinRouter<dspin_int_cmd_width>(
     356                     s_int_router_m2p.str().c_str(),
     357                     x_id,y_id,                    // coordinate in the mesh
     358                     x_width, y_width,             // x & y fields width
     359                     4,4,                          // input & output fifo depths
     360                     true);                        // broadcast supported
     361
     362    ////////////  DSPIN INT_P2M ROUTER ////////////////////////////////////////////
     363    std::ostringstream s_int_router_p2m;
     364    s_int_router_p2m << "int_router_p2m_" << x_id << "_" << y_id;
     365    int_router_p2m = new DspinRouter<dspin_int_rsp_width>(
     366                     s_int_router_p2m.str().c_str(),
     367                     x_id,y_id,                    // coordinates in mesh
     368                     x_width, y_width,             // x & y fields width
     369                     4,4);                         // input & output fifo depths
     370
     371    ////////////  DSPIN INT_CLA ROUTER ////////////////////////////////////////////
     372    std::ostringstream s_int_router_cla;
     373    s_int_router_cla << "int_router_cla_" << x_id << "_" << y_id;
     374    int_router_cla = new DspinRouter<dspin_int_cmd_width>(
     375                     s_int_router_cla.str().c_str(),
     376                     x_id,y_id,                    // coordinate in the mesh
     377                     x_width, y_width,             // x & y fields width
     378                     4,4);                         // input & output fifo depths
     379
     380    //////////////  XRAM  /////////////////////////////////////////////////////////
    341381    std::ostringstream s_xram;
    342382    s_xram << "xram_" << x_id << "_" << y_id;
     
    356396                     x_width + y_width + l_width);
    357397
    358     /////////////  RAM ROUTER(S)
     398    ////////////  DSPIN RAM_CMD ROUTER  ///////////////////////////////////////////
    359399    std::ostringstream s_ram_router_cmd;
    360400    s_ram_router_cmd << "ram_router_cmd_" << x_id << "_" << y_id;
     
    366406                     4, 4);                          // input & output fifo depths
    367407
     408    ////////////  DSPIN RAM_RSP ROUTER  ///////////////////////////////////////////
    368409    std::ostringstream s_ram_router_rsp;
    369410    s_ram_router_rsp << "ram_router_rsp_" << x_id << "_" << y_id;
     
    376417
    377418
    378     ////////////////////// I/O  CLUSTER ONLY    ///////////////////////
     419    ////////////////////// I/O  CLUSTER ONLY    ///////////////////////////////////
    379420    if ( is_io )
    380421    {
    381         ///////////  IO_BRIDGE
     422        ///////////  IO_BRIDGE ////////////////////////////////////////////////////
    382423        std::ostringstream s_iob;
    383424        s_iob << "iob_" << x_id << "_" << y_id;
     
    406447                     vci_param_int::S);
    407448
     449        ////////////  DSPIN RAM_CMD LOCAL_XBAR  ///////////////////////////////////
    408450        std::ostringstream s_ram_xbar_cmd;
    409451        s_ram_xbar_cmd << "s_ram_xbar_cmd_" << x_id << "_" << y_id;
     
    419461              false);                       // support broadcast ?
    420462
     463        ////////////  DSPIN RAM_RSP LOCAL_XBAR  ///////////////////////////////////
    421464        std::ostringstream s_ram_xbar_rsp;
    422465        s_ram_xbar_rsp << "s_ram_xbar_rsp_" << x_id << "_" << y_id;
     
    431474              true,                         // use routing table ?
    432475              false);                       // support broadcast ?
     476
    433477    } // end if IO
    434478
     
    440484    //                      : local srcid[memc] = nb_procs
    441485
    442     //////////////////////// internal CMD & RSP routers
    443     int_router_cmd->p_clk                        (this->p_clk);
    444     int_router_cmd->p_resetn                     (this->p_resetn);
    445     int_router_rsp->p_clk                        (this->p_clk);
    446     int_router_rsp->p_resetn                     (this->p_resetn);
    447 
    448     for (int i = 0; i < 4; i++)
    449     {
    450         for(int k = 0; k < 3; k++)
    451         {
    452             int_router_cmd->p_out[i][k]          (this->p_dspin_int_cmd_out[i][k]);
    453             int_router_cmd->p_in[i][k]           (this->p_dspin_int_cmd_in[i][k]);
    454         }
    455 
    456         for(int k = 0; k < 2; k++)
    457         {
    458             int_router_rsp->p_out[i][k]          (this->p_dspin_int_rsp_out[i][k]);
    459             int_router_rsp->p_in[i][k]           (this->p_dspin_int_rsp_in[i][k]);
    460         }
    461     }
    462 
    463     // local ports
    464     int_router_cmd->p_out[4][0]                  (signal_int_dspin_cmd_g2l_d);
    465     int_router_cmd->p_out[4][1]                  (signal_int_dspin_m2p_g2l_c);
    466     int_router_cmd->p_out[4][2]                  (signal_int_dspin_clack_g2l_c);
    467     int_router_cmd->p_in[4][0]                   (signal_int_dspin_cmd_l2g_d);
    468     int_router_cmd->p_in[4][1]                   (signal_int_dspin_m2p_l2g_c);
    469     int_router_cmd->p_in[4][2]                   (signal_int_dspin_clack_l2g_c);
    470 
    471     int_router_rsp->p_out[4][0]                  (signal_int_dspin_rsp_g2l_d);
    472     int_router_rsp->p_out[4][1]                  (signal_int_dspin_p2m_g2l_c);
    473     int_router_rsp->p_in[4][0]                   (signal_int_dspin_rsp_l2g_d);
    474     int_router_rsp->p_in[4][1]                   (signal_int_dspin_p2m_l2g_c);
    475 
    476     ///////////////////// CMD DSPIN  local crossbar direct
    477     int_xbar_d->p_clk                                 (this->p_clk);
    478     int_xbar_d->p_resetn                              (this->p_resetn);
    479     int_xbar_d->p_initiator_to_up                     (signal_int_vci_l2g);
    480     int_xbar_d->p_target_to_up                        (signal_int_vci_g2l);
    481 
    482     int_xbar_d->p_to_target[int_memc_tgt_id]          (signal_int_vci_tgt_memc);
    483     int_xbar_d->p_to_target[int_xicu_tgt_id]          (signal_int_vci_tgt_xicu);
    484     int_xbar_d->p_to_target[int_mwmr_tgt_id]          (signal_int_vci_tgt_mwmr);
    485     int_xbar_d->p_to_initiator[int_mwmr_ini_id]       (signal_int_vci_ini_mwmr);
    486     for (size_t p = 0; p < nb_procs; p++)
    487        int_xbar_d->p_to_initiator[int_proc_ini_id + p] (signal_int_vci_ini_proc[p]);
    488 
    489     if ( is_io )
    490     {
    491        int_xbar_d->p_to_target[int_iobx_tgt_id]        (signal_int_vci_tgt_iobx);
    492        int_xbar_d->p_to_initiator[int_iobx_ini_id]     (signal_int_vci_ini_iobx);
    493     }
    494 
    495     int_wi_gate_d->p_clk                         (this->p_clk);
    496     int_wi_gate_d->p_resetn                      (this->p_resetn);
    497     int_wi_gate_d->p_vci                         (signal_int_vci_l2g);
    498     int_wi_gate_d->p_dspin_cmd                   (signal_int_dspin_cmd_l2g_d);
    499     int_wi_gate_d->p_dspin_rsp                   (signal_int_dspin_rsp_g2l_d);
    500 
    501     int_wt_gate_d->p_clk                         (this->p_clk);
    502     int_wt_gate_d->p_resetn                      (this->p_resetn);
    503     int_wt_gate_d->p_vci                         (signal_int_vci_g2l);
    504     int_wt_gate_d->p_dspin_cmd                   (signal_int_dspin_cmd_g2l_d);
    505     int_wt_gate_d->p_dspin_rsp                   (signal_int_dspin_rsp_l2g_d);
    506 
    507     ////////////////////// M2P DSPIN local crossbar coherence
    508     int_xbar_m2p_c->p_clk                        (this->p_clk);
    509     int_xbar_m2p_c->p_resetn                     (this->p_resetn);
    510     int_xbar_m2p_c->p_global_out                 (signal_int_dspin_m2p_l2g_c);
    511     int_xbar_m2p_c->p_global_in                  (signal_int_dspin_m2p_g2l_c);
    512     int_xbar_m2p_c->p_local_in[0]                (signal_int_dspin_m2p_memc);
    513     for (size_t p = 0; p < nb_procs; p++)
    514         int_xbar_m2p_c->p_local_out[p]           (signal_int_dspin_m2p_proc[p]);
    515 
    516     ////////////////////////// P2M DSPIN local crossbar coherence
    517     int_xbar_p2m_c->p_clk                        (this->p_clk);
    518     int_xbar_p2m_c->p_resetn                     (this->p_resetn);
    519     int_xbar_p2m_c->p_global_out                 (signal_int_dspin_p2m_l2g_c);
    520     int_xbar_p2m_c->p_global_in                  (signal_int_dspin_p2m_g2l_c);
    521     int_xbar_p2m_c->p_local_out[0]               (signal_int_dspin_p2m_memc);
    522     for (size_t p = 0; p < nb_procs; p++)
    523         int_xbar_p2m_c->p_local_in[p]            (signal_int_dspin_p2m_proc[p]);
    524 
    525     ////////////////////// CLACK DSPIN local crossbar coherence
    526     int_xbar_clack_c->p_clk                      (this->p_clk);
    527     int_xbar_clack_c->p_resetn                   (this->p_resetn);
    528     int_xbar_clack_c->p_global_out               (signal_int_dspin_clack_l2g_c);
    529     int_xbar_clack_c->p_global_in                (signal_int_dspin_clack_g2l_c);
    530     int_xbar_clack_c->p_local_in[0]              (signal_int_dspin_clack_memc);
    531     for (size_t p = 0; p < nb_procs; p++)
    532         int_xbar_clack_c->p_local_out[p]         (signal_int_dspin_clack_proc[p]);
    533 
    534486    //////////////////////////////////// Processors
    535487    for (size_t p = 0; p < nb_procs; p++)
     
    537489        proc[p]->p_clk                           (this->p_clk);
    538490        proc[p]->p_resetn                        (this->p_resetn);
     491
    539492        proc[p]->p_vci                           (signal_int_vci_ini_proc[p]);
    540493        proc[p]->p_dspin_m2p                     (signal_int_dspin_m2p_proc[p]);
    541494        proc[p]->p_dspin_p2m                     (signal_int_dspin_p2m_proc[p]);
    542         proc[p]->p_dspin_clack                   (signal_int_dspin_clack_proc[p]);
     495        proc[p]->p_dspin_clack                   (signal_int_dspin_cla_proc[p]);
    543496
    544497        for ( size_t j = 0 ; j < 6 ; j++)
     
    549502    }
    550503
     504    std::cout << "  - processors connected" << std::endl;
     505
    551506    ///////////////////////////////////// XICU
    552507    xicu->p_clk                                  (this->p_clk);
     
    563518        else                     xicu->p_hwi[i]  (signal_false);
    564519    }
     520
     521    std::cout << "  - xcu connected" << std::endl;
    565522
    566523    ///////////////////////////////////// MEMC
     
    571528    memc->p_dspin_p2m                            (signal_int_dspin_p2m_memc);
    572529    memc->p_dspin_m2p                            (signal_int_dspin_m2p_memc);
    573     memc->p_dspin_clack                          (signal_int_dspin_clack_memc);
     530    memc->p_dspin_clack                          (signal_int_dspin_cla_memc);
    574531    memc->p_irq                                  (signal_irq_memc);
    575532
     
    581538    memc_ram_wi->p_vci                           (signal_ram_vci_ini_memc);
    582539
     540    std::cout << "  - memc connected" << std::endl;
     541
    583542    //////////////////////////////////// XRAM
    584543    xram->p_clk                                  (this->p_clk);
     
    592551    xram_ram_wt->p_dspin_rsp                     (signal_ram_dspin_rsp_xram_t);
    593552    xram_ram_wt->p_vci                           (signal_ram_vci_tgt_xram);
     553
     554    std::cout << "  - xram connected" << std::endl;
    594555
    595556    /////////////////////////////////// GCD coprocessor
     
    633594    }
    634595
     596    std::cout << "  - coproc connected" << std::endl;
     597
    635598    /////////////////////////////////// CPY coprocessor
    636599    if ( coproc_type == MWR_COPROC_CPY )
     
    652615    }
    653616
    654     //////////////////////////// RAM network CMD & RSP routers
     617    //////////////////////////// RAM NETWORK ROUTERS
    655618    ram_router_cmd->p_clk                        (this->p_clk);
    656619    ram_router_cmd->p_resetn                     (this->p_resetn);
    657620    ram_router_rsp->p_clk                        (this->p_clk);
    658621    ram_router_rsp->p_resetn                     (this->p_resetn);
     622
    659623    for( size_t n=0 ; n<4 ; n++)
    660624    {
     
    678642       ram_router_rsp->p_out[4]                  (signal_ram_dspin_rsp_memc_i);
    679643    }
     644
     645    ///////////////////////////// INT NETWORK ROUTERS
     646    int_router_cmd->p_clk                        (this->p_clk);
     647    int_router_cmd->p_resetn                     (this->p_resetn);
     648    int_router_rsp->p_clk                        (this->p_clk);
     649    int_router_rsp->p_resetn                     (this->p_resetn);
     650    int_router_m2p->p_clk                        (this->p_clk);
     651    int_router_m2p->p_resetn                     (this->p_resetn);
     652    int_router_p2m->p_clk                        (this->p_clk);
     653    int_router_p2m->p_resetn                     (this->p_resetn);
     654    int_router_cla->p_clk                        (this->p_clk);
     655    int_router_cla->p_resetn                     (this->p_resetn);
     656
     657    // loop on N/S/E/W ports
     658    for (size_t i = 0; i < 4; i++)
     659    {
     660        int_router_cmd->p_out[i]                 (this->p_dspin_int_cmd_out[i]);
     661        int_router_cmd->p_in[i]                  (this->p_dspin_int_cmd_in[i]);
     662
     663        int_router_rsp->p_out[i]                 (this->p_dspin_int_rsp_out[i]);
     664        int_router_rsp->p_in[i]                  (this->p_dspin_int_rsp_in[i]);
     665
     666        int_router_m2p->p_out[i]                 (this->p_dspin_int_m2p_out[i]);
     667        int_router_m2p->p_in[i]                  (this->p_dspin_int_m2p_in[i]);
     668
     669        int_router_p2m->p_out[i]                 (this->p_dspin_int_p2m_out[i]);
     670        int_router_p2m->p_in[i]                  (this->p_dspin_int_p2m_in[i]);
     671
     672        int_router_cla->p_out[i]                 (this->p_dspin_int_cla_out[i]);
     673        int_router_cla->p_in[i]                  (this->p_dspin_int_cla_in[i]);
     674    }
     675
     676    int_router_cmd->p_out[4]                     (signal_int_dspin_cmd_g2l_d);
     677    int_router_cmd->p_in[4]                      (signal_int_dspin_cmd_l2g_d);
     678
     679    int_router_rsp->p_out[4]                     (signal_int_dspin_rsp_g2l_d);
     680    int_router_rsp->p_in[4]                      (signal_int_dspin_rsp_l2g_d);
     681
     682    int_router_m2p->p_out[4]                     (signal_int_dspin_m2p_g2l_c);
     683    int_router_m2p->p_in[4]                      (signal_int_dspin_m2p_l2g_c);
     684
     685    int_router_p2m->p_out[4]                     (signal_int_dspin_p2m_g2l_c);
     686    int_router_p2m->p_in[4]                      (signal_int_dspin_p2m_l2g_c);
     687
     688    int_router_cla->p_out[4]                     (signal_int_dspin_cla_g2l_c);
     689    int_router_cla->p_in[4]                      (signal_int_dspin_cla_l2g_c);
     690
     691    std::cout << "  - internal routers connected" << std::endl;
     692
     693
     694    ///////////////////// CMD DSPIN  local crossbar direct
     695    int_xbar_d->p_clk                            (this->p_clk);
     696    int_xbar_d->p_resetn                         (this->p_resetn);
     697    int_xbar_d->p_initiator_to_up                (signal_int_vci_l2g);
     698    int_xbar_d->p_target_to_up                   (signal_int_vci_g2l);
     699
     700    int_xbar_d->p_to_target[int_memc_tgt_id]     (signal_int_vci_tgt_memc);
     701    int_xbar_d->p_to_target[int_xicu_tgt_id]     (signal_int_vci_tgt_xicu);
     702    int_xbar_d->p_to_target[int_mwmr_tgt_id]     (signal_int_vci_tgt_mwmr);
     703    int_xbar_d->p_to_initiator[int_mwmr_ini_id]  (signal_int_vci_ini_mwmr);
     704    for (size_t p = 0; p < nb_procs; p++)
     705       int_xbar_d->p_to_initiator[int_proc_ini_id + p] (signal_int_vci_ini_proc[p]);
     706
     707    if ( is_io )
     708    {
     709       int_xbar_d->p_to_target[int_iobx_tgt_id]        (signal_int_vci_tgt_iobx);
     710       int_xbar_d->p_to_initiator[int_iobx_ini_id]     (signal_int_vci_ini_iobx);
     711    }
     712
     713    int_wi_gate_d->p_clk                         (this->p_clk);
     714    int_wi_gate_d->p_resetn                      (this->p_resetn);
     715    int_wi_gate_d->p_vci                         (signal_int_vci_l2g);
     716    int_wi_gate_d->p_dspin_cmd                   (signal_int_dspin_cmd_l2g_d);
     717    int_wi_gate_d->p_dspin_rsp                   (signal_int_dspin_rsp_g2l_d);
     718
     719    int_wt_gate_d->p_clk                         (this->p_clk);
     720    int_wt_gate_d->p_resetn                      (this->p_resetn);
     721    int_wt_gate_d->p_vci                         (signal_int_vci_g2l);
     722    int_wt_gate_d->p_dspin_cmd                   (signal_int_dspin_cmd_g2l_d);
     723    int_wt_gate_d->p_dspin_rsp                   (signal_int_dspin_rsp_l2g_d);
     724
     725    ////////////////////// M2P DSPIN local crossbar coherence
     726    int_xbar_m2p_c->p_clk                        (this->p_clk);
     727    int_xbar_m2p_c->p_resetn                     (this->p_resetn);
     728    int_xbar_m2p_c->p_global_out                 (signal_int_dspin_m2p_l2g_c);
     729    int_xbar_m2p_c->p_global_in                  (signal_int_dspin_m2p_g2l_c);
     730    int_xbar_m2p_c->p_local_in[0]                (signal_int_dspin_m2p_memc);
     731    for (size_t p = 0; p < nb_procs; p++)
     732        int_xbar_m2p_c->p_local_out[p]           (signal_int_dspin_m2p_proc[p]);
     733
     734    ////////////////////////// P2M DSPIN local crossbar coherence
     735    int_xbar_p2m_c->p_clk                        (this->p_clk);
     736    int_xbar_p2m_c->p_resetn                     (this->p_resetn);
     737    int_xbar_p2m_c->p_global_out                 (signal_int_dspin_p2m_l2g_c);
     738    int_xbar_p2m_c->p_global_in                  (signal_int_dspin_p2m_g2l_c);
     739    int_xbar_p2m_c->p_local_out[0]               (signal_int_dspin_p2m_memc);
     740    for (size_t p = 0; p < nb_procs; p++)
     741        int_xbar_p2m_c->p_local_in[p]            (signal_int_dspin_p2m_proc[p]);
     742
     743    ////////////////////// CLACK DSPIN local crossbar coherence
     744    int_xbar_clack_c->p_clk                      (this->p_clk);
     745    int_xbar_clack_c->p_resetn                   (this->p_resetn);
     746    int_xbar_clack_c->p_global_out               (signal_int_dspin_cla_l2g_c);
     747    int_xbar_clack_c->p_global_in                (signal_int_dspin_cla_g2l_c);
     748    int_xbar_clack_c->p_local_in[0]              (signal_int_dspin_cla_memc);
     749    for (size_t p = 0; p < nb_procs; p++)
     750        int_xbar_clack_c->p_local_out[p]         (signal_int_dspin_cla_proc[p]);
     751
    680752
    681753    ///////////////////////// IOB exists only in cluster_iob0 & cluster_iob1.
Note: See TracChangeset for help on using the changeset viewer.