Index: branches/v5/platforms/tsar_generic_xbar/top.cpp
===================================================================
--- branches/v5/platforms/tsar_generic_xbar/top.cpp	(revision 447)
+++ branches/v5/platforms/tsar_generic_xbar/top.cpp	(revision 448)
@@ -505,4 +505,8 @@
    DspinSignals<dspin_rsp_width>*** signal_dspin_h_rsp_dec =
       alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_h_rsp_dec", XMAX-1, YMAX, 2);
+   DspinSignals<dspin_cmd_width>**  signal_dspin_h_clack_inc =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_h_clack_inc", XMAX-1, YMAX);
+   DspinSignals<dspin_cmd_width>**  signal_dspin_h_clack_dec =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_h_clack_dec", XMAX-1, YMAX);
 
    // Vertical inter-clusters DSPIN signals
@@ -515,4 +519,8 @@
    DspinSignals<dspin_rsp_width>*** signal_dspin_v_rsp_dec =
       alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_v_rsp_dec", XMAX, YMAX-1, 2);
+   DspinSignals<dspin_cmd_width>**  signal_dspin_v_clack_inc =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_v_clack_inc", XMAX, YMAX-1);
+   DspinSignals<dspin_cmd_width>**  signal_dspin_v_clack_dec =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_v_clack_dec", XMAX, YMAX-1);
 
    // Mesh boundaries DSPIN signals
@@ -525,4 +533,8 @@
    DspinSignals<dspin_rsp_width>**** signal_dspin_false_rsp_out =
       alloc_elems<DspinSignals<dspin_rsp_width> >("signal_dspin_false_rsp_out", XMAX, YMAX, 2, 4);
+   DspinSignals<dspin_cmd_width>***  signal_dspin_false_clack_in =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_false_clack_in", XMAX, YMAX, 4);
+   DspinSignals<dspin_cmd_width>***  signal_dspin_false_clack_out =
+      alloc_elems<DspinSignals<dspin_cmd_width> >("signal_dspin_false_clack_out", XMAX, YMAX, 4);
 
 
@@ -653,4 +665,8 @@
                clusters[x+1][y]->p_rsp_out[k][WEST]    (signal_dspin_h_rsp_dec[x][y][k]);
             }
+            clusters[x][y]->p_clack_out[EAST]      (signal_dspin_h_clack_inc[x][y]);
+            clusters[x+1][y]->p_clack_in[WEST]     (signal_dspin_h_clack_inc[x][y]);
+            clusters[x][y]->p_clack_in[EAST]       (signal_dspin_h_clack_dec[x][y]);
+            clusters[x+1][y]->p_clack_out[WEST]    (signal_dspin_h_clack_dec[x][y]);
          }
       }
@@ -672,4 +688,8 @@
                clusters[x][y+1]->p_rsp_out[k][SOUTH]   (signal_dspin_v_rsp_dec[x][y][k]);
             }
+            clusters[x][y]->p_clack_out[NORTH]     (signal_dspin_v_clack_inc[x][y]);
+            clusters[x][y+1]->p_clack_in[SOUTH]    (signal_dspin_v_clack_inc[x][y]);
+            clusters[x][y]->p_clack_in[NORTH]      (signal_dspin_v_clack_dec[x][y]);
+            clusters[x][y+1]->p_clack_out[SOUTH]   (signal_dspin_v_clack_dec[x][y]);
          }
       }
@@ -682,8 +702,8 @@
       for (size_t k = 0; k < 2; k++)
       {
-         clusters[0][y]->p_cmd_in[k][WEST]             (signal_dspin_false_cmd_in[0][y][k][WEST]);
-         clusters[0][y]->p_cmd_out[k][WEST]            (signal_dspin_false_cmd_out[0][y][k][WEST]);
-         clusters[0][y]->p_rsp_in[k][WEST]             (signal_dspin_false_rsp_in[0][y][k][WEST]);
-         clusters[0][y]->p_rsp_out[k][WEST]            (signal_dspin_false_rsp_out[0][y][k][WEST]);
+         clusters[0][y]->p_cmd_in[k][WEST]        (signal_dspin_false_cmd_in[0][y][k][WEST]);
+         clusters[0][y]->p_cmd_out[k][WEST]       (signal_dspin_false_cmd_out[0][y][k][WEST]);
+         clusters[0][y]->p_rsp_in[k][WEST]        (signal_dspin_false_rsp_in[0][y][k][WEST]);
+         clusters[0][y]->p_rsp_out[k][WEST]       (signal_dspin_false_rsp_out[0][y][k][WEST]);
 
          clusters[XMAX-1][y]->p_cmd_in[k][EAST]   (signal_dspin_false_cmd_in[XMAX-1][y][k][EAST]);
@@ -692,4 +712,10 @@
          clusters[XMAX-1][y]->p_rsp_out[k][EAST]  (signal_dspin_false_rsp_out[XMAX-1][y][k][EAST]);
       }
+
+      clusters[0][y]->p_clack_in[WEST]       (signal_dspin_false_clack_in[0][y][WEST]);
+      clusters[0][y]->p_clack_out[WEST]      (signal_dspin_false_clack_out[0][y][WEST]);
+
+      clusters[XMAX-1][y]->p_clack_in[EAST]  (signal_dspin_false_clack_in[XMAX-1][y][EAST]);
+      clusters[XMAX-1][y]->p_clack_out[EAST] (signal_dspin_false_clack_out[XMAX-1][y][EAST]);
    }
 
@@ -699,8 +725,8 @@
       for (size_t k = 0; k < 2; k++)
       {
-         clusters[x][0]->p_cmd_in[k][SOUTH]            (signal_dspin_false_cmd_in[x][0][k][SOUTH]);
-         clusters[x][0]->p_cmd_out[k][SOUTH]           (signal_dspin_false_cmd_out[x][0][k][SOUTH]);
-         clusters[x][0]->p_rsp_in[k][SOUTH]            (signal_dspin_false_rsp_in[x][0][k][SOUTH]);
-         clusters[x][0]->p_rsp_out[k][SOUTH]           (signal_dspin_false_rsp_out[x][0][k][SOUTH]);
+         clusters[x][0]->p_cmd_in[k][SOUTH]       (signal_dspin_false_cmd_in[x][0][k][SOUTH]);
+         clusters[x][0]->p_cmd_out[k][SOUTH]      (signal_dspin_false_cmd_out[x][0][k][SOUTH]);
+         clusters[x][0]->p_rsp_in[k][SOUTH]       (signal_dspin_false_rsp_in[x][0][k][SOUTH]);
+         clusters[x][0]->p_rsp_out[k][SOUTH]      (signal_dspin_false_rsp_out[x][0][k][SOUTH]);
 
          clusters[x][YMAX-1]->p_cmd_in[k][NORTH]  (signal_dspin_false_cmd_in[x][YMAX-1][k][NORTH]);
@@ -709,4 +735,10 @@
          clusters[x][YMAX-1]->p_rsp_out[k][NORTH] (signal_dspin_false_rsp_out[x][YMAX-1][k][NORTH]);
       }
+
+      clusters[x][0]->p_clack_in[SOUTH]       (signal_dspin_false_clack_in[x][0][SOUTH]);
+      clusters[x][0]->p_clack_out[SOUTH]      (signal_dspin_false_clack_out[x][0][SOUTH]);
+
+      clusters[x][YMAX-1]->p_clack_in[NORTH]  (signal_dspin_false_clack_in[x][YMAX-1][NORTH]);
+      clusters[x][YMAX-1]->p_clack_out[NORTH] (signal_dspin_false_clack_out[x][YMAX-1][NORTH]);
    }
    std::cout << "North, South, West, East connections established" << std::endl;
@@ -736,4 +768,15 @@
                signal_dspin_false_rsp_out[x][y][k][a].read  = true;
             }
+         }
+      }
+   }
+   // clack network boundaries signals
+   for (size_t x = 0; x < XMAX ; x++){
+      for (size_t y = 0; y < YMAX ; y++){
+         for (size_t k = 0; k < 4; k++){
+            signal_dspin_false_clack_in [x][y][k].write = false;
+            signal_dspin_false_clack_in [x][y][k].read  = true;
+            signal_dspin_false_clack_out[x][y][k].write = false;
+            signal_dspin_false_clack_out[x][y][k].read  = true;
          }
       }
Index: branches/v5/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/metadata/tsar_xbar_cluster.sd
===================================================================
--- branches/v5/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/metadata/tsar_xbar_cluster.sd	(revision 447)
+++ branches/v5/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/metadata/tsar_xbar_cluster.sd	(revision 448)
@@ -57,4 +57,7 @@
         Uses('caba:virtual_dspin_router', 
               flit_width      = parameter.Reference('dspin_rsp_width')),
+
+        Uses('caba:dspin_router', 
+              flit_width      = parameter.Reference('dspin_cmd_width')),
             
         Uses('caba:vci_multi_tty',
Index: branches/v5/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/source/include/tsar_xbar_cluster.h
===================================================================
--- branches/v5/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/source/include/tsar_xbar_cluster.h	(revision 447)
+++ branches/v5/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/source/include/tsar_xbar_cluster.h	(revision 448)
@@ -27,4 +27,5 @@
 #include "vci_dspin_target_wrapper.h"
 #include "virtual_dspin_router.h"
+#include "dspin_router.h"
 #include "vci_multi_tty.h"
 #include "vci_multi_nic.h"
@@ -54,4 +55,6 @@
     soclib::caba::DspinOutput<dspin_rsp_width>      **p_rsp_out;
     soclib::caba::DspinInput<dspin_rsp_width>       **p_rsp_in;
+    soclib::caba::DspinOutput<dspin_cmd_width>      *p_clack_out;
+    soclib::caba::DspinInput<dspin_cmd_width>       *p_clack_in;
 
     // interrupt signals
@@ -206,4 +209,5 @@
     VirtualDspinRouter<dspin_cmd_width>*          router_cmd;
     VirtualDspinRouter<dspin_rsp_width>*          router_rsp;
+    DspinRouter<dspin_cmd_width>*                 router_clack;
 
     TsarXbarCluster( sc_module_name                     insname,
Index: branches/v5/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/source/src/tsar_xbar_cluster.cpp
===================================================================
--- branches/v5/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/source/src/tsar_xbar_cluster.cpp	(revision 447)
+++ branches/v5/platforms/tsar_generic_xbar/tsar_xbar_cluster/caba/source/src/tsar_xbar_cluster.cpp	(revision 448)
@@ -89,4 +89,6 @@
     p_rsp_in        = alloc_elems<DspinInput<dspin_rsp_width> >("p_rsp_in", 2, 4);
     p_rsp_out       = alloc_elems<DspinOutput<dspin_rsp_width> >("p_rsp_out", 2, 4);
+    p_clack_in      = alloc_elems<DspinInput<dspin_cmd_width> >("p_clack_in", 4);
+    p_clack_out     = alloc_elems<DspinOutput<dspin_cmd_width> >("p_clack_out", 4);
 
     /////////////////////////////////////////////////////////////////////////////
@@ -296,4 +298,11 @@
                      4,4);                         // input & output fifo depths
 
+    /////////////////////////////////////////////////////////////////////////////
+    router_clack = new DspinRouter<dspin_cmd_width>(
+                     "router_clack",
+                     x_id,y_id,                    // coordinates in mesh
+                     x_width, y_width,             // x & y fields width
+                     4,4);                         // input & output fifo depths
+
     // IO cluster components
     if ( io )
@@ -394,4 +403,7 @@
     router_rsp->p_clk                        (this->p_clk);
     router_rsp->p_resetn                     (this->p_resetn);
+    router_clack->p_clk                      (this->p_clk);
+    router_clack->p_resetn                   (this->p_resetn);
+
     for (int x = 0; x < 2; x++)
     {
@@ -405,4 +417,10 @@
     }
 
+    for(int x = 0; x < 4; x++)
+    {
+       router_clack->p_out[x]                (this->p_clack_out[x]);
+       router_clack->p_in[x]                 (this->p_clack_in[x]);
+    }
+
     router_cmd->p_out[0][4]                  (signal_dspin_cmd_g2l_d);
     router_cmd->p_out[1][4]                  (signal_dspin_m2p_g2l_c);
@@ -414,4 +432,8 @@
     router_rsp->p_in[0][4]                   (signal_dspin_rsp_l2g_d);
     router_rsp->p_in[1][4]                   (signal_dspin_p2m_l2g_c);
+
+    router_clack->p_out[4]                   (signal_dspin_clack_g2l_c);
+    router_clack->p_in[4]                    (signal_dspin_clack_l2g_c);
+
 
     std::cout << "  - CMD & RSP routers connected" << std::endl;
