////////////////////////////////////////////////////////////////////////////// // File: tsar_xbar_cluster_mmu.h // Author: Alain Greiner // Copyright: UPMC/LIP6 // Date : march 2011 // This program is released under the GNU public license ////////////////////////////////////////////////////////////////////////////// #ifndef SOCLIB_CABA_TSAR_XBAR_CLUSTER_H #define SOCLIB_CABA_TSAR_XBAR_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 "virtual_dspin_router.h" #include "vci_multi_tty.h" #include "vci_multi_nic.h" #include "vci_block_device_tsar.h" #include "vci_framebuffer.h" #include "vci_multi_dma.h" #include "vci_mem_cache.h" #include "vci_cc_vcache_wrapper.h" /////////////////////////////////////////////////////////// // VCI parameters for DIRECT network /////////////////////////////////////////////////////////// #define cell_width 4 #define address_width 32 #define plen_width 8 #define error_width 2 #define clen_width 1 #define rflag_width 1 #define srcid_width 14 #define pktid_width 4 #define trdid_width 4 #define wrplen_width 1 /////////////////////////////////////////////////////////// // VCI parameters for EXTERNAL network /////////////////////////////////////////////////////////// #define cell_width_ext 8 #define address_width_ext address_width #define plen_width_ext plen_width #define error_width_ext error_width #define clen_width_ext clen_width #define rflag_width_ext rflag_width #define srcid_width_ext srcid_width #define pktid_width_ext pktid_width #define trdid_width_ext trdid_width #define wrplen_width_ext wrplen_width namespace soclib { namespace caba { /////////////////////////////////////////////////////////////////////////// template< typename iss_t, int cmd_width, int rsp_width > class TsarXbarCluster /////////////////////////////////////////////////////////////////////////// : public soclib::caba::BaseModule { // Define VCI parameters typedef soclib::caba::VciParams vci_param_d; typedef soclib::caba::VciParamsBis vci_param_x; public: // Ports sc_in p_clk; sc_in p_resetn; soclib::caba::DspinOutput **p_cmd_out; soclib::caba::DspinInput **p_cmd_in; soclib::caba::DspinOutput **p_rsp_out; soclib::caba::DspinInput **p_rsp_in; // interrupt signals sc_signal signal_false; sc_signal signal_proc_it[8]; sc_signal signal_irq_mdma[8]; sc_signal signal_irq_mtty[23]; sc_signal signal_irq_mnic_rx[8]; // unused sc_signal signal_irq_mnic_tx[8]; // unused sc_signal signal_irq_bdev; // DSPIN signals between DSPIN routers and local_crossbars DspinSignals signal_dspin_cmd_l2g_d; DspinSignals signal_dspin_cmd_g2l_d; DspinSignals signal_dspin_m2p_l2g_c; DspinSignals signal_dspin_m2p_g2l_c; DspinSignals signal_dspin_rsp_l2g_d; DspinSignals signal_dspin_rsp_g2l_d; DspinSignals signal_dspin_p2m_l2g_c; DspinSignals signal_dspin_p2m_g2l_c; // Direct VCI signals to VCI/DSPIN wrappers VciSignals signal_vci_ini_proc[8]; VciSignals signal_vci_ini_mdma; VciSignals signal_vci_ini_bdev; VciSignals signal_vci_tgt_memc; VciSignals signal_vci_tgt_xicu; VciSignals signal_vci_tgt_mdma; VciSignals signal_vci_tgt_mtty; VciSignals signal_vci_tgt_bdev; VciSignals signal_vci_tgt_brom; VciSignals signal_vci_tgt_fbuf; VciSignals signal_vci_tgt_mnic; // Direct DSPIN signals to local crossbars DspinSignals signal_dspin_cmd_proc_i[8]; DspinSignals signal_dspin_rsp_proc_i[8]; DspinSignals signal_dspin_cmd_mdma_i; DspinSignals signal_dspin_rsp_mdma_i; DspinSignals signal_dspin_cmd_bdev_i; DspinSignals signal_dspin_rsp_bdev_i; DspinSignals signal_dspin_cmd_memc_t; DspinSignals signal_dspin_rsp_memc_t; DspinSignals signal_dspin_cmd_xicu_t; DspinSignals signal_dspin_rsp_xicu_t; DspinSignals signal_dspin_cmd_mdma_t; DspinSignals signal_dspin_rsp_mdma_t; DspinSignals signal_dspin_cmd_mtty_t; DspinSignals signal_dspin_rsp_mtty_t; DspinSignals signal_dspin_cmd_bdev_t; DspinSignals signal_dspin_rsp_bdev_t; DspinSignals signal_dspin_cmd_brom_t; DspinSignals signal_dspin_rsp_brom_t; DspinSignals signal_dspin_cmd_fbuf_t; DspinSignals signal_dspin_rsp_fbuf_t; DspinSignals signal_dspin_cmd_mnic_t; DspinSignals signal_dspin_rsp_mnic_t; // Coherence DSPIN signals to local crossbar DspinSignals signal_dspin_m2p_memc; DspinSignals signal_dspin_p2m_memc; DspinSignals signal_dspin_m2p_proc[8]; DspinSignals signal_dspin_p2m_proc[8]; // external RAM VCI signal VciSignals signal_vci_xram; // Components VciCcVCacheWrapper* proc[8]; VciDspinInitiatorWrapper* wi_proc[4]; VciMemCache * memc; VciDspinTargetWrapper* wt_memc; VciXicu* xicu; VciDspinTargetWrapper* wt_xicu; VciMultiDma* mdma; VciDspinInitiatorWrapper* wi_mdma; VciDspinTargetWrapper* wt_mdma; VciSimpleRam* xram; VciSimpleRam* brom; VciDspinTargetWrapper* wt_brom; VciMultiTty* mtty; VciDspinTargetWrapper* wt_mtty; VciFrameBuffer* fbuf; VciDspinTargetWrapper* wt_fbuf; VciMultiNic* mnic; VciDspinTargetWrapper* wt_mnic; VciBlockDeviceTsar* bdev; VciDspinInitiatorWrapper* wi_bdev; VciDspinTargetWrapper* wt_bdev; DspinLocalCrossbar* xbar_cmd_d; DspinLocalCrossbar* xbar_rsp_d; DspinLocalCrossbar* xbar_m2p_c; DspinLocalCrossbar* xbar_p2m_c; VirtualDspinRouter* router_cmd; VirtualDspinRouter* router_rsp; TsarXbarCluster( sc_module_name insname, size_t nb_procs, // number of processors size_t nb_ttys, // number of TTY terminals size_t nb_dmas, // number of DMA channels size_t x, // x coordinate size_t y, // y coordinate size_t cluster, // y + ymax*x const soclib::common::MappingTable &mtd, // direct mapping table const soclib::common::MappingTable &mtx, // xram mapping table size_t x_width, // x field number of bits size_t y_width, // y field number of bits size_t l_width, // l field number of bits size_t tgtid_memc, size_t tgtid_xicu, size_t tgtid_mdma, size_t tgtid_fbuf, size_t tgtid_mtty, size_t tgtid_brom, size_t tgtid_mnic, size_t tgtid_bdev, 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, // external ram latency bool io, // I/O cluster if true size_t xfb, // frame buffer pixels size_t yfb, // frame buffer lines char* disk_name, // virtual disk for BDEV size_t block_size, // block size for BDEV size_t nic_channels, // number of channels char* nic_rx_name, // file name rx packets char* nic_tx_name, // file name tx packets uint32_t nic_timeout, // number of cycles const Loader &loader, // loader for BROM uint32_t frozen_cycles, // max frozen cycles uint32_t start_debug_cycle, bool memc_debug_ok, bool proc_debug_ok); ~TsarXbarCluster(); }; }} #endif