| 1 | ////////////////////////////////////////////////////////////////////////////// | 
|---|
| 2 | // File: tsarv5_cluster_mmu.h | 
|---|
| 3 | // Author: Alain Greiner | 
|---|
| 4 | // Copyright: UPMC/LIP6 | 
|---|
| 5 | // Date : march 2011 | 
|---|
| 6 | // This program is released under the GNU public license | 
|---|
| 7 | ////////////////////////////////////////////////////////////////////////////// | 
|---|
| 8 |  | 
|---|
| 9 | #ifndef SOCLIB_CABA_TSAR_CLUSTER_V5_MMU_H | 
|---|
| 10 | #define SOCLIB_CABA_TSAR_CLUSTER_V5_MMU_H | 
|---|
| 11 |  | 
|---|
| 12 | #include <systemc> | 
|---|
| 13 | #include <sys/time.h> | 
|---|
| 14 | #include <iostream> | 
|---|
| 15 | #include <sstream> | 
|---|
| 16 | #include <cstdlib> | 
|---|
| 17 | #include <cstdarg> | 
|---|
| 18 |  | 
|---|
| 19 | #include "gdbserver.h" | 
|---|
| 20 | #include "mapping_table.h" | 
|---|
| 21 | #include "mips32.h" | 
|---|
| 22 | #include "vci_simple_ram.h" | 
|---|
| 23 | #include "vci_xicu.h" | 
|---|
| 24 | #include "dspin_local_crossbar.h" | 
|---|
| 25 | #include "vci_dspin_initiator_wrapper.h" | 
|---|
| 26 | #include "vci_dspin_target_wrapper.h" | 
|---|
| 27 | #include "virtual_dspin_router.h" | 
|---|
| 28 | #include "vci_multi_tty.h" | 
|---|
| 29 | #include "vci_multi_nic.h" | 
|---|
| 30 | #include "vci_block_device_tsar_v4.h" | 
|---|
| 31 | #include "vci_framebuffer.h" | 
|---|
| 32 | #include "vci_multi_dma.h" | 
|---|
| 33 | #include "vci_mem_cache_dspin_coherence.h" | 
|---|
| 34 | #include "vci_cc_vcache_wrapper_dspin_coherence.h" | 
|---|
| 35 |  | 
|---|
| 36 | namespace soclib { namespace caba       { | 
|---|
| 37 |  | 
|---|
| 38 | /////////////////////////////////////////////////////////////////////////// | 
|---|
| 39 | template<typename vci_param, typename iss_t, int cmd_width, int rsp_width> | 
|---|
| 40 | class TsarV5ClusterMmu | 
|---|
| 41 | /////////////////////////////////////////////////////////////////////////// | 
|---|
| 42 | : public soclib::caba::BaseModule | 
|---|
| 43 | { | 
|---|
| 44 |  | 
|---|
| 45 | public: | 
|---|
| 46 |  | 
|---|
| 47 | // Ports | 
|---|
| 48 | sc_in<bool>                                         p_clk; | 
|---|
| 49 | sc_in<bool>                                         p_resetn; | 
|---|
| 50 | soclib::caba::DspinOutput<cmd_width>                    **p_cmd_out; | 
|---|
| 51 | soclib::caba::DspinInput<cmd_width>                     **p_cmd_in; | 
|---|
| 52 | soclib::caba::DspinOutput<rsp_width>                **p_rsp_out; | 
|---|
| 53 | soclib::caba::DspinInput<rsp_width>                 **p_rsp_in; | 
|---|
| 54 |  | 
|---|
| 55 | // interrupt signals | 
|---|
| 56 | sc_signal<bool>         signal_false; | 
|---|
| 57 | sc_signal<bool>                 signal_proc_it[8]; | 
|---|
| 58 | sc_signal<bool>                 signal_irq_mdma[8]; | 
|---|
| 59 | sc_signal<bool>                 signal_irq_mtty[23]; | 
|---|
| 60 | sc_signal<bool>                 signal_irq_mnic_rx[8];  // unused | 
|---|
| 61 | sc_signal<bool>                 signal_irq_mnic_tx[8];  // unused | 
|---|
| 62 | sc_signal<bool>                 signal_irq_bdev; | 
|---|
| 63 |  | 
|---|
| 64 | // DSPIN signals between DSPIN routers and local_crossbars | 
|---|
| 65 | DspinSignals<cmd_width>         signal_dspin_cmd_l2g_d; | 
|---|
| 66 | DspinSignals<cmd_width>         signal_dspin_cmd_g2l_d; | 
|---|
| 67 | DspinSignals<cmd_width>         signal_dspin_m2p_l2g_c; | 
|---|
| 68 | DspinSignals<cmd_width>         signal_dspin_m2p_g2l_c; | 
|---|
| 69 | DspinSignals<rsp_width>         signal_dspin_rsp_l2g_d; | 
|---|
| 70 | DspinSignals<rsp_width>         signal_dspin_rsp_g2l_d; | 
|---|
| 71 | DspinSignals<rsp_width>         signal_dspin_p2m_l2g_c; | 
|---|
| 72 | DspinSignals<rsp_width>         signal_dspin_p2m_g2l_c; | 
|---|
| 73 |  | 
|---|
| 74 | // Direct VCI signals to VCI/DSPIN wrappers | 
|---|
| 75 | VciSignals<vci_param>           signal_vci_ini_proc[8]; | 
|---|
| 76 | VciSignals<vci_param>           signal_vci_ini_mdma; | 
|---|
| 77 | VciSignals<vci_param>           signal_vci_ini_bdev; | 
|---|
| 78 |  | 
|---|
| 79 | VciSignals<vci_param>           signal_vci_tgt_memc; | 
|---|
| 80 | VciSignals<vci_param>           signal_vci_tgt_xicu; | 
|---|
| 81 | VciSignals<vci_param>           signal_vci_tgt_mdma; | 
|---|
| 82 | VciSignals<vci_param>           signal_vci_tgt_mtty; | 
|---|
| 83 | VciSignals<vci_param>           signal_vci_tgt_bdev; | 
|---|
| 84 | VciSignals<vci_param>           signal_vci_tgt_brom; | 
|---|
| 85 | VciSignals<vci_param>           signal_vci_tgt_fbuf; | 
|---|
| 86 | VciSignals<vci_param>           signal_vci_tgt_mnic; | 
|---|
| 87 |  | 
|---|
| 88 | // Direct DSPIN signals to local crossbars | 
|---|
| 89 | DspinSignals<cmd_width>     signal_dspin_cmd_proc_i[8]; | 
|---|
| 90 | DspinSignals<rsp_width>     signal_dspin_rsp_proc_i[8]; | 
|---|
| 91 | DspinSignals<cmd_width>     signal_dspin_cmd_mdma_i; | 
|---|
| 92 | DspinSignals<rsp_width>     signal_dspin_rsp_mdma_i; | 
|---|
| 93 | DspinSignals<cmd_width>     signal_dspin_cmd_bdev_i; | 
|---|
| 94 | DspinSignals<rsp_width>     signal_dspin_rsp_bdev_i; | 
|---|
| 95 |  | 
|---|
| 96 | DspinSignals<cmd_width>     signal_dspin_cmd_memc_t; | 
|---|
| 97 | DspinSignals<rsp_width>     signal_dspin_rsp_memc_t; | 
|---|
| 98 | DspinSignals<cmd_width>     signal_dspin_cmd_xicu_t; | 
|---|
| 99 | DspinSignals<rsp_width>     signal_dspin_rsp_xicu_t; | 
|---|
| 100 | DspinSignals<cmd_width>     signal_dspin_cmd_mdma_t; | 
|---|
| 101 | DspinSignals<rsp_width>     signal_dspin_rsp_mdma_t; | 
|---|
| 102 | DspinSignals<cmd_width>     signal_dspin_cmd_mtty_t; | 
|---|
| 103 | DspinSignals<rsp_width>     signal_dspin_rsp_mtty_t; | 
|---|
| 104 | DspinSignals<cmd_width>     signal_dspin_cmd_bdev_t; | 
|---|
| 105 | DspinSignals<rsp_width>     signal_dspin_rsp_bdev_t; | 
|---|
| 106 | DspinSignals<cmd_width>     signal_dspin_cmd_brom_t; | 
|---|
| 107 | DspinSignals<rsp_width>     signal_dspin_rsp_brom_t; | 
|---|
| 108 | DspinSignals<cmd_width>     signal_dspin_cmd_fbuf_t; | 
|---|
| 109 | DspinSignals<rsp_width>     signal_dspin_rsp_fbuf_t; | 
|---|
| 110 | DspinSignals<cmd_width>     signal_dspin_cmd_mnic_t; | 
|---|
| 111 | DspinSignals<rsp_width>     signal_dspin_rsp_mnic_t; | 
|---|
| 112 |  | 
|---|
| 113 | // Coherence DSPIN signals to local crossbar | 
|---|
| 114 | DspinSignals<cmd_width>     signal_dspin_m2p_memc; | 
|---|
| 115 | DspinSignals<rsp_width>     signal_dspin_p2m_memc; | 
|---|
| 116 | DspinSignals<cmd_width>     signal_dspin_m2p_proc[8]; | 
|---|
| 117 | DspinSignals<rsp_width>     signal_dspin_p2m_proc[8]; | 
|---|
| 118 |  | 
|---|
| 119 | // external RAM VCI signal | 
|---|
| 120 | VciSignals<vci_param>           signal_vci_xram; | 
|---|
| 121 |  | 
|---|
| 122 | // Components | 
|---|
| 123 |  | 
|---|
| 124 | VciCcVCacheWrapper<vci_param, iss_t>*                           proc[8]; | 
|---|
| 125 | VciDspinInitiatorWrapper<vci_param,cmd_width,rsp_width>*    wi_proc[4]; | 
|---|
| 126 |  | 
|---|
| 127 | VciMemCache<vci_param>*                                         memc; | 
|---|
| 128 | VciDspinTargetWrapper<vci_param,cmd_width,rsp_width>*       wt_memc; | 
|---|
| 129 |  | 
|---|
| 130 | VciXicu<vci_param>*                                         xicu; | 
|---|
| 131 | VciDspinTargetWrapper<vci_param,cmd_width,rsp_width>*       wt_xicu; | 
|---|
| 132 |  | 
|---|
| 133 | VciMultiDma<vci_param>*                                     mdma; | 
|---|
| 134 | VciDspinInitiatorWrapper<vci_param,cmd_width,rsp_width>*    wi_mdma; | 
|---|
| 135 | VciDspinTargetWrapper<vci_param,cmd_width,rsp_width>*       wt_mdma; | 
|---|
| 136 |  | 
|---|
| 137 | VciSimpleRam<vci_param>*                                    xram; | 
|---|
| 138 | VciDspinTargetWrapper<vci_param,cmd_width,rsp_width>*       wt_xram; | 
|---|
| 139 |  | 
|---|
| 140 | VciSimpleRam<vci_param>*                                    brom; | 
|---|
| 141 | VciDspinTargetWrapper<vci_param,cmd_width,rsp_width>*       wt_brom; | 
|---|
| 142 |  | 
|---|
| 143 | VciMultiTty<vci_param>*                                     mtty; | 
|---|
| 144 | VciDspinTargetWrapper<vci_param,cmd_width,rsp_width>*       wt_mtty; | 
|---|
| 145 |  | 
|---|
| 146 | VciFrameBuffer<vci_param>*                                  fbuf; | 
|---|
| 147 | VciDspinTargetWrapper<vci_param,cmd_width,rsp_width>*       wt_fbuf; | 
|---|
| 148 |  | 
|---|
| 149 | VciMultiNic<vci_param>*                                     mnic; | 
|---|
| 150 | VciDspinTargetWrapper<vci_param,cmd_width,rsp_width>*       wt_mnic; | 
|---|
| 151 |  | 
|---|
| 152 | VciBlockDeviceTsarV4<vci_param>*                            bdev; | 
|---|
| 153 | VciDspinInitiatorWrapper<vci_param,cmd_width,rsp_width>*    wi_bdev; | 
|---|
| 154 | VciDspinTargetWrapper<vci_param,cmd_width,rsp_width>*       wt_bdev; | 
|---|
| 155 |  | 
|---|
| 156 | DspinLocalCrossbar<cmd_width>*                              xbar_cmd_d; | 
|---|
| 157 | DspinLocalCrossbar<rsp_width>*                              xbar_rsp_d; | 
|---|
| 158 | DspinLocalCrossbar<cmd_width>*                              xbar_m2p_c; | 
|---|
| 159 | DspinLocalCrossbar<rsp_width>*                              xbar_p2m_c; | 
|---|
| 160 |  | 
|---|
| 161 | VirtualDspinRouter<cmd_width>*                                      router_cmd; | 
|---|
| 162 | VirtualDspinRouter<rsp_width>*                              router_rsp; | 
|---|
| 163 |  | 
|---|
| 164 | TsarV5ClusterMmu(sc_module_name                     insname, | 
|---|
| 165 | size_t                             nb_procs,      // number of processors | 
|---|
| 166 | size_t                             nb_ttys,       // number of TTY terminals | 
|---|
| 167 | size_t                             nb_dmas,       // number of DMA channels | 
|---|
| 168 | size_t                             x,             // x coordinate | 
|---|
| 169 | size_t                             y,             // y coordinate | 
|---|
| 170 | size_t                             cluster,       // y + ymax*x | 
|---|
| 171 | const soclib::common::MappingTable &mtd,          // direct mapping table | 
|---|
| 172 | const soclib::common::MappingTable &mtx,          // xram mapping table | 
|---|
| 173 | size_t                                 x_width,       // x field number of bits | 
|---|
| 174 | size_t                                 y_width,       // y field number of bits | 
|---|
| 175 | size_t                                 l_width,       // l field number of bits | 
|---|
| 176 | size_t                                 tgtid_memc, | 
|---|
| 177 | size_t                                 tgtid_xicu, | 
|---|
| 178 | size_t                             tgtid_mdma, | 
|---|
| 179 | size_t                                 tgtid_fbuf, | 
|---|
| 180 | size_t                             tgtid_mtty, | 
|---|
| 181 | size_t                             tgtid_brom, | 
|---|
| 182 | size_t                             tgtid_mnic, | 
|---|
| 183 | size_t                             tgtid_bdev, | 
|---|
| 184 | size_t                             memc_ways, | 
|---|
| 185 | size_t                             memc_sets, | 
|---|
| 186 | size_t                             l1_i_ways, | 
|---|
| 187 | size_t                             l1_i_sets, | 
|---|
| 188 | size_t                             l1_d_ways, | 
|---|
| 189 | size_t                             l1_d_sets, | 
|---|
| 190 | size_t                             xram_latency,  // external ram latency | 
|---|
| 191 | bool                               io,                // I/O cluster if true | 
|---|
| 192 | size_t                             xfb,           // frame buffer pixels | 
|---|
| 193 | size_t                             yfb,           // frame buffer lines | 
|---|
| 194 | char*                              disk_name,     // virtual disk for BDEV | 
|---|
| 195 | size_t                             block_size,    // block size for BDEV | 
|---|
| 196 | size_t                             nic_channels,  // number of channels | 
|---|
| 197 | char*                              nic_rx_name,   // file name rx packets | 
|---|
| 198 | char*                              nic_tx_name,   // file name tx packets | 
|---|
| 199 | uint32_t                                                   nic_timeout,   // number of cycles | 
|---|
| 200 | const Loader                       &loader,       // loader for BROM | 
|---|
| 201 | uint32_t                           frozen_cycles, // max frozen cycles | 
|---|
| 202 | uint32_t                           start_debug_cycle, | 
|---|
| 203 | bool                               memc_debug_ok, | 
|---|
| 204 | bool                               proc_debug_ok); | 
|---|
| 205 |  | 
|---|
| 206 | ~TsarV5ClusterMmu(); | 
|---|
| 207 | }; | 
|---|
| 208 | }} | 
|---|
| 209 |  | 
|---|
| 210 | #endif | 
|---|