Ignore:
Timestamp:
Apr 11, 2015, 8:26:46 PM (9 years ago)
Author:
alain
Message:

Modify the tsar_generic_iob platform:
The vci_multi_dma component replicated in all cluster is replaced by a vci_mwmr_dma component.
This new component supports all hardware coprocessors respection the "coproc" interface.
Amongst the available coprocessors (defined in the SocLib? "coprocessor_components" directory)
the MWR_CPY coprocessor provide an improved memory copy service throughput x 2).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/src/tsar_iob_cluster.cpp

    r959 r972  
    1515#include "../include/tsar_iob_cluster.h"
    1616
     17#define MWR_COPROC_CPY  0
     18#define MWR_COPROC_DCT  1
     19#define MWR_COPROC_GCD  2
     20
    1721#define tmpl(x) \
    1822   template<typename vci_param_int      , typename vci_param_ext,\
     
    2630namespace soclib { namespace caba  {
    2731
    28 //////////////////////////////////////////////////////////////////////////
    29 //                 Constructor
    30 //////////////////////////////////////////////////////////////////////////
     32/////////////////////////////////////////////////////////////////////////////
    3133tmpl(/**/)::TsarIobCluster(
    32 //////////////////////////////////////////////////////////////////////////
     34/////////////////////////////////////////////////////////////////////////////
    3335                    sc_module_name                     insname,
    3436                    size_t                             nb_procs,
    35                     size_t                             nb_dmas,
    3637                    size_t                             x_id,
    3738                    size_t                             y_id,
     
    5051                    size_t                             int_memc_tgt_id, // local index
    5152                    size_t                             int_xicu_tgt_id, // local index
    52                     size_t                             int_mdma_tgt_id, // local index
     53                    size_t                             int_mwmr_tgt_id, // local index
    5354                    size_t                             int_iobx_tgt_id, // local index
    5455
    5556                    size_t                             int_proc_ini_id, // local index
    56                     size_t                             int_mdma_ini_id, // local index
     57                    size_t                             int_mwmr_ini_id, // local index
    5758                    size_t                             int_iobx_ini_id, // local index
    5859
     
    7778                    size_t                             xcu_nb_out,
    7879
     80                    size_t                             coproc_type,
     81
    7982                    const Loader                      &loader,
    8083
     
    8891      p_resetn("resetn")
    8992{
    90     assert( (x_id < xmax) and (y_id < ymax) and "Illegal cluster coordinates");
     93    assert( (x_id < xmax) and (y_id < ymax) and
     94    "Error in tsar_iob_cluster : Illegal cluster coordinates");
    9195
    9296    size_t cluster_id = (x_id<<4) + y_id;
     
    186190                     xcu_nb_out);                         // number of output IRQs
    187191
    188     ////////////  MDMA
    189     std::ostringstream s_mdma;
    190     s_mdma << "mdma_" << x_id << "_" << y_id;
    191     mdma = new VciMultiDma<vci_param_int>(
    192                      s_mdma.str().c_str(),
     192    ////////////  MWMR controller and coprocessor
     193    std::ostringstream s_mwmr;
     194    std::ostringstream s_copro;
     195    s_mwmr << "mwmr_" << x_id << "_" << y_id;
     196
     197    if ( coproc_type ==  MWR_COPROC_CPY)
     198    {
     199        s_copro << "cpy_" << x_id << "_" << y_id;
     200        cpy = new CoprocCpy( s_copro.str().c_str(), 64 );       // burst size
     201
     202        mwmr = new VciMwmrDma<vci_param_int>(
     203                     s_mwmr.str().c_str(),
    193204                     mt_int,
    194                      IntTab(cluster_id, nb_procs),        // SRCID
    195                      IntTab(cluster_id, int_mdma_tgt_id), // TGTID
    196                      64,                                  // burst size
    197                      nb_dmas);                            // number of IRQs
     205                     IntTab(cluster_id, int_mwmr_ini_id), // SRCID
     206                     IntTab(cluster_id, int_mwmr_tgt_id), // TGTID
     207                     1,                                   // nb to_coproc ports
     208                     1,                                   // nb from_coproc ports
     209                     1,                                   // nb config registers
     210                     0,                                   // nb status registers
     211                     64 );                                // burst size (bytes)
     212    }
     213    if ( coproc_type == MWR_COPROC_DCT )
     214    {
     215        s_copro << "dct_" << x_id << "_" << y_id;
     216        dct = new CoprocDct( s_copro.str().c_str(), 64 , 16 );  // burst size / latency
     217
     218        mwmr = new VciMwmrDma<vci_param_int>(
     219                     s_mwmr.str().c_str(),
     220                     mt_int,
     221                     IntTab(cluster_id, int_mwmr_ini_id), // SRCID
     222                     IntTab(cluster_id, int_mwmr_tgt_id), // TGTID
     223                     1,                                   // nb to_coproc ports
     224                     1,                                   // nb from_coproc ports
     225                     1,                                   // nb config registers
     226                     0,                                   // nb status registers
     227                     64 );                                // burst size (bytes)
     228    }
     229    if ( coproc_type == MWR_COPROC_GCD )
     230    {
     231        s_copro << "gcd_" << x_id << "_" << y_id;
     232        gcd = new CoprocGcd( s_copro.str().c_str(), 64 );       // burst size
     233
     234        mwmr = new VciMwmrDma<vci_param_int>(
     235                     s_mwmr.str().c_str(),
     236                     mt_int,
     237                     IntTab(cluster_id, int_mwmr_ini_id), // SRCID
     238                     IntTab(cluster_id, int_mwmr_tgt_id), // TGTID
     239                     2,                                   // nb to_coproc ports
     240                     1,                                   // nb from_coproc ports
     241                     1,                                   // nb config registers
     242                     0,                                   // nb status registers
     243                     64 );                                // burst size (bytes)
     244    }
    198245
    199246    ///////////  Direct LOCAL_XBAR(S)
     
    435482    int_xbar_d->p_to_target[int_memc_tgt_id]          (signal_int_vci_tgt_memc);
    436483    int_xbar_d->p_to_target[int_xicu_tgt_id]          (signal_int_vci_tgt_xicu);
    437     int_xbar_d->p_to_target[int_mdma_tgt_id]          (signal_int_vci_tgt_mdma);
    438     int_xbar_d->p_to_initiator[int_mdma_ini_id]       (signal_int_vci_ini_mdma);
     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);
    439486    for (size_t p = 0; p < nb_procs; p++)
    440487       int_xbar_d->p_to_initiator[int_proc_ini_id + p] (signal_int_vci_ini_proc[p]);
     
    513560    {
    514561        if      ( i == 0 )       xicu->p_hwi[i]  (signal_irq_memc);
    515         else if ( i <= nb_dmas ) xicu->p_hwi[i]  (signal_irq_mdma[i-1]);
     562        else if ( i == 1 )       xicu->p_hwi[i]  (signal_irq_mwmr);
    516563        else                     xicu->p_hwi[i]  (signal_false);
    517564    }
     
    546593    xram_ram_wt->p_vci                           (signal_ram_vci_tgt_xram);
    547594
    548     /////////////////////////////////// MDMA
    549     mdma->p_clk                                  (this->p_clk);
    550     mdma->p_resetn                               (this->p_resetn);
    551     mdma->p_vci_target                           (signal_int_vci_tgt_mdma);
    552     mdma->p_vci_initiator                        (signal_int_vci_ini_mdma);
    553     for (size_t i=0 ; i<nb_dmas ; i++)
    554         mdma->p_irq[i]                           (signal_irq_mdma[i]);
     595    /////////////////////////////////// GCD coprocessor
     596    if ( coproc_type == MWR_COPROC_GCD )
     597    {
     598        gcd->p_clk                               (this->p_clk);
     599        gcd->p_resetn                            (this->p_resetn);
     600        gcd->p_opa                               (signal_to_coproc[0]);
     601        gcd->p_opb                               (signal_to_coproc[1]);
     602        gcd->p_res                               (signal_from_coproc[0]);
     603        gcd->p_config                            (signal_config_coproc[0]);
     604
     605        mwmr->p_clk                              (this->p_clk);
     606        mwmr->p_resetn                           (this->p_resetn);
     607        mwmr->p_vci_target                       (signal_int_vci_tgt_mwmr);
     608        mwmr->p_vci_initiator                    (signal_int_vci_ini_mwmr);
     609        mwmr->p_to_coproc[0]                     (signal_to_coproc[0]);
     610        mwmr->p_to_coproc[1]                     (signal_to_coproc[1]);
     611        mwmr->p_from_coproc[0]                   (signal_from_coproc[0]);
     612        mwmr->p_config[0]                        (signal_config_coproc[0]);
     613        mwmr->p_irq                              (signal_irq_mwmr);
     614    }
     615
     616    /////////////////////////////////// DCT coprocessor
     617    if ( coproc_type == MWR_COPROC_DCT )
     618    {
     619        dct->p_clk                               (this->p_clk);
     620        dct->p_resetn                            (this->p_resetn);
     621        dct->p_in                                (signal_to_coproc[0]);
     622        dct->p_out                               (signal_from_coproc[0]);
     623        dct->p_config                            (signal_config_coproc[0]);
     624
     625        mwmr->p_clk                              (this->p_clk);
     626        mwmr->p_resetn                           (this->p_resetn);
     627        mwmr->p_vci_target                       (signal_int_vci_tgt_mwmr);
     628        mwmr->p_vci_initiator                    (signal_int_vci_ini_mwmr);
     629        mwmr->p_to_coproc[0]                     (signal_to_coproc[0]);
     630        mwmr->p_from_coproc[0]                   (signal_from_coproc[0]);
     631        mwmr->p_config[0]                        (signal_config_coproc[0]);
     632        mwmr->p_irq                              (signal_irq_mwmr);
     633    }
     634
     635    /////////////////////////////////// CPY coprocessor
     636    if ( coproc_type == MWR_COPROC_CPY )
     637    {
     638        cpy->p_clk                               (this->p_clk);
     639        cpy->p_resetn                            (this->p_resetn);
     640        cpy->p_load                              (signal_to_coproc[0]);
     641        cpy->p_store                             (signal_from_coproc[0]);
     642        cpy->p_config                            (signal_config_coproc[0]);
     643
     644        mwmr->p_clk                              (this->p_clk);
     645        mwmr->p_resetn                           (this->p_resetn);
     646        mwmr->p_vci_target                       (signal_int_vci_tgt_mwmr);
     647        mwmr->p_vci_initiator                    (signal_int_vci_ini_mwmr);
     648        mwmr->p_to_coproc[0]                     (signal_to_coproc[0]);
     649        mwmr->p_from_coproc[0]                   (signal_from_coproc[0]);
     650        mwmr->p_config[0]                        (signal_config_coproc[0]);
     651        mwmr->p_irq                              (signal_irq_mwmr);
     652    }
    555653
    556654    //////////////////////////// RAM network CMD & RSP routers
     
    624722   signal_ram_dspin_cmd_false.write = false;
    625723   signal_ram_dspin_rsp_false.read  = true;
    626 } // end init
     724}
    627725
    628726}}
Note: See TracChangeset for help on using the changeset viewer.