Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Parameters.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Parameters.cpp	(revision 15)
@@ -6,17 +6,21 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Parameters.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Parameters.h"
 
 namespace morpheo {
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
 
-  Parameters::Parameters (uint32_t nb_port_read ,
-			  uint32_t nb_port_write,
-			  uint32_t size_address ,
-			  uint32_t size_word    ,
-			  uint32_t nb_bank      ):
+  Parameters::Parameters (uint32_t    nb_port_read         ,
+			  uint32_t    nb_port_write        ,
+			  uint32_t    size_address         ,
+			  uint32_t    size_word            ,
+			  uint32_t    nb_bank              ,
+			  uint32_t    nb_port_read_by_bank ,
+			  uint32_t    nb_port_write_by_bank,
+			  Tcrossbar_t crossbar             ):
     _nb_port_read          (nb_port_read         ),
     _nb_port_write         (nb_port_write        ),
@@ -24,8 +28,57 @@
     _size_word             (size_word            ),
     _nb_bank               (nb_bank              ),
-    _nb_port_read_by_bank  (nb_port_read /nb_bank),
-    _nb_port_write_by_bank (nb_port_write/nb_bank)
+    _nb_port_read_by_bank  (nb_port_read_by_bank ),
+    _nb_port_write_by_bank (nb_port_write_by_bank),
+    _crossbar              (crossbar             ),
+    _shift_address         (static_cast<uint32_t>(ceil(log2(_nb_bank))))
   {
     log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"Parameters","Begin");
+
+    if (_crossbar == PARTIAL_CROSSBAR)
+      {
+	// All port_src is connected with one port_dest on each bank
+	
+	_link_port_read  = new uint32_t [_nb_port_read ];
+	for (uint32_t i=0; i<_nb_port_read ; i++)
+	  _link_port_read  [i] = i%_nb_port_read_by_bank;
+
+	_link_port_write = new uint32_t [_nb_port_write];
+	for (uint32_t i=0; i<_nb_port_write; i++)
+	  _link_port_write [i] = i%_nb_port_write_by_bank;
+      }
+    // else : don't allocate
+
+    _nb_port_select_by_bank_read_port  = new uint32_t [_nb_port_read_by_bank ];
+    
+    if (_crossbar == FULL_CROSSBAR)
+      // All port_src is connected with all port_dest on each bank
+      for (uint32_t i=0; i<_nb_port_read_by_bank ;i++)
+	_nb_port_select_by_bank_read_port [i] = _nb_port_read;
+    else
+      // All port_src is connected with one port_dest on each bank
+      {
+	for (uint32_t i=0; i<_nb_port_read_by_bank ;i++)
+	  _nb_port_select_by_bank_read_port [i] = 0;
+
+	for (uint32_t i=0; i<_nb_port_read         ;i++)
+	  _nb_port_select_by_bank_read_port [_link_port_read [i]] ++;
+      }
+    
+    _nb_port_select_by_bank_write_port = new uint32_t [_nb_port_write_by_bank];
+
+    if (_crossbar == FULL_CROSSBAR)
+      // All port_src is connected with all port_dest on each bank
+      for (uint32_t i=0; i<_nb_port_write_by_bank ;i++)
+	_nb_port_select_by_bank_write_port [i] = _nb_port_write;
+    else
+      // All port_src is connected with one port_dest on each bank
+      {
+	for (uint32_t i=0; i<_nb_port_write_by_bank ;i++)
+	  _nb_port_select_by_bank_write_port [i] = 0;
+
+	for (uint32_t i=0; i<_nb_port_write         ;i++)
+	  _nb_port_select_by_bank_write_port [_link_port_write[i]] ++;
+      }
+    
     test();
     log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"Parameters","End");
@@ -33,15 +86,26 @@
   
   Parameters::Parameters (Parameters & param):
-   _nb_port_read          (param._nb_port_read ),
-   _nb_port_write         (param._nb_port_write),
-   _size_address          (param._size_address ),
-   _size_word             (param._size_word    ),
-   _nb_bank               (param._nb_bank      ),
-   _nb_port_read_by_bank  (param._nb_port_read ),
-   _nb_port_write_by_bank (param._nb_port_write)
+    _nb_port_read          (param._nb_port_read         ),
+    _nb_port_write         (param._nb_port_write        ),
+    _size_address          (param._size_address         ),
+    _size_word             (param._size_word            ),
+    _nb_bank               (param._nb_bank              ),
+    _nb_port_read_by_bank  (param._nb_port_read_by_bank ),
+    _nb_port_write_by_bank (param._nb_port_write_by_bank),
+    _crossbar              (param._crossbar             ),
+    _shift_address         (param._shift_address        )
    {
-    log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"Parameters","Begin");
+    log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"Parameters (copy)","Begin");
+
+    _nb_port_select_by_bank_read_port  = new uint32_t [_nb_port_read_by_bank ];
+    for (uint32_t i=0; i<_nb_port_read_by_bank; i++)
+      _nb_port_select_by_bank_read_port [i] = param._nb_port_select_by_bank_read_port [i];
+    
+    _nb_port_select_by_bank_write_port = new uint32_t [_nb_port_write_by_bank ];
+    for (uint32_t i=0; i<_nb_port_write_by_bank; i++)
+      _nb_port_select_by_bank_write_port[i] = param._nb_port_select_by_bank_write_port [i];
+    
     test();
-    log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"Parameters","End");
+    log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"Parameters (copy)","End");
   };
 
@@ -54,4 +118,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 }; // end namespace behavioural
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Parameters_msg_error.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Parameters_msg_error.cpp	(revision 15)
@@ -6,15 +6,15 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Parameters.h"
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Types.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Parameters.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Types.h"
 #include <sstream>
 using namespace std;
 
-namespace morpheo                    {
+namespace morpheo {
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
-
 
   string Parameters::msg_error(void)
@@ -24,4 +24,24 @@
     string msg = "";
 
+    if (_nb_port_read < _nb_port_read_by_bank)
+      {
+        msg += "  - Each bank read's port must be higher at number of read port\n";
+        msg += "    * nb_port_read                    : " + toString(_nb_port_read        ) + "\n";
+        msg += "    * nb_port_read_by_bank            : " + toString(_nb_port_read_by_bank) + "\n";
+      }
+
+    if (_nb_port_write < _nb_port_write_by_bank)
+      {
+        msg += "  - Each bank write's port must be higher at number of write port\n";
+        msg += "    * nb_port_write                   : " + toString(_nb_port_write        ) + "\n";
+        msg += "    * nb_port_write_by_bank           : " + toString(_nb_port_write_by_bank) + "\n";
+      }
+    
+    if (_nb_bank < 1)
+      {
+        msg += "  - nb_bank must be higher at 1\n";
+        msg += "    * nb_bank                         : " + toString(_nb_bank             ) + "\n";
+      }
+      
     return msg;
 
@@ -31,6 +51,6 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
-
 }; // end namespace behavioural
 }; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Parameters_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Parameters_print.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Parameters_print.cpp	(revision 15)
@@ -6,5 +6,5 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Parameters.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Parameters.h"
 #include "Behavioural/include/XML.h"
 using namespace std;
@@ -13,4 +13,5 @@
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -24,9 +25,12 @@
 
     xml.balise_open("registerfile_multi_banked_glue");
-    xml.singleton_begin("nb_port_read "); xml.attribut("value",toString(_nb_port_read )); xml.singleton_end();
-    xml.singleton_begin("nb_port_write"); xml.attribut("value",toString(_nb_port_write)); xml.singleton_end();
-    xml.singleton_begin("size_address "); xml.attribut("value",toString(_size_address )); xml.singleton_end();
-    xml.singleton_begin("size_word    "); xml.attribut("value",toString(_size_word    )); xml.singleton_end();
-    xml.singleton_begin("nb_bank      "); xml.attribut("value",toString(_nb_bank      )); xml.singleton_end();
+    xml.singleton_begin("nb_port_read         "); xml.attribut("value",toString(_nb_port_read         )); xml.singleton_end();
+    xml.singleton_begin("nb_port_write        "); xml.attribut("value",toString(_nb_port_write        )); xml.singleton_end();
+    xml.singleton_begin("size_address         "); xml.attribut("value",toString(_size_address         )); xml.singleton_end();
+    xml.singleton_begin("size_word            "); xml.attribut("value",toString(_size_word            )); xml.singleton_end();
+    xml.singleton_begin("nb_bank              "); xml.attribut("value",toString(_nb_bank              )); xml.singleton_end();
+    xml.singleton_begin("nb_port_read_by_bank "); xml.attribut("value",toString(_nb_port_read_by_bank )); xml.singleton_end();
+    xml.singleton_begin("nb_port_write_by_bank"); xml.attribut("value",toString(_nb_port_write_by_bank)); xml.singleton_end();
+    xml.singleton_begin("crossbar             "); xml.attribut("value",toString(_crossbar             )); xml.singleton_end();
     xml.balise_close();
 
@@ -37,5 +41,5 @@
 
   ostream& operator<< (ostream& output_stream ,
-		       morpheo::behavioural::generic::registerfile_multi_banked::registerfile_multi_banked_glue::Parameters & x)
+		       morpheo::behavioural::generic::registerfile::registerfile_multi_banked::registerfile_multi_banked_glue::Parameters & x)
   {
     output_stream << x.print(0);
@@ -46,4 +50,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue.cpp	(revision 15)
@@ -6,9 +6,10 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
 
 namespace morpheo                    {
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -23,5 +24,5 @@
 			      morpheo::behavioural::Parameters_Statistics             param_statistics,
 #endif
-			      morpheo::behavioural::generic::registerfile_multi_banked::registerfile_multi_banked_glue::Parameters param ):
+			      morpheo::behavioural::generic::registerfile::registerfile_multi_banked::registerfile_multi_banked_glue::Parameters param ):
 			      _name              (name)
 			      ,_param            (param)
@@ -66,5 +67,5 @@
     allocation ();
 
-//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
     log_printf(INFO,RegisterFile_Multi_Banked_Glue,"RegisterFile_Multi_Banked_Glue","Method - transition");
 
@@ -72,8 +73,40 @@
     dont_initialize ();
     sensitive_pos << *(in_CLOCK);
-//#endif
+#endif
+
+    log_printf(INFO,RegisterFile_Multi_Banked_Glue,"RegisterFile_Multi_Banked_Glue","Method - transition");
+
+    SC_METHOD (genMealy_read_in);
+    dont_initialize ();
+    for (uint32_t l=0; l<_param._nb_port_read; l++)
+      sensitive << (*(in_READ_IN_ADDRESS [l]));
+    for (uint32_t i=0; i<_param._nb_bank; i++)
+       for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
+	 {
+	   sensitive << (*(in_READ_OUT_ACK      [i][j]))
+		     << (*(in_READ_OUT_DATA     [i][j]));
+	   for (uint32_t k=0; k<_param._nb_port_select_by_bank_read_port[j]; k++)
+	     sensitive << (*(in_READ_SELECT_ACK [i][j][k]));
+	 }
 
 #ifdef SYSTEMCASS_SPECIFIC
     // List dependency information
+    for (uint32_t l=0; l<_param._nb_port_read; l++)
+      {
+	(*(out_READ_IN_ACK  [l])) (*(in_READ_IN_ADDRESS [l]));
+	(*(out_READ_IN_DATA [l])) (*(in_READ_IN_ADDRESS [l]));
+
+	for (uint32_t i=0; i<_param._nb_bank; i++)
+	  for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
+	    {
+	      (*(out_READ_IN_ACK  [l])) (*(in_READ_OUT_ACK      [i][j]));
+	      (*(out_READ_IN_DATA [l])) (*(in_READ_OUT_DATA     [i][j]));
+	      for (uint32_t k=0; k<_param._nb_port_select_by_bank_read_port[j]; k++)
+		{
+		  (*(out_READ_IN_ACK  [l])) (*(in_READ_SELECT_ACK [i][j][k]));
+		  (*(out_READ_IN_DATA [l])) (*(in_READ_SELECT_ACK [i][j][k]));
+		}
+	    }
+      }
 #endif    
 
@@ -113,4 +146,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_allocation.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_allocation.cpp	(revision 15)
@@ -7,9 +7,10 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
 
 namespace morpheo                    {
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -30,6 +31,4 @@
     in_READ_IN_ADDRESS   = new SC_IN (Taddress_t)           * [_param._nb_port_read];
    out_READ_IN_DATA      = new SC_OUT(Tdata_t   )           * [_param._nb_port_read];
-    in_READ_SELECT_VAL   = new SC_IN (Tcontrol_t)           * [_param._nb_port_read];
-   out_READ_SELECT_ACK   = new SC_OUT(Tcontrol_t)           * [_param._nb_port_read];
 
    for (uint32_t i=0; i<_param._nb_port_read; i++)
@@ -46,16 +45,34 @@
        rename = "out_READ_IN_DATA_"+toString(i)+"     ";
        out_READ_IN_DATA      [i] = new SC_OUT(Tdata_t   ) (rename.c_str());
-
-       rename = " in_READ_SELECT_VAL_"+toString(i)+"  ";
-        in_READ_SELECT_VAL   [i] = new SC_IN (Tcontrol_t) (rename.c_str());
-
-       rename = "out_READ_SELECT_ACK_"+toString(i)+"  ";
-       out_READ_SELECT_ACK   [i] = new SC_OUT(Tcontrol_t) (rename.c_str());
      }
    						      
-   out_READ_OUT_VAL      = new SC_OUT(Tcontrol_t)          ** [_param._nb_bank];
-    in_READ_OUT_ACK      = new SC_IN (Tcontrol_t)          ** [_param._nb_bank];
-   out_READ_OUT_ADDRESS  = new SC_OUT(Taddress_t)          ** [_param._nb_bank];
-    in_READ_OUT_DATA     = new SC_IN (Tdata_t   )          ** [_param._nb_bank];
+   out_READ_SELECT_VAL  = new SC_OUT(Tcontrol_t) *** [_param._nb_bank];
+    in_READ_SELECT_ACK  = new SC_IN (Tcontrol_t) *** [_param._nb_bank];
+
+    for (uint32_t i=0; i<_param._nb_bank; i++)
+      {
+	out_READ_SELECT_VAL [i] = new SC_OUT(Tcontrol_t)  ** [_param._nb_port_read_by_bank];
+	 in_READ_SELECT_ACK [i] = new SC_IN (Tcontrol_t)  ** [_param._nb_port_read_by_bank];
+
+	 for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
+	   {
+	     out_READ_SELECT_VAL [i][j] = new SC_OUT(Tcontrol_t)   * [_param._nb_port_select_by_bank_read_port [j]];
+	      in_READ_SELECT_ACK [i][j] = new SC_IN (Tcontrol_t)   * [_param._nb_port_select_by_bank_read_port [j]];
+	     
+	     for (uint32_t k=0; k<_param._nb_port_select_by_bank_read_port [j]; k++)
+	       {
+		 rename="out_READ_SELECT_VAL_"+toString(i)+"_"+toString(j)+"_"+toString(k)+" ";
+		 out_READ_SELECT_VAL [i][j][k] = new SC_OUT(Tcontrol_t) (rename.c_str());
+		 
+		 rename=" in_READ_SELECT_ACK_"+toString(i)+"_"+toString(j)+"_"+toString(k)+" ";
+		  in_READ_SELECT_ACK [i][j][k] = new SC_IN (Tcontrol_t) (rename.c_str());
+	       }
+	   }
+      }
+
+   out_READ_OUT_VAL         = new SC_OUT(Tcontrol_t)          ** [_param._nb_bank];
+    in_READ_OUT_ACK         = new SC_IN (Tcontrol_t)          ** [_param._nb_bank];
+   out_READ_OUT_ADDRESS     = new SC_OUT(Taddress_t)          ** [_param._nb_bank];
+    in_READ_OUT_DATA        = new SC_IN (Tdata_t   )          ** [_param._nb_bank];
 
     for (uint32_t i=0; i<_param._nb_bank; i++)
@@ -87,6 +104,4 @@
     in_WRITE_IN_ADDRESS  = new SC_IN (Taddress_t)           * [_param._nb_port_write];
     in_WRITE_IN_DATA     = new SC_IN (Tdata_t   )           * [_param._nb_port_write];
-    in_WRITE_SELECT_VAL  = new SC_IN (Tcontrol_t)           * [_param._nb_port_write];
-   out_WRITE_SELECT_ACK  = new SC_OUT(Tcontrol_t)           * [_param._nb_port_write];
 
    for (uint32_t i=0; i<_param._nb_port_write; i++)
@@ -103,12 +118,29 @@
        rename = " in_WRITE_IN_DATA_"+toString(i)+"    ";
         in_WRITE_IN_DATA     [i] = new SC_IN (Tdata_t   ) (rename.c_str());
-
-       rename = " in_WRITE_SELECT_VAL_"+toString(i)+" ";
-        in_WRITE_SELECT_VAL   [i] = new SC_IN (Tcontrol_t) (rename.c_str());
-
-       rename = "out_WRITE_SELECT_ACK_"+toString(i)+" ";
-       out_WRITE_SELECT_ACK   [i] = new SC_OUT(Tcontrol_t) (rename.c_str());
      }
    
+   out_WRITE_SELECT_VAL  = new SC_OUT(Tcontrol_t) *** [_param._nb_bank];
+    in_WRITE_SELECT_ACK  = new SC_IN (Tcontrol_t) *** [_param._nb_bank];
+
+    for (uint32_t i=0; i<_param._nb_bank; i++)
+      {
+	out_WRITE_SELECT_VAL [i] = new SC_OUT(Tcontrol_t)  ** [_param._nb_port_write_by_bank];
+	 in_WRITE_SELECT_ACK [i] = new SC_IN (Tcontrol_t)  ** [_param._nb_port_write_by_bank];
+
+	 for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
+	   {
+	     out_WRITE_SELECT_VAL [i][j] = new SC_OUT(Tcontrol_t)   * [_param._nb_port_select_by_bank_write_port [j]];
+	      in_WRITE_SELECT_ACK [i][j] = new SC_IN (Tcontrol_t)   * [_param._nb_port_select_by_bank_write_port [j]];
+	     
+	     for (uint32_t k=0; k<_param._nb_port_select_by_bank_write_port [j]; k++)
+	       {
+		 rename="out_WRITE_SELECT_VAL_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"";
+		 out_WRITE_SELECT_VAL [i][j][k] = new SC_OUT(Tcontrol_t) (rename.c_str());
+		 
+		 rename=" in_WRITE_SELECT_ACK_"+toString(i)+"_"+toString(j)+"_"+toString(k)+"";
+		  in_WRITE_SELECT_ACK [i][j][k] = new SC_IN (Tcontrol_t) (rename.c_str());
+	       }
+	   }
+      }
    
    out_WRITE_OUT_VAL     = new SC_OUT(Tcontrol_t)          ** [_param._nb_bank];
@@ -147,4 +179,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_deallocation.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_deallocation.cpp	(revision 15)
@@ -7,9 +7,10 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
 
 namespace morpheo {
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -29,6 +30,4 @@
        delete  in_READ_IN_ADDRESS   [i];
        delete out_READ_IN_DATA      [i];
-       delete  in_READ_SELECT_VAL   [i];
-       delete out_READ_SELECT_ACK   [i];
      }
    						      
@@ -37,8 +36,24 @@
    delete  in_READ_IN_ADDRESS;
    delete out_READ_IN_DATA   ;
-   delete  in_READ_SELECT_VAL;
-   delete out_READ_SELECT_ACK;
-
-    for (uint32_t i=0; i<_param._nb_bank; i++)
+   
+   for (uint32_t i=0; i<_param._nb_bank; i++)
+     {
+       for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
+	 {
+	   for (uint32_t k=0; k<_param._nb_port_select_by_bank_read_port[j]; k++)
+	     {
+	       delete out_READ_SELECT_VAL [i][j][k];
+	       delete  in_READ_SELECT_ACK [i][j][k];
+	     }
+	   delete out_READ_SELECT_VAL [i][j];
+	   delete  in_READ_SELECT_ACK [i][j];
+	 }
+       delete out_READ_SELECT_VAL [i];
+       delete  in_READ_SELECT_ACK [i];
+     }
+   delete out_READ_SELECT_VAL;
+   delete  in_READ_SELECT_ACK;
+   
+   for (uint32_t i=0; i<_param._nb_bank; i++)
       {
 	for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
@@ -67,6 +82,4 @@
        delete  in_WRITE_IN_ADDRESS  [i];
        delete  in_WRITE_IN_DATA     [i];
-       delete  in_WRITE_SELECT_VAL  [i];
-       delete out_WRITE_SELECT_ACK  [i];
      }
 
@@ -75,6 +88,22 @@
    delete  in_WRITE_IN_ADDRESS;
    delete  in_WRITE_IN_DATA   ;
-   delete  in_WRITE_SELECT_VAL;
-   delete out_WRITE_SELECT_ACK;
+
+   for (uint32_t i=0; i<_param._nb_bank; i++)
+     {
+       for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
+	 {
+	   for (uint32_t k=0; k<_param._nb_port_select_by_bank_write_port[j]; k++)
+	     {
+	       delete out_WRITE_SELECT_VAL [i][j][k];
+	       delete  in_WRITE_SELECT_ACK [i][j][k];
+	     }
+	   delete out_WRITE_SELECT_VAL [i][j];
+	   delete  in_WRITE_SELECT_ACK [i][j];
+	 }
+       delete out_WRITE_SELECT_VAL [i];
+       delete  in_WRITE_SELECT_ACK [i];
+     }
+   delete out_WRITE_SELECT_VAL;
+   delete  in_WRITE_SELECT_ACK;
    
    for (uint32_t i=0; i<_param._nb_bank; i++)
@@ -106,4 +135,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 }; // end namespace behavioural
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_genMealy_read_in.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_genMealy_read_in.cpp	(revision 15)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_genMealy_read_in.cpp	(revision 15)
@@ -0,0 +1,53 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace generic {
+namespace registerfile{
+namespace registerfile_multi_banked {
+namespace registerfile_multi_banked_glue {
+
+  
+  void RegisterFile_Multi_Banked_Glue::genMealy_read_in (void)
+  {
+    log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"genMealy_read_in","Begin");
+    
+    for (uint32_t l=0; l<_param._nb_port_read; l++)
+      {
+	uint32_t num_bank = PORT_READ(in_READ_IN_ADDRESS [l])>>_param._shift_address;
+
+// 	(*(out_READ_IN_ACK  [l])) (*(in_READ_IN_ADDRESS [i][j]));
+// 	(*(out_READ_IN_DATA [l])) (*(in_READ_IN_ADDRESS [i][j]));
+
+// 	for (uint32_t i=0; i<_param._nb_bank; i++)
+// 	  for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
+// 	    {
+// 	      (*(out_READ_IN_ACK  [l])) (*(in_READ_OUT_ACK      [i][j]));
+// 	      (*(out_READ_IN_DATA [l])) (*(in_READ_OUT_DATA     [i][j]));
+// 	      for (uint32_t k=0; k<_param._nb_port_select_by_bank_read_port[j]; k++)
+// 		{
+// 		  (*(out_READ_IN_ACK  [l])) (*(in_READ_SELECT_ACK [i][j][k]));
+// 		  (*(out_READ_IN_DATA [l])) (*(in_READ_SELECT_ACK [i][j][k]));
+// 		}
+// 	    }
+      }
+
+
+    log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"genMealy_read_in","End");
+  };
+
+}; // end namespace registerfile_multi_banked_glue
+}; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
+}; // end namespace generic
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_genMealy_read_out.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_genMealy_read_out.cpp	(revision 15)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_genMealy_read_out.cpp	(revision 15)
@@ -0,0 +1,32 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace generic {
+namespace registerfile{
+namespace registerfile_multi_banked {
+namespace registerfile_multi_banked_glue {
+
+
+  void RegisterFile_Multi_Banked_Glue::genMealy_read_out (void)
+  {
+    log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"genMealy_read_out","Begin");
+
+    log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"genMealy_read_out","End");
+  };
+
+}; // end namespace registerfile_multi_banked_glue
+}; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
+}; // end namespace generic
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_genMealy_read_select.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_genMealy_read_select.cpp	(revision 15)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_genMealy_read_select.cpp	(revision 15)
@@ -0,0 +1,32 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace generic {
+namespace registerfile{
+namespace registerfile_multi_banked {
+namespace registerfile_multi_banked_glue {
+
+
+  void RegisterFile_Multi_Banked_Glue::genMealy_read_select (void)
+  {
+    log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"genMealy_read_select","Begin");
+
+    log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"genMealy_read_select","End");
+  };
+
+}; // end namespace registerfile_multi_banked_glue
+}; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
+}; // end namespace generic
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_statistics.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_statistics.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_statistics.cpp	(revision 15)
@@ -7,9 +7,10 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
 
 namespace morpheo {
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -29,4 +30,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_transition.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_transition.cpp	(revision 15)
@@ -1,4 +1,4 @@
 #ifdef SYSTEMC
-//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
 /*
  * $Id$
@@ -8,9 +8,10 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
 
 namespace morpheo                    {
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -34,8 +35,8 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
-
 }; // end namespace behavioural
 }; // end namespace morpheo              
 #endif
-//#endif
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl.cpp	(revision 15)
@@ -7,5 +7,5 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
 #include "Behavioural/include/Vhdl.h"
 
@@ -13,4 +13,5 @@
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -35,4 +36,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl_body.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl_body.cpp	(revision 15)
@@ -7,9 +7,10 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
 
 namespace morpheo                    {
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -25,4 +26,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl_declaration.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl_declaration.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl_declaration.cpp	(revision 15)
@@ -7,9 +7,10 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
 
 namespace morpheo {
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -24,4 +25,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl_port.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl_port.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl_port.cpp	(revision 15)
@@ -7,5 +7,5 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
 
 #ifdef VHDL_TESTBENCH
@@ -18,4 +18,5 @@
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -26,4 +27,5 @@
     log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"vhdl_port","Begin");
 
+    log_printf(TRACE,RegisterFile_Multi_Banked_Glue,"vhdl_port","Interface READ_IN");
    for (uint32_t i=0; i<_param._nb_port_read; i++)
      {
@@ -32,19 +34,35 @@
        VHDL_SET_PORT(" in_READ_IN_ADDRESS_"+toString(i)+"  ", IN, _param._size_address);
        VHDL_SET_PORT("out_READ_IN_DATA_"+toString(i)+"     ",OUT, _param._size_word   );
-       VHDL_SET_PORT(" in_READ_SELECT_VAL_"+toString(i)+"  ", IN, 1);
-       VHDL_SET_PORT("out_READ_SELECT_ACK_"+toString(i)+"  ",OUT, 1);
      }
-   						      
+
+   log_printf(TRACE,RegisterFile_Multi_Banked_Glue,"vhdl_port","Interface READ_SELECT");
+   	
+   for (uint32_t i=0; i<_param._nb_bank; i++)
+     {
+       log_printf(TRACE,RegisterFile_Multi_Banked_Glue,"vhdl_port","READ_SELECT[%d]",i);
+       for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
+	 {
+	   log_printf(TRACE,RegisterFile_Multi_Banked_Glue,"vhdl_port","READ_SELECT[%d][%d]",i,j);
+	   for (uint32_t k=0; k<_param._nb_port_select_by_bank_read_port [j]; k++)
+	     {
+	       log_printf(TRACE,RegisterFile_Multi_Banked_Glue,"vhdl_port","READ_SELECT[%d][%d][%d]",i,j,k);
+	       VHDL_SET_PORT("out_READ_SELECT_VAL_"+toString(i)+"_"+toString(j)+"_"+toString(k)+" ",OUT, 1);
+	       VHDL_SET_PORT(" in_READ_SELECT_ACK_"+toString(i)+"_"+toString(j)+"_"+toString(k)+" ", IN, 1);
+	     }
+	 }
+     }
+   log_printf(TRACE,RegisterFile_Multi_Banked_Glue,"vhdl_port","Interface READ_OUT");
+    
     for (uint32_t i=0; i<_param._nb_bank; i++)
-      {
-	for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
-	  {
-	    VHDL_SET_PORT("out_READ_OUT_VAL_"+toString(i)+"_"+toString(j)+"      ",OUT, 1);
-	    VHDL_SET_PORT(" in_READ_OUT_ACK_"+toString(i)+"_"+toString(j)+"      ", IN, 1);
-	    VHDL_SET_PORT("out_READ_OUT_ADDRESS_"+toString(i)+"_"+toString(j)+"  ",OUT, _param._size_address);
-	    VHDL_SET_PORT(" in_READ_OUT_DATA_"+toString(i)+"_"+toString(j)+"     ", IN, _param._size_word   );
-	  }
-      }
+      for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
+	{
+	  VHDL_SET_PORT("out_READ_OUT_VAL_"+toString(i)+"_"+toString(j)+"      ",OUT, 1);
+	  VHDL_SET_PORT(" in_READ_OUT_ACK_"+toString(i)+"_"+toString(j)+"      ", IN, 1);
+	  VHDL_SET_PORT("out_READ_OUT_ADDRESS_"+toString(i)+"_"+toString(j)+"  ",OUT, _param._size_address);
+	  VHDL_SET_PORT(" in_READ_OUT_DATA_"+toString(i)+"_"+toString(j)+"     ", IN, _param._size_word   );
+	}
 
+    log_printf(TRACE,RegisterFile_Multi_Banked_Glue,"vhdl_port","Interface WRITE_IN");
+    
    for (uint32_t i=0; i<_param._nb_port_write; i++)
      {
@@ -53,18 +71,26 @@
        VHDL_SET_PORT(" in_WRITE_IN_ADDRESS_"+toString(i)+" ", IN, _param._size_address);
        VHDL_SET_PORT(" in_WRITE_IN_DATA_"+toString(i)+"    ", IN, _param._size_word   );
-       VHDL_SET_PORT(" in_WRITE_SELECT_VAL_"+toString(i)+" ", IN, 1);
-       VHDL_SET_PORT("out_WRITE_SELECT_ACK_"+toString(i)+" ",OUT, 1);
      }
    
-    for (uint32_t i=0; i<_param._nb_bank; i++)
-      {
-	for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
-	  {
-	    VHDL_SET_PORT("out_WRITE_OUT_VAL_"+toString(i)+"_"+toString(j)+"     ",OUT, 1);
-	    VHDL_SET_PORT(" in_WRITE_OUT_ACK_"+toString(i)+"_"+toString(j)+"     ", IN, 1);
-	    VHDL_SET_PORT("out_WRITE_OUT_ADDRESS_"+toString(i)+"_"+toString(j)+" ",OUT, _param._size_address);
-	    VHDL_SET_PORT("out_WRITE_OUT_DATA_"+toString(i)+"_"+toString(j)+"    ",OUT, _param._size_word   );
-	  }
-      }
+   log_printf(TRACE,RegisterFile_Multi_Banked_Glue,"vhdl_port","Interface WRITE_SELECT");
+
+   for (uint32_t i=0; i<_param._nb_bank; i++)
+     for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
+       for (uint32_t k=0; k<_param._nb_port_select_by_bank_write_port [j]; k++)
+	 {
+	   VHDL_SET_PORT("out_WRITE_SELECT_VAL_"+toString(i)+"_"+toString(j)+"_"+toString(k)+" ",OUT, 1);
+	   VHDL_SET_PORT(" in_WRITE_SELECT_ACK_"+toString(i)+"_"+toString(j)+"_"+toString(k)+" ", IN, 1);
+	 }
+   
+   log_printf(TRACE,RegisterFile_Multi_Banked_Glue,"vhdl_port","Interface WRITE_OUT");
+    
+   for (uint32_t i=0; i<_param._nb_bank; i++)
+     for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
+       {
+	 VHDL_SET_PORT("out_WRITE_OUT_VAL_"+toString(i)+"_"+toString(j)+"     ",OUT, 1);
+	 VHDL_SET_PORT(" in_WRITE_OUT_ACK_"+toString(i)+"_"+toString(j)+"     ", IN, 1);
+	 VHDL_SET_PORT("out_WRITE_OUT_ADDRESS_"+toString(i)+"_"+toString(j)+" ",OUT, _param._size_address);
+	 VHDL_SET_PORT("out_WRITE_OUT_DATA_"+toString(i)+"_"+toString(j)+"    ",OUT, _param._size_word   );
+       }
 
     log_printf(FUNC,RegisterFile_Multi_Banked_Glue,"vhdl_port","End");
@@ -73,4 +99,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl_testbench_label.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl_testbench_label.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl_testbench_label.cpp	(revision 15)
@@ -6,9 +6,10 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
 
 namespace morpheo                    {
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -28,4 +29,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl_testbench_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl_testbench_transition.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/RegisterFile_Multi_Banked_Glue_vhdl_testbench_transition.cpp	(revision 15)
@@ -7,9 +7,10 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/RegisterFile_Multi_Banked_Glue.h"
 
 namespace morpheo                    {
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -35,8 +36,14 @@
        _vhdl_testbench->add_input (PORT_READ( in_READ_IN_ADDRESS   [i]));
        _vhdl_testbench->add_input (PORT_READ(out_READ_IN_DATA      [i]));
-       _vhdl_testbench->add_input (PORT_READ( in_READ_SELECT_VAL   [i]));
-       _vhdl_testbench->add_output(PORT_READ(out_READ_SELECT_ACK   [i]));
      }
-   						      
+
+   for (uint32_t i=0; i<_param._nb_bank; i++)
+     for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
+       for (uint32_t k=0; k<_param._nb_port_select_by_bank_read_port [j]; k++)
+	 {
+	   _vhdl_testbench->add_output(PORT_READ(out_READ_SELECT_VAL [i][j][k]));
+	   _vhdl_testbench->add_input (PORT_READ( in_READ_SELECT_ACK [i][j][k]));
+	 }
+   
     for (uint32_t i=0; i<_param._nb_bank; i++)
       for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
@@ -54,7 +61,13 @@
        _vhdl_testbench->add_input (PORT_READ( in_WRITE_IN_ADDRESS  [i]));
        _vhdl_testbench->add_input (PORT_READ( in_WRITE_IN_DATA     [i]));
-       _vhdl_testbench->add_input (PORT_READ( in_WRITE_SELECT_VAL  [i]));
-       _vhdl_testbench->add_output(PORT_READ(out_WRITE_SELECT_ACK  [i]));
      }
+   
+   for (uint32_t i=0; i<_param._nb_bank; i++)
+     for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
+       for (uint32_t k=0; k<_param._nb_port_select_by_bank_write_port [j]; k++)
+	 {
+	   _vhdl_testbench->add_output(PORT_READ(out_WRITE_SELECT_VAL [i][j][k]));
+	   _vhdl_testbench->add_input (PORT_READ( in_WRITE_SELECT_ACK [i][j][k]));
+	 }
    
     for (uint32_t i=0; i<_param._nb_bank; i++)
@@ -80,4 +93,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Statistics.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Statistics.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Statistics.cpp	(revision 15)
@@ -7,9 +7,10 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Statistics.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Statistics.h"
 
 namespace morpheo                    {
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -36,4 +37,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Statistics_add.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Statistics_add.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Statistics_add.cpp	(revision 15)
@@ -7,5 +7,5 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Statistics.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Statistics.h"
 
 #include <sstream>
@@ -15,4 +15,5 @@
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -27,4 +28,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Statistics_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Statistics_print.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Statistics_print.cpp	(revision 15)
@@ -7,5 +7,5 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Statistics.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Statistics.h"
 
 #include <sstream>
@@ -15,4 +15,5 @@
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -36,5 +37,5 @@
 
   ostream& operator<< (ostream& output_stream ,
-		       morpheo::behavioural::generic::registerfile_multi_banked::registerfile_multi_banked_glue::Statistics & x)
+		       morpheo::behavioural::generic::registerfile::registerfile_multi_banked::registerfile_multi_banked_glue::Statistics & x)
   {
     output_stream << x.print(0);
@@ -45,4 +46,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Statistics_print_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Statistics_print_body.cpp	(revision 10)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/src/Statistics_print_body.cpp	(revision 15)
@@ -7,5 +7,5 @@
  */
 
-#include "Behavioural/Generic/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Statistics.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/RegisterFile_Multi_Banked_Glue/include/Statistics.h"
 
 #include <sstream>
@@ -15,4 +15,5 @@
 namespace behavioural {
 namespace generic {
+namespace registerfile{
 namespace registerfile_multi_banked {
 namespace registerfile_multi_banked_glue {
@@ -35,4 +36,5 @@
 }; // end namespace registerfile_multi_banked_glue
 }; // end namespace registerfile_multi_banked
+}; // end namespace registerfile
 }; // end namespace generic
 
