////////////////////////////////////////////////////////////////////////////// // File: tsar_iob_cluster.h // Author: Alain Greiner // Copyright: UPMC/LIP6 // Date : april 2013 // This program is released under the GNU public license ////////////////////////////////////////////////////////////////////////////// #ifndef SOCLIB_CABA_TSAR_IOB_CLUSTER_H #define SOCLIB_CABA_TSAR_IOB_CLUSTER_H #include #include #include #include #include #include #include "gdbserver.h" #include "mapping_table.h" #include "mips32.h" #include "vci_simple_ram.h" #include "vci_xicu.h" #include "dspin_local_crossbar.h" #include "vci_dspin_initiator_wrapper.h" #include "vci_dspin_target_wrapper.h" #include "dspin_router_tsar.h" #include "virtual_dspin_router.h" #include "vci_multi_dma.h" #include "vci_mem_cache.h" #include "vci_cc_vcache_wrapper.h" #include "vci_io_bridge.h" namespace soclib { namespace caba { /////////////////////////////////////////////////////////////////////////// template class TsarIobCluster /////////////////////////////////////////////////////////////////////////// : public soclib::caba::BaseModule { public: // Ports sc_in p_clk; sc_in p_resetn; // Thes two ports are used to connect IOB to IOX nework in top cell soclib::caba::VciInitiator* p_vci_iob_iox_ini; soclib::caba::VciTarget* p_vci_iob_iox_tgt; // These ports are used to connect IOB to RAM network in top cell soclib::caba::DspinOutput* p_dspin_iob_cmd_out; soclib::caba::DspinInput* p_dspin_iob_rsp_in; // These ports are used to connect hard IRQ from external peripherals to // IOB0 sc_in* p_irq[32]; // These arrays of ports are used to connect the INT & RAM networks in // top cell soclib::caba::DspinOutput** p_dspin_int_cmd_out; soclib::caba::DspinInput** p_dspin_int_cmd_in; soclib::caba::DspinOutput** p_dspin_int_rsp_out; soclib::caba::DspinInput** p_dspin_int_rsp_in; soclib::caba::DspinOutput* p_dspin_ram_cmd_out; soclib::caba::DspinInput* p_dspin_ram_cmd_in; soclib::caba::DspinOutput* p_dspin_ram_rsp_out; soclib::caba::DspinInput* p_dspin_ram_rsp_in; // interrupt signals sc_signal signal_false; sc_signal signal_proc_it[8]; sc_signal signal_irq_mdma[8]; sc_signal signal_irq_memc; // INT network DSPIN signals between DSPIN routers and DSPIN // local_crossbars DspinSignals signal_int_dspin_cmd_l2g_d; DspinSignals signal_int_dspin_cmd_g2l_d; DspinSignals signal_int_dspin_m2p_l2g_c; DspinSignals signal_int_dspin_m2p_g2l_c; DspinSignals signal_int_dspin_clack_l2g_c; DspinSignals signal_int_dspin_clack_g2l_c; DspinSignals signal_int_dspin_rsp_l2g_d; DspinSignals signal_int_dspin_rsp_g2l_d; DspinSignals signal_int_dspin_p2m_l2g_c; DspinSignals signal_int_dspin_p2m_g2l_c; // INT network VCI signals between VCI components and VCI/DSPIN wrappers VciSignals signal_int_vci_ini_proc[8]; VciSignals signal_int_vci_ini_mdma; VciSignals signal_int_vci_ini_iobx; VciSignals signal_int_vci_tgt_memc; VciSignals signal_int_vci_tgt_xicu; VciSignals signal_int_vci_tgt_mdma; VciSignals signal_int_vci_tgt_iobx; // INT network DSPIN signals between DSPIN local crossbars and VCI/DSPIN // wrappers DspinSignals signal_int_dspin_cmd_proc_i[8]; DspinSignals signal_int_dspin_rsp_proc_i[8]; DspinSignals signal_int_dspin_cmd_mdma_i; DspinSignals signal_int_dspin_rsp_mdma_i; DspinSignals signal_int_dspin_cmd_iobx_i; DspinSignals signal_int_dspin_rsp_iobx_i; DspinSignals signal_int_dspin_cmd_memc_t; DspinSignals signal_int_dspin_rsp_memc_t; DspinSignals signal_int_dspin_cmd_xicu_t; DspinSignals signal_int_dspin_rsp_xicu_t; DspinSignals signal_int_dspin_cmd_mdma_t; DspinSignals signal_int_dspin_rsp_mdma_t; DspinSignals signal_int_dspin_cmd_iobx_t; DspinSignals signal_int_dspin_rsp_iobx_t; // Coherence DSPIN signals between DSPIN local crossbars and CC // components DspinSignals signal_int_dspin_m2p_memc; DspinSignals signal_int_dspin_clack_memc; DspinSignals signal_int_dspin_p2m_memc; DspinSignals signal_int_dspin_m2p_proc[8]; DspinSignals signal_int_dspin_clack_proc[8]; DspinSignals signal_int_dspin_p2m_proc[8]; // RAM network VCI signals between VCI components and VCI/DSPIN wrappers VciSignals signal_ram_vci_ini_memc; VciSignals signal_ram_vci_ini_iobx; VciSignals signal_ram_vci_tgt_xram; // RAM network DSPIN signals between VCI/DSPIN wrappers and routers DspinSignals signal_ram_dspin_cmd_xram_t; DspinSignals signal_ram_dspin_rsp_xram_t; DspinSignals signal_ram_dspin_cmd_memc_i; DspinSignals signal_ram_dspin_rsp_memc_i; ////////////////////////////////////// // Hardwate Components (pointers) ////////////////////////////////////// typedef VciCcVCacheWrapper > VciCcVCacheWrapperType; typedef VciMemCache VciMemCacheType; typedef VciDspinInitiatorWrapper VciIntDspinInitiatorWrapperType; typedef VciDspinTargetWrapper VciIntDspinTargetWrapperType; typedef VciDspinInitiatorWrapper VciExtDspinInitiatorWrapperType; typedef VciDspinTargetWrapper VciExtDspinTargetWrapperType; VciCcVCacheWrapperType* proc[8]; VciIntDspinInitiatorWrapperType* proc_wi[8]; VciMemCacheType* memc; VciIntDspinTargetWrapperType* memc_int_wt; VciExtDspinInitiatorWrapperType* memc_ram_wi; VciXicu* xicu; VciIntDspinTargetWrapperType* xicu_int_wt; VciMultiDma* mdma; VciIntDspinInitiatorWrapperType* mdma_int_wi; VciIntDspinTargetWrapperType* mdma_int_wt; DspinLocalCrossbar* int_xbar_cmd_d; DspinLocalCrossbar* int_xbar_rsp_d; DspinLocalCrossbar* int_xbar_m2p_c; DspinLocalCrossbar* int_xbar_p2m_c; DspinLocalCrossbar* int_xbar_clack_c; VirtualDspinRouter* int_router_cmd; VirtualDspinRouter* int_router_rsp; VciSimpleRam* xram; VciExtDspinTargetWrapperType* xram_ram_wt; DspinRouterTsar* ram_router_cmd; DspinRouterTsar* ram_router_rsp; // IO Network Components (not instanciated in all clusters) VciIoBridge* iob; VciIntDspinInitiatorWrapperType* iob_int_wi; VciIntDspinTargetWrapperType* iob_int_wt; VciExtDspinInitiatorWrapperType* iob_ram_wi; size_t m_procs; struct ClusterParams { sc_module_name insname; size_t nb_procs; size_t nb_dmas; size_t x_id; size_t y_id; size_t x_size; size_t y_size; const soclib::common::MappingTable &mt_int; const soclib::common::MappingTable &mt_ext; const soclib::common::MappingTable &mt_iox; size_t x_width; size_t y_width; size_t l_width; size_t int_memc_tgtid; size_t int_xicu_tgtid; size_t int_mdma_tgtid; size_t int_iobx_tgtid; size_t int_proc_srcid; size_t int_mdma_srcid; size_t int_iobx_srcid; size_t ext_xram_tgtid; size_t ext_memc_srcid; size_t ext_iobx_srcid; size_t memc_ways; size_t memc_sets; size_t l1_i_ways; size_t l1_i_sets; size_t l1_d_ways; size_t l1_d_sets; size_t xram_latency; const Loader& loader; uint32_t frozen_cycles; uint32_t debug_start_cycle; bool memc_debug_ok; bool proc_debug_ok; bool iob_debug_ok; }; // cluster constructor TsarIobCluster(struct ClusterParams& params); ~TsarIobCluster(); }; }} #endif // vim: filetype=cpp:expandtab:shiftwidth=3:tabstop=3:softtabstop=3