source: trunk/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/source/src/tsar_xbar_cluster.cpp @ 504

Last change on this file since 504 was 504, checked in by meunier, 11 years ago
  • Added activity counters to the vci_mem_cache
  • Modified the print_trace function accordingly
  • Refactored code in vci_mem_cache because there was a mix of 2-space and 4-space indentation
  • Modified topcell to factorize ALMOS specifications
File size: 36.2 KB
Line 
1//////////////////////////////////////////////////////////////////////////////
2// File: tsar_xbar_cluster.cpp
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 with virtual memory:
9// - It uses two virtual_dspin_router as distributed global interconnect
10// - It uses four dspin_local_crossbar as local interconnect
11// - It uses the vci_cc_vcache_wrapper
12// - It uses the vci_mem_cache
13// - It contains a private RAM with a variable latency to emulate the L3 cache
14// - It can contains 1, 2 or 4 processors
15// - Each processor has a private dma channel (vci_multi_dma)
16// - It uses the vci_xicu interrupt controller
17// - The peripherals MTTY, BDEV, FBUF, MNIC and BROM are in cluster (0,0)
18// - The Multi-TTY component controls up to 15 terminals.
19// - Each Multi-DMA component controls up to 8 DMA channels.
20// - The DMA IRQs are connected to IRQ_IN[8]...IRQ_IN[15]
21// - The TTY IRQs are connected to IRQ_IN[16]...IRQ_IN[30]
22// - The BDEV IRQ is connected to IRQ_IN[31]
23//////////////////////////////////////////////////////////////////////////////////
24
25#include "../include/tsar_xbar_cluster.h"
26
27
28namespace soclib {
29namespace caba  {
30
31////////////////////////////////////////////////////////////////////////////////////
32template<size_t dspin_cmd_width,
33         size_t dspin_rsp_width,
34         typename vci_param_int,
35         typename vci_param_ext> TsarXbarCluster<dspin_cmd_width,
36                                                 dspin_rsp_width,
37                                                 vci_param_int,
38                                                 vci_param_ext>::TsarXbarCluster(
39////////////////////////////////////////////////////////////////////////////////////
40         sc_module_name                     insname,
41         size_t                             nb_procs,
42         size_t                             nb_ttys,
43         size_t                             nb_dmas,
44         size_t                             x_id,
45         size_t                             y_id,
46         size_t                             cluster_id,
47         const soclib::common::MappingTable &mtd,
48         const soclib::common::MappingTable &mtx,
49         size_t                             x_width,
50         size_t                             y_width,
51         size_t                             l_width,
52         size_t                             tgtid_memc,
53         size_t                             tgtid_xicu,
54         size_t                             tgtid_mdma,
55         size_t                             tgtid_fbuf,
56         size_t                             tgtid_mtty,
57         size_t                             tgtid_brom,
58         size_t                             tgtid_mnic,
59         size_t                             tgtid_chbuf,
60         size_t                             tgtid_bdev,
61         size_t                             memc_ways,
62         size_t                             memc_sets,
63         size_t                             l1_i_ways,
64         size_t                             l1_i_sets,
65         size_t                             l1_d_ways,
66         size_t                             l1_d_sets,
67         size_t                             xram_latency,
68         bool                               io,
69         size_t                             xfb,
70         size_t                             yfb,
71         char*                              disk_name,
72         size_t                             block_size,
73         size_t                             nic_channels,
74         char*                              nic_rx_name,
75         char*                              nic_tx_name,
76         uint32_t                           nic_timeout,
77         size_t                             chbufdma_channels,
78         const Loader                      &loader,
79         uint32_t                           frozen_cycles,
80         uint32_t                           debug_start_cycle,
81         bool                               memc_debug_ok,
82         bool                               proc_debug_ok)
83            : soclib::caba::BaseModule(insname),
84            p_clk("clk"),
85            p_resetn("resetn")
86
87{
88    // Vectors of ports definition
89    p_cmd_in        = alloc_elems<DspinInput<dspin_cmd_width> >("p_cmd_in", 4, 3);
90    p_cmd_out       = alloc_elems<DspinOutput<dspin_cmd_width> >("p_cmd_out", 4, 3);
91    p_rsp_in        = alloc_elems<DspinInput<dspin_rsp_width> >("p_rsp_in", 4, 2);
92    p_rsp_out       = alloc_elems<DspinOutput<dspin_rsp_width> >("p_rsp_out", 4, 2);
93
94    /////////////////////////////////////////////////////////////////////////////
95    // Components definition
96    /////////////////////////////////////////////////////////////////////////////
97
98    for (size_t p = 0; p < nb_procs; p++)
99    {
100        std::ostringstream sproc;
101        sproc << "proc_" << x_id << "_" << y_id << "_" << p;
102        proc[p] = new VciCcVCacheWrapper<vci_param_int,
103                                         dspin_cmd_width,
104                                         dspin_rsp_width,
105                                         GdbServer<Mips32ElIss> >(
106                      sproc.str().c_str(),
107                      cluster_id*nb_procs + p,        // GLOBAL PROC_ID
108                      mtd,                            // Mapping Table
109                      IntTab(cluster_id,p),           // SRCID
110                      (cluster_id << l_width) + p,    // CC_GLOBAL_ID
111                      8,                              // ITLB ways
112                      8,                              // ITLB sets
113                      8,                              // DTLB ways
114                      8,                              // DTLB sets
115                      l1_i_ways,l1_i_sets,16,         // ICACHE size
116                      l1_d_ways,l1_d_sets,16,         // DCACHE size
117                      4,                              // WBUF nlines
118                      4,                              // WBUF nwords
119                      x_width,
120                      y_width,
121                      frozen_cycles,                  // max frozen cycles
122                      debug_start_cycle,
123                      proc_debug_ok);
124
125        std::ostringstream swip;
126        swip << "wi_proc_" << x_id << "_" << y_id << "_" << p;
127        wi_proc[p] = new VciDspinInitiatorWrapper<vci_param_int,
128                                                  dspin_cmd_width,
129                                                  dspin_rsp_width>(
130                     swip.str().c_str(),
131                     x_width + y_width + l_width);
132    }
133
134    /////////////////////////////////////////////////////////////////////////////
135    std::ostringstream smemc;
136    smemc << "memc_" << x_id << "_" << y_id;
137    memc = new VciMemCache<vci_param_int,
138                           vci_param_ext,
139                           dspin_rsp_width,
140                           dspin_cmd_width>(
141                     smemc.str().c_str(),
142                     mtd,                                // Mapping Table direct space
143                     mtx,                                // Mapping Table external space
144                     IntTab(cluster_id),                 // SRCID external space
145                     IntTab(cluster_id, tgtid_memc),     // TGTID direct space
146                     (cluster_id << l_width) + nb_procs, // CC_GLOBAL_ID
147                     x_width,                            // Number of x bits in platform
148                     y_width,                            // Number of y bits in platform
149                     memc_ways, memc_sets, 16,           // CACHE SIZE
150                     3,                                  // MAX NUMBER OF COPIES
151                     4096,                               // HEAP SIZE
152                     8,                                  // TRANSACTION TABLE DEPTH
153                     8,                                  // UPDATE TABLE DEPTH
154                     8,                                  // INVALIDATE TABLE DEPTH
155                     debug_start_cycle,
156                     memc_debug_ok );
157
158    wt_memc = new VciDspinTargetWrapper<vci_param_int,
159                                        dspin_cmd_width,
160                                        dspin_rsp_width>(
161                     "wt_memc",
162                     x_width + y_width + l_width);
163
164    /////////////////////////////////////////////////////////////////////////////
165    std::ostringstream sxram;
166    sxram << "xram_" << x_id << "_" << y_id;
167    xram = new VciSimpleRam<vci_param_ext>(
168                     sxram.str().c_str(),
169                     IntTab(cluster_id),
170                     mtx,
171                     loader,
172                     xram_latency);
173
174    /////////////////////////////////////////////////////////////////////////////
175    std::ostringstream sxicu;
176    sxicu << "xicu_" << x_id << "_" << y_id;
177    xicu = new VciXicu<vci_param_int>(
178                     sxicu.str().c_str(),
179                     mtd,                               // mapping table
180                     IntTab(cluster_id, tgtid_xicu),    // TGTID_D
181                     nb_procs,                          // number of timer IRQs
182                     32,                                // number of hard IRQs
183                     32,                                // number of soft IRQs
184                     nb_procs);                         // number of output IRQs
185
186    wt_xicu = new VciDspinTargetWrapper<vci_param_int,
187                                        dspin_cmd_width,
188                                        dspin_rsp_width>(
189                     "wt_xicu",
190                     x_width + y_width + l_width);
191
192    /////////////////////////////////////////////////////////////////////////////
193    std::ostringstream smdma;
194    smdma << "mdma_" << x_id << "_" << y_id;
195    mdma = new VciMultiDma<vci_param_int>(
196                     smdma.str().c_str(),
197                     mtd,
198                     IntTab(cluster_id, nb_procs),        // SRCID
199                     IntTab(cluster_id, tgtid_mdma),      // TGTID
200                     64,                                  // burst size
201                     nb_dmas);                            // number of IRQs
202
203    wt_mdma = new VciDspinTargetWrapper<vci_param_int,
204                                        dspin_cmd_width,
205                                        dspin_rsp_width>(
206                     "wt_mdma",
207                     x_width + y_width + l_width);
208
209    wi_mdma = new VciDspinInitiatorWrapper<vci_param_int,
210                                           dspin_cmd_width,
211                                           dspin_rsp_width>(
212                     "wi_mdma",
213                     x_width + y_width + l_width);
214
215    /////////////////////////////////////////////////////////////////////////////
216    size_t nb_direct_initiators      = nb_procs + 1;
217    size_t nb_direct_targets         = 3;
218    if ( io )
219    {
220        nb_direct_initiators         = nb_procs + 3;
221        nb_direct_targets            = 9;
222    }
223
224    xbar_cmd_d = new DspinLocalCrossbar<dspin_cmd_width>(
225                     "xbar_cmd_d",
226                     mtd,                          // mapping table
227                     x_id, y_id,                   // cluster coordinates
228                     x_width, y_width, l_width,
229                     nb_direct_initiators,         // number of local of sources
230                     nb_direct_targets,            // number of local dests
231                     2, 2,                         // fifo depths 
232                     true,                         // CMD
233                     true,                         // use local routing table
234                     false );                      // no broadcast
235
236    /////////////////////////////////////////////////////////////////////////////
237    xbar_rsp_d = new DspinLocalCrossbar<dspin_rsp_width>(
238                     "xbar_rsp_d",
239                     mtd,                          // mapping table
240                     x_id, y_id,                   // cluster coordinates
241                     x_width, y_width, l_width,
242                     nb_direct_targets,            // number of local sources
243                     nb_direct_initiators,         // number of local dests
244                     2, 2,                         // fifo depths 
245                     false,                        // RSP
246                     false,                        // don't use local routing table
247                     false );                      // no broadcast
248
249    /////////////////////////////////////////////////////////////////////////////
250    xbar_m2p_c = new DspinLocalCrossbar<dspin_cmd_width>(
251                     "xbar_m2p_c",
252                     mtd,                          // mapping table
253                     x_id, y_id,                   // cluster coordinates
254                     x_width, y_width, l_width,
255                     1,                            // number of local sources
256                     nb_procs,                     // number of local targets
257                     2, 2,                         // fifo depths
258                     true,                         // CMD
259                     false,                        // don't use local routing table
260                     true );                       // broadcast
261
262    /////////////////////////////////////////////////////////////////////////////
263    xbar_p2m_c = new DspinLocalCrossbar<dspin_rsp_width>(
264                     "xbar_p2m_c",
265                     mtd,                          // mapping table
266                     x_id, y_id,                   // cluster coordinates
267                     x_width, y_width, 0,          // l_width unused on p2m network
268                     nb_procs,                     // number of local sources
269                     1,                            // number of local dests
270                     2, 2,                         // fifo depths
271                     false,                        // RSP
272                     false,                        // don't use local routing table
273                     false );                      // no broadcast
274
275    /////////////////////////////////////////////////////////////////////////////
276    xbar_clack_c = new DspinLocalCrossbar<dspin_cmd_width>(
277                     "xbar_clack_c",
278                     mtd,                          // mapping table
279                     x_id, y_id,                   // cluster coordinates
280                     x_width, y_width, l_width,
281                     1,                            // number of local sources
282                     nb_procs,                     // number of local targets
283                     1, 1,                         // fifo depths
284                     true,                         // CMD
285                     false,                        // don't use local routing table
286                     false);                       // broadcast
287
288    /////////////////////////////////////////////////////////////////////////////
289    router_cmd = new VirtualDspinRouter<dspin_cmd_width>(
290                     "router_cmd",
291                     x_id,y_id,                    // coordinate in the mesh
292                     x_width, y_width,             // x & y fields width
293                     3,                            // nb virtual channels
294                     4,4);                         // input & output fifo depths
295
296    /////////////////////////////////////////////////////////////////////////////
297    router_rsp = new VirtualDspinRouter<dspin_rsp_width>(
298                     "router_rsp",
299                     x_id,y_id,                    // coordinates in mesh
300                     x_width, y_width,             // x & y fields width
301                     2,                            // nb virtual channels
302                     4,4);                         // input & output fifo depths
303
304    // IO cluster components
305    if ( io )
306    {
307        /////////////////////////////////////////////
308        brom = new VciSimpleRom<vci_param_int>(
309                     "brom",
310                     IntTab(cluster_id, tgtid_brom),
311                     mtd,
312                     loader);
313
314        wt_brom = new VciDspinTargetWrapper<vci_param_int,
315                                            dspin_cmd_width,
316                                            dspin_rsp_width>(
317                     "wt_brom",
318                     x_width + y_width + l_width);
319
320        /////////////////////////////////////////////
321        fbuf = new VciFrameBuffer<vci_param_int>(
322                     "fbuf",
323                     IntTab(cluster_id, tgtid_fbuf),
324                     mtd,
325                     xfb, yfb);
326
327        wt_fbuf = new VciDspinTargetWrapper<vci_param_int,
328                                            dspin_cmd_width,
329                                            dspin_rsp_width>(
330                     "wt_fbuf",
331                     x_width + y_width + l_width);
332
333        /////////////////////////////////////////////
334        bdev = new VciBlockDeviceTsar<vci_param_int>(
335                     "bdev",
336                     mtd,
337                     IntTab(cluster_id, nb_procs+1),
338                     IntTab(cluster_id, tgtid_bdev),
339                     disk_name,
340                     block_size,
341                     64);            // burst size
342
343        wt_bdev = new VciDspinTargetWrapper<vci_param_int,
344                                            dspin_cmd_width,
345                                            dspin_rsp_width>(
346                     "wt_bdev",
347                     x_width + y_width + l_width);
348
349        wi_bdev = new VciDspinInitiatorWrapper<vci_param_int,
350                                               dspin_cmd_width,
351                                               dspin_rsp_width>(
352                     "wi_bdev",
353                     x_width + y_width + l_width);
354
355        /////////////////////////////////////////////
356        int mac = 0xBEEF0000;
357        mnic = new VciMultiNic<vci_param_int>(
358                     "mnic",
359                     IntTab(cluster_id, tgtid_mnic),
360                     mtd,
361                     nic_channels,
362                     nic_rx_name,
363                     nic_tx_name,
364                     mac,             // mac_4 address
365                     0xBABE );           // mac_2 address
366
367        wt_mnic = new VciDspinTargetWrapper<vci_param_int,
368                                            dspin_cmd_width,
369                                            dspin_rsp_width>(
370                     "wt_mnic",
371                     x_width + y_width + l_width);
372
373        /////////////////////////////////////////////
374        chbuf = new VciChbufDma<vci_param_int>(
375                     "chbuf_dma",
376                     mtd,
377                     IntTab(cluster_id, nb_procs + 2),
378                     IntTab(cluster_id, tgtid_chbuf),
379                     64,
380                     chbufdma_channels); 
381
382        wt_chbuf = new VciDspinTargetWrapper<vci_param_int,
383                                            dspin_cmd_width,
384                                            dspin_rsp_width>(
385                     "wt_chbuf",
386                     x_width + y_width + l_width);
387
388        wi_chbuf = new VciDspinInitiatorWrapper<vci_param_int,
389                                            dspin_cmd_width,
390                                            dspin_rsp_width>(
391                     "wi_chbuf",
392                     x_width + y_width + l_width);
393
394        /////////////////////////////////////////////
395        std::vector<std::string> vect_names;
396        for( size_t tid = 0 ; tid < (nb_ttys) ; tid++ )
397        {
398            std::ostringstream term_name;
399            term_name <<  "term" << tid;
400            vect_names.push_back(term_name.str().c_str());
401        }
402        mtty = new VciMultiTty<vci_param_int>(
403                     "mtty",
404                     IntTab(cluster_id, tgtid_mtty),
405                     mtd,
406                     vect_names);
407
408        wt_mtty = new VciDspinTargetWrapper<vci_param_int,
409                                            dspin_cmd_width,
410                                            dspin_rsp_width>(
411                     "wt_mtty",
412                     x_width + y_width + l_width);
413    }
414
415    ////////////////////////////////////
416    // Connections are defined here
417    ////////////////////////////////////
418
419    //////////////////////// CMD ROUTER and RSP ROUTER
420    router_cmd->p_clk                        (this->p_clk);
421    router_cmd->p_resetn                     (this->p_resetn);
422    router_rsp->p_clk                        (this->p_clk);
423    router_rsp->p_resetn                     (this->p_resetn);
424
425    for(int i = 0; i < 4; i++)
426    {
427        for (int k = 0; k < 3; k++)
428        {
429            router_cmd->p_out[i][k]          (this->p_cmd_out[i][k]);
430            router_cmd->p_in[i][k]           (this->p_cmd_in[i][k]);
431        }
432
433        for (int k = 0; k < 2; k++)
434        {
435            router_rsp->p_out[i][k]          (this->p_rsp_out[i][k]);
436            router_rsp->p_in[i][k]           (this->p_rsp_in[i][k]);
437        }
438    }
439
440    router_cmd->p_out[4][0]                  (signal_dspin_cmd_g2l_d);
441    router_cmd->p_out[4][1]                  (signal_dspin_m2p_g2l_c);
442    router_cmd->p_out[4][2]                  (signal_dspin_clack_g2l_c);
443    router_cmd->p_in[4][0]                   (signal_dspin_cmd_l2g_d);
444    router_cmd->p_in[4][1]                   (signal_dspin_m2p_l2g_c);
445    router_cmd->p_in[4][2]                   (signal_dspin_clack_l2g_c);
446
447    router_rsp->p_out[4][0]                  (signal_dspin_rsp_g2l_d);
448    router_rsp->p_out[4][1]                  (signal_dspin_p2m_g2l_c);
449    router_rsp->p_in[4][0]                   (signal_dspin_rsp_l2g_d);
450    router_rsp->p_in[4][1]                   (signal_dspin_p2m_l2g_c);
451
452
453    std::cout << "  - CMD & RSP routers connected" << std::endl;
454
455    ///////////////////// CMD DSPIN  local crossbar direct
456    xbar_cmd_d->p_clk                            (this->p_clk);
457    xbar_cmd_d->p_resetn                         (this->p_resetn);
458    xbar_cmd_d->p_global_out                     (signal_dspin_cmd_l2g_d);
459    xbar_cmd_d->p_global_in                      (signal_dspin_cmd_g2l_d);
460
461    xbar_cmd_d->p_local_out[tgtid_memc]          (signal_dspin_cmd_memc_t);
462    xbar_cmd_d->p_local_out[tgtid_xicu]          (signal_dspin_cmd_xicu_t);
463    xbar_cmd_d->p_local_out[tgtid_mdma]          (signal_dspin_cmd_mdma_t);
464
465    xbar_cmd_d->p_local_in[nb_procs]             (signal_dspin_cmd_mdma_i);
466
467    for (size_t p = 0; p < nb_procs; p++)
468        xbar_cmd_d->p_local_in[p]                (signal_dspin_cmd_proc_i[p]);
469
470    if ( io )
471    {
472        xbar_cmd_d->p_local_out[tgtid_mtty]      (signal_dspin_cmd_mtty_t);
473        xbar_cmd_d->p_local_out[tgtid_brom]      (signal_dspin_cmd_brom_t);
474        xbar_cmd_d->p_local_out[tgtid_bdev]      (signal_dspin_cmd_bdev_t);
475        xbar_cmd_d->p_local_out[tgtid_fbuf]      (signal_dspin_cmd_fbuf_t);
476        xbar_cmd_d->p_local_out[tgtid_mnic]      (signal_dspin_cmd_mnic_t);
477        xbar_cmd_d->p_local_out[tgtid_chbuf]      (signal_dspin_cmd_chbuf_t);
478
479        xbar_cmd_d->p_local_in[nb_procs+1]       (signal_dspin_cmd_bdev_i);
480        xbar_cmd_d->p_local_in[nb_procs+2]       (signal_dspin_cmd_chbuf_i);
481    }
482
483    std::cout << "  - Command Direct crossbar connected" << std::endl;
484
485    //////////////////////// RSP DSPIN  local crossbar direct
486    xbar_rsp_d->p_clk                            (this->p_clk);
487    xbar_rsp_d->p_resetn                         (this->p_resetn);
488    xbar_rsp_d->p_global_out                     (signal_dspin_rsp_l2g_d);
489    xbar_rsp_d->p_global_in                      (signal_dspin_rsp_g2l_d);
490
491    xbar_rsp_d->p_local_in[tgtid_memc]           (signal_dspin_rsp_memc_t);
492    xbar_rsp_d->p_local_in[tgtid_xicu]           (signal_dspin_rsp_xicu_t);
493    xbar_rsp_d->p_local_in[tgtid_mdma]           (signal_dspin_rsp_mdma_t);
494
495    xbar_rsp_d->p_local_out[nb_procs]            (signal_dspin_rsp_mdma_i);
496
497    for (size_t p = 0; p < nb_procs; p++)
498        xbar_rsp_d->p_local_out[p]               (signal_dspin_rsp_proc_i[p]);
499
500    if ( io )
501    {
502        xbar_rsp_d->p_local_in[tgtid_mtty]       (signal_dspin_rsp_mtty_t);
503        xbar_rsp_d->p_local_in[tgtid_brom]       (signal_dspin_rsp_brom_t);
504        xbar_rsp_d->p_local_in[tgtid_bdev]       (signal_dspin_rsp_bdev_t);
505        xbar_rsp_d->p_local_in[tgtid_fbuf]       (signal_dspin_rsp_fbuf_t);
506        xbar_rsp_d->p_local_in[tgtid_mnic]       (signal_dspin_rsp_mnic_t);
507        xbar_rsp_d->p_local_in[tgtid_chbuf]       (signal_dspin_rsp_chbuf_t);
508
509        xbar_rsp_d->p_local_out[nb_procs+1]      (signal_dspin_rsp_bdev_i);
510        xbar_rsp_d->p_local_out[nb_procs+2]      (signal_dspin_rsp_chbuf_i);
511    }
512
513    std::cout << "  - Response Direct crossbar connected" << std::endl;
514
515    ////////////////////// M2P DSPIN local crossbar coherence
516    xbar_m2p_c->p_clk                            (this->p_clk);
517    xbar_m2p_c->p_resetn                         (this->p_resetn);
518    xbar_m2p_c->p_global_out                     (signal_dspin_m2p_l2g_c);
519    xbar_m2p_c->p_global_in                      (signal_dspin_m2p_g2l_c);
520    xbar_m2p_c->p_local_in[0]                    (signal_dspin_m2p_memc);
521    for (size_t p = 0; p < nb_procs; p++)
522        xbar_m2p_c->p_local_out[p]               (signal_dspin_m2p_proc[p]);
523
524    std::cout << "  - M2P Coherence crossbar connected" << std::endl;
525
526    ////////////////////// CLACK DSPIN local crossbar coherence
527    xbar_clack_c->p_clk                          (this->p_clk);
528    xbar_clack_c->p_resetn                       (this->p_resetn);
529    xbar_clack_c->p_global_out                   (signal_dspin_clack_l2g_c);
530    xbar_clack_c->p_global_in                    (signal_dspin_clack_g2l_c);
531    xbar_clack_c->p_local_in[0]                  (signal_dspin_clack_memc);
532    for (size_t p = 0; p < nb_procs; p++)
533        xbar_clack_c->p_local_out[p]               (signal_dspin_clack_proc[p]);
534
535    std::cout << "  - Clack Coherence crossbar connected" << std::endl;
536
537    ////////////////////////// P2M DSPIN local crossbar coherence
538    xbar_p2m_c->p_clk                            (this->p_clk);
539    xbar_p2m_c->p_resetn                         (this->p_resetn);
540    xbar_p2m_c->p_global_out                     (signal_dspin_p2m_l2g_c);
541    xbar_p2m_c->p_global_in                      (signal_dspin_p2m_g2l_c);
542    xbar_p2m_c->p_local_out[0]                   (signal_dspin_p2m_memc);
543    for (size_t p = 0; p < nb_procs; p++)
544        xbar_p2m_c->p_local_in[p]                (signal_dspin_p2m_proc[p]);
545
546    std::cout << "  - P2M Coherence crossbar connected" << std::endl;
547
548
549    //////////////////////////////////// Processors
550    for (size_t p = 0; p < nb_procs; p++)
551    {
552        proc[p]->p_clk                      (this->p_clk);
553        proc[p]->p_resetn                   (this->p_resetn);
554        proc[p]->p_vci                      (signal_vci_ini_proc[p]);
555        proc[p]->p_dspin_m2p                (signal_dspin_m2p_proc[p]);
556        proc[p]->p_dspin_p2m                (signal_dspin_p2m_proc[p]);
557        proc[p]->p_dspin_clack              (signal_dspin_clack_proc[p]);
558        proc[p]->p_irq[0]                   (signal_proc_it[p]);
559        for ( size_t j = 1 ; j < 6 ; j++)
560        {
561            proc[p]->p_irq[j]               (signal_false);
562        }
563
564        wi_proc[p]->p_clk                   (this->p_clk);
565        wi_proc[p]->p_resetn                (this->p_resetn);
566        wi_proc[p]->p_dspin_cmd             (signal_dspin_cmd_proc_i[p]);
567        wi_proc[p]->p_dspin_rsp             (signal_dspin_rsp_proc_i[p]);
568        wi_proc[p]->p_vci                   (signal_vci_ini_proc[p]);
569    }
570
571    std::cout << "  - Processors connected" << std::endl;
572
573    ///////////////////////////////////// XICU
574    xicu->p_clk                        (this->p_clk);
575    xicu->p_resetn                     (this->p_resetn);
576    xicu->p_vci                        (signal_vci_tgt_xicu);
577    for ( size_t p=0 ; p<nb_procs ; p++)
578    {
579        xicu->p_irq[p]                 (signal_proc_it[p]);
580    }
581    for ( size_t i=0 ; i<32 ; i++)
582    {
583        if ( io ) // I/O cluster
584        {
585            if      (i < 8)                  xicu->p_hwi[i] (signal_false);
586            else if (i < (8 + nb_dmas))      xicu->p_hwi[i] (signal_irq_mdma[i-8]);
587            else if (i < 16)                 xicu->p_hwi[i] (signal_false);
588            else if (i < (16 + nb_ttys))     xicu->p_hwi[i] (signal_irq_mtty[i-16]);
589            else if (i < 31)                 xicu->p_hwi[i] (signal_false);
590            else                             xicu->p_hwi[i] (signal_irq_bdev);
591        }
592        else      // other clusters
593        {
594            if      (i < 8)                  xicu->p_hwi[i] (signal_false);
595            else if (i < (8 + nb_dmas))      xicu->p_hwi[i] (signal_irq_mdma[i-8]);
596            else                             xicu->p_hwi[i] (signal_false);
597        }
598    }
599
600    // wrapper XICU
601    wt_xicu->p_clk                     (this->p_clk);
602    wt_xicu->p_resetn                  (this->p_resetn);
603    wt_xicu->p_dspin_cmd               (signal_dspin_cmd_xicu_t);
604    wt_xicu->p_dspin_rsp               (signal_dspin_rsp_xicu_t);
605    wt_xicu->p_vci                     (signal_vci_tgt_xicu);
606
607    std::cout << "  - XICU connected" << std::endl;
608
609    //////////////////////////////////////////////// MEMC
610    memc->p_clk                        (this->p_clk);
611    memc->p_resetn                     (this->p_resetn);
612    memc->p_vci_ixr                    (signal_vci_xram);
613    memc->p_vci_tgt                    (signal_vci_tgt_memc);
614    memc->p_dspin_p2m                  (signal_dspin_p2m_memc);
615    memc->p_dspin_m2p                  (signal_dspin_m2p_memc);
616    memc->p_dspin_clack                (signal_dspin_clack_memc);
617
618    // wrapper MEMC
619    wt_memc->p_clk                     (this->p_clk);
620    wt_memc->p_resetn                  (this->p_resetn);
621    wt_memc->p_dspin_cmd               (signal_dspin_cmd_memc_t);
622    wt_memc->p_dspin_rsp               (signal_dspin_rsp_memc_t);
623    wt_memc->p_vci                     (signal_vci_tgt_memc);
624
625    std::cout << "  - MEMC connected" << std::endl;
626
627    /////////////////////////////////////////////// XRAM
628    xram->p_clk                        (this->p_clk);
629    xram->p_resetn                     (this->p_resetn);
630    xram->p_vci                        (signal_vci_xram);
631
632    std::cout << "  - XRAM connected" << std::endl;
633
634    ////////////////////////////////////////////// MDMA
635    mdma->p_clk                        (this->p_clk);
636    mdma->p_resetn                     (this->p_resetn);
637    mdma->p_vci_target                 (signal_vci_tgt_mdma);
638    mdma->p_vci_initiator              (signal_vci_ini_mdma);
639    for (size_t i=0 ; i<nb_dmas ; i++)
640        mdma->p_irq[i]                 (signal_irq_mdma[i]);
641
642    // wrapper tgt MDMA
643    wt_mdma->p_clk                     (this->p_clk);
644    wt_mdma->p_resetn                  (this->p_resetn);
645    wt_mdma->p_dspin_cmd               (signal_dspin_cmd_mdma_t);
646    wt_mdma->p_dspin_rsp               (signal_dspin_rsp_mdma_t);
647    wt_mdma->p_vci                     (signal_vci_tgt_mdma);
648
649    // wrapper ini MDMA
650    wi_mdma->p_clk                     (this->p_clk);
651    wi_mdma->p_resetn                  (this->p_resetn);
652    wi_mdma->p_dspin_cmd               (signal_dspin_cmd_mdma_i);
653    wi_mdma->p_dspin_rsp               (signal_dspin_rsp_mdma_i);
654    wi_mdma->p_vci                     (signal_vci_ini_mdma);
655
656    std::cout << "  - MDMA connected" << std::endl;
657
658    /////////////////////////////// Components in I/O cluster
659
660    if ( io )
661    {
662        // BDEV
663        bdev->p_clk                    (this->p_clk);
664        bdev->p_resetn                 (this->p_resetn);
665        bdev->p_irq                    (signal_irq_bdev);
666        bdev->p_vci_target             (signal_vci_tgt_bdev);
667        bdev->p_vci_initiator          (signal_vci_ini_bdev);
668
669        // wrapper tgt BDEV
670        wt_bdev->p_clk                 (this->p_clk);
671        wt_bdev->p_resetn              (this->p_resetn);
672        wt_bdev->p_dspin_cmd           (signal_dspin_cmd_bdev_t);
673        wt_bdev->p_dspin_rsp           (signal_dspin_rsp_bdev_t);
674        wt_bdev->p_vci                 (signal_vci_tgt_bdev);
675
676        // wrapper ini BDEV
677        wi_bdev->p_clk                 (this->p_clk);
678        wi_bdev->p_resetn              (this->p_resetn);
679        wi_bdev->p_dspin_cmd           (signal_dspin_cmd_bdev_i);
680        wi_bdev->p_dspin_rsp           (signal_dspin_rsp_bdev_i);
681        wi_bdev->p_vci                 (signal_vci_ini_bdev);
682
683        std::cout << "  - BDEV connected" << std::endl;
684
685        // FBUF
686        fbuf->p_clk                    (this->p_clk);
687        fbuf->p_resetn                 (this->p_resetn);
688        fbuf->p_vci                    (signal_vci_tgt_fbuf);
689
690        // wrapper tgt FBUF
691        wt_fbuf->p_clk                 (this->p_clk);
692        wt_fbuf->p_resetn              (this->p_resetn);
693        wt_fbuf->p_dspin_cmd           (signal_dspin_cmd_fbuf_t);
694        wt_fbuf->p_dspin_rsp           (signal_dspin_rsp_fbuf_t);
695        wt_fbuf->p_vci                 (signal_vci_tgt_fbuf);
696
697        std::cout << "  - FBUF connected" << std::endl;
698
699        // MNIC
700        mnic->p_clk                    (this->p_clk);
701        mnic->p_resetn                 (this->p_resetn);
702        mnic->p_vci                    (signal_vci_tgt_mnic);
703        for ( size_t i=0 ; i<nic_channels ; i++ )
704        {
705            mnic->p_rx_irq[i]          (signal_irq_mnic_rx[i]);
706            mnic->p_tx_irq[i]          (signal_irq_mnic_tx[i]);
707        }
708
709        // wrapper tgt MNIC
710        wt_mnic->p_clk                 (this->p_clk);
711        wt_mnic->p_resetn              (this->p_resetn);
712        wt_mnic->p_dspin_cmd           (signal_dspin_cmd_mnic_t);
713        wt_mnic->p_dspin_rsp           (signal_dspin_rsp_mnic_t);
714        wt_mnic->p_vci                 (signal_vci_tgt_mnic);
715
716        std::cout << "  - MNIC connected" << std::endl;
717
718        // CHBUF
719        chbuf->p_clk                    (this->p_clk);
720        chbuf->p_resetn                 (this->p_resetn);
721        chbuf->p_vci_target             (signal_vci_tgt_chbuf);
722        chbuf->p_vci_initiator          (signal_vci_ini_chbuf);
723        for ( size_t i=0 ; i < chbufdma_channels ; i++ )
724        {
725            chbuf->p_irq[i]          (signal_irq_chbuf[i]);
726        }
727
728        // wrapper tgt CHBUF
729        wt_chbuf->p_clk                 (this->p_clk);
730        wt_chbuf->p_resetn              (this->p_resetn);
731        wt_chbuf->p_dspin_cmd           (signal_dspin_cmd_chbuf_t);
732        wt_chbuf->p_dspin_rsp           (signal_dspin_rsp_chbuf_t);
733        wt_chbuf->p_vci                 (signal_vci_tgt_chbuf);
734
735        // wrapper ini CHBUF
736        wi_chbuf->p_clk                 (this->p_clk);
737        wi_chbuf->p_resetn              (this->p_resetn);
738        wi_chbuf->p_dspin_cmd           (signal_dspin_cmd_chbuf_i);
739        wi_chbuf->p_dspin_rsp           (signal_dspin_rsp_chbuf_i);
740        wi_chbuf->p_vci                 (signal_vci_ini_chbuf);
741
742        std::cout << "  - CHBUF connected" << std::endl;
743
744        // BROM
745        brom->p_clk                    (this->p_clk);
746        brom->p_resetn                 (this->p_resetn);
747        brom->p_vci                    (signal_vci_tgt_brom);
748
749        // wrapper tgt BROM
750        wt_brom->p_clk                 (this->p_clk);
751        wt_brom->p_resetn              (this->p_resetn);
752        wt_brom->p_dspin_cmd           (signal_dspin_cmd_brom_t);
753        wt_brom->p_dspin_rsp           (signal_dspin_rsp_brom_t);
754        wt_brom->p_vci                 (signal_vci_tgt_brom);
755
756        std::cout << "  - BROM connected" << std::endl;
757
758        // MTTY
759        mtty->p_clk                    (this->p_clk);
760        mtty->p_resetn                 (this->p_resetn);
761        mtty->p_vci                    (signal_vci_tgt_mtty);
762        for ( size_t i=0 ; i<nb_ttys ; i++ )
763        {
764            mtty->p_irq[i]             (signal_irq_mtty[i]);
765        }
766
767        // wrapper tgt MTTY
768        wt_mtty->p_clk                 (this->p_clk);
769        wt_mtty->p_resetn              (this->p_resetn);
770        wt_mtty->p_dspin_cmd           (signal_dspin_cmd_mtty_t);
771        wt_mtty->p_dspin_rsp           (signal_dspin_rsp_mtty_t);
772        wt_mtty->p_vci                 (signal_vci_tgt_mtty);
773
774        std::cout << "  - MTTY connected" << std::endl;
775   }
776} // end constructor
777
778}}
779
780// Local Variables:
781// tab-width: 3
782// c-basic-offset: 3
783// c-file-offsets:((innamespace . 0)(inline-open . 0))
784// indent-tabs-mode: nil
785// End:
786
787// vim: filetype=cpp:expandtab:shiftwidth=3:tabstop=3:softtabstop=3
788
789
790
Note: See TracBrowser for help on using the repository browser.