source: branches/reconfiguration/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/include/tsar_iob_cluster.h @ 1015

Last change on this file since 1015 was 1015, checked in by cfuguet, 9 years ago

reconf: when a local router in a cluster is faulty, the cores are kept
deactivated.

  • In the physical implementation this is achieved with the hardware reset signal. This signal is masked with the GO signals of the NoC BIST. Only when all the local routers pass the BIST, the reset signal of the cores is deasserted.
File size: 12.0 KB
RevLine 
[747]1//////////////////////////////////////////////////////////////////////////////
2// File: tsar_iob_cluster.h
[806]3// Author: Alain Greiner
[747]4// Copyright: UPMC/LIP6
5// Date : april 2013
6// This program is released under the GNU public license
7//////////////////////////////////////////////////////////////////////////////
8
9#ifndef SOCLIB_CABA_TSAR_IOB_CLUSTER_H
10#define SOCLIB_CABA_TSAR_IOB_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 "vci_local_crossbar.h"
25#include "dspin_local_crossbar.h"
26#include "vci_dspin_initiator_wrapper.h"
27#include "vci_dspin_target_wrapper.h"
28#include "dspin_router.h"
29#include "vci_multi_dma.h"
30#include "vci_mem_cache.h"
31#include "vci_cc_vcache_wrapper.h"
32#include "vci_io_bridge.h"
[748]33#include "vci_simple_rom.h"
[747]34
35namespace soclib { namespace caba   {
36
37///////////////////////////////////////////////////////////////////////////
[806]38template<typename vci_param_int,
[747]39         typename vci_param_ext,
[806]40         size_t   dspin_int_cmd_width,
[747]41         size_t   dspin_int_rsp_width,
42         size_t   dspin_ram_cmd_width,
43         size_t   dspin_ram_rsp_width>
[806]44class TsarIobCluster
[747]45///////////////////////////////////////////////////////////////////////////
46    : public soclib::caba::BaseModule
47{
48
49  public:
50
51    // Ports
52    sc_in<bool>                                        p_clk;
53    sc_in<bool>                                        p_resetn;
54
[1001]55    sc_in<bool>                                        p_false;
56
[747]57    // Thes two ports are used to connect IOB to IOX nework in top cell
58    soclib::caba::VciInitiator<vci_param_ext>*         p_vci_iob_iox_ini;
[806]59    soclib::caba::VciTarget<vci_param_ext>*            p_vci_iob_iox_tgt;
[747]60
61    // These arrays of ports are used to connect the INT & RAM networks in top cell
62    soclib::caba::DspinOutput<dspin_int_cmd_width>**   p_dspin_int_cmd_out;
63    soclib::caba::DspinInput<dspin_int_cmd_width>**    p_dspin_int_cmd_in;
64    soclib::caba::DspinOutput<dspin_int_rsp_width>**   p_dspin_int_rsp_out;
65    soclib::caba::DspinInput<dspin_int_rsp_width>**    p_dspin_int_rsp_in;
66
67    soclib::caba::DspinOutput<dspin_ram_cmd_width>*    p_dspin_ram_cmd_out;
68    soclib::caba::DspinInput<dspin_ram_cmd_width>*     p_dspin_ram_cmd_in;
69    soclib::caba::DspinOutput<dspin_ram_rsp_width>*    p_dspin_ram_rsp_out;
70    soclib::caba::DspinInput<dspin_ram_rsp_width>*     p_dspin_ram_rsp_in;
71
72    // interrupt signals
73    sc_signal<bool>                       signal_proc_it[16];
74    sc_signal<bool>                       signal_irq_mdma[8];
75    sc_signal<bool>                       signal_irq_memc;
[904]76    sc_signal<uint32_t>                   signal_cfg_router_cmd[3];
77    sc_signal<uint32_t>                   signal_cfg_router_rsp[2];
[1001]78    sc_signal<uint32_t>                   signal_cfg_xbar_barrier;
[806]79
[747]80    // INT network DSPIN signals between DSPIN routers and DSPIN local_crossbars
[806]81    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_cmd_l2g_d;
82    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_cmd_g2l_d;
[747]83    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_l2g_c;
[806]84    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_g2l_c;
[747]85    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_l2g_c;
86    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_g2l_c;
[806]87    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_rsp_l2g_d;
88    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_rsp_g2l_d;
[747]89    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_p2m_l2g_c;
90    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_p2m_g2l_c;
91
92    // INT network VCI signals between VCI components and VCI local crossbar
[806]93    VciSignals<vci_param_int>             signal_int_vci_ini_proc[8];
94    VciSignals<vci_param_int>             signal_int_vci_ini_mdma;
95    VciSignals<vci_param_int>             signal_int_vci_ini_iobx;
[747]96
97    VciSignals<vci_param_int>             signal_int_vci_tgt_memc;
98    VciSignals<vci_param_int>             signal_int_vci_tgt_xicu;
99    VciSignals<vci_param_int>             signal_int_vci_tgt_mdma;
[926]100    VciSignals<vci_param_int>             signal_int_vci_tgt_drom;
[747]101    VciSignals<vci_param_int>             signal_int_vci_tgt_iobx;
102
103    VciSignals<vci_param_int>             signal_int_vci_l2g;
104    VciSignals<vci_param_int>             signal_int_vci_g2l;
105
[806]106    // Coherence DSPIN signals between DSPIN local crossbars and CC components
[747]107    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_memc;
108    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_memc;
109    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_p2m_memc;
110    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_proc[8];
111    DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_proc[8];
112    DspinSignals<dspin_int_rsp_width>     signal_int_dspin_p2m_proc[8];
113
114    // RAM network VCI signals between VCI components and VCI/DSPIN wrappers
115    VciSignals<vci_param_ext>             signal_ram_vci_ini_memc;
116    VciSignals<vci_param_ext>             signal_ram_vci_ini_iobx;
117    VciSignals<vci_param_ext>             signal_ram_vci_tgt_xram;
118
119    // RAM network DSPIN signals between VCI/DSPIN wrappers, RAM dspin crossbar
[806]120    // and routers
[747]121    DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_xram_t;
122    DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_xram_t;
123    DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_memc_i;
124    DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_memc_i;
125    DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_iob_i;
126    DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_iob_i;
127    DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_xbar;
128    DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_xbar;
129    DspinSignals<dspin_ram_cmd_width>     signal_ram_dspin_cmd_false;
130    DspinSignals<dspin_ram_rsp_width>     signal_ram_dspin_rsp_false;
[806]131
[747]132    //////////////////////////////////////
133    // Hardwate Components (pointers)
134    //////////////////////////////////////
[806]135    VciCcVCacheWrapper<vci_param_int,
[747]136                       dspin_int_cmd_width,
137                       dspin_int_rsp_width,
138                       GdbServer<Mips32ElIss> >*      proc[8];
139
140    VciMemCache<vci_param_int,
[806]141                vci_param_ext,
142                dspin_int_rsp_width,
[747]143                dspin_int_cmd_width>*                 memc;
144
145    VciDspinInitiatorWrapper<vci_param_ext,
146                             dspin_ram_cmd_width,
147                             dspin_ram_rsp_width>*    memc_ram_wi;
148
149    VciXicu<vci_param_int>*                           xicu;
150
151    VciMultiDma<vci_param_int>*                       mdma;
152
[926]153    VciSimpleRom<vci_param_int>*                      drom;
[748]154
[747]155    VciLocalCrossbar<vci_param_int>*                  int_xbar_d;
[806]156
[747]157    VciDspinInitiatorWrapper<vci_param_int,
158                             dspin_int_cmd_width,
159                             dspin_int_rsp_width>*    int_wi_gate_d;
160
161    VciDspinTargetWrapper<vci_param_int,
162                          dspin_int_cmd_width,
163                          dspin_int_rsp_width>*       int_wt_gate_d;
164
165    DspinLocalCrossbar<dspin_int_cmd_width>*          int_xbar_m2p_c;
166    DspinLocalCrossbar<dspin_int_rsp_width>*          int_xbar_p2m_c;
167    DspinLocalCrossbar<dspin_int_cmd_width>*          int_xbar_clack_c;
168
[851]169    DspinRouter<dspin_int_cmd_width>**                int_router_cmd;
170    DspinRouter<dspin_int_rsp_width>**                int_router_rsp;
[747]171
172    VciSimpleRam<vci_param_ext>*                      xram;
173
174    VciDspinTargetWrapper<vci_param_ext,
175                          dspin_ram_cmd_width,
176                          dspin_ram_rsp_width>*       xram_ram_wt;
[806]177
[747]178    DspinRouter<dspin_ram_cmd_width>*                 ram_router_cmd;
179    DspinRouter<dspin_ram_rsp_width>*                 ram_router_rsp;
180
181    DspinLocalCrossbar<dspin_ram_cmd_width>*          ram_xbar_cmd;
182    DspinLocalCrossbar<dspin_ram_rsp_width>*          ram_xbar_rsp;
183
[806]184
[747]185    // IO Network Components (not instanciated in all clusters)
186
187    VciIoBridge<vci_param_int,
188                vci_param_ext>*                       iob;
189
190    VciDspinInitiatorWrapper<vci_param_ext,
191                             dspin_ram_cmd_width,
192                             dspin_ram_rsp_width>*    iob_ram_wi;
193
194    // cluster constructor
195    TsarIobCluster( sc_module_name                     insname,
[806]196                    size_t                             nb_procs,
197                    size_t                             nb_dmas,
[747]198                    size_t                             x,             // x coordinate
199                    size_t                             y,             // y coordinate
[806]200                    size_t                             x_size,
201                    size_t                             y_size,
[747]202
[806]203                    size_t                             p_width,       // pid field bits
204
[747]205                    const soclib::common::MappingTable &mt_int,
206                    const soclib::common::MappingTable &mt_ext,
207                    const soclib::common::MappingTable &mt_iox,
208
209                    size_t                             x_width,       // x field  bits
210                    size_t                             y_width,       // y field  bits
211                    size_t                             l_width,       // l field  bits
212
213                    size_t                             int_memc_tgt_id,
214                    size_t                             int_xicu_tgt_id,
215                    size_t                             int_mdma_tgt_id,
[926]216                    size_t                             int_drom_tgt_id,
[747]217                    size_t                             int_iobx_tgt_id,
218                    size_t                             int_proc_ini_id,
219                    size_t                             int_mdma_ini_id,
220                    size_t                             int_iobx_ini_id,
221
222                    size_t                             ram_xram_tgt_id,
223                    size_t                             ram_memc_ini_id,
224                    size_t                             ram_iobx_ini_id,
225
226                    bool                               is_io,
227                    size_t                             iox_iobx_tgt_id,
228                    size_t                             iox_iobx_ini_id,
229
230                    size_t                             memc_ways,
231                    size_t                             memc_sets,
232                    size_t                             l1_i_ways,
[806]233                    size_t                             l1_i_sets,
[747]234                    size_t                             l1_d_ways,
[806]235                    size_t                             l1_d_sets,
236                    size_t                             xram_latency,
[961]237                    size_t                             xcu_nb_hwi,
238                    size_t                             xcu_nb_pti,
239                    size_t                             xcu_nb_wti,
240                    size_t                             xcu_nb_out,
[963]241                    size_t                             irq_per_proc,
[747]242
[748]243                    bool                               distboot,
[1015]244                    bool                               disable_procs,
[748]245
[747]246                    const Loader                       &loader,       // loader for XRAM
247
[806]248                    uint32_t                           frozen_cycles,
[747]249                    uint32_t                           start_debug_cycle,
[806]250                    bool                               memc_debug_ok,
251                    bool                               proc_debug_ok,
252                    bool                               iob0_debug_ok );
[747]253
[851]254    ~TsarIobCluster();
255
[747]256  protected:
257
[1015]258    const size_t m_nb_procs;
259    const bool   m_disable_procs;
260
[747]261    SC_HAS_PROCESS(TsarIobCluster);
262    void init();
263};
264
265}}
266
267#endif
268
269// Local Variables:
[1015]270// tab-width: 4
271// c-basic-offset: 4
[747]272// c-file-offsets:((innamespace . 0)(inline-open . 0))
273// indent-tabs-mode: nil
274// End:
275
[1015]276// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=4:softtabstop=4
[747]277//
Note: See TracBrowser for help on using the repository browser.