source: trunk/platforms/tsar_generic_3d/tsar_super_cluster/caba/source/include/tsar_super_cluster.h @ 1040

Last change on this file since 1040 was 1040, checked in by bouyer, 8 years ago

Add a platform using the new dspin 3d router.
Only giet-vm is suported at this time.
The software is not aware of the 3d layout; the software's y
dimention is subdivided in hardware y and z.

File size: 8.2 KB
Line 
1//////////////////////////////////////////////////////////////////////////////
2// File: tsar_super_cluster.h
3// Author: Manuel Bouyer
4// Copyright: UPMC/LIP6
5// Date : march 2016
6// This program is released under the GNU public license
7//////////////////////////////////////////////////////////////////////////////
8
9#ifndef SOCLIB_CABA_TSAR_SUPER_CLUSTER_H
10#define SOCLIB_CABA_TSAR_SUPER_CLUSTER_H
11
12#include <systemc>
13#include <sys/time.h>
14#include <iostream>
15#include <sstream>
16#include <cstdlib>
17#include <cstdarg>
18#include <stdint.h>
19#include "dspin_router_3d.h"
20#include "tsar_xbar_cluster.h"
21
22namespace soclib { namespace caba {
23
24///////////////////////////////////////////////////////////////////////////
25template<size_t dspin_cmd_width,
26         size_t dspin_rsp_width,
27         typename vci_param_int,
28         typename vci_param_ext>  class TsarSuperCluster
29///////////////////////////////////////////////////////////////////////////
30    : public soclib::caba::BaseModule
31{
32    private:
33    // Horizontal inter-clusters DSPIN signals
34    DspinSignals<dspin_cmd_width>** signal_dspin_h_cmd_inc;
35    DspinSignals<dspin_cmd_width>** signal_dspin_h_cmd_dec;
36    DspinSignals<dspin_rsp_width>** signal_dspin_h_rsp_inc;
37    DspinSignals<dspin_rsp_width>** signal_dspin_h_rsp_dec;
38    DspinSignals<dspin_cmd_width>** signal_dspin_h_m2p_inc;
39    DspinSignals<dspin_cmd_width>** signal_dspin_h_m2p_dec;
40    DspinSignals<dspin_rsp_width>** signal_dspin_h_p2m_inc;
41    DspinSignals<dspin_rsp_width>** signal_dspin_h_p2m_dec;
42    DspinSignals<dspin_cmd_width>** signal_dspin_h_cla_inc;
43    DspinSignals<dspin_cmd_width>** signal_dspin_h_cla_dec;
44
45    // Vertical inter-clusters DSPIN signals
46    DspinSignals<dspin_cmd_width>** signal_dspin_v_cmd_inc;
47    DspinSignals<dspin_cmd_width>** signal_dspin_v_cmd_dec;
48    DspinSignals<dspin_rsp_width>** signal_dspin_v_rsp_inc;
49    DspinSignals<dspin_rsp_width>** signal_dspin_v_rsp_dec;
50    DspinSignals<dspin_cmd_width>** signal_dspin_v_m2p_inc;
51    DspinSignals<dspin_cmd_width>** signal_dspin_v_m2p_dec;
52    DspinSignals<dspin_rsp_width>** signal_dspin_v_p2m_inc;
53    DspinSignals<dspin_rsp_width>** signal_dspin_v_p2m_dec;
54    DspinSignals<dspin_cmd_width>** signal_dspin_v_cla_inc;
55    DspinSignals<dspin_cmd_width>** signal_dspin_v_cla_dec;
56
57    // Z signals
58    DspinSignals<dspin_cmd_width>** signal_dspin_zu_cmd_inc;
59    DspinSignals<dspin_cmd_width>** signal_dspin_zu_cmd_dec;
60    DspinSignals<dspin_rsp_width>** signal_dspin_zu_rsp_inc;
61    DspinSignals<dspin_rsp_width>** signal_dspin_zu_rsp_dec;
62    DspinSignals<dspin_cmd_width>** signal_dspin_zu_m2p_inc;
63    DspinSignals<dspin_cmd_width>** signal_dspin_zu_m2p_dec;
64    DspinSignals<dspin_rsp_width>** signal_dspin_zu_p2m_inc;
65    DspinSignals<dspin_rsp_width>** signal_dspin_zu_p2m_dec;
66    DspinSignals<dspin_cmd_width>** signal_dspin_zu_cla_inc;
67    DspinSignals<dspin_cmd_width>** signal_dspin_zu_cla_dec;
68    DspinSignals<dspin_cmd_width>** signal_dspin_zd_cmd_inc;
69    DspinSignals<dspin_cmd_width>** signal_dspin_zd_cmd_dec;
70    DspinSignals<dspin_rsp_width>** signal_dspin_zd_rsp_inc;
71    DspinSignals<dspin_rsp_width>** signal_dspin_zd_rsp_dec;
72    DspinSignals<dspin_cmd_width>** signal_dspin_zd_m2p_inc;
73    DspinSignals<dspin_cmd_width>** signal_dspin_zd_m2p_dec;
74    DspinSignals<dspin_rsp_width>** signal_dspin_zd_p2m_inc;
75    DspinSignals<dspin_rsp_width>** signal_dspin_zd_p2m_dec;
76    DspinSignals<dspin_cmd_width>** signal_dspin_zd_cla_inc;
77    DspinSignals<dspin_cmd_width>** signal_dspin_zd_cla_dec;
78
79    const size_t m_x_size;
80    const size_t m_y_size;
81    const size_t m_z_id;
82
83    const size_t m_x_width;
84    const size_t m_y_width;
85    const size_t m_z_width;
86
87    public:
88
89    // Ports
90    sc_in<bool>                                     p_clk;
91    sc_in<bool>                                     p_resetn;
92
93    soclib::caba::DspinOutput<dspin_cmd_width>      *p_cmd_out;
94    soclib::caba::DspinInput<dspin_cmd_width>       *p_cmd_in;
95
96    soclib::caba::DspinOutput<dspin_rsp_width>      *p_rsp_out;
97    soclib::caba::DspinInput<dspin_rsp_width>       *p_rsp_in;
98
99    soclib::caba::DspinOutput<dspin_cmd_width>      *p_m2p_out;
100    soclib::caba::DspinInput<dspin_cmd_width>       *p_m2p_in;
101
102    soclib::caba::DspinOutput<dspin_rsp_width>      *p_p2m_out;
103    soclib::caba::DspinInput<dspin_rsp_width>       *p_p2m_in;
104
105    soclib::caba::DspinOutput<dspin_cmd_width>      *p_cla_out;
106    soclib::caba::DspinInput<dspin_cmd_width>       *p_cla_in;
107
108    TsarXbarCluster<dspin_cmd_width,
109                    dspin_rsp_width,
110                    vci_param_int,
111                    vci_param_ext> *clusters[32][32];
112
113
114    TsarSuperCluster( sc_module_name                    insname,
115                     size_t                             nb_procs,      // processors
116                     size_t                             nb_ttys,       // TTY terminals
117                     size_t                             nb_dmas,       //  DMA channels
118                     size_t                             x_size,
119                     size_t                             y_size,
120                     size_t                             z,             // z coordinate
121                     size_t                             elevator_x,
122                     size_t                             elevator_y,
123                     const soclib::common::MappingTable &mtd,          // internal
124                     const soclib::common::MappingTable &mtx,          // external
125                     size_t                             x_width,       // x field bits
126                     size_t                             y_width,       // y field bits
127                     size_t                             z_width,       // z field bits
128                     size_t                             p_width,
129                     size_t                             vci_srcid_width,
130                     size_t                             tgtid_memc,
131                     size_t                             tgtid_xicu,
132                     size_t                             tgtid_mdma,
133                     size_t                             tgtid_fbuf,
134                     size_t                             tgtid_mtty,
135                     size_t                             tgtid_brom,
136                     size_t                             tgtid_mnic,
137                     size_t                             tgtid_chbuf,
138                     size_t                             tgtid_bdev,
139                     size_t                             tgtid_simh,
140                     size_t                             memc_ways,
141                     size_t                             memc_sets,
142                     size_t                             l1_i_ways,
143                     size_t                             l1_i_sets,
144                     size_t                             l1_d_ways,
145                     size_t                             l1_d_sets,
146                     size_t                             irq_per_processor,
147                     size_t                             xram_latency,  // external ram
148                     size_t                             x_io,
149                     size_t                             y_io,
150                     size_t                             z_io,
151                     size_t                             xfb,           // fbf pixels
152                     size_t                             yfb,           // fbf lines
153                     char*                              disk_name,     // virtual disk
154                     size_t                             block_size,    // block size
155                     size_t                             nic_channels,  // number channels
156                     char*                              nic_rx_name,   // filename rx
157                     char*                              nic_tx_name,   // filename tx
158                     uint32_t                           nic_timeout,   // cycles
159                     size_t                             chbufdma_channels,  // number channels
160                     const Loader                       &loader,
161                     uint32_t                           frozen_cycles,
162                     uint32_t                           start_debug_cycle,
163                     bool                               memc_debug_ok,
164                     bool                               proc_debug_ok);
165
166    ~TsarSuperCluster();
167    void trace(sc_trace_file * tf);
168    void reset();
169
170};
171}}
172
173#endif
Note: See TracBrowser for help on using the repository browser.