Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/config_mixte.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/config_mixte.cfg	(revision 57)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/config_mixte.cfg	(revision 57)
@@ -0,0 +1,6 @@
+RegisterFile_Monolithic
+0	0 	*2	# nb_port_read
+0	0	*2	# nb_port_write
+1	8	*2	# nb_port_read_write
+32 	32 	*2	# nb_word
+32	32	*2	# size_word
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/config_read.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/config_read.cfg	(revision 57)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/config_read.cfg	(revision 57)
@@ -0,0 +1,6 @@
+RegisterFile_Monolithic
+1	8 	*2	# nb_port_read
+1	1	*2	# nb_port_write
+0	0	*2	# nb_port_read_write
+512 	512	*2	# nb_word
+32	32	*2	# size_word
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/config_write.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/config_write.cfg	(revision 57)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/config_write.cfg	(revision 57)
@@ -0,0 +1,6 @@
+RegisterFile_Monolithic
+1	1 	*2	# nb_port_read
+2	8	*2	# nb_port_write
+0	0	*2	# nb_port_read_write
+512	512	*2	# nb_word
+32	32	*2	# size_word
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/configuration.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/configuration.cfg	(revision 55)
+++ 	(revision )
@@ -1,6 +1,0 @@
-RegisterFile_Monolithic
-0	0 	*2	# nb_port_read
-0	0	*2	# nb_port_write
-1	8	*2	# nb_port_read_write
-32 	32 	*2	# nb_word
-32	32	*2	# size_word
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/mkf.info
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/mkf.info	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/mkf.info	(revision 57)
@@ -20,2 +20,17 @@
 target_dep	RegisterFile_Monolithic_3.prj	RegisterFile_Monolithic_3_Pack.vhdl RegisterFile_Monolithic_3.vhdl
 
+# RegisterFile_Monolithic_4
+target_dep	all	RegisterFile_Monolithic_4.ngc
+target_dep	RegisterFile_Monolithic_4.ngc	RegisterFile_Monolithic_4.prj
+target_dep	RegisterFile_Monolithic_4.prj	RegisterFile_Monolithic_4_Pack.vhdl RegisterFile_Monolithic_4.vhdl
+
+# RegisterFile_Monolithic_5
+target_dep	all	RegisterFile_Monolithic_5.ngc
+target_dep	RegisterFile_Monolithic_5.ngc	RegisterFile_Monolithic_5.prj
+target_dep	RegisterFile_Monolithic_5.prj	RegisterFile_Monolithic_5_Pack.vhdl RegisterFile_Monolithic_5.vhdl
+
+# RegisterFile_Monolithic_6
+target_dep	all	RegisterFile_Monolithic_6.ngc
+target_dep	RegisterFile_Monolithic_6.ngc	RegisterFile_Monolithic_6.prj
+target_dep	RegisterFile_Monolithic_6.prj	RegisterFile_Monolithic_6_Pack.vhdl RegisterFile_Monolithic_6.vhdl
+
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/src/test.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/src/test.cpp	(revision 57)
@@ -7,5 +7,5 @@
  */
 
-#define NB_ITERATION 2
+#define NB_ITERATION 1
 
 #include "Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/include/test.h"
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/RegisterFile_Monolithic.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/RegisterFile_Monolithic.h	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/RegisterFile_Monolithic.h	(revision 57)
@@ -27,4 +27,5 @@
 #include "Behavioural/include/Vhdl.h"
 #endif
+#include "Behavioural/include/Usage.h"
 
 using namespace std;
@@ -46,6 +47,7 @@
     // Parameters
   protected : const string       _name;
+  protected : const Parameters * _param;
+  private   : const Tusage_t     _usage;
 
-  protected : const Parameters * _param;
 #ifdef STATISTICS
   private   : Statistics                     * _stat;
@@ -95,21 +97,24 @@
     SC_HAS_PROCESS (RegisterFile_Monolithic);
 #endif					       
-
-  public  :          RegisterFile_Monolithic   (
+  public  : RegisterFile_Monolithic
+  (
 #ifdef SYSTEMC
-						sc_module_name                              name,
+   sc_module_name                              name
 #else					       
-						string                                      name,
+   string                                      name
 #endif					       
 #ifdef STATISTICS
-						morpheo::behavioural::Parameters_Statistics * param_statistics,
+   ,morpheo::behavioural::Parameters_Statistics * param_statistics
 #endif
-					        Parameters                                  * param );
+   ,Parameters                                  * param
+   ,morpheo::behavioural::Tusage_t                usage=USE_ALL
+   );
+
   public  :          ~RegisterFile_Monolithic  (void);
 					       
-#ifdef SYSTEMC				       
   private : void     allocation                (void);
   private : void     deallocation              (void);
 					       
+#ifdef SYSTEMC				       
   public  : void     transition                (void);
 //public  : void     genMoore                  (void) {/* empty */};
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Types.h	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Types.h	(revision 57)
@@ -9,5 +9,5 @@
  */
 
-#include "Common/include/Types.h"
+#include "Behavioural/include/Types.h"
 
 namespace morpheo                    {
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic.cpp	(revision 57)
@@ -14,24 +14,25 @@
 namespace registerfile_monolithic    {
 
-  RegisterFile_Monolithic::RegisterFile_Monolithic (
+  RegisterFile_Monolithic::RegisterFile_Monolithic 
+  (
 #ifdef SYSTEMC
-						    sc_module_name name,
+   sc_module_name name,
 #else
-						    string name        ,
+   string name        ,
 #endif
 #ifdef STATISTICS
-						    morpheo::behavioural::Parameters_Statistics            * param_statistics,
+   morpheo::behavioural::Parameters_Statistics            * param_statistics,
 #endif
-						    morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters * param ):
-    _name   (name),
-    _param (param)
+   morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters * param,
+   morpheo::behavioural::Tusage_t usage
+   ):
+    _name  (name),
+    _param (param),
+    _usage (usage)
   {
     log_printf(FUNC,RegisterFile_Monolithic,"RegisterFile_Monolithic","Begin");
 
-#ifdef SYSTEMC
     log_printf(INFO,RegisterFile_Monolithic,"RegisterFile_Monolithic","Allocation");
-
     allocation ();
-#endif
 
 #ifdef STATISTICS
@@ -47,42 +48,45 @@
 
 #ifdef SYSTEMC
-    SC_METHOD (transition);
-    dont_initialize ();
-    sensitive_pos << *(in_CLOCK);
+    if (_usage & USE_SYSTEMC)
+      {
+	SC_METHOD (transition);
+	dont_initialize ();
+	sensitive_pos << *(in_CLOCK);
+	
+	SC_METHOD (genMealy_read);
+	dont_initialize ();
+	sensitive_neg << *(in_CLOCK);
+	for (uint32_t i=0; i<_param->_nb_port_read; i++)
+	  sensitive << *(in_READ_VAL     [i])
+		    << *(in_READ_ADDRESS [i]);
+	for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
+	  sensitive << *(in_READ_WRITE_VAL     [i])
+		    << *(in_READ_WRITE_RW      [i])
+		    << *(in_READ_WRITE_ADDRESS [i]);
+	
+#  ifdef SYSTEMCASS_SPECIFIC
+	// List dependency information
+	for (uint32_t i=0; i<_param->_nb_port_read; i++)
+	  {
+	    (*(out_READ_DATA  [i])) (*( in_READ_VAL     [i]));
+	    (*(out_READ_DATA  [i])) (*( in_READ_ADDRESS [i]));
+	  }
+	for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
+	  {  
+	    (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_VAL     [i]));
+	    (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_RW      [i]));
+	    (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_ADDRESS [i]));
+	  }
+#  endif    
+	
+	for (uint32_t i=0; i<_param->_nb_port_read       ; i++)
+	  PORT_WRITE(out_READ_ACK        [i], 1);
+	for (uint32_t i=0; i<_param->_nb_port_write      ; i++)
+	  PORT_WRITE(out_WRITE_ACK       [i], 1);
+	for (uint32_t i=0; i<_param->_nb_port_read_write ; i++)
+	  PORT_WRITE(out_READ_WRITE_ACK  [i], 1);
+      }
+#endif
     
-    SC_METHOD (genMealy_read);
-    dont_initialize ();
-    sensitive_neg << *(in_CLOCK);
-    for (uint32_t i=0; i<_param->_nb_port_read; i++)
-      sensitive << *(in_READ_VAL     [i])
-		<< *(in_READ_ADDRESS [i]);
-    for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
-      sensitive << *(in_READ_WRITE_VAL     [i])
-		<< *(in_READ_WRITE_RW      [i])
-		<< *(in_READ_WRITE_ADDRESS [i]);
-
-#ifdef SYSTEMCASS_SPECIFIC
-    // List dependency information
-    for (uint32_t i=0; i<_param->_nb_port_read; i++)
-      {
-	(*(out_READ_DATA  [i])) (*( in_READ_VAL     [i]));
-	(*(out_READ_DATA  [i])) (*( in_READ_ADDRESS [i]));
-      }
-    for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
-      {  
-	(*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_VAL     [i]));
-	(*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_RW      [i]));
-	(*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_ADDRESS [i]));
-      }
-#endif    
-
-    for (uint32_t i=0; i<_param->_nb_port_read       ; i++)
-      PORT_WRITE(out_READ_ACK        [i], 1);
-    for (uint32_t i=0; i<_param->_nb_port_write      ; i++)
-      PORT_WRITE(out_WRITE_ACK       [i], 1);
-    for (uint32_t i=0; i<_param->_nb_port_read_write ; i++)
-      PORT_WRITE(out_READ_WRITE_ACK  [i], 1);
-#endif
-
     log_printf(FUNC,RegisterFile_Monolithic,"RegisterFile_Monolithic","End");
   };
@@ -95,7 +99,5 @@
 #endif
 
-#ifdef SYSTEMC
     deallocation ();
-#endif
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_allocation.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_allocation.cpp	(revision 57)
@@ -1,3 +1,2 @@
-#ifdef SYSTEMC
 /*
  * $Id$
@@ -17,5 +16,5 @@
   void RegisterFile_Monolithic::allocation (void)
   {
-    _component   = new Component ();
+    _component   = new Component (_usage);
 
     Entity * entity = _component->set_entity (_name                   
@@ -133,3 +132,2 @@
 }; // end namespace behavioural          
 }; // end namespace morpheo              
-#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_deallocation.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_deallocation.cpp	(revision 57)
@@ -1,3 +1,2 @@
-#ifdef SYSTEMC
 /*
  * $Id$
@@ -19,28 +18,31 @@
     delete _component;
 
-    delete    in_CLOCK;
-    delete    in_NRESET;
-    // ----- Interface Read
-    delete []  in_READ_VAL    ;
-    delete [] out_READ_ACK    ;
-    delete []  in_READ_ADDRESS;
-    delete [] out_READ_DATA   ;
-
-    // ----- Interface Write
-    delete []  in_WRITE_VAL    ;
-    delete [] out_WRITE_ACK    ;
-    delete []  in_WRITE_ADDRESS;
-    delete []  in_WRITE_DATA   ;
-
-    // ----- Interface Read_Write
-    delete []  in_READ_WRITE_VAL    ;
-    delete [] out_READ_WRITE_ACK    ;
-    delete []  in_READ_WRITE_RW     ;
-    delete []  in_READ_WRITE_ADDRESS;
-    delete []  in_READ_WRITE_WDATA  ;
-    delete [] out_READ_WRITE_RDATA  ;
-
-    // ----- Register
-    delete [] reg_DATA;
+    if (_usage & USE_SYSTEMC)
+      {
+	delete    in_CLOCK;
+	delete    in_NRESET;
+	// ----- Interface Read
+	delete []  in_READ_VAL    ;
+	delete [] out_READ_ACK    ;
+	delete []  in_READ_ADDRESS;
+	delete [] out_READ_DATA   ;
+	
+	// ----- Interface Write
+	delete []  in_WRITE_VAL    ;
+	delete [] out_WRITE_ACK    ;
+	delete []  in_WRITE_ADDRESS;
+	delete []  in_WRITE_DATA   ;
+	
+	// ----- Interface Read_Write
+	delete []  in_READ_WRITE_VAL    ;
+	delete [] out_READ_WRITE_ACK    ;
+	delete []  in_READ_WRITE_RW     ;
+	delete []  in_READ_WRITE_ADDRESS;
+	delete []  in_READ_WRITE_WDATA  ;
+	delete [] out_READ_WRITE_RDATA  ;
+	
+	// ----- Register
+	delete [] reg_DATA;
+      }
   };
 
@@ -50,3 +52,2 @@
 }; // end namespace behavioural          
 }; // end namespace morpheo              
-#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/Makefile.deps
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/Makefile.deps	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/Makefile.deps	(revision 57)
@@ -13,11 +13,21 @@
 include 			$(DIR_MORPHEO)/Behavioural/Makefile.deps
 endif
+ifndef RegisterFile_Monolithic
+include 			$(DIR_MORPHEO)/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/Makefile.deps
+endif
+ifndef Select_Priority_Fixed
+include 			$(DIR_MORPHEO)/Behavioural/Generic/Select/Select_Priority_Fixed/Makefile.deps
+endif
 
 #-----[ Library ]------------------------------------------
-RegisterFile_Multi_Banked_LIBRARY		= 	-lRegisterFile_Multi_Banked	\
-					$(Behavioural_LIBRARY)	
+RegisterFile_Multi_Banked_LIBRARY		= 	-lRegisterFile_Multi_Banked		\
+							$(Behavioural_LIBRARY)			\
+							$(RegisterFile_Monolithic_LIBRARY)	\
+							$(Select_Priority_Fixed_LIBRARY)
 
 RegisterFile_Multi_Banked_DIR_LIBRARY		=	-L$(DIR_MORPHEO)/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/lib	\
-					$(Behavioural_DIR_LIBRARY)
+							$(Behavioural_DIR_LIBRARY)		\
+							$(RegisterFile_Monolithic_DIR_LIBRARY)	\
+							$(Select_Priority_Fixed_DIR_LIBRARY)
 
 #-----[ Rules ]--------------------------------------------
@@ -25,9 +35,13 @@
 RegisterFile_Multi_Banked_library		: 
 				@\
-				$(MAKE) Behavioural_library; \
+				$(MAKE) Behavioural_library; 			\
+				$(MAKE) RegisterFile_Monolithic_library; 	\
+				$(MAKE) Select_Priority_Fixed_library; 		\
 				$(MAKE) --directory=$(DIR_MORPHEO)/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked --makefile=Makefile;
 	
 RegisterFile_Multi_Banked_library_clean	: 
 				@\
-				$(MAKE) Behavioural_library_clean; \
+				$(MAKE) Behavioural_library_clean; 		\
+				$(MAKE) RegisterFile_Monolithic_library_clean; 	\
+				$(MAKE) Select_Priority_Fixed_library_clean; 	\
 				$(MAKE) --directory=$(DIR_MORPHEO)/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked --makefile=Makefile clean;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest/src/test.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest/src/test.cpp	(revision 57)
@@ -7,6 +7,6 @@
  */
 
-#define NB_ITERATION  1024
-#define CYCLE_MAX     (512*NB_ITERATION)
+#define NB_ITERATION  1
+#define CYCLE_MAX     (10240*NB_ITERATION)
 
 #include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest/include/test.h"
@@ -34,9 +34,14 @@
   cout << "<" << name << "> : Simulation SystemC" << endl;
 
+
+#ifdef STATISTICS
+  morpheo::behavioural::Parameters_Statistics * _param_stat = new morpheo::behavioural::Parameters_Statistics(5,50);
+#endif
+
   RegisterFile_Multi_Banked * _RegisterFile_Multi_Banked = new RegisterFile_Multi_Banked (name.c_str(),
 #ifdef STATISTICS
-					     morpheo::behavioural::Parameters_Statistics(5,50),
+											  _param_stat,
 #endif
-					     *_param);
+											  _param);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Parameters.h	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Parameters.h	(revision 57)
@@ -73,7 +73,7 @@
     // A lot of table to the partial crossbar
   public :       uint32_t  * _link_port_read_to_bank_read  ;
-//   public :       uint32_t  * _link_port_read_to_num_bank   ;
+//public :       uint32_t  * _link_port_read_to_num_bank   ;
   public :       uint32_t  * _link_port_write_to_bank_write;
-//   public :       uint32_t  * _link_port_write_to_num_bank  ;
+//public :       uint32_t  * _link_port_write_to_num_bank  ;
 
     //-----[ methods ]-----------------------------------------------------------
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/RegisterFile_Multi_Banked.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/RegisterFile_Multi_Banked.h	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/RegisterFile_Multi_Banked.h	(revision 57)
@@ -43,7 +43,7 @@
     // -----[ fields ]----------------------------------------------------
     // Parameters
-  protected : const string     _name;
+  protected : const string       _name;
 
-  protected : const Parameters _param;
+  protected : const Parameters * _param;
 //#ifdef STATISTICS
 //  protected : const morpheo::behavioural::Parameters_Statistics _param_statistics;
@@ -98,14 +98,13 @@
   public  :          RegisterFile_Multi_Banked              (
 #ifdef SYSTEMC
-					      sc_module_name                              name,
+					      sc_module_name                                name,
 #else					       
-					      string                                      name,
+					      string                                        name,
 #endif					       
 #ifdef STATISTICS
-					      morpheo::behavioural::Parameters_Statistics param_statistics,
+					      morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-					      Parameters                                  param );
+					      Parameters                                  * param );
 					       
-  public  :          RegisterFile_Multi_Banked              (Parameters param );
   public  :          ~RegisterFile_Multi_Banked             (void);
 					       
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Statistics.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Statistics.h	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Statistics.h	(revision 57)
@@ -28,10 +28,10 @@
   {
     // -----[ fields ]----------------------------------------------------
-  private  : const Parameters                                   _parameters;
+  private  : const Parameters *                                 _parameters;
 
     // -----[ methods ]---------------------------------------------------
-  public   : Statistics  (string                                      name                       ,
-			  morpheo::behavioural::Parameters_Statistics parameters_statistics      ,
-			  Parameters                                  parameters
+  public   : Statistics  (string                                        name                       ,
+			  morpheo::behavioural::Parameters_Statistics * parameters_statistics      ,
+			  Parameters                                  * parameters
 			  );
 //public   : Statistics  (Statistics & stat);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Types.h	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Types.h	(revision 57)
@@ -9,5 +9,5 @@
  */
 
-#include "Common/include/Types.h"
+#include "Behavioural/include/Types.h"
 
 namespace morpheo                    {
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/Parameters.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/Parameters.cpp	(revision 57)
@@ -53,33 +53,16 @@
 	
 	_link_port_read_to_bank_read     = new uint32_t [_nb_port_read ];
-// 	_link_port_read_to_num_bank      = new uint32_t [_nb_port_read ];
 	_link_port_write_to_bank_write   = new uint32_t [_nb_port_write];
-// 	_link_port_write_to_num_bank     = new uint32_t [_nb_port_write];
 
-// 	uint32_t _nb_port_bank_by_bank_read_port  [_nb_port_read_by_bank ];
-// 	uint32_t _nb_port_bank_by_bank_write_port [_nb_port_write_by_bank];
-	
 	// init
-// 	for (uint32_t i=0; i<_nb_port_read_by_bank ;i++)
-// 	  _nb_port_bank_by_bank_read_port  [i] = 0;
-	
-	for (uint32_t i=0; i<_nb_port_read         ;i++)
+	for (uint32_t i=0; i<_nb_port_read ;i++)
 	  {
 	    uint32_t x = i%_nb_port_read_by_bank;
 	    _link_port_read_to_bank_read [i] = x;
-// 	    _link_port_read_to_num_bank  [i] = _nb_port_bank_by_bank_read_port [x];
-// 	    _nb_port_bank_by_bank_read_port    [x] ++;
 	  }
-
-	// init
-// 	for (uint32_t i=0; i<_nb_port_write_by_bank ;i++)
-// 	  _nb_port_bank_by_bank_write_port [i] = 0;
-	
-	for (uint32_t i=0; i<_nb_port_write         ;i++)
+	for (uint32_t i=0; i<_nb_port_write;i++)
 	  {
 	    uint32_t x = i%_nb_port_write_by_bank;
 	    _link_port_write_to_bank_write   [i] = x;
-// 	    _link_port_write_to_num_bank     [i] = _nb_port_bank_by_bank_write_port [x];
-// 	    _nb_port_bank_by_bank_write_port       [x] ++;
 	  }
 
@@ -87,15 +70,14 @@
 	log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_read_to_bank_read");
 	for (uint32_t i=0; i<_nb_port_read         ;i++)
+	  {
 	  log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Read  in  [%d] to out    [%d]",i,_link_port_read_to_bank_read          [i]);
-// 	log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_read_to_num_bank  ");
-// 	for (uint32_t i=0; i<_nb_port_read         ;i++)
-// 	  log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Read  in  [%d] to bank   [%d]",i,_link_port_read_to_num_bank         [i]);
-
+	  printf("   * Read  in  [%d] to out    [%d]\n",i,_link_port_read_to_bank_read          [i]);
+	  }
 	log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_write_to_bank_write");
 	for (uint32_t i=0; i<_nb_port_write        ;i++)
-	  log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Write in  [%d] to out    [%d]",i,_link_port_write_to_bank_write          [i]);
-// 	log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_write_to_num_bank  ");
-// 	for (uint32_t i=0; i<_nb_port_write        ;i++)
-// 	  log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Write in  [%d] to bank   [%d]",i,_link_port_write_to_num_bank         [i]);
+	  {
+	    log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Write in  [%d] to out    [%d]",i,_link_port_write_to_bank_write          [i]);
+	    printf("   * Write in  [%d] to out    [%d]\n",i,_link_port_write_to_bank_write          [i]);
+	  }
       }
     // else : don't allocate
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked.cpp	(revision 57)
@@ -21,7 +21,7 @@
 #endif
 #ifdef STATISTICS
-			      morpheo::behavioural::Parameters_Statistics             param_statistics,
+			      morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-			      morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters param ):
+			      morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters * param ):
 			      _name              (name)
 			      ,_param            (param)
@@ -56,5 +56,5 @@
 #ifdef SYSTEMC
     // Function pointer
-    if (_param._crossbar == FULL_CROSSBAR)                             
+    if (_param->_crossbar == FULL_CROSSBAR)                             
       {
 	function_transition     = &morpheo::behavioural::generic::registerfile::registerfile_multi_banked::RegisterFile_Multi_Banked::   full_crossbar_transition;
@@ -84,5 +84,5 @@
     dont_initialize ();
     sensitive_neg << *(in_CLOCK);
-    for (uint32_t i=0; i<_param._nb_port_read; i++)
+    for (uint32_t i=0; i<_param->_nb_port_read; i++)
       sensitive << *( in_READ_VAL     [i])
 		<< *( in_READ_ADDRESS [i]);
@@ -90,5 +90,5 @@
 #ifdef SYSTEMCASS_SPECIFIC
     // List dependency information
-    for (uint32_t i=0; i<_param._nb_port_read; i++)
+    for (uint32_t i=0; i<_param->_nb_port_read; i++)
       {
 	(*(out_READ_ACK  [i])) (*( in_READ_VAL     [i]));
@@ -97,4 +97,10 @@
 	(*(out_READ_DATA [i])) (*( in_READ_ADDRESS [i]));
       }
+//     for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
+//       {  
+// 	(*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_VAL     [i]));
+// 	(*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_RW      [i]));
+// 	(*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_ADDRESS [i]));
+//       }
 #endif    
 
@@ -102,5 +108,5 @@
     dont_initialize ();
     sensitive_neg << *(in_CLOCK);
-    for (uint32_t i=0; i<_param._nb_port_write; i++)
+    for (uint32_t i=0; i<_param->_nb_port_write; i++)
       sensitive << *( in_WRITE_VAL     [i])
 		<< *( in_WRITE_ADDRESS [i])
@@ -109,5 +115,5 @@
 #ifdef SYSTEMCASS_SPECIFIC
     // List dependency information
-    for (uint32_t i=0; i<_param._nb_port_write; i++)
+    for (uint32_t i=0; i<_param->_nb_port_write; i++)
       {
 	(*(out_WRITE_ACK  [i])) (*( in_WRITE_VAL     [i]));
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_address_xxx.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_address_xxx.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_address_xxx.cpp	(revision 57)
@@ -20,5 +20,5 @@
     log_printf(FUNC,RegisterFile_Multi_Banked,"address_bank","Begin");
     
-    Taddress_t _return = _param._bank_mask & (address >> _param._bank_shift);
+    Taddress_t _return = _param->_bank_mask & (address >> _param->_bank_shift);
 
     log_printf(FUNC,RegisterFile_Multi_Banked,"address_bank","End");
@@ -31,5 +31,5 @@
     log_printf(FUNC,RegisterFile_Multi_Banked,"address_num_reg","Begin");
 
-    Taddress_t _return = _param._num_reg_mask & (address >> _param._num_reg_shift);
+    Taddress_t _return = _param->_num_reg_mask & (address >> _param->_num_reg_shift);
     
     log_printf(FUNC,RegisterFile_Multi_Banked,"address_num_reg","End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_allocation.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_allocation.cpp	(revision 57)
@@ -48,10 +48,10 @@
     // ~~~~~[ Interface : "read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-     in_READ_VAL         = new SC_IN (Tcontrol_t) * [_param._nb_port_read];
-    out_READ_ACK         = new SC_OUT(Tcontrol_t) * [_param._nb_port_read];
-     in_READ_ADDRESS     = new SC_IN (Taddress_t) * [_param._nb_port_read];
-    out_READ_DATA        = new SC_OUT(Tdata_t   ) * [_param._nb_port_read];
+     in_READ_VAL         = new SC_IN (Tcontrol_t) * [_param->_nb_port_read];
+    out_READ_ACK         = new SC_OUT(Tcontrol_t) * [_param->_nb_port_read];
+     in_READ_ADDRESS     = new SC_IN (Taddress_t) * [_param->_nb_port_read];
+    out_READ_DATA        = new SC_OUT(Tdata_t   ) * [_param->_nb_port_read];
 
-    for (uint32_t i=0; i<_param._nb_port_read; i++)
+    for (uint32_t i=0; i<_param->_nb_port_read; i++)
       { 
 	Interface_fifo * interface = _interfaces->set_interface("read_"+toString(i)
@@ -65,16 +65,16 @@
 	 in_READ_VAL     [i]  = interface->set_signal_valack_in        ("val"    , VAL);
 	out_READ_ACK     [i]  = interface->set_signal_valack_out       ("ack"    , ACK);
-	 in_READ_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param._nb_word)));
-	out_READ_DATA    [i]  = interface->set_signal_out <Tdata_t   > ("data"   , _param._size_word);
+	 in_READ_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param->_nb_word)));
+	out_READ_DATA    [i]  = interface->set_signal_out <Tdata_t   > ("data"   , _param->_size_word);
       }
 
     // ~~~~~[ Interface : "write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-     in_WRITE_VAL        = new SC_IN (Tcontrol_t) * [_param._nb_port_write];
-    out_WRITE_ACK        = new SC_OUT(Tcontrol_t) * [_param._nb_port_write];
-     in_WRITE_ADDRESS    = new SC_IN (Taddress_t) * [_param._nb_port_write];
-     in_WRITE_DATA       = new SC_IN (Tdata_t   ) * [_param._nb_port_write];
+     in_WRITE_VAL        = new SC_IN (Tcontrol_t) * [_param->_nb_port_write];
+    out_WRITE_ACK        = new SC_OUT(Tcontrol_t) * [_param->_nb_port_write];
+     in_WRITE_ADDRESS    = new SC_IN (Taddress_t) * [_param->_nb_port_write];
+     in_WRITE_DATA       = new SC_IN (Tdata_t   ) * [_param->_nb_port_write];
     
-    for (uint32_t i=0; i<_param._nb_port_write; i++)
+    for (uint32_t i=0; i<_param->_nb_port_write; i++)
       {
 	Interface_fifo * interface = _interfaces->set_interface("write_"+toString(i)
@@ -88,17 +88,17 @@
 	 in_WRITE_VAL     [i]  = interface->set_signal_valack_in        ("val"    , VAL);
 	out_WRITE_ACK     [i]  = interface->set_signal_valack_out       ("ack"    , ACK);
-	 in_WRITE_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param._nb_word)));
-	 in_WRITE_DATA    [i]  = interface->set_signal_in  <Tdata_t   > ("data"   , _param._size_word);
+	 in_WRITE_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param->_nb_word)));
+	 in_WRITE_DATA    [i]  = interface->set_signal_in  <Tdata_t   > ("data"   , _param->_size_word);
       }
 
     // ~~~~~[ Registers ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    reg_DATA = new SC_REGISTER (Tdata_t) ** [_param._nb_bank];
+    reg_DATA = new SC_REGISTER (Tdata_t) ** [_param->_nb_bank];
 
-    for (uint32_t i=0; i<_param._nb_bank; i++)
+    for (uint32_t i=0; i<_param->_nb_bank; i++)
       {
-	reg_DATA [i] = new SC_REGISTER (Tdata_t) * [_param._nb_word];
+	reg_DATA [i] = new SC_REGISTER (Tdata_t) * [_param->_nb_word];
 	
-	for (uint32_t j=0; j<_param._nb_word; j++)
+	for (uint32_t j=0; j<_param->_nb_word; j++)
 	  {
 	    string rename = "reg_DATA_"  + toString(i) + "_"  + toString(j);
@@ -108,7 +108,7 @@
 
     // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-    internal_WRITE_VAL     = new bool       [_param._nb_port_write];
-    internal_WRITE_BANK    = new Taddress_t [_param._nb_port_write];
-    internal_WRITE_NUM_REG = new Taddress_t [_param._nb_port_write];
+    internal_WRITE_VAL     = new bool       [_param->_nb_port_write];
+    internal_WRITE_BANK    = new Taddress_t [_param->_nb_port_write];
+    internal_WRITE_NUM_REG = new Taddress_t [_param->_nb_port_write];
 
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_read.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_read.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_read.cpp	(revision 57)
@@ -21,11 +21,11 @@
     log_printf(FUNC,RegisterFile_Multi_Banked,"full_crossbar_genMealy_read","Begin");
 
-    bool read_port_use [_param._nb_bank][_param._nb_port_read_by_bank];
+    bool read_port_use [_param->_nb_bank][_param->_nb_port_read_by_bank];
 
-    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 i=0; i<_param->_nb_bank; i++)
+      for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
 	read_port_use [i][j]=false;
 
-    for (uint32_t i=0; i<_param._nb_port_read; i++)
+    for (uint32_t i=0; i<_param->_nb_port_read; i++)
       {
 	bool val = PORT_READ(in_READ_VAL    [i]);
@@ -43,5 +43,5 @@
 
 	    // Search loop
-	    for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
+	    for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
 	      {
 		// find a unbusy port on this bank
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_write.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_write.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_write.cpp	(revision 57)
@@ -21,11 +21,11 @@
     log_printf(FUNC,RegisterFile_Multi_Banked,"full_crossbar_genMealy_write","Begin");
 
-    bool write_port_use [_param._nb_bank][_param._nb_port_write_by_bank];
+    bool write_port_use [_param->_nb_bank][_param->_nb_port_write_by_bank];
 
-    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 i=0; i<_param->_nb_bank; i++)
+      for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
 	write_port_use [i][j]=false;
 
-    for (uint32_t i=0; i<_param._nb_port_write; i++)
+    for (uint32_t i=0; i<_param->_nb_port_write; i++)
       {
 	bool val = PORT_READ(in_WRITE_VAL    [i]);
@@ -44,5 +44,5 @@
 
 	    // Search loop
-	    for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
+	    for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
 	      {
 		// find a unbusy port on this bank
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_read.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_read.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_read.cpp	(revision 57)
@@ -21,11 +21,11 @@
     log_printf(FUNC,RegisterFile_Multi_Banked,"partial_crossbar_genMealy_read","Begin");
 
-    bool read_port_use [_param._nb_bank][_param._nb_port_read_by_bank];
+    bool read_port_use [_param->_nb_bank][_param->_nb_port_read_by_bank];
 
-    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 i=0; i<_param->_nb_bank; i++)
+      for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
 	read_port_use [i][j]=false;
 
-    for (uint32_t i=0; i<_param._nb_port_read; i++)
+    for (uint32_t i=0; i<_param->_nb_port_read; i++)
       {
 	bool val = PORT_READ(in_READ_VAL    [i]);
@@ -43,8 +43,8 @@
 
 // 	    // Search loop
-// 	    for (uint32_t j=0; j<_param._nb_port_read_by_bank; j++)
+// 	    for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
 // 	      {
 	    
-	    uint32_t j = _param._link_port_read_to_bank_read [i];
+	    uint32_t j = _param->_link_port_read_to_bank_read [i];
 
 		// find a unbusy port on this bank
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_write.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_write.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_write.cpp	(revision 57)
@@ -21,10 +21,10 @@
     log_printf(FUNC,RegisterFile_Multi_Banked,"partial_crossbar_genMealy_write","Begin");
 
-    bool write_port_use [_param._nb_bank][_param._nb_port_write_by_bank];
-    for (uint32_t i=0; i<_param._nb_bank; i++)
-      for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
+    bool write_port_use [_param->_nb_bank][_param->_nb_port_write_by_bank];
+    for (uint32_t i=0; i<_param->_nb_bank; i++)
+      for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
 	write_port_use [i][j]=false;
 
-    for (uint32_t i=0; i<_param._nb_port_write; i++)
+    for (uint32_t i=0; i<_param->_nb_port_write; i++)
       {
 	bool val = PORT_READ(in_WRITE_VAL    [i]);
@@ -43,7 +43,7 @@
 
 // 	    // Search loop
-// 	    for (uint32_t j=0; j<_param._nb_port_write_by_bank; j++)
+// 	    for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
 // 	      {
-	    uint32_t j = _param._link_port_write_to_bank_write [i];
+	    uint32_t j = _param->_link_port_write_to_bank_write [i];
 
 		// find a unbusy port on this bank
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_transition.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_transition.cpp	(revision 57)
@@ -24,5 +24,5 @@
 //     (this->*function_transition) ();
 
-    for (uint32_t i=0; i<_param._nb_port_write; i++)
+    for (uint32_t i=0; i<_param->_nb_port_write; i++)
       {
 	if (internal_WRITE_VAL [i] == 1)
@@ -34,6 +34,4 @@
  	  }
       }
-
-
 
 #ifdef STATISTICS
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl.cpp	(revision 57)
@@ -8,4 +8,6 @@
 
 #include "Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/RegisterFile_Multi_Banked.h"
+#include "Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/RegisterFile_Monolithic.h"
+#include "Behavioural/Generic/Select/Select_Priority_Fixed/include/Select_Priority_Fixed.h"
 #include "Behavioural/include/Vhdl.h"
 
@@ -16,9 +18,180 @@
 namespace registerfile_multi_banked {
 
-
   void RegisterFile_Multi_Banked::vhdl (void)
   {
     log_printf(FUNC,RegisterFile_Multi_Banked,"vhdl","Begin");
-
+    
+    //===================================
+    //===== Component               =====
+    //===================================
+
+    //----- RegisterFile_Monolithic -----
+
+    morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters * param_bank;
+    morpheo::behavioural::generic::registerfile::registerfile_monolithic::RegisterFile_Monolithic * bank;
+    
+    // Create all bank. All bank is identical
+    param_bank = new morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters
+      (_param->_nb_port_read_by_bank
+       ,_param->_nb_port_write_by_bank
+       ,0 // mixte port
+       ,_param->_nb_word/_param->_nb_bank
+       ,_param->_size_word);
+    
+    string bank_name = _name + "_bank";
+    bank = new morpheo::behavioural::generic::registerfile::registerfile_monolithic::RegisterFile_Monolithic 
+      (bank_name.c_str()
+#ifdef STATISTICS
+       ,NULL
+#endif
+       ,param_bank
+       ,USE_VHDL);
+    
+    _component->set_component(bank->_component
+#ifdef POSITION
+			      , 0, 0, 0, 0
+#endif
+			      , INSTANCE_LIBRARY
+			      );
+    
+
+    //----- Select_Priority_Fixed -----
+
+    // Create all select_unit :
+    //  * 4 units : to the read port, "quotient" ports and "rest" ports. Idem to the write port.
+    //  * for a FULL_CROSSBAR, there are no "rest" ports
+    uint32_t nb_select_port_1 ;
+    uint32_t nb_select_port_2 ;
+    uint32_t nb_select_port_3 ;
+    uint32_t nb_select_port_4 ;
+      
+    if (_param->_crossbar == FULL_CROSSBAR)
+      {
+	nb_select_port_1 = _param->_nb_port_read ;
+	nb_select_port_3 = _param->_nb_port_write;
+	nb_select_port_2 = nb_select_port_4 = 0;
+      }
+    else
+      {
+	nb_select_port_2=(_param->_nb_port_read                  )/_param->_nb_port_read_by_bank;
+	nb_select_port_1=((_param->_nb_port_read%_param->_nb_port_read_by_bank)==0)?0:(nb_select_port_2+1);
+	nb_select_port_4=(_param->_nb_port_write                 )/_param->_nb_port_write_by_bank;
+	nb_select_port_3=((_param->_nb_port_write%_param->_nb_port_write_by_bank)==0)?0:(nb_select_port_4+1);
+      }
+      
+//     cout << "nb_select_port_1 : " << nb_select_port_1 << endl;
+//     cout << "nb_select_port_2 : " << nb_select_port_2 << endl;
+//     cout << "nb_select_port_3 : " << nb_select_port_3 << endl;
+//     cout << "nb_select_port_4 : " << nb_select_port_4 << endl;
+    
+    morpheo::behavioural::generic::select::select_priority_fixed::Parameters *param_select1 = NULL;
+    morpheo::behavioural::generic::select::select_priority_fixed::Parameters *param_select2 = NULL;
+    morpheo::behavioural::generic::select::select_priority_fixed::Parameters *param_select3 = NULL;
+    morpheo::behavioural::generic::select::select_priority_fixed::Parameters *param_select4 = NULL;
+
+    morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed *select1 = NULL;
+    morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed *select2 = NULL;
+    morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed *select3 = NULL;
+    morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed *select4 = NULL;
+
+    bool have_select1 = ((nb_select_port_1 != 0               ));
+    bool have_select2 = ((nb_select_port_2 != 0               ) and
+			 (nb_select_port_2 != nb_select_port_1)); 
+    bool have_select3 = ((nb_select_port_3 != 0               ) and
+			 (nb_select_port_3 != nb_select_port_2) and
+			 (nb_select_port_3 != nb_select_port_1));
+    bool have_select4 = ((nb_select_port_4 != 0               ) and
+			 (nb_select_port_4 != nb_select_port_3) and
+			 (nb_select_port_4 != nb_select_port_2) and
+			 (nb_select_port_4 != nb_select_port_1) );
+
+    string select_name1;
+    string select_name2;
+    string select_name3;
+    string select_name4;
+    
+    if (have_select1)
+      {
+	select_name1  = _name+"_select_"+toString(nb_select_port_1)+"_ports";
+	param_select1 = new morpheo::behavioural::generic::select::select_priority_fixed::Parameters (nb_select_port_1,true, false);
+	select1       = new morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed 
+	  (select_name1.c_str()
+#ifdef STATISTICS
+	   ,NULL
+#endif
+	   ,param_select1
+	   ,USE_VHDL);
+
+	_component->set_component(select1->_component
+#ifdef POSITION
+				  , 0, 0, 0, 0
+#endif
+				  , INSTANCE_LIBRARY
+				  );
+      }
+
+    if (have_select2)
+      {
+	select_name2  = _name+"_select_"+toString(nb_select_port_2)+"_ports";
+	
+	param_select2 = new morpheo::behavioural::generic::select::select_priority_fixed::Parameters (nb_select_port_2,true, false);
+	select2       = new morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed 
+	  (select_name2.c_str()
+#ifdef STATISTICS
+	   ,NULL
+#endif
+	   ,param_select2
+	   ,USE_VHDL);
+      
+	_component->set_component(select2->_component
+#ifdef POSITION
+				  , 0, 0, 0, 0
+#endif
+				  , INSTANCE_LIBRARY
+				  );
+      }
+
+    if (have_select3)
+      {
+	select_name3  = _name+"_select_"+toString(nb_select_port_3)+"_ports";
+	
+	param_select3 = new morpheo::behavioural::generic::select::select_priority_fixed::Parameters (nb_select_port_3,true, false);
+	select3       = new morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed 
+	  (select_name3.c_str()
+#ifdef STATISTICS
+	   ,NULL
+#endif
+	   ,param_select3
+	   ,USE_VHDL);
+
+	_component->set_component(select3->_component
+#ifdef POSITION
+				  , 0, 0, 0, 0
+#endif
+				  , INSTANCE_LIBRARY
+				  );
+      }
+    
+    if (have_select4)
+      {
+	select_name4  = _name+"_select_"+toString(nb_select_port_4)+"_ports";
+	
+	param_select4 = new morpheo::behavioural::generic::select::select_priority_fixed::Parameters (nb_select_port_4,true, false);
+	select4       = new morpheo::behavioural::generic::select::select_priority_fixed::Select_Priority_Fixed 
+	  (select_name4.c_str()
+#ifdef STATISTICS
+	   ,NULL
+#endif
+	   ,param_select4
+	   ,USE_VHDL);
+      
+      	_component->set_component(select4->_component
+#ifdef POSITION
+				  , 0, 0, 0, 0
+#endif
+				  , INSTANCE_LIBRARY
+				  );
+      }
+    
     Vhdl * vhdl = new Vhdl (_name);
 
@@ -32,4 +205,26 @@
 
     delete vhdl;
+    delete bank;
+    delete param_bank;
+    if (have_select1)
+      {
+	delete select1;
+	delete param_select1;
+      }
+    if (have_select2)
+      {
+	delete select2;
+	delete param_select2;
+      }
+    if (have_select3)
+      {
+	delete select3;
+	delete param_select3;
+      }
+    if (have_select4)
+      {
+	delete select4;
+	delete param_select4;
+      }
 
     log_printf(FUNC,RegisterFile_Multi_Banked,"vhdl","End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_body.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_body.cpp	(revision 57)
@@ -20,4 +20,289 @@
     log_printf(FUNC,RegisterFile_Multi_Banked,"vhdl_body","Begin");
 
+    uint32_t read_select_limit ;
+    uint32_t read_nb_select1   ;
+    uint32_t read_nb_select2   ;
+    uint32_t write_select_limit;
+    uint32_t write_nb_select1  ;
+    uint32_t write_nb_select2  ;
+    
+    read_select_limit = _param->_nb_port_read%_param->_nb_port_read_by_bank;
+    read_nb_select2   = _param->_nb_port_read/_param->_nb_port_read_by_bank;
+    read_nb_select1   = (read_select_limit==0)?0:(read_nb_select2+1);		     
+ 
+    write_select_limit= _param->_nb_port_write%_param->_nb_port_write_by_bank;
+    write_nb_select2  = _param->_nb_port_write/_param->_nb_port_write_by_bank;
+    write_nb_select1  = (write_select_limit==0)?0:(write_nb_select2+1);		     
+
+    vhdl->set_body("");
+    vhdl->set_body("-----------------------------------");
+    vhdl->set_body("-- Instance bank                   ");
+    vhdl->set_body("-----------------------------------");
+    vhdl->set_body("");
+
+    for (uint32_t i=0; i<_param->_nb_bank; i++)
+      {
+	vhdl->set_body(_name+"_bank_"+toString(i)+" : "+_name+"_bank");
+	vhdl->set_body("port map (");
+	vhdl->set_body("\t  in_CLOCK \t=>\tin_CLOCK ");
+	vhdl->set_body("\t, in_NRESET\t=>\tin_NRESET");
+	for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
+	  {
+	    vhdl->set_body("\t, in_READ_"+toString(j)+"_VAL     \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_VAL");
+	    vhdl->set_body("\t,out_READ_"+toString(j)+"_ACK     \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ACK");
+	    vhdl->set_body("\t, in_READ_"+toString(j)+"_ADDRESS \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ADDRESS");
+	    vhdl->set_body("\t,out_READ_"+toString(j)+"_DATA    \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_DATA");
+	  }
+	for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
+	  {
+	    vhdl->set_body("\t, in_WRITE_"+toString(j)+"_VAL     \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_VAL");
+	    vhdl->set_body("\t,out_WRITE_"+toString(j)+"_ACK     \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ACK");
+	    vhdl->set_body("\t, in_WRITE_"+toString(j)+"_ADDRESS \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ADDRESS");
+	    vhdl->set_body("\t, in_WRITE_"+toString(j)+"_DATA    \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_DATA");
+	  }
+
+	vhdl->set_body(");");
+	vhdl->set_body("");
+      }
+
+    vhdl->set_body("");
+    vhdl->set_body("-----------------------------------");
+    vhdl->set_body("-- Instance select");
+    vhdl->set_body("-- (1 select by port)");
+    vhdl->set_body("-----------------------------------");
+    vhdl->set_body("");
+    for (uint32_t i=0; i<_param->_nb_bank; i++)
+      {
+	for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
+	  {
+	    uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_read:((j<read_select_limit)?read_nb_select1:read_nb_select2);
+
+	    vhdl->set_body(_name+"_read_select_"+toString(i)+"_"+toString(j)+" : "+_name+"_select_"+toString(nb_port)+"_ports");
+	    vhdl->set_body("port map (");
+	    for (uint32_t k=0; k<nb_port; k++)
+	      {
+		uint32_t num_port  = _param->_nb_port_read_by_bank*k+j;
+		string   separator = ((k==0)?" ":",");
+		
+		vhdl->set_body("\t"+separator+" in_VAL_"+toString(k)+"     \t=>\tinternal_READ_"+toString(i)+"_"+toString(num_port)+"_VAL");
+		vhdl->set_body("\t,out_ACK_"+toString(k)+"     \t=>\tinternal_SELECT_READ_"+toString(i)+"_"+toString(num_port)+"_VAL");
+	      }
+	    vhdl->set_body(");");
+	    vhdl->set_body("");
+	  }
+
+	for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
+	  {
+	    uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_write:((j<write_select_limit)?write_nb_select1:write_nb_select2);
+
+	    vhdl->set_body(_name+"_write_select_"+toString(i)+"_"+toString(j)+" : "+_name+"_select_"+toString(nb_port)+"_ports");
+	    vhdl->set_body("port map (");
+	    for (uint32_t k=0; k<nb_port; k++)
+	      {
+		uint32_t num_port  = _param->_nb_port_write_by_bank*k+j;
+		string   separator = ((k==0)?" ":",");
+		
+		vhdl->set_body("\t"+separator+" in_VAL_"+toString(k)+"     \t=>\tinternal_WRITE_"+toString(i)+"_"+toString(num_port)+"_VAL");
+		vhdl->set_body("\t,out_ACK_"+toString(k)+"     \t=>\tinternal_SELECT_WRITE_"+toString(i)+"_"+toString(num_port)+"_VAL");
+	      }
+	    vhdl->set_body(");");
+	    vhdl->set_body("");
+	  }
+      }
+
+    vhdl->set_body("");
+    vhdl->set_body("-----------------------------------");
+    vhdl->set_body("-- Bank Val");
+    vhdl->set_body("-----------------------------------");
+    vhdl->set_body("");
+    for (uint32_t i=0; i<_param->_nb_bank; i++)
+      {
+	for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
+	  {
+	    uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_read:((j<read_select_limit)?read_nb_select1:read_nb_select2);
+
+	    vhdl->set_body("internal_BANK_READ_"+toString(i)+"_"+toString(j)+ "_VAL <= '0'");
+	    for (uint32_t k=0; k<nb_port; k++)
+	      {
+		uint32_t num_port  = _param->_nb_port_read_by_bank*k+j;
+
+		vhdl->set_body("\tor internal_SELECT_READ_"+toString(i)+"_"+toString(num_port)+"_VAL");
+	      }
+	    vhdl->set_body(";");
+	  }
+	for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
+	  {
+	    uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_write:((j<write_select_limit)?write_nb_select1:write_nb_select2);
+
+	    vhdl->set_body("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+ "_VAL <= '0'");
+	    for (uint32_t k=0; k<nb_port; k++)
+	      {
+		uint32_t num_port  = _param->_nb_port_write_by_bank*k+j;
+
+		vhdl->set_body("\tor internal_SELECT_WRITE_"+toString(i)+"_"+toString(num_port)+"_VAL");
+	      }
+	    vhdl->set_body(";");
+	  }
+      }
+
+    vhdl->set_body("");
+    vhdl->set_body("-----------------------------------");
+    vhdl->set_body("-- Bank Address");
+    vhdl->set_body("-----------------------------------");
+    vhdl->set_body("");
+    for (uint32_t i=0; i<_param->_nb_bank; i++)
+      {
+	for (uint32_t j=0; j<_param->_nb_port_read_by_bank; j++)
+	  {
+	    uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_read:((j<read_select_limit)?read_nb_select1:read_nb_select2);
+
+	    vhdl->set_body("internal_BANK_READ_"+toString(i)+"_"+toString(j)+ "_ADDRESS <=");
+	    for (uint32_t k=1; k<nb_port; k++)
+	      {
+		uint32_t num_port  = _param->_nb_port_read_by_bank*k+j;
+		
+		vhdl->set_body("\tin_READ_"+toString(num_port)+"_ADDRESS"+std_logic_range(_param->_size_address_by_bank)+" when internal_READ_"+toString(i)+"_"+toString(num_port)+"_VAL='1' else");
+	      }
+	    vhdl->set_body("\tin_READ_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address_by_bank)+";");
+// 	    vhdl->set_body("\t"+std_logic_others(_param->_size_word,0)+";");
+	  }
+	for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
+	  {
+	    uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_write:((j<write_select_limit)?write_nb_select1:write_nb_select2);
+
+	    vhdl->set_body("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+ "_ADDRESS <=");
+	    for (uint32_t k=1; k<nb_port; k++)
+	      {
+		uint32_t num_port  = _param->_nb_port_write_by_bank*k+j;
+
+		vhdl->set_body("\tin_WRITE_"+toString(num_port)+"_ADDRESS"+std_logic_range(_param->_size_address_by_bank)+" when internal_WRITE_"+toString(i)+"_"+toString(num_port)+"_VAL='1' else");
+	      }
+	    vhdl->set_body("\tin_WRITE_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address_by_bank)+";");
+// 	    vhdl->set_body("\t"+std_logic_others(_param->_size_word,0)+";");
+	  }
+      }
+
+    vhdl->set_body("");
+    vhdl->set_body("-----------------------------------");
+    vhdl->set_body("-- Bank Data");
+    vhdl->set_body("-----------------------------------");
+    vhdl->set_body("");
+    for (uint32_t i=0; i<_param->_nb_bank; i++)
+      {
+	for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j++)
+	  {
+	    uint32_t nb_port = (_param->_crossbar == FULL_CROSSBAR)?_param->_nb_port_write:((j<write_select_limit)?write_nb_select1:write_nb_select2);
+
+	    vhdl->set_body("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+ "_DATA <=");
+	    for (uint32_t k=1; k<nb_port; k++)
+	      {
+		uint32_t num_port  = _param->_nb_port_write_by_bank*k+j;
+
+		vhdl->set_body("\tin_WRITE_"+toString(num_port)+"_DATA when internal_WRITE_"+toString(i)+"_"+toString(num_port)+"_VAL='1' else");
+	      }
+	    vhdl->set_body("\tin_WRITE_"+toString(j)+"_DATA;");
+// 	    vhdl->set_body("\t"+std_logic_others(_param->_size_word,0)+";");
+	  }
+      }
+
+    vhdl->set_body("");
+    vhdl->set_body("-----------------------------------");
+    vhdl->set_body("-- VAL (to Select)");
+    vhdl->set_body("-----------------------------------");
+    vhdl->set_body("");
+
+    for (uint32_t i=0; i<_param->_nb_bank; i++)
+      {
+	for (uint32_t j=0; j<_param->_nb_port_read; j ++)
+	  {
+	    string address = (_param->_nb_bank==1)?"":("and (in_READ_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address-1,_param->_size_address_by_bank)+"="+std_logic_conv( _param->_size_address-_param->_size_address_by_bank,i)+")");
+
+	    vhdl->set_body("internal_READ_"+toString(i)+"_"+toString(j)+"_VAL <= '1' when (in_READ_"+toString(j)+"_VAL='1') "+address+"else '0';");
+	  }
+	for (uint32_t j=0; j<_param->_nb_port_write; j ++)
+	  {
+	    string address = (_param->_nb_bank==1)?"":("and (in_WRITE_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address-1,_param->_size_address_by_bank)+"="+std_logic_conv( _param->_size_address-_param->_size_address_by_bank,i)+")");
+	    vhdl->set_body("internal_WRITE_"+toString(i)+"_"+toString(j)+"_VAL <= '1' when (in_WRITE_"+toString(j)+"_VAL='1') "+address+" else '0';");
+	  }
+      }
+
+    vhdl->set_body("");
+    vhdl->set_body("-----------------------------------");
+    vhdl->set_body("-- OUTPUT");
+    vhdl->set_body("-----------------------------------");
+    vhdl->set_body("");
+
+    if (_param->_crossbar == FULL_CROSSBAR)
+      {
+	for (uint32_t i=0; i<_param->_nb_port_read; i ++)
+	  {
+	    vhdl->set_body("out_READ_"+toString(i)+"_ACK <= ");
+	    for (uint32_t j=0; j<_param->_nb_bank; j ++)
+	      {
+		for (uint32_t k=0; k<_param->_nb_port_read_by_bank; k ++)
+		  {
+		    vhdl->set_body("\tinternal_BANK_READ_"+toString(j)+"_"+toString(k)+"_ACK when internal_SELECT_READ_"+toString(j)+"_"+toString(k)+"_VAL = '1' else");
+		  }
+	      }
+	    vhdl->set_body("\t'0';");
+	    vhdl->set_body("out_READ_"+toString(i)+"_DATA <= ");
+	    for (uint32_t j=0; j<_param->_nb_bank; j ++)
+	      {
+		for (uint32_t k=0; k<_param->_nb_port_read_by_bank; k ++)
+		  {
+		    vhdl->set_body("\tinternal_BANK_READ_"+toString(j)+"_"+toString(k)+"_DATA when internal_SELECT_READ_"+toString(j)+"_"+toString(k)+"_VAL = '1' else");
+		  }
+	      }
+ 	    vhdl->set_body("\t"+std_logic_others(_param->_size_word,0)+";");
+	  }
+	for (uint32_t i=0; i<_param->_nb_port_write; i ++)
+	  {
+	    vhdl->set_body("out_WRITE_"+toString(i)+"_ACK <= ");
+	    for (uint32_t j=0; j<_param->_nb_bank; j ++)
+	      {
+		for (uint32_t k=0; k<_param->_nb_port_write_by_bank; k ++)
+		  {
+		    vhdl->set_body("\tinternal_BANK_WRITE_"+toString(j)+"_"+toString(k)+"_ACK when internal_SELECT_WRITE_"+toString(j)+"_"+toString(k)+"_VAL = '1' else");
+		  }
+	      }
+	    vhdl->set_body("\t'0';");
+	  }
+      }
+    else
+      {
+	for (uint32_t i=0; i<_param->_nb_port_read; i ++)
+	  {
+	    uint32_t link = _param->_link_port_read_to_bank_read[i];
+
+	    vhdl->set_body("out_READ_"+toString(i)+"_ACK <= ");
+	    for (uint32_t j=0; j<_param->_nb_bank; j ++)
+	      {
+		vhdl->set_body("\tinternal_BANK_READ_"+toString(j)+"_"+toString(link)+"_ACK when internal_SELECT_READ_"+toString(j)+"_"+toString(link)+"_VAL = '1' else");
+	      }
+// 	    vhdl->set_body("\tinternal_BANK_READ_"+toString(0)+"_"+toString(link)+"_ACK;");
+	    vhdl->set_body("\t'0';");
+
+	    vhdl->set_body("out_READ_"+toString(i)+"_DATA <= ");
+	    for (uint32_t j=1; j<_param->_nb_bank; j ++)
+	      {
+		vhdl->set_body("\tinternal_BANK_READ_"+toString(j)+"_"+toString(link)+"_DATA when internal_SELECT_READ_"+toString(j)+"_"+toString(i)+"_VAL = '1' else");
+	      }
+	    vhdl->set_body("\tinternal_BANK_READ_"+toString(0)+"_"+toString(link)+"_DATA;");
+// 	    vhdl->set_body("\t"+std_logic_others(_param->_size_word,0)+";");
+	  }
+	for (uint32_t i=0; i<_param->_nb_port_write; i ++)
+	  {
+	    uint32_t link = _param->_link_port_write_to_bank_write[i];
+
+	    vhdl->set_body("out_WRITE_"+toString(i)+"_ACK <= ");
+	    for (uint32_t j=0; j<_param->_nb_bank; j ++)
+	      {
+		vhdl->set_body("\tinternal_BANK_WRITE_"+toString(j)+"_"+toString(link)+"_ACK when internal_SELECT_WRITE_"+toString(j)+"_"+toString(i)+"_VAL = '1' else");
+	      }
+// 	    vhdl->set_body("\tinternal_BANK_WRITE_"+toString(0)+"_"+toString(link)+"_ACK;");
+	    vhdl->set_body("\t'0';");
+	  }
+      }
+
     log_printf(FUNC,RegisterFile_Multi_Banked,"vhdl_body","End");
   };
@@ -26,5 +311,4 @@
 }; // end namespace registerfile
 }; // end namespace generic
-
 }; // end namespace behavioural
 }; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_declaration.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_declaration.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_declaration.cpp	(revision 57)
@@ -20,21 +20,32 @@
     log_printf(FUNC,RegisterFile_Multi_Banked,"vhdl_declaration","Begin");
 
-    vhdl->set_type   ("Tregfile", "array (" + toString(_param._nb_word_by_bank-1) + " downto 0) of " + std_logic(_param._size_word));
+    for (uint32_t i=0; i<_param->_nb_bank; i++)
+      {
+	for (uint32_t j=0; j<_param->_nb_port_read; j ++)
+	  {
+	    vhdl->set_signal ("internal_READ_"+toString(i)+"_"+toString(j)+"_VAL" ,1);
+	    vhdl->set_signal ("internal_READ_"+toString(i)+"_"+toString(j)+"_ACK" ,1);
+	    vhdl->set_signal ("internal_SELECT_READ_"+toString(i)+"_"+toString(j)+"_VAL" ,1);
 
-    vhdl->set_type   ("Tbank"   , "array (" + toString(_param._nb_bank)           + " downto 0) of Tregfile");
-
-    vhdl->set_signal ("reg_DATA", "Tbank");
-
-    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 j=0; j<_param->_nb_port_read_by_bank; j ++)
 	  {
-	    vhdl->set_signal ("internal_READ_"+toString(i)+"_"+toString(j)+"_VAL"  ,1);
-	    vhdl->set_signal ("internal_READ_"+toString(i)+"_"+toString(j)+"_PORT" ,static_cast<uint32_t>(ceil(log2(_param._nb_port_read))));
+	    vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_VAL" ,1);
+	    vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ACK"    ,1);
+	    vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ADDRESS",_param->_size_address_by_bank);
+	    vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_DATA"   ,_param->_size_word);
 	  }
-	for (uint32_t j=0; j<_param._nb_port_write_by_bank; j ++)
+	for (uint32_t j=0; j<_param->_nb_port_write; j ++)
 	  {
 	    vhdl->set_signal ("internal_WRITE_"+toString(i)+"_"+toString(j)+"_VAL" ,1);
-	    vhdl->set_signal ("internal_WRITE_"+toString(i)+"_"+toString(j)+"_PORT",static_cast<uint32_t>(ceil(log2(_param._nb_port_write))));
+	    vhdl->set_signal ("internal_WRITE_"+toString(i)+"_"+toString(j)+"_ACK" ,1);
+	    vhdl->set_signal ("internal_SELECT_WRITE_"+toString(i)+"_"+toString(j)+"_VAL"    ,1);
+	  }
+	for (uint32_t j=0; j<_param->_nb_port_write_by_bank; j ++)
+	  {
+	    vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_VAL"    ,1);
+	    vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ACK"    ,1);
+	    vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ADDRESS",_param->_size_address_by_bank);
+	    vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_DATA"   ,_param->_size_word);
 	  }
       }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/Statistics.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/Statistics.cpp	(revision 55)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/Statistics.cpp	(revision 57)
@@ -17,6 +17,6 @@
 
   Statistics::Statistics (string                                      name                       ,
-			  morpheo::behavioural::Parameters_Statistics parameters_statistics      ,
-			  Parameters                                  parameters
+			  morpheo::behavioural::Parameters_Statistics * parameters_statistics      ,
+			  Parameters                                  * parameters
 			  ) :
     morpheo::behavioural::Statistics(name                  ,
