////////////////////////////////////////////////////////////////////////////// // 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 "vci_local_crossbar.h" #include "dspin_local_crossbar.h" #include "vci_dspin_initiator_wrapper.h" #include "vci_dspin_target_wrapper.h" #include "dspin_router.h" #include "vci_multi_dma.h" #include "vci_mem_cache.h" #include "vci_cc_vcache_wrapper.h" #include "vci_io_bridge.h" #include "vci_simple_rom.h" namespace soclib { namespace caba { /////////////////////////////////////////////////////////////////////////// template class TsarIobCluster /////////////////////////////////////////////////////////////////////////// : public soclib::caba::BaseModule { public: // Ports sc_in p_clk; sc_in p_resetn; sc_in p_false; // 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 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_proc_it[16]; sc_signal signal_irq_mdma[8]; sc_signal signal_irq_memc; sc_signal signal_cfg_router_cmd[3]; sc_signal signal_cfg_router_rsp[2]; sc_signal signal_cfg_xbar_barrier; // 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 local crossbar 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_drom; VciSignals signal_int_vci_tgt_iobx; VciSignals signal_int_vci_l2g; VciSignals signal_int_vci_g2l; // 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, RAM dspin crossbar // 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; DspinSignals signal_ram_dspin_cmd_iob_i; DspinSignals signal_ram_dspin_rsp_iob_i; DspinSignals signal_ram_dspin_cmd_xbar; DspinSignals signal_ram_dspin_rsp_xbar; DspinSignals signal_ram_dspin_cmd_false; DspinSignals signal_ram_dspin_rsp_false; ////////////////////////////////////// // Hardwate Components (pointers) ////////////////////////////////////// VciCcVCacheWrapper >* proc[8]; VciMemCache* memc; VciDspinInitiatorWrapper* memc_ram_wi; VciXicu* xicu; VciMultiDma* mdma; VciSimpleRom* drom; VciLocalCrossbar* int_xbar_d; VciDspinInitiatorWrapper* int_wi_gate_d; VciDspinTargetWrapper* int_wt_gate_d; DspinLocalCrossbar* int_xbar_m2p_c; DspinLocalCrossbar* int_xbar_p2m_c; DspinLocalCrossbar* int_xbar_clack_c; DspinRouter** int_router_cmd; DspinRouter** int_router_rsp; VciSimpleRam* xram; VciDspinTargetWrapper* xram_ram_wt; DspinRouter* ram_router_cmd; DspinRouter* ram_router_rsp; DspinLocalCrossbar* ram_xbar_cmd; DspinLocalCrossbar* ram_xbar_rsp; // IO Network Components (not instanciated in all clusters) VciIoBridge* iob; VciDspinInitiatorWrapper* iob_ram_wi; // cluster constructor TsarIobCluster( sc_module_name insname, size_t nb_procs, size_t nb_dmas, size_t x, // x coordinate size_t y, // y coordinate size_t x_size, size_t y_size, size_t p_width, // pid field bits const soclib::common::MappingTable &mt_int, const soclib::common::MappingTable &mt_ext, const soclib::common::MappingTable &mt_iox, size_t x_width, // x field bits size_t y_width, // y field bits size_t l_width, // l field bits size_t int_memc_tgt_id, size_t int_xicu_tgt_id, size_t int_mdma_tgt_id, size_t int_drom_tgt_id, size_t int_iobx_tgt_id, size_t int_proc_ini_id, size_t int_mdma_ini_id, size_t int_iobx_ini_id, size_t ram_xram_tgt_id, size_t ram_memc_ini_id, size_t ram_iobx_ini_id, bool is_io, size_t iox_iobx_tgt_id, size_t iox_iobx_ini_id, 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, size_t xcu_nb_hwi, size_t xcu_nb_pti, size_t xcu_nb_wti, size_t xcu_nb_out, size_t irq_per_proc, bool disable_procs, const Loader &loader, // loader for XRAM uint32_t frozen_cycles, uint32_t start_debug_cycle, bool memc_debug_ok, bool proc_debug_ok, bool iob0_debug_ok ); ~TsarIobCluster(); protected: const size_t m_nb_procs; const bool m_disable_procs; SC_HAS_PROCESS(TsarIobCluster); void init(); }; }} #endif // Local Variables: // tab-width: 4 // c-basic-offset: 4 // c-file-offsets:((innamespace . 0)(inline-open . 0)) // indent-tabs-mode: nil // End: // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4 //