source: trunk/platforms/tsarv4_generic_ring/tsarv4_cluster_ring/caba/source/include/tsarv4_cluster_ring.h @ 155

Last change on this file since 155 was 155, checked in by alain, 13 years ago

ntroducing the tsarv4_generic_ring platform

File size: 6.6 KB
Line 
1//////////////////////////////////////////////////////////////////////////////
2// File: tsarv4_cluster_ring.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// This file define a TSAR cluster architecture without virtual memory,
9// - It uses virtual_dspin as distributed global interconnect
10// - It uses vci_local_ring_fast as local interconnect
11// - It uses the vci_cc_xcache_wrapper_v4
12// - It uses the vci_mem_cache_v4
13// - It contains a private RAM a variable latency to emulate the L3 cache
14// - It can contains 1, 2 or 4 processors
15// - Each processor has a private local TTY terminal (vci_multi_tty)
16// - Each processor has a private dma channel (vci_multi_dma)
17// - It uses the vci_xicu interrupt controller
18// - The nprocs tty irq are connected to IRQ_IN[0]...IRQ_IN[3]
19// - The nprocs dma irq are connected to IRQ_IN[4]...IRQ_IN[7]
20// - The peripherals BDEV, FBUF, and the boot BROM are in the cluster
21//   containing address 0xBFC00000, and the bdev_irq is connected to IRQ_IN[8]
22//////////////////////////////////////////////////////////////////////////////////
23
24#ifndef SOCLIB_CABA_TSAR_CLUSTER_V4_RING_H
25#define SOCLIB_CABA_TSAR_CLUSTER_V4_RING_H
26
27#include <systemc>
28#include <sys/time.h>
29#include <iostream>
30#include <sstream>
31#include <cstdlib>
32#include <cstdarg>
33
34#include "gdbserver.h"
35#include "mapping_table.h"
36#include "mips32.h"
37#include "vci_simple_ram.h"
38#include "vci_xicu.h"
39#include "vci_local_ring_fast.h"
40#include "virtual_dspin_router.h"
41#include "vci_multi_tty.h"
42#include "vci_block_device_tsar_v4.h"
43#include "vci_framebuffer.h"
44#include "vci_multi_dma.h"
45#include "vci_mem_cache_v4.h"
46#include "vci_cc_xcache_wrapper_v4.h"
47
48namespace soclib {
49namespace caba  {
50
51///////////////////////////////////////////////////////////////////////////
52template<typename vci_param, typename iss_t, int cmd_width, int rsp_width>
53class TsarV4ClusterRing
54///////////////////////////////////////////////////////////////////////////
55    : public soclib::caba::BaseModule
56{
57
58  public:
59
60        // Ports
61        sc_in<bool>                                             p_clk;
62        sc_in<bool>                                             p_resetn;
63        soclib::caba::DspinOutput<cmd_width>                    **p_cmd_out;
64        soclib::caba::DspinInput<cmd_width>                     **p_cmd_in;
65        soclib::caba::DspinOutput<rsp_width>                    **p_rsp_out;
66        soclib::caba::DspinInput<rsp_width>                     **p_rsp_in;
67
68        // interrupt signals
69        sc_signal<bool>                 signal_false;
70        sc_signal<bool>                 signal_proc_it[4];
71        sc_signal<bool>                 signal_irq_mdma[4];
72        sc_signal<bool>                 signal_irq_mtty;
73        sc_signal<bool>                 signal_irq_bdev;
74       
75        // DSPIN signals between local ring & global interconnects
76        DspinSignals<cmd_width>         signal_dspin_cmd_l2g_d; 
77        DspinSignals<cmd_width>         signal_dspin_cmd_g2l_d; 
78        DspinSignals<cmd_width>         signal_dspin_cmd_l2g_c;
79        DspinSignals<cmd_width>         signal_dspin_cmd_g2l_c; 
80        DspinSignals<rsp_width>         signal_dspin_rsp_l2g_d; 
81        DspinSignals<rsp_width>         signal_dspin_rsp_g2l_d; 
82        DspinSignals<rsp_width>         signal_dspin_rsp_l2g_c;
83        DspinSignals<rsp_width>         signal_dspin_rsp_g2l_c;
84
85        // Direct VCI signals
86        VciSignals<vci_param>           signal_vci_ini_d_proc[4]; 
87        VciSignals<vci_param>           signal_vci_ini_d_bdev; 
88        VciSignals<vci_param>           signal_vci_ini_d_mdma; 
89
90        VciSignals<vci_param>           signal_vci_tgt_d_memc;
91        VciSignals<vci_param>           signal_vci_tgt_d_mtty;
92        VciSignals<vci_param>           signal_vci_tgt_d_xicu;
93        VciSignals<vci_param>           signal_vci_tgt_d_bdev;
94        VciSignals<vci_param>           signal_vci_tgt_d_mdma;
95        VciSignals<vci_param>           signal_vci_tgt_d_brom;
96        VciSignals<vci_param>           signal_vci_tgt_d_fbuf;
97
98        // Coherence VCi signals
99        VciSignals<vci_param>           signal_vci_ini_c_proc[4];
100        VciSignals<vci_param>           signal_vci_tgt_c_proc[4];
101        VciSignals<vci_param>           signal_vci_ini_c_memc;
102        VciSignals<vci_param>           signal_vci_tgt_c_memc;
103
104        // external RAM VCI signal
105        VciSignals<vci_param>           signal_vci_xram;
106       
107        // Components
108
109        VciCcXCacheWrapperV4<vci_param, iss_t>*                 proc[4];
110        VciMemCacheV4<vci_param>*                               memc;
111        VciXicu<vci_param>*                                     xicu;
112        VciLocalRingFast<vci_param,cmd_width,rsp_width>*        ringd;
113        VciLocalRingFast<vci_param,cmd_width,rsp_width>*        ringc;
114        VirtualDspinRouter<cmd_width>*                          cmdrouter;
115        VirtualDspinRouter<rsp_width>*                          rsprouter;
116        VciSimpleRam<vci_param>*                                brom;
117        VciMultiTty<vci_param>*                                 mtty;
118        VciFrameBuffer<vci_param>*                              fbuf;
119        VciBlockDeviceTsarV4<vci_param>*                        bdev;
120        VciMultiDma<vci_param>*                                 mdma;
121        VciSimpleRam<vci_param>*                                xram;
122
123        TsarV4ClusterRing(      sc_module_name  insname,
124                        size_t          nprocs,                                 // number of processors
125                        size_t          n_x,                                    // x coordinate
126                        size_t          n_y,                                    // y coordinate
127                        size_t          n_cluster,                              // y + ymax*x
128                        const           soclib::common::MappingTable &mtd,      // direct mapping table
129                        const           soclib::common::MappingTable &mtc,      // coherence mapping table
130                        const           soclib::common::MappingTable &mtx,      // xram mapping table
131                        size_t          x_width,                                // x field number of bits
132                        size_t          y_width,                                // y field number of bits
133                        size_t          tgtid_memc,
134                        size_t          tgtid_xicu,
135                        size_t          tgtid_fbuf,
136                        size_t          tgtid_mtty,
137                        size_t          tgtid_brom,
138                        size_t          tgtid_bdev,
139                        size_t          tgtid_mdma,
140                        size_t          memc_ways,                              // number of ways for MEMC
141                        size_t          memc_sets,                              // number of sets for MEMC
142                        size_t          l1_i_ways,                              // number of ways for L1 ICACHE
143                        size_t          l1_i_sets,                              // number of sets for L1 ICACHE
144                        size_t          l1_d_ways,                              // number of ways for L1 DCACHE
145                        size_t          l1_d_sets,                              // number of sets for L1 DCACHE
146                        size_t          xram_latency,                           // external ram latency
147                        bool            io,                                     // I/O cluster if true
148                        size_t          xfb,                                    // frame buffer pixels
149                        size_t          yfb,                                    // frame buffer lines
150                        char*           disk_name,                              // virtual disk name for BDEV
151                        size_t          block_size,                             // block size for BDEV
152                        Loader          loader);                                // loader for BROM
153
154        ~TsarV4ClusterRing();
155};
156}}
157
158#endif
Note: See TracBrowser for help on using the repository browser.