////////////////////////////////////////////////////////////////////////////// // File: tsarv4_cluster_xbar.h // Author: Alain Greiner // Copyright: UPMC/LIP6 // Date : march 2011 // This program is released under the GNU public license ////////////////////////////////////////////////////////////////////////////// // This file define a TSAR cluster architecture without virtual memory, // - It uses the virtual_dspin_router as distributed global interconnect // - It uses the vci_local_crossbar as local interconnect // - It uses the vci_cc_xcache_wrapper_v4 // - It uses the vci_mem_cache_v4 // - It contains a private RAM a variable latency to emulate the L3 cache // - It can contains 1, 2 or 4 processors // - Each processor has a private local TTY terminal (vci_multi_tty) // - Each processor has a private dma channel (vci_multi_dma) // - It uses the vci_xicu interrupt controller // - The nprocs tty irq are connected to IRQ_IN[0]...IRQ_IN[3] // - The nprocs dma irq are connected to IRQ_IN[4]...IRQ_IN[7] // - The peripherals BDEV, FBUF, and the boot BROM are in the cluster // containing address 0xBFC00000, and the bdev_irq is connected to IRQ_IN[8] ////////////////////////////////////////////////////////////////////////////////// #ifndef SOCLIB_CABA_TSAR_CLUSTER_V4_XBAR_H #define SOCLIB_CABA_TSAR_CLUSTER_V4_XBAR_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 "virtual_dspin_router.h" #include "vci_vdspin_target_wrapper.h" #include "vci_vdspin_initiator_wrapper.h" #include "vci_multi_tty.h" #include "vci_block_device_tsar_v4.h" #include "vci_framebuffer.h" #include "vci_multi_dma.h" #include "vci_mem_cache_v4.h" #include "vci_cc_xcache_wrapper_v4.h" namespace soclib { namespace caba { /////////////////////////////////////////////////////////////////////////// template class TsarV4ClusterXbar /////////////////////////////////////////////////////////////////////////// : public soclib::caba::BaseModule { 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[4]; sc_signal signal_irq_mdma[4]; sc_signal signal_irq_mtty; sc_signal signal_irq_bdev; // DSPIN signals between DSPIN routers and VCI/DSPIN wrappers DspinSignals signal_dspin_cmd_l2g_d; DspinSignals signal_dspin_cmd_g2l_d; DspinSignals signal_dspin_cmd_l2g_c; DspinSignals signal_dspin_cmd_g2l_c; DspinSignals signal_dspin_rsp_l2g_d; DspinSignals signal_dspin_rsp_g2l_d; DspinSignals signal_dspin_rsp_l2g_c; DspinSignals signal_dspin_rsp_g2l_c; // VCI signals between VCI/DSPIN wrappers and local crossbars VciSignals signal_vci_l2g_d; VciSignals signal_vci_g2l_d; VciSignals signal_vci_l2g_c; VciSignals signal_vci_g2l_c; // Direct VCI signals VciSignals signal_vci_ini_d_proc[4]; VciSignals signal_vci_ini_d_bdev; VciSignals signal_vci_ini_d_mdma; VciSignals signal_vci_tgt_d_memc; VciSignals signal_vci_tgt_d_mtty; VciSignals signal_vci_tgt_d_xicu; VciSignals signal_vci_tgt_d_bdev; VciSignals signal_vci_tgt_d_mdma; VciSignals signal_vci_tgt_d_brom; VciSignals signal_vci_tgt_d_fbuf; // Coherence VCi signals VciSignals signal_vci_ini_c_proc[4]; VciSignals signal_vci_tgt_c_proc[4]; VciSignals signal_vci_ini_c_memc; VciSignals signal_vci_tgt_c_memc; // external RAM VCI signal VciSignals signal_vci_xram; // Components VciCcXCacheWrapperV4* proc[4]; VciMemCacheV4* memc; VciXicu* xicu; VciLocalCrossbar* xbard; VciLocalCrossbar* xbarc; VciVdspinTargetWrapper* tgtwrapperd; VciVdspinInitiatorWrapper* iniwrapperd; VciVdspinTargetWrapper* tgtwrapperc; VciVdspinInitiatorWrapper* iniwrapperc; VirtualDspinRouter* cmdrouter; VirtualDspinRouter* rsprouter; VciSimpleRam* brom; VciMultiTty* mtty; VciFrameBuffer* fbuf; VciBlockDeviceTsarV4* bdev; VciMultiDma* mdma; VciSimpleRam* xram; TsarV4ClusterXbar( sc_module_name insname, size_t nprocs, // number of processors size_t n_x, // x coordinate size_t n_y, // y coordinate size_t n_cluster, // y + ymax*x const soclib::common::MappingTable &mtd, // direct mapping table const soclib::common::MappingTable &mtc, // coherence 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 tgtid_memc, size_t tgtid_xicu, size_t tgtid_fbuf, size_t tgtid_mtty, size_t tgtid_brom, size_t tgtid_bdev, size_t tgtid_mdma, size_t memc_ways, // number of ways for MEMC size_t memc_sets, // number of sets for MEMC size_t l1_i_ways, // number of ways for L1 ICACHE size_t l1_i_sets, // number of sets for L1 ICACHE size_t l1_d_ways, // number of ways for L1 DCACHE size_t l1_d_sets, // number of sets for L1 DCACHE 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 name for BDEV size_t block_size, // block size for BDEV Loader loader); // loader for BROM ~TsarV4ClusterXbar(); }; }} #endif