source: trunk/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/source/include/tsar_xbar_cluster.h @ 389

Last change on this file since 389 was 389, checked in by cfuguet, 11 years ago

Modifying the tsar_generic_xbar:

  • Modifying the metadata and the sources of the tsar_xbar_cluster to support two differents VCI parameters (one for the DIRECT network and another for the EXTERNAL network).

The DIRECT network use 32 bits for VCI_DATA and the EXTERNAL network use
64 bits.

File size: 12.0 KB
Line 
1//////////////////////////////////////////////////////////////////////////////
2// File: tsar_xbar_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_XBAR_CLUSTER_H
10#define SOCLIB_CABA_TSAR_XBAR_CLUSTER_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.h"
31#include "vci_framebuffer.h"
32#include "vci_multi_dma.h"
33#include "vci_mem_cache.h"
34#include "vci_cc_vcache_wrapper.h"
35
36///////////////////////////////////////////////////////////
37//          VCI parameters for DIRECT network         
38///////////////////////////////////////////////////////////
39#define cell_width            4
40#define address_width         32
41#define plen_width            8
42#define error_width           2
43#define clen_width            1
44#define rflag_width           1
45#define srcid_width           14
46#define pktid_width           4
47#define trdid_width           4
48#define wrplen_width          1
49
50///////////////////////////////////////////////////////////
51//          VCI parameters for EXTERNAL network         
52///////////////////////////////////////////////////////////
53#define cell_width_ext        8
54#define address_width_ext     address_width
55#define plen_width_ext        plen_width   
56#define error_width_ext       error_width 
57#define clen_width_ext        clen_width   
58#define rflag_width_ext       rflag_width 
59#define srcid_width_ext       srcid_width 
60#define pktid_width_ext       pktid_width 
61#define trdid_width_ext       trdid_width 
62#define wrplen_width_ext      wrplen_width
63
64namespace soclib { namespace caba {
65
66///////////////////////////////////////////////////////////////////////////
67template<
68    typename iss_t, int cmd_width, int rsp_width
69    >
70class TsarXbarCluster
71///////////////////////////////////////////////////////////////////////////
72    : public soclib::caba::BaseModule
73{
74    // Define VCI parameters
75    typedef soclib::caba::VciParams<cell_width,
76            plen_width,
77            address_width,
78            error_width,                                   
79            clen_width,
80            rflag_width,
81            srcid_width,
82            pktid_width,
83            trdid_width,
84            wrplen_width> vci_param_d;
85
86    typedef soclib::caba::VciParamsBis<cell_width_ext,
87            plen_width_ext,
88            address_width_ext,
89            error_width_ext,                                   
90            clen_width_ext,
91            rflag_width_ext,
92            srcid_width_ext,
93            pktid_width_ext,
94            trdid_width_ext,
95            wrplen_width_ext> vci_param_x;
96
97  public:
98
99    // Ports
100    sc_in<bool>                                     p_clk;
101    sc_in<bool>                                     p_resetn;
102    soclib::caba::DspinOutput<cmd_width>            **p_cmd_out;
103    soclib::caba::DspinInput<cmd_width>             **p_cmd_in;
104    soclib::caba::DspinOutput<rsp_width>            **p_rsp_out;
105    soclib::caba::DspinInput<rsp_width>             **p_rsp_in;
106
107    // interrupt signals
108    sc_signal<bool>             signal_false;
109    sc_signal<bool>             signal_proc_it[8];
110    sc_signal<bool>             signal_irq_mdma[8];
111    sc_signal<bool>             signal_irq_mtty[23];
112    sc_signal<bool>             signal_irq_mnic_rx[8];  // unused
113    sc_signal<bool>             signal_irq_mnic_tx[8];  // unused
114    sc_signal<bool>             signal_irq_bdev;
115   
116    // DSPIN signals between DSPIN routers and local_crossbars
117    DspinSignals<cmd_width>     signal_dspin_cmd_l2g_d; 
118    DspinSignals<cmd_width>     signal_dspin_cmd_g2l_d; 
119    DspinSignals<cmd_width>     signal_dspin_m2p_l2g_c;
120    DspinSignals<cmd_width>     signal_dspin_m2p_g2l_c; 
121    DspinSignals<rsp_width>     signal_dspin_rsp_l2g_d; 
122    DspinSignals<rsp_width>     signal_dspin_rsp_g2l_d; 
123    DspinSignals<rsp_width>     signal_dspin_p2m_l2g_c;
124    DspinSignals<rsp_width>     signal_dspin_p2m_g2l_c;
125
126    // Direct VCI signals to VCI/DSPIN wrappers
127    VciSignals<vci_param_d>     signal_vci_ini_proc[8]; 
128    VciSignals<vci_param_d>     signal_vci_ini_mdma; 
129    VciSignals<vci_param_d>     signal_vci_ini_bdev; 
130
131    VciSignals<vci_param_d>     signal_vci_tgt_memc;
132    VciSignals<vci_param_d>     signal_vci_tgt_xicu;
133    VciSignals<vci_param_d>     signal_vci_tgt_mdma;
134    VciSignals<vci_param_d>     signal_vci_tgt_mtty;
135    VciSignals<vci_param_d>     signal_vci_tgt_bdev;
136    VciSignals<vci_param_d>     signal_vci_tgt_brom;
137    VciSignals<vci_param_d>     signal_vci_tgt_fbuf;
138    VciSignals<vci_param_d>     signal_vci_tgt_mnic;
139
140    // Direct DSPIN signals to local crossbars
141    DspinSignals<cmd_width>     signal_dspin_cmd_proc_i[8];
142    DspinSignals<rsp_width>     signal_dspin_rsp_proc_i[8];
143    DspinSignals<cmd_width>     signal_dspin_cmd_mdma_i;
144    DspinSignals<rsp_width>     signal_dspin_rsp_mdma_i;
145    DspinSignals<cmd_width>     signal_dspin_cmd_bdev_i;
146    DspinSignals<rsp_width>     signal_dspin_rsp_bdev_i;
147
148    DspinSignals<cmd_width>     signal_dspin_cmd_memc_t;
149    DspinSignals<rsp_width>     signal_dspin_rsp_memc_t;
150    DspinSignals<cmd_width>     signal_dspin_cmd_xicu_t;
151    DspinSignals<rsp_width>     signal_dspin_rsp_xicu_t;
152    DspinSignals<cmd_width>     signal_dspin_cmd_mdma_t;
153    DspinSignals<rsp_width>     signal_dspin_rsp_mdma_t;
154    DspinSignals<cmd_width>     signal_dspin_cmd_mtty_t;
155    DspinSignals<rsp_width>     signal_dspin_rsp_mtty_t;
156    DspinSignals<cmd_width>     signal_dspin_cmd_bdev_t;
157    DspinSignals<rsp_width>     signal_dspin_rsp_bdev_t;
158    DspinSignals<cmd_width>     signal_dspin_cmd_brom_t;
159    DspinSignals<rsp_width>     signal_dspin_rsp_brom_t;
160    DspinSignals<cmd_width>     signal_dspin_cmd_fbuf_t;
161    DspinSignals<rsp_width>     signal_dspin_rsp_fbuf_t;
162    DspinSignals<cmd_width>     signal_dspin_cmd_mnic_t;
163    DspinSignals<rsp_width>     signal_dspin_rsp_mnic_t;
164
165    // Coherence DSPIN signals to local crossbar
166    DspinSignals<cmd_width>     signal_dspin_m2p_memc;
167    DspinSignals<rsp_width>     signal_dspin_p2m_memc;
168    DspinSignals<cmd_width>     signal_dspin_m2p_proc[8];
169    DspinSignals<rsp_width>     signal_dspin_p2m_proc[8];
170
171    // external RAM VCI signal
172    VciSignals<vci_param_x>   signal_vci_xram;
173   
174    // Components
175
176    VciCcVCacheWrapper<vci_param_d, cmd_width, rsp_width, iss_t>* proc[8];
177    VciDspinInitiatorWrapper<vci_param_d,cmd_width,rsp_width>*    wi_proc[4];
178
179    VciMemCache<vci_param_d, vci_param_x, rsp_width, cmd_width> * memc;
180    VciDspinTargetWrapper<vci_param_d,cmd_width,rsp_width>*       wt_memc;
181
182    VciXicu<vci_param_d>*                                         xicu;
183    VciDspinTargetWrapper<vci_param_d,cmd_width,rsp_width>*       wt_xicu;
184
185    VciMultiDma<vci_param_d>*                                     mdma;
186    VciDspinInitiatorWrapper<vci_param_d,cmd_width,rsp_width>*    wi_mdma;
187    VciDspinTargetWrapper<vci_param_d,cmd_width,rsp_width>*       wt_mdma;
188
189    VciSimpleRam<vci_param_x>*                                    xram;
190
191    VciSimpleRam<vci_param_d>*                                    brom;
192    VciDspinTargetWrapper<vci_param_d,cmd_width,rsp_width>*       wt_brom;
193
194    VciMultiTty<vci_param_d>*                                     mtty;
195    VciDspinTargetWrapper<vci_param_d,cmd_width,rsp_width>*       wt_mtty;
196
197    VciFrameBuffer<vci_param_d>*                                  fbuf;
198    VciDspinTargetWrapper<vci_param_d,cmd_width,rsp_width>*       wt_fbuf;
199
200    VciMultiNic<vci_param_d>*                                     mnic;
201    VciDspinTargetWrapper<vci_param_d,cmd_width,rsp_width>*       wt_mnic;
202
203    VciBlockDeviceTsar<vci_param_d>*                              bdev;
204    VciDspinInitiatorWrapper<vci_param_d,cmd_width,rsp_width>*    wi_bdev;
205    VciDspinTargetWrapper<vci_param_d,cmd_width,rsp_width>*       wt_bdev;
206
207    DspinLocalCrossbar<cmd_width>*                                xbar_cmd_d;
208    DspinLocalCrossbar<rsp_width>*                                xbar_rsp_d;
209    DspinLocalCrossbar<cmd_width>*                                xbar_m2p_c;
210    DspinLocalCrossbar<rsp_width>*                                xbar_p2m_c;
211
212    VirtualDspinRouter<cmd_width>*                                router_cmd;
213    VirtualDspinRouter<rsp_width>*                                router_rsp;
214
215    TsarXbarCluster( sc_module_name                     insname,
216                     size_t                             nb_procs,      // number of processors
217                     size_t                             nb_ttys,       // number of TTY terminals
218                     size_t                             nb_dmas,       // number of DMA channels
219                     size_t                             x,             // x coordinate
220                     size_t                             y,             // y coordinate
221                     size_t                             cluster,       // y + ymax*x
222                     const soclib::common::MappingTable &mtd,          // direct mapping table
223                     const soclib::common::MappingTable &mtx,          // xram mapping table
224                     size_t                             x_width,       // x field number of bits
225                     size_t                             y_width,       // y field number of bits
226                     size_t                             l_width,       // l field number of bits
227                     size_t                             tgtid_memc,
228                     size_t                             tgtid_xicu,
229                     size_t                             tgtid_mdma,
230                     size_t                             tgtid_fbuf,
231                     size_t                             tgtid_mtty,
232                     size_t                             tgtid_brom,
233                     size_t                             tgtid_mnic,
234                     size_t                             tgtid_bdev,
235                     size_t                             memc_ways,
236                     size_t                             memc_sets,
237                     size_t                             l1_i_ways,
238                     size_t                             l1_i_sets, 
239                     size_t                             l1_d_ways,
240                     size_t                             l1_d_sets, 
241                     size_t                             xram_latency,  // external ram latency
242                     bool                               io,            // I/O cluster if true
243                     size_t                             xfb,           // frame buffer pixels
244                     size_t                             yfb,           // frame buffer lines
245                     char*                              disk_name,     // virtual disk for BDEV
246                     size_t                             block_size,    // block size for BDEV
247                     size_t                             nic_channels,  // number of channels
248                     char*                              nic_rx_name,   // file name rx packets
249                     char*                              nic_tx_name,   // file name tx packets
250                     uint32_t                           nic_timeout,   // number of cycles
251                     const Loader                       &loader,       // loader for BROM
252                     uint32_t                           frozen_cycles, // max frozen cycles
253                     uint32_t                           start_debug_cycle,
254                     bool                               memc_debug_ok, 
255                     bool                               proc_debug_ok); 
256
257    ~TsarXbarCluster();
258};
259}}
260
261#endif
Note: See TracBrowser for help on using the repository browser.