Index: trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/include/tsar_iob_cluster.h
===================================================================
--- trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/include/tsar_iob_cluster.h	(revision 450)
+++ trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/include/tsar_iob_cluster.h	(revision 468)
@@ -77,4 +77,6 @@
 	DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_l2g_c;
 	DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_g2l_c; 
+	DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_l2g_c;
+	DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_g2l_c;
 	DspinSignals<dspin_int_rsp_width>     signal_int_dspin_rsp_l2g_d; 
 	DspinSignals<dspin_int_rsp_width>     signal_int_dspin_rsp_g2l_d; 
@@ -111,6 +113,8 @@
 	// Coherence DSPIN signals between DSPIN local crossbars and CC components 
 	DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_memc;
+	DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_memc;
 	DspinSignals<dspin_int_rsp_width>     signal_int_dspin_p2m_memc;
 	DspinSignals<dspin_int_cmd_width>     signal_int_dspin_m2p_proc[8];
+	DspinSignals<dspin_int_cmd_width>     signal_int_dspin_clack_proc[8];
 	DspinSignals<dspin_int_rsp_width>     signal_int_dspin_p2m_proc[8];
 
@@ -179,4 +183,5 @@
     DspinLocalCrossbar<dspin_int_cmd_width>*          int_xbar_m2p_c;
     DspinLocalCrossbar<dspin_int_rsp_width>*          int_xbar_p2m_c;
+    DspinLocalCrossbar<dspin_int_cmd_width>*          int_xbar_clack_c;
 
     VirtualDspinRouter<dspin_int_cmd_width>*	      int_router_cmd;
Index: trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/src/tsar_iob_cluster.cpp
===================================================================
--- trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/src/tsar_iob_cluster.cpp	(revision 450)
+++ trunk/platforms/tsar_generic_iob/tsar_iob_cluster/caba/source/src/tsar_iob_cluster.cpp	(revision 468)
@@ -89,8 +89,8 @@
 
     // Vectors of DSPIN ports for inter-cluster communications
-    p_dspin_int_cmd_in  = alloc_elems<DspinInput<dspin_int_cmd_width> >("p_int_cmd_in", 2, 4);
-    p_dspin_int_cmd_out = alloc_elems<DspinOutput<dspin_int_cmd_width> >("p_int_cmd_out", 2, 4);
-    p_dspin_int_rsp_in  = alloc_elems<DspinInput<dspin_int_rsp_width> >("p_int_rsp_in", 2, 4);
-    p_dspin_int_rsp_out = alloc_elems<DspinOutput<dspin_int_rsp_width> >("p_int_rsp_out", 2, 4);
+    p_dspin_int_cmd_in  = alloc_elems<DspinInput<dspin_int_cmd_width> >("p_int_cmd_in", 4, 3);
+    p_dspin_int_cmd_out = alloc_elems<DspinOutput<dspin_int_cmd_width> >("p_int_cmd_out", 4, 3);
+    p_dspin_int_rsp_in  = alloc_elems<DspinInput<dspin_int_rsp_width> >("p_int_rsp_in", 4, 2);
+    p_dspin_int_rsp_out = alloc_elems<DspinOutput<dspin_int_rsp_width> >("p_int_rsp_out", 4, 2);
 
     p_dspin_ram_cmd_in  = alloc_elems<DspinInput<dspin_ram_cmd_width> >("p_ext_cmd_in", 4);
@@ -171,4 +171,5 @@
                      8,                                  // TRANSACTION TABLE DEPTH
                      8,                                  // UPDATE TABLE DEPTH
+                     8,                                  // INVALIDATE TABLE DEPTH
                      debug_start_cycle,
                      memc_debug_ok );
@@ -303,4 +304,18 @@
                      false );                      // no broacast 
 
+    std::ostringstream s_int_xbar_clack_c;
+    s_int_xbar_clack_c << "int_xbar_clack_c_" << x_id << "_" << y_id;
+    int_xbar_clack_c = new DspinLocalCrossbar<dspin_int_cmd_width>(
+                     s_int_xbar_clack_c.str().c_str(),
+                     mt_int,                       // mapping table
+                     x_id, y_id,                   // cluster coordinates
+                     x_width, y_width, l_width,
+                     1,                            // number of local sources
+                     nb_procs,                     // number of local targets 
+                     1, 1,                         // fifo depths
+                     true,                         // CMD
+                     false,                        // don't use local routing table
+                     false);                       // broadcast
+
     //////////////  INT ROUTER(S)
     std::ostringstream s_int_router_cmd;
@@ -310,4 +325,5 @@
                      x_id,y_id,                    // coordinate in the mesh
                      x_width, y_width,             // x & y fields width
+                     3,                            // nb virtual channels
                      4,4);                         // input & output fifo depths
 
@@ -318,4 +334,5 @@
                      x_id,y_id,                    // coordinates in mesh
                      x_width, y_width,             // x & y fields width
+                     2,                            // nb virtual channels
                      4,4);                         // input & output fifo depths
 
@@ -459,25 +476,32 @@
     int_router_rsp->p_clk                        (this->p_clk);
     int_router_rsp->p_resetn                     (this->p_resetn);
-    for (int x = 0; x < 2; x++)
-    {
-        for(int y = 0; y < 4; y++)
+
+    for (int i = 0; i < 4; i++)
+    {
+        for(int k = 0; k < 3; k++)
         {
-            int_router_cmd->p_out[x][y]          (this->p_dspin_int_cmd_out[x][y]);
-            int_router_cmd->p_in[x][y]           (this->p_dspin_int_cmd_in[x][y]);
-            int_router_rsp->p_out[x][y]          (this->p_dspin_int_rsp_out[x][y]);
-            int_router_rsp->p_in[x][y]           (this->p_dspin_int_rsp_in[x][y]);
+            int_router_cmd->p_out[i][k]          (this->p_dspin_int_cmd_out[i][k]);
+            int_router_cmd->p_in[i][k]           (this->p_dspin_int_cmd_in[i][k]);
         }
+
+        for(int k = 0; k < 2; k++)
+        {
+            int_router_rsp->p_out[i][k]          (this->p_dspin_int_rsp_out[i][k]);
+            int_router_rsp->p_in[i][k]           (this->p_dspin_int_rsp_in[i][k]);
+        }
     }
 
     // local ports
-    int_router_cmd->p_out[0][4]                  (signal_int_dspin_cmd_g2l_d);
-    int_router_cmd->p_out[1][4]                  (signal_int_dspin_m2p_g2l_c);
-    int_router_cmd->p_in[0][4]                   (signal_int_dspin_cmd_l2g_d);
-    int_router_cmd->p_in[1][4]                   (signal_int_dspin_m2p_l2g_c);
+    int_router_cmd->p_out[4][0]                  (signal_int_dspin_cmd_g2l_d);
+    int_router_cmd->p_out[4][1]                  (signal_int_dspin_m2p_g2l_c);
+    int_router_cmd->p_out[4][2]                  (signal_int_dspin_clack_g2l_c);
+    int_router_cmd->p_in[4][0]                   (signal_int_dspin_cmd_l2g_d);
+    int_router_cmd->p_in[4][1]                   (signal_int_dspin_m2p_l2g_c);
+    int_router_cmd->p_in[4][2]                   (signal_int_dspin_clack_l2g_c);
     
-    int_router_rsp->p_out[0][4]                  (signal_int_dspin_rsp_g2l_d);
-    int_router_rsp->p_out[1][4]                  (signal_int_dspin_p2m_g2l_c);
-    int_router_rsp->p_in[0][4]                   (signal_int_dspin_rsp_l2g_d);
-    int_router_rsp->p_in[1][4]                   (signal_int_dspin_p2m_l2g_c);
+    int_router_rsp->p_out[4][0]                  (signal_int_dspin_rsp_g2l_d);
+    int_router_rsp->p_out[4][1]                  (signal_int_dspin_p2m_g2l_c);
+    int_router_rsp->p_in[4][0]                   (signal_int_dspin_rsp_l2g_d);
+    int_router_rsp->p_in[4][1]                   (signal_int_dspin_p2m_l2g_c);
 
     ///////////////////// CMD DSPIN  local crossbar direct
@@ -541,4 +565,13 @@
         int_xbar_p2m_c->p_local_in[p]            (signal_int_dspin_p2m_proc[p]);
 
+    ////////////////////// CLACK DSPIN local crossbar coherence
+    int_xbar_clack_c->p_clk                      (this->p_clk);
+    int_xbar_clack_c->p_resetn                   (this->p_resetn);
+    int_xbar_clack_c->p_global_out               (signal_int_dspin_clack_l2g_c);
+    int_xbar_clack_c->p_global_in                (signal_int_dspin_clack_g2l_c);
+    int_xbar_clack_c->p_local_in[0]              (signal_int_dspin_clack_memc);
+    for (size_t p = 0; p < nb_procs; p++)
+        int_xbar_clack_c->p_local_out[p]         (signal_int_dspin_clack_proc[p]);
+
     //////////////////////////////////// Processors
     for (size_t p = 0; p < nb_procs; p++)
@@ -547,6 +580,7 @@
         proc[p]->p_resetn                        (this->p_resetn);
         proc[p]->p_vci                           (signal_int_vci_ini_proc[p]);
-        proc[p]->p_dspin_in                      (signal_int_dspin_m2p_proc[p]);
-        proc[p]->p_dspin_out                     (signal_int_dspin_p2m_proc[p]);
+        proc[p]->p_dspin_m2p                     (signal_int_dspin_m2p_proc[p]);
+        proc[p]->p_dspin_p2m                     (signal_int_dspin_p2m_proc[p]);
+        proc[p]->p_dspin_clack                   (signal_int_dspin_clack_proc[p]);
         proc[p]->p_irq[0]                        (signal_proc_it[p]);
         for ( size_t j = 1 ; j < 6 ; j++)
@@ -563,10 +597,10 @@
 
     ///////////////////////////////////// XICU
-    xicu->p_clk                     	          (this->p_clk);
-    xicu->p_resetn                  	          (this->p_resetn);
-    xicu->p_vci                     	          (signal_int_vci_tgt_xicu);
+    xicu->p_clk                                  (this->p_clk);
+    xicu->p_resetn                               (this->p_resetn);
+    xicu->p_vci                                  (signal_int_vci_tgt_xicu);
     for ( size_t p=0 ; p<nb_procs ; p++)
     {
-        xicu->p_irq[p]              	          (signal_proc_it[p]);
+        xicu->p_irq[p]                           (signal_proc_it[p]);
     }
     for ( size_t i=0 ; i<4 ; i++)
@@ -590,10 +624,11 @@
 
     ///////////////////////////////////// MEMC
-    memc->p_clk                     	          (this->p_clk);
-    memc->p_resetn                  	          (this->p_resetn);
-    memc->p_vci_ixr                 	          (signal_ram_vci_ini_memc);
-    memc->p_vci_tgt                 	          (signal_int_vci_tgt_memc);
-    memc->p_dspin_in                             (signal_int_dspin_p2m_memc);
-    memc->p_dspin_out         	                (signal_int_dspin_m2p_memc);
+    memc->p_clk                                  (this->p_clk);
+    memc->p_resetn                               (this->p_resetn);
+    memc->p_vci_ixr                              (signal_ram_vci_ini_memc);
+    memc->p_vci_tgt                              (signal_int_vci_tgt_memc);
+    memc->p_dspin_p2m                            (signal_int_dspin_p2m_memc);
+    memc->p_dspin_m2p                            (signal_int_dspin_m2p_memc);
+    memc->p_dspin_clack                          (signal_int_dspin_clack_memc);
 
     // wrapper to INT network
@@ -612,7 +647,7 @@
 
     //////////////////////////////////// XRAM
-    xram->p_clk                     	          (this->p_clk);
-    xram->p_resetn                  	          (this->p_resetn);
-    xram->p_vci                 	                (signal_ram_vci_tgt_xram);
+    xram->p_clk                                  (this->p_clk);
+    xram->p_resetn                               (this->p_resetn);
+    xram->p_vci                                  (signal_ram_vci_tgt_xram);
 
     // wrapper to RAM network
@@ -624,8 +659,8 @@
 
     /////////////////////////////////// MDMA
-    mdma->p_clk                       	          (this->p_clk);
+    mdma->p_clk                                  (this->p_clk);
     mdma->p_resetn                               (this->p_resetn);
-    mdma->p_vci_target                	          (signal_int_vci_tgt_mdma);
-    mdma->p_vci_initiator             	          (signal_int_vci_ini_mdma);
+    mdma->p_vci_target                           (signal_int_vci_tgt_mdma);
+    mdma->p_vci_initiator                        (signal_int_vci_ini_mdma);
     for (size_t i=0 ; i<nb_dmas ; i++)
         mdma->p_irq[i]                           (signal_irq_mdma[i]);
