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 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/configuration.cfg	(revision 55)
@@ -1,5 +1,6 @@
 RegisterFile_Monolithic
-2	8 	*2	# nb_port_read
-1	4	*2	# nb_port_write
-32	256	*2	# nb_word
+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/include/test.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/include/test.h	(revision 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/include/test.h	(revision 55)
@@ -24,5 +24,5 @@
 
 void test   (string name,
-	     morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters param);
+	     morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters * param);
 
 class Time 
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 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/mkf.info	(revision 55)
@@ -5,177 +5,17 @@
 target_dep	RegisterFile_Monolithic_0.prj	RegisterFile_Monolithic_0_Pack.vhdl RegisterFile_Monolithic_0.vhdl
 
-# RegisterFile_Monolithic_10
-target_dep	all	RegisterFile_Monolithic_10.ngc
-target_dep	RegisterFile_Monolithic_10.ngc	RegisterFile_Monolithic_10.prj
-target_dep	RegisterFile_Monolithic_10.prj	RegisterFile_Monolithic_10_Pack.vhdl RegisterFile_Monolithic_10.vhdl
-
-# RegisterFile_Monolithic_11
-target_dep	all	RegisterFile_Monolithic_11.ngc
-target_dep	RegisterFile_Monolithic_11.ngc	RegisterFile_Monolithic_11.prj
-target_dep	RegisterFile_Monolithic_11.prj	RegisterFile_Monolithic_11_Pack.vhdl RegisterFile_Monolithic_11.vhdl
-
-# RegisterFile_Monolithic_12
-target_dep	all	RegisterFile_Monolithic_12.ngc
-target_dep	RegisterFile_Monolithic_12.ngc	RegisterFile_Monolithic_12.prj
-target_dep	RegisterFile_Monolithic_12.prj	RegisterFile_Monolithic_12_Pack.vhdl RegisterFile_Monolithic_12.vhdl
-
-# RegisterFile_Monolithic_13
-target_dep	all	RegisterFile_Monolithic_13.ngc
-target_dep	RegisterFile_Monolithic_13.ngc	RegisterFile_Monolithic_13.prj
-target_dep	RegisterFile_Monolithic_13.prj	RegisterFile_Monolithic_13_Pack.vhdl RegisterFile_Monolithic_13.vhdl
-
-# RegisterFile_Monolithic_14
-target_dep	all	RegisterFile_Monolithic_14.ngc
-target_dep	RegisterFile_Monolithic_14.ngc	RegisterFile_Monolithic_14.prj
-target_dep	RegisterFile_Monolithic_14.prj	RegisterFile_Monolithic_14_Pack.vhdl RegisterFile_Monolithic_14.vhdl
-
-# RegisterFile_Monolithic_15
-target_dep	all	RegisterFile_Monolithic_15.ngc
-target_dep	RegisterFile_Monolithic_15.ngc	RegisterFile_Monolithic_15.prj
-target_dep	RegisterFile_Monolithic_15.prj	RegisterFile_Monolithic_15_Pack.vhdl RegisterFile_Monolithic_15.vhdl
-
-# RegisterFile_Monolithic_16
-target_dep	all	RegisterFile_Monolithic_16.ngc
-target_dep	RegisterFile_Monolithic_16.ngc	RegisterFile_Monolithic_16.prj
-target_dep	RegisterFile_Monolithic_16.prj	RegisterFile_Monolithic_16_Pack.vhdl RegisterFile_Monolithic_16.vhdl
-
-# RegisterFile_Monolithic_17
-target_dep	all	RegisterFile_Monolithic_17.ngc
-target_dep	RegisterFile_Monolithic_17.ngc	RegisterFile_Monolithic_17.prj
-target_dep	RegisterFile_Monolithic_17.prj	RegisterFile_Monolithic_17_Pack.vhdl RegisterFile_Monolithic_17.vhdl
-
-# RegisterFile_Monolithic_18
-target_dep	all	RegisterFile_Monolithic_18.ngc
-target_dep	RegisterFile_Monolithic_18.ngc	RegisterFile_Monolithic_18.prj
-target_dep	RegisterFile_Monolithic_18.prj	RegisterFile_Monolithic_18_Pack.vhdl RegisterFile_Monolithic_18.vhdl
-
-# RegisterFile_Monolithic_19
-target_dep	all	RegisterFile_Monolithic_19.ngc
-target_dep	RegisterFile_Monolithic_19.ngc	RegisterFile_Monolithic_19.prj
-target_dep	RegisterFile_Monolithic_19.prj	RegisterFile_Monolithic_19_Pack.vhdl RegisterFile_Monolithic_19.vhdl
-
 # RegisterFile_Monolithic_1
 target_dep	all	RegisterFile_Monolithic_1.ngc
 target_dep	RegisterFile_Monolithic_1.ngc	RegisterFile_Monolithic_1.prj
-target_dep	RegisterFile_Monolithic_1.prj	RegisterFile_Monolithic_10_Pack.vhdl RegisterFile_Monolithic_10.vhdl RegisterFile_Monolithic_11_Pack.vhdl RegisterFile_Monolithic_11.vhdl RegisterFile_Monolithic_12_Pack.vhdl RegisterFile_Monolithic_12.vhdl RegisterFile_Monolithic_13_Pack.vhdl RegisterFile_Monolithic_13.vhdl RegisterFile_Monolithic_14_Pack.vhdl RegisterFile_Monolithic_14.vhdl RegisterFile_Monolithic_15_Pack.vhdl RegisterFile_Monolithic_15.vhdl RegisterFile_Monolithic_16_Pack.vhdl RegisterFile_Monolithic_16.vhdl RegisterFile_Monolithic_17_Pack.vhdl RegisterFile_Monolithic_17.vhdl RegisterFile_Monolithic_18_Pack.vhdl RegisterFile_Monolithic_18.vhdl RegisterFile_Monolithic_19_Pack.vhdl RegisterFile_Monolithic_19.vhdl RegisterFile_Monolithic_1_Pack.vhdl RegisterFile_Monolithic_1.vhdl
-
-# RegisterFile_Monolithic_20
-target_dep	all	RegisterFile_Monolithic_20.ngc
-target_dep	RegisterFile_Monolithic_20.ngc	RegisterFile_Monolithic_20.prj
-target_dep	RegisterFile_Monolithic_20.prj	RegisterFile_Monolithic_20_Pack.vhdl RegisterFile_Monolithic_20.vhdl
-
-# RegisterFile_Monolithic_21
-target_dep	all	RegisterFile_Monolithic_21.ngc
-target_dep	RegisterFile_Monolithic_21.ngc	RegisterFile_Monolithic_21.prj
-target_dep	RegisterFile_Monolithic_21.prj	RegisterFile_Monolithic_21_Pack.vhdl RegisterFile_Monolithic_21.vhdl
-
-# RegisterFile_Monolithic_22
-target_dep	all	RegisterFile_Monolithic_22.ngc
-target_dep	RegisterFile_Monolithic_22.ngc	RegisterFile_Monolithic_22.prj
-target_dep	RegisterFile_Monolithic_22.prj	RegisterFile_Monolithic_22_Pack.vhdl RegisterFile_Monolithic_22.vhdl
-
-# RegisterFile_Monolithic_23
-target_dep	all	RegisterFile_Monolithic_23.ngc
-target_dep	RegisterFile_Monolithic_23.ngc	RegisterFile_Monolithic_23.prj
-target_dep	RegisterFile_Monolithic_23.prj	RegisterFile_Monolithic_23_Pack.vhdl RegisterFile_Monolithic_23.vhdl
-
-# RegisterFile_Monolithic_24
-target_dep	all	RegisterFile_Monolithic_24.ngc
-target_dep	RegisterFile_Monolithic_24.ngc	RegisterFile_Monolithic_24.prj
-target_dep	RegisterFile_Monolithic_24.prj	RegisterFile_Monolithic_24_Pack.vhdl RegisterFile_Monolithic_24.vhdl
-
-# RegisterFile_Monolithic_25
-target_dep	all	RegisterFile_Monolithic_25.ngc
-target_dep	RegisterFile_Monolithic_25.ngc	RegisterFile_Monolithic_25.prj
-target_dep	RegisterFile_Monolithic_25.prj	RegisterFile_Monolithic_25_Pack.vhdl RegisterFile_Monolithic_25.vhdl
-
-# RegisterFile_Monolithic_26
-target_dep	all	RegisterFile_Monolithic_26.ngc
-target_dep	RegisterFile_Monolithic_26.ngc	RegisterFile_Monolithic_26.prj
-target_dep	RegisterFile_Monolithic_26.prj	RegisterFile_Monolithic_26_Pack.vhdl RegisterFile_Monolithic_26.vhdl
-
-# RegisterFile_Monolithic_27
-target_dep	all	RegisterFile_Monolithic_27.ngc
-target_dep	RegisterFile_Monolithic_27.ngc	RegisterFile_Monolithic_27.prj
-target_dep	RegisterFile_Monolithic_27.prj	RegisterFile_Monolithic_27_Pack.vhdl RegisterFile_Monolithic_27.vhdl
-
-# RegisterFile_Monolithic_28
-target_dep	all	RegisterFile_Monolithic_28.ngc
-target_dep	RegisterFile_Monolithic_28.ngc	RegisterFile_Monolithic_28.prj
-target_dep	RegisterFile_Monolithic_28.prj	RegisterFile_Monolithic_28_Pack.vhdl RegisterFile_Monolithic_28.vhdl
-
-# RegisterFile_Monolithic_29
-target_dep	all	RegisterFile_Monolithic_29.ngc
-target_dep	RegisterFile_Monolithic_29.ngc	RegisterFile_Monolithic_29.prj
-target_dep	RegisterFile_Monolithic_29.prj	RegisterFile_Monolithic_29_Pack.vhdl RegisterFile_Monolithic_29.vhdl
+target_dep	RegisterFile_Monolithic_1.prj	RegisterFile_Monolithic_1_Pack.vhdl RegisterFile_Monolithic_1.vhdl
 
 # RegisterFile_Monolithic_2
 target_dep	all	RegisterFile_Monolithic_2.ngc
 target_dep	RegisterFile_Monolithic_2.ngc	RegisterFile_Monolithic_2.prj
-target_dep	RegisterFile_Monolithic_2.prj	RegisterFile_Monolithic_20_Pack.vhdl RegisterFile_Monolithic_20.vhdl RegisterFile_Monolithic_21_Pack.vhdl RegisterFile_Monolithic_21.vhdl RegisterFile_Monolithic_22_Pack.vhdl RegisterFile_Monolithic_22.vhdl RegisterFile_Monolithic_23_Pack.vhdl RegisterFile_Monolithic_23.vhdl RegisterFile_Monolithic_24_Pack.vhdl RegisterFile_Monolithic_24.vhdl RegisterFile_Monolithic_25_Pack.vhdl RegisterFile_Monolithic_25.vhdl RegisterFile_Monolithic_26_Pack.vhdl RegisterFile_Monolithic_26.vhdl RegisterFile_Monolithic_27_Pack.vhdl RegisterFile_Monolithic_27.vhdl RegisterFile_Monolithic_28_Pack.vhdl RegisterFile_Monolithic_28.vhdl RegisterFile_Monolithic_29_Pack.vhdl RegisterFile_Monolithic_29.vhdl RegisterFile_Monolithic_2_Pack.vhdl RegisterFile_Monolithic_2.vhdl
-
-# RegisterFile_Monolithic_30
-target_dep	all	RegisterFile_Monolithic_30.ngc
-target_dep	RegisterFile_Monolithic_30.ngc	RegisterFile_Monolithic_30.prj
-target_dep	RegisterFile_Monolithic_30.prj	RegisterFile_Monolithic_30_Pack.vhdl RegisterFile_Monolithic_30.vhdl
-
-# RegisterFile_Monolithic_31
-target_dep	all	RegisterFile_Monolithic_31.ngc
-target_dep	RegisterFile_Monolithic_31.ngc	RegisterFile_Monolithic_31.prj
-target_dep	RegisterFile_Monolithic_31.prj	RegisterFile_Monolithic_31_Pack.vhdl RegisterFile_Monolithic_31.vhdl
-
-# RegisterFile_Monolithic_32
-target_dep	all	RegisterFile_Monolithic_32.ngc
-target_dep	RegisterFile_Monolithic_32.ngc	RegisterFile_Monolithic_32.prj
-target_dep	RegisterFile_Monolithic_32.prj	RegisterFile_Monolithic_32_Pack.vhdl RegisterFile_Monolithic_32.vhdl
-
-# RegisterFile_Monolithic_33
-target_dep	all	RegisterFile_Monolithic_33.ngc
-target_dep	RegisterFile_Monolithic_33.ngc	RegisterFile_Monolithic_33.prj
-target_dep	RegisterFile_Monolithic_33.prj	RegisterFile_Monolithic_33_Pack.vhdl RegisterFile_Monolithic_33.vhdl
-
-# RegisterFile_Monolithic_34
-target_dep	all	RegisterFile_Monolithic_34.ngc
-target_dep	RegisterFile_Monolithic_34.ngc	RegisterFile_Monolithic_34.prj
-target_dep	RegisterFile_Monolithic_34.prj	RegisterFile_Monolithic_34_Pack.vhdl RegisterFile_Monolithic_34.vhdl
-
-# RegisterFile_Monolithic_35
-target_dep	all	RegisterFile_Monolithic_35.ngc
-target_dep	RegisterFile_Monolithic_35.ngc	RegisterFile_Monolithic_35.prj
-target_dep	RegisterFile_Monolithic_35.prj	RegisterFile_Monolithic_35_Pack.vhdl RegisterFile_Monolithic_35.vhdl
+target_dep	RegisterFile_Monolithic_2.prj	RegisterFile_Monolithic_2_Pack.vhdl RegisterFile_Monolithic_2.vhdl
 
 # RegisterFile_Monolithic_3
 target_dep	all	RegisterFile_Monolithic_3.ngc
 target_dep	RegisterFile_Monolithic_3.ngc	RegisterFile_Monolithic_3.prj
-target_dep	RegisterFile_Monolithic_3.prj	RegisterFile_Monolithic_30_Pack.vhdl RegisterFile_Monolithic_30.vhdl RegisterFile_Monolithic_31_Pack.vhdl RegisterFile_Monolithic_31.vhdl RegisterFile_Monolithic_32_Pack.vhdl RegisterFile_Monolithic_32.vhdl RegisterFile_Monolithic_33_Pack.vhdl RegisterFile_Monolithic_33.vhdl RegisterFile_Monolithic_34_Pack.vhdl RegisterFile_Monolithic_34.vhdl RegisterFile_Monolithic_35_Pack.vhdl RegisterFile_Monolithic_35.vhdl RegisterFile_Monolithic_3_Pack.vhdl RegisterFile_Monolithic_3.vhdl
+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
-
-# RegisterFile_Monolithic_7
-target_dep	all	RegisterFile_Monolithic_7.ngc
-target_dep	RegisterFile_Monolithic_7.ngc	RegisterFile_Monolithic_7.prj
-target_dep	RegisterFile_Monolithic_7.prj	RegisterFile_Monolithic_7_Pack.vhdl RegisterFile_Monolithic_7.vhdl
-
-# RegisterFile_Monolithic_8
-target_dep	all	RegisterFile_Monolithic_8.ngc
-target_dep	RegisterFile_Monolithic_8.ngc	RegisterFile_Monolithic_8.prj
-target_dep	RegisterFile_Monolithic_8.prj	RegisterFile_Monolithic_8_Pack.vhdl RegisterFile_Monolithic_8.vhdl
-
-# RegisterFile_Monolithic_9
-target_dep	all	RegisterFile_Monolithic_9.ngc
-target_dep	RegisterFile_Monolithic_9.ngc	RegisterFile_Monolithic_9.prj
-target_dep	RegisterFile_Monolithic_9.prj	RegisterFile_Monolithic_9_Pack.vhdl RegisterFile_Monolithic_9.vhdl
-
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/src/main.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/src/main.cpp	(revision 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/src/main.cpp	(revision 55)
@@ -8,5 +8,5 @@
 #include "Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/include/test.h"
 
-#define NB_PARAMS 4
+#define NB_PARAMS 5
 
 void usage (string exec)
@@ -14,8 +14,9 @@
   cerr << "<Usage> " << exec << " name_instance list_params" << endl
        << "list_params is :" << endl
-       << " - nb_port_read  (unsigned int)" << endl
-       << " - nb_port_write (unsigned int)" << endl
-       << " - nb_word       (unsigned int)" << endl
-       << " - size_word     (unsigned int)" << endl;
+       << " - nb_port_read       (unsigned int)" << endl
+       << " - nb_port_write      (unsigned int)" << endl
+       << " - nb_port_read_write (unsigned int)" << endl
+       << " - nb_word            (unsigned int)" << endl
+       << " - size_word          (unsigned int)" << endl;
   exit (1);
 }
@@ -30,15 +31,18 @@
     usage (argv[0]);
 
-  const string   name          = argv[1];
-  const uint32_t nb_port_read  = atoi(argv[2]);
-  const uint32_t nb_port_write = atoi(argv[3]);
-  const uint32_t nb_word       = atoi(argv[4]);
-  const uint32_t size_word     = atoi(argv[5]);
+  const string   name               = argv[1];
+  const uint32_t nb_port_read       = atoi(argv[2]);
+  const uint32_t nb_port_write      = atoi(argv[3]);
+  const uint32_t nb_port_read_write = atoi(argv[4]);
+  const uint32_t nb_word            = atoi(argv[5]);
+  const uint32_t size_word          = atoi(argv[6]);
   
-  morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters param (nb_port_read ,
-											  nb_port_write,
-								 nb_word      ,
-								 size_word    );
-
+  morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters * param = new morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters
+    (nb_port_read ,
+     nb_port_write,
+     nb_port_read_write,
+     nb_word      ,
+     size_word    );
+  
   test (name,param);
 
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 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/src/test.cpp	(revision 55)
@@ -7,5 +7,5 @@
  */
 
-#define NB_ITERATION 32
+#define NB_ITERATION 2
 
 #include "Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/include/test.h"
@@ -13,5 +13,5 @@
 
 void test (string name,
-	   morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters param)
+	   morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters * _param)
 {
   cout << "<" << name << "> : Simulation SystemC" << endl;
@@ -19,6 +19,6 @@
   try 
     {
-      cout << param.print(1);
-      param.test();
+      cout << _param->print(1);
+      _param->test();
     }
   catch (morpheo::ErrorMorpheo & error)
@@ -33,9 +33,12 @@
     }
 
+#ifdef STATISTICS
+  morpheo::behavioural::Parameters_Statistics * _param_stat = new morpheo::behavioural::Parameters_Statistics (5,1000);
+#endif
   RegisterFile_Monolithic * registerfile = new RegisterFile_Monolithic (name.c_str()
 #ifdef STATISTICS
-									,morpheo::behavioural::Parameters_Statistics(5,1000)
+									,_param_stat
 #endif
-									,param);
+									,_param);
   
 #ifdef SYSTEMC
@@ -46,13 +49,20 @@
   sc_signal<Tcontrol_t>                    NRESET;
   
-  sc_signal<Tcontrol_t>                    READ_VAL      [param._nb_port_read];
-  sc_signal<Tcontrol_t>                    READ_ACK      [param._nb_port_read];
-  sc_signal<Taddress_t>                    READ_ADDRESS  [param._nb_port_read];
-  sc_signal<Tdata_t>                       READ_DATA     [param._nb_port_read];
-
-  sc_signal<Tcontrol_t>                    WRITE_VAL     [param._nb_port_write];
-  sc_signal<Tcontrol_t>                    WRITE_ACK     [param._nb_port_write];
-  sc_signal<Taddress_t>                    WRITE_ADDRESS [param._nb_port_write];
-  sc_signal<Tdata_t>                       WRITE_DATA    [param._nb_port_write];
+  sc_signal<Tcontrol_t>                    READ_VAL      [_param->_nb_port_read];
+  sc_signal<Tcontrol_t>                    READ_ACK      [_param->_nb_port_read];
+  sc_signal<Taddress_t>                    READ_ADDRESS  [_param->_nb_port_read];
+  sc_signal<Tdata_t>                       READ_DATA     [_param->_nb_port_read];
+
+  sc_signal<Tcontrol_t>                    WRITE_VAL     [_param->_nb_port_write];
+  sc_signal<Tcontrol_t>                    WRITE_ACK     [_param->_nb_port_write];
+  sc_signal<Taddress_t>                    WRITE_ADDRESS [_param->_nb_port_write];
+  sc_signal<Tdata_t>                       WRITE_DATA    [_param->_nb_port_write];
+
+  sc_signal<Tcontrol_t>                    READ_WRITE_VAL     [_param->_nb_port_read_write];
+  sc_signal<Tcontrol_t>                    READ_WRITE_ACK     [_param->_nb_port_read_write];
+  sc_signal<Tcontrol_t>                    READ_WRITE_RW      [_param->_nb_port_read_write];
+  sc_signal<Taddress_t>                    READ_WRITE_ADDRESS [_param->_nb_port_read_write];
+  sc_signal<Tdata_t>                       READ_WRITE_RDATA   [_param->_nb_port_read_write];
+  sc_signal<Tdata_t>                       READ_WRITE_WDATA   [_param->_nb_port_read_write];
 
   /********************************************************
@@ -65,5 +75,5 @@
   (*(registerfile->in_NRESET))       (NRESET);
 
-  for (uint32_t i=0; i<param._nb_port_read; i++)
+  for (uint32_t i=0; i<_param->_nb_port_read; i++)
     {
       (*(registerfile-> in_READ_VAL      [i]))        (READ_VAL      [i]);
@@ -72,6 +82,5 @@
       (*(registerfile->out_READ_DATA     [i]))        (READ_DATA     [i]);
     }
-
-  for (uint32_t i=0; i<param._nb_port_write; i++)
+  for (uint32_t i=0; i<_param->_nb_port_write; i++)
     {
       (*(registerfile-> in_WRITE_VAL     [i]))        (WRITE_VAL     [i]);
@@ -80,4 +89,13 @@
       (*(registerfile-> in_WRITE_DATA    [i]))        (WRITE_DATA    [i]);
     }
+  for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
+    {
+      (*(registerfile-> in_READ_WRITE_VAL     [i])) (READ_WRITE_VAL      [i]);
+      (*(registerfile->out_READ_WRITE_ACK     [i])) (READ_WRITE_ACK      [i]);
+      (*(registerfile-> in_READ_WRITE_RW      [i])) (READ_WRITE_RW       [i]);
+      (*(registerfile-> in_READ_WRITE_ADDRESS [i])) (READ_WRITE_ADDRESS  [i]);
+      (*(registerfile-> in_READ_WRITE_WDATA   [i])) (READ_WRITE_WDATA    [i]);
+      (*(registerfile->out_READ_WRITE_RDATA   [i])) (READ_WRITE_RDATA    [i]);
+    }
   
   cout << "<" << name << "> Start Simulation ............" << endl;
@@ -92,9 +110,10 @@
   sc_start(0);
   
-  for (uint32_t i=0; i<param._nb_port_write; i++)
+  for (uint32_t i=0; i<_param->_nb_port_write; i++)
     WRITE_VAL [i] .write (0);
-
-  for (uint32_t i=0; i<param._nb_port_read; i++)
+  for (uint32_t i=0; i<_param->_nb_port_read; i++)
     READ_VAL  [i] .write (0);
+  for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
+    READ_WRITE_VAL  [i] .write (0);
 
   NRESET.write(0);
@@ -115,19 +134,19 @@
       srand(grain);
 
-      Tdata_t tab [param._nb_word];
-      
-      for (uint32_t i=0; i<param._nb_word; i++)
-	tab[i]= rand()%(1<<(param._size_word-1));
+      Tdata_t tab [_param->_nb_word];
+      
+      for (uint32_t i=0; i<_param->_nb_word; i++)
+	tab[i]= rand()%(1<<(_param->_size_word-1));
       
       Taddress_t address_next = 0;
       Taddress_t nb_ack = 0;
       
-      while (nb_ack < param._nb_word)
+      while (nb_ack < _param->_nb_word)
 	{
 	  cout << "cycle : " << static_cast<uint32_t> (sc_simulation_time()) << endl;
 
-	  for (uint32_t num_port=0; num_port < param._nb_port_write; num_port ++)
-	    {
-	      if ((address_next < param._nb_word) and
+	  for (uint32_t num_port=0; num_port < _param->_nb_port_write; num_port ++)
+	    {
+	      if ((address_next < _param->_nb_word) and
 		  (WRITE_VAL [num_port].read() == 0))
 		{
@@ -139,5 +158,23 @@
 		  
 		  // Address can be not a multiple of nb_port_write
-		  if (address_next >= param._nb_word)
+		  if (address_next >= _param->_nb_word)
+		    break;
+		}
+	    }
+
+	  for (uint32_t num_port=0; num_port < _param->_nb_port_read_write; num_port ++)
+	    {
+	      if ((address_next < _param->_nb_word) and
+		  (READ_WRITE_VAL [num_port].read() == 0))
+		{
+		  cout << "(" << num_port << ") [" << address_next << "] <= " << tab[address_next] << endl;
+		  
+		  READ_WRITE_VAL     [num_port] .write(1);
+		  READ_WRITE_RW      [num_port] .write(RW_WRITE);
+		  READ_WRITE_WDATA   [num_port] .write(tab[address_next]);
+		  READ_WRITE_ADDRESS [num_port] .write(address_next++);
+		  
+		  // Address can be not a multiple of nb_port_write
+		  if (address_next >= _param->_nb_word)
 		    break;
 		}
@@ -147,5 +184,5 @@
 
 	  // reset write_val port
-	  for (uint32_t num_port=0; num_port < param._nb_port_write; num_port ++)
+	  for (uint32_t num_port=0; num_port < _param->_nb_port_write; num_port ++)
 	    {
 	      if ((WRITE_ACK [num_port].read() == 1) and
@@ -156,4 +193,14 @@
 		}
 	    }
+	  // reset write_val port
+	  for (uint32_t num_port=0; num_port < _param->_nb_port_read_write; num_port ++)
+	    {
+	      if ((READ_WRITE_ACK [num_port].read() == 1) and
+		  (READ_WRITE_VAL [num_port].read() == 1))
+		{
+		  READ_WRITE_VAL  [num_port] .write(0);
+		  nb_ack ++;
+		}
+	    }
 
 	  sc_start(0);
@@ -165,13 +212,14 @@
       cout << "<" << name << "> 2) Read the RegisterFile (no write)" << endl;
       
-      Tdata_t read_address [param._nb_port_read];
-
-      while (nb_ack < param._nb_word)
+      Tdata_t read_address       [_param->_nb_port_read];
+      Tdata_t read_write_address [_param->_nb_port_read_write];
+
+      while (nb_ack < _param->_nb_word)
 	{
 	  cout << "cycle : " << static_cast<uint32_t> (sc_simulation_time()) << endl;
 	  
-	  for (uint32_t num_port=0; num_port < param._nb_port_read; num_port ++)
-	    {
-	      if ((address_next < param._nb_word) and
+	  for (uint32_t num_port=0; num_port < _param->_nb_port_read; num_port ++)
+	    {
+	      if ((address_next < _param->_nb_word) and
 		  (READ_VAL [num_port].read() == 0))
 		{
@@ -181,13 +229,30 @@
 		  READ_ADDRESS [num_port].write(read_address [num_port]);
 
-		  if (address_next >= param._nb_word)
-		    break;
-		}
-	    }
+		  if (address_next >= _param->_nb_word)
+		    break;
+		}
+	    }
+
+	  for (uint32_t num_port=0; num_port < _param->_nb_port_read_write; num_port ++)
+	    {
+	      if ((address_next < _param->_nb_word) and
+		  (READ_WRITE_VAL [num_port].read() == 0))
+		{
+		  read_write_address [num_port] = address_next++;
+
+		  READ_WRITE_VAL     [num_port].write(1);
+		  READ_WRITE_RW      [num_port].write(RW_READ);
+		  READ_WRITE_ADDRESS [num_port].write(read_write_address [num_port]);
+
+		  if (address_next >= _param->_nb_word)
+		    break;
+		}
+	    }
+
 
 	  sc_start(1);
 
 	  // reset write_val port
-	  for (uint32_t num_port=0; num_port < param._nb_port_read; num_port ++)
+	  for (uint32_t num_port=0; num_port < _param->_nb_port_read; num_port ++)
 	    {
 	      if ((READ_ACK [num_port].read() == 1) and
@@ -199,4 +264,18 @@
 
 		  TEST(Tdata_t,READ_DATA [num_port].read(), tab[read_address [num_port]]);
+		  nb_ack ++;
+		}
+	    }
+
+	  for (uint32_t num_port=0; num_port < _param->_nb_port_read_write; num_port ++)
+	    {
+	      if ((READ_WRITE_ACK [num_port].read() == 1) and
+		  (READ_WRITE_VAL [num_port].read() == 1))
+		{
+		  READ_WRITE_VAL  [num_port] .write(0);
+
+		  cout << "(" << num_port << ") [" << read_write_address [num_port] << "] => " << READ_WRITE_RDATA [num_port].read() << endl;
+
+		  TEST(Tdata_t,READ_WRITE_RDATA [num_port].read(), tab[read_write_address [num_port]]);
 		  nb_ack ++;
 		}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Parameters.h	(revision 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Parameters.h	(revision 55)
@@ -23,4 +23,5 @@
   public : const uint32_t _nb_port_read ;
   public : const uint32_t _nb_port_write;
+  public : const uint32_t _nb_port_read_write;
   public : const uint32_t _nb_word      ;
   public : const uint32_t _size_word    ;
@@ -29,4 +30,5 @@
   public : Parameters (uint32_t nb_port_read ,
 		       uint32_t nb_port_write,
+		       uint32_t nb_port_read_write,
 		       uint32_t nb_word      ,
 		       uint32_t size_word    );
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 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/RegisterFile_Monolithic.h	(revision 55)
@@ -36,4 +36,6 @@
 namespace registerfile_monolithic    {
 
+  typedef enum {RW_READ, RW_WRITE} rw_t;
+
   class RegisterFile_Monolithic 
 #if SYSTEMC
@@ -43,7 +45,7 @@
     // -----[ fields ]----------------------------------------------------
     // Parameters
-  protected : const string     _name;
+  protected : const string       _name;
 
-  protected : const Parameters _param;
+  protected : const Parameters * _param;
 #ifdef STATISTICS
   private   : Statistics                     * _stat;
@@ -74,4 +76,12 @@
   public    : SC_IN       (Tdata_t)        **  in_WRITE_DATA   ;
 
+    // ----- Interface Read_Write
+  public    : SC_IN       (Tcontrol_t)     **  in_READ_WRITE_VAL    ;
+  public    : SC_OUT      (Tcontrol_t)     ** out_READ_WRITE_ACK    ;
+  public    : SC_IN       (Tcontrol_t)     **  in_READ_WRITE_RW     ;
+  public    : SC_IN       (Taddress_t)     **  in_READ_WRITE_ADDRESS;
+  public    : SC_OUT      (Tdata_t)        ** out_READ_WRITE_RDATA  ;
+  public    : SC_IN       (Tdata_t)        **  in_READ_WRITE_WDATA  ;
+
     // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
   private   : SC_REGISTER (Tdata_t)        ** reg_DATA         ;
@@ -93,9 +103,7 @@
 #endif					       
 #ifdef STATISTICS
-						morpheo::behavioural::Parameters_Statistics param_statistics,
+						morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-					        Parameters                                  param );
-					       
-  public  :          RegisterFile_Monolithic   (Parameters param );
+					        Parameters                                  * param );
   public  :          ~RegisterFile_Monolithic  (void);
 					       
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Statistics.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Statistics.h	(revision 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Statistics.h	(revision 55)
@@ -27,5 +27,7 @@
   {
     // -----[ fields ]----------------------------------------------------
-  private  : const Parameters                                   _parameters;
+  private  : const Parameters                                 * _parameters;
+  private  : morpheo::behavioural::generic::group::Parameters * _param_port_read;
+  private  : morpheo::behavioural::generic::group::Parameters * _param_port_write;
   private  : morpheo::behavioural::generic::group::Statistics * _stat_port_read;
   private  : morpheo::behavioural::generic::group::Statistics * _stat_port_write;
@@ -33,6 +35,6 @@
     // -----[ methods ]---------------------------------------------------
   public   : Statistics (string                                      name                       ,
-			 morpheo::behavioural::Parameters_Statistics parameters_statistics      ,
-			 Parameters                                  parameters
+			 morpheo::behavioural::Parameters_Statistics * parameters_statistics    ,
+			 Parameters                                  * parameters
 			 );
 //public   : Statistics (Statistics & stat);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Parameters.cpp	(revision 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Parameters.cpp	(revision 55)
@@ -16,4 +16,5 @@
   Parameters::Parameters (uint32_t nb_port_read ,
 			  uint32_t nb_port_write,
+			  uint32_t nb_port_read_write ,
 			  uint32_t nb_word      ,
 			  uint32_t size_word     
@@ -21,4 +22,5 @@
     _nb_port_read      (nb_port_read ),
     _nb_port_write     (nb_port_write),
+    _nb_port_read_write(nb_port_read_write),
     _nb_word           (nb_word      ),
     _size_word         (size_word    ),
@@ -31,4 +33,5 @@
     _nb_port_read      (param._nb_port_read ),
     _nb_port_write     (param._nb_port_write),
+    _nb_port_read_write(param._nb_port_read_write),
     _nb_word           (param._nb_word      ),
     _size_word         (param._size_word    ),
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Parameters_msg_error.cpp	(revision 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Parameters_msg_error.cpp	(revision 55)
@@ -25,6 +25,6 @@
       {
         msg += "  - type \"Tdata_t\" is too little to the size defined by size_word\n";
-        msg +=  "    * size_word                       : " + toString(_size_word) + "\n";
-	msg +=  "    * Tdata_t                   (bits): " + toString(8*(sizeof(Tdata_t))) + "\n";
+        msg += "    * size_word                       : " + toString(_size_word) + "\n";
+	msg += "    * Tdata_t                   (bits): " + toString(8*(sizeof(Tdata_t))) + "\n";
       }
 
@@ -32,9 +32,22 @@
       {
         msg += "  - type \"Taddress_t\" is too little to the size defined by nb_word\n";
-        msg +=  "    * nb_word                         : " + toString(_nb_word)    + "\n";
-	msg +=  "      > size                   (bits) : " + toString(log2(_nb_word)) + "\n";
-	msg +=  "    * Taddress_t               (bits) : " + toString(8*(sizeof(Taddress_t))) + "\n";
+        msg += "    * nb_word                         : " + toString(_nb_word)    + "\n";
+	msg += "      > size                   (bits) : " + toString(log2(_nb_word)) + "\n";
+	msg += "    * Taddress_t               (bits) : " + toString(8*(sizeof(Taddress_t))) + "\n";
       }
 
+    if ((_nb_port_read + _nb_port_read_write) < 1)
+      {
+        msg += "  - you need a read port\n";
+        msg += "    * nb_port_read                    : " + toString(_nb_port_read)       + "\n";
+        msg += "    * nb_port_read_write              : " + toString(_nb_port_read_write) + "\n";
+      }
+
+    if ((_nb_port_write + _nb_port_read_write) < 1)
+      {
+        msg += "  - you need a write port\n";
+        msg += "    * nb_port_write                   : " + toString(_nb_port_write)      + "\n";
+        msg += "    * nb_port_read_write              : " + toString(_nb_port_read_write) + "\n";
+      }
     if (_nb_word < 2)
       {
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Parameters_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Parameters_print.cpp	(revision 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Parameters_print.cpp	(revision 55)
@@ -22,8 +22,9 @@
     ostringstream msg;
     msg << tab << "<registerfile_monolithic>" << endl
-	<< tab << "\t<nb_port_read  value=\"" << _nb_port_read  << "\" />" << endl
-	<< tab << "\t<nb_port_write value=\"" << _nb_port_write << "\" />" << endl
-	<< tab << "\t<nb_word       value=\"" << _nb_word       << "\" />" << endl
-	<< tab << "\t<size_word     value=\"" << _size_word     << "\" />" << endl
+	<< tab << "\t<nb_port_read       value=\"" << _nb_port_read       << "\" />" << endl
+	<< tab << "\t<nb_port_write      value=\"" << _nb_port_write      << "\" />" << endl
+	<< tab << "\t<nb_port_read_write value=\"" << _nb_port_read_write << "\" />" << endl
+	<< tab << "\t<nb_word            value=\"" << _nb_word            << "\" />" << endl
+	<< tab << "\t<size_word          value=\"" << _size_word          << "\" />" << endl
 	<< tab << "</registerfile_monolithic>" << endl;
     
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 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic.cpp	(revision 55)
@@ -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_monolithic::Parameters param ):
+						    morpheo::behavioural::generic::registerfile::registerfile_monolithic::Parameters * param ):
     _name   (name),
     _param (param)
@@ -54,21 +54,33 @@
     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]);
+    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++)
+    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]));
+	(*(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       ; 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
 
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 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_allocation.cpp	(revision 55)
@@ -43,10 +43,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)
@@ -60,16 +60,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", _param._size_address);
-	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", _param->_size_address);
+	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)
@@ -83,12 +83,39 @@
 	 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", _param._size_address);
-	 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", _param->_size_address);
+	 in_WRITE_DATA    [i]  = interface->set_signal_in  <Tdata_t   > ("data"   , _param->_size_word);
+      }
+
+    // ~~~~~[ Interface : "read_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+     in_READ_WRITE_VAL         = new SC_IN (Tcontrol_t) * [_param->_nb_port_read_write];
+    out_READ_WRITE_ACK         = new SC_OUT(Tcontrol_t) * [_param->_nb_port_read_write];
+     in_READ_WRITE_RW          = new SC_IN (Tcontrol_t) * [_param->_nb_port_read_write];
+     in_READ_WRITE_ADDRESS     = new SC_IN (Taddress_t) * [_param->_nb_port_read_write];
+     in_READ_WRITE_WDATA       = new SC_IN (Tdata_t   ) * [_param->_nb_port_read_write];
+    out_READ_WRITE_RDATA       = new SC_OUT(Tdata_t   ) * [_param->_nb_port_read_write];
+
+    for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
+      { 
+	Interface_fifo * interface = _interfaces->set_interface("read_write_"+toString(i)
+#ifdef POSITION
+								, IN  
+								,WEST
+								, "Interface Read_Write"
+#endif
+								);
+
+	 in_READ_WRITE_VAL     [i]  = interface->set_signal_valack_in        ("val"    , VAL);
+	out_READ_WRITE_ACK     [i]  = interface->set_signal_valack_out       ("ack"    , ACK);
+	 in_READ_WRITE_RW      [i]  = interface->set_signal_valack_in        ("rw"     , VAL);
+	 in_READ_WRITE_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", _param->_size_address);
+	 in_READ_WRITE_WDATA   [i]  = interface->set_signal_in  <Tdata_t   > ("wdata"  , _param->_size_word);
+	out_READ_WRITE_RDATA   [i]  = interface->set_signal_out <Tdata_t   > ("rdata"  , _param->_size_word);
       }
 
     // ----- Register
-    reg_DATA = new SC_REGISTER (Tdata_t) * [_param._nb_word];
+    reg_DATA = new SC_REGISTER (Tdata_t) * [_param->_nb_word];
     
-    for (uint32_t i=0; i<_param._nb_word; i++)
+    for (uint32_t i=0; i<_param->_nb_word; i++)
       {
 	string rename = "reg_DATA["  + toString(i) + "]";
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 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_deallocation.cpp	(revision 55)
@@ -33,4 +33,12 @@
     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;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_genMealy_read.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_genMealy_read.cpp	(revision 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_genMealy_read.cpp	(revision 55)
@@ -23,5 +23,5 @@
 #endif    
 
-    for (uint32_t i=0; i<_param._nb_port_read; i++)
+    for (uint32_t i=0; i<_param->_nb_port_read; i++)
       {
 	// Have a write?
@@ -45,4 +45,35 @@
 	  }
       }
+
+    for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
+      {
+	Tdata_t data;
+
+	// Have a write?
+ 	if ( (PORT_READ(in_READ_WRITE_VAL [i]) == 1) and
+	     (PORT_READ(in_READ_WRITE_RW  [i]) == RW_READ)
+	     )
+ 	  {
+	    Taddress_t address = PORT_READ(in_READ_WRITE_ADDRESS[i]);
+	    
+	    data = REGISTER_READ(reg_DATA[address]);
+
+	    log_printf(TRACE,RegisterFile,"genMealy_read","[%d] -> %.8x",static_cast<uint32_t>(address),static_cast<uint32_t>(data));
+
+#ifdef STATISTICS
+	    _stat_nb_read ++;
+#endif    
+	    // Write in registerFile
+	    
+ 	  }
+	else
+	  {
+	    //log_printf(TRACE,RegisterFile,"genMealy_read","Read  [%d] : No   transaction",i);
+	    data = 0;
+	  }
+
+	PORT_WRITE(out_READ_WRITE_RDATA[i],data);
+      }
+
     log_printf(FUNC,RegisterFile,"genMealy_read","End");
 	
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_transition.cpp	(revision 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_transition.cpp	(revision 55)
@@ -21,5 +21,5 @@
 #endif    
 
-    for (uint32_t i=0; i<_param._nb_port_write; i++)
+    for (uint32_t i=0; i<_param->_nb_port_write; i++)
       {
 	// Have a write?
@@ -32,4 +32,23 @@
 	    Taddress_t address = PORT_READ(in_WRITE_ADDRESS[i]);
 	    Tdata_t    data    = PORT_READ(in_WRITE_DATA   [i]);
+	    
+	    log_printf(TRACE,RegisterFile,"transition","[%d] <- %.8x",static_cast<uint32_t>(address),static_cast<uint32_t>(data));
+
+	    // Write in registerFile
+	    REGISTER_WRITE(reg_DATA[address],data);
+ 	  }
+      }
+    for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
+      {
+	// Have a read_write?
+ 	if ( (PORT_READ(in_READ_WRITE_VAL[i]) == true) and
+	     (PORT_READ(in_READ_WRITE_RW [i]) == RW_WRITE))
+ 	  {
+#ifdef STATISTICS
+	    _stat_nb_write ++;
+#endif    
+
+	    Taddress_t address = PORT_READ(in_READ_WRITE_ADDRESS[i]);
+	    Tdata_t    data    = PORT_READ(in_READ_WRITE_WDATA  [i]);
 	    
 	    log_printf(TRACE,RegisterFile,"transition","[%d] <- %.8x",static_cast<uint32_t>(address),static_cast<uint32_t>(data));
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_vhdl_body.cpp	(revision 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_vhdl_body.cpp	(revision 55)
@@ -19,13 +19,26 @@
     vhdl->set_body ("");
     vhdl->set_body ("-----------------------------------------------------------------------------");
+    vhdl->set_body ("-- Ackitement");
+    vhdl->set_body ("-----------------------------------------------------------------------------");
+    vhdl->set_body ("");
+
+    for (uint32_t i = 0; i < _param->_nb_port_read; i++)
+      vhdl->set_body ("out_READ_"+toString(i)+"_ACK  <= '1';");
+    for (uint32_t i = 0; i < _param->_nb_port_write; i++)
+      vhdl->set_body ("out_WRITE_"+toString(i)+"_ACK <= '1';");
+    for (uint32_t i = 0; i < _param->_nb_port_read_write; i++)
+      vhdl->set_body ("out_READ_WRITE_"+toString(i)+"_ACK  <= '1';");
+
+    vhdl->set_body ("");
+    vhdl->set_body ("-----------------------------------------------------------------------------");
     vhdl->set_body ("-- Read RegisterFile");
     vhdl->set_body ("-----------------------------------------------------------------------------");
     vhdl->set_body ("");
     
-    for (uint32_t i = 0; i < _param._nb_port_read; i++)
-      {
-	vhdl->set_body ("out_READ_"+toString(i)+"_ACK  <= '1';");
-	vhdl->set_body ("out_READ_"+toString(i)+"_DATA <= reg_DATA (conv_integer(in_READ_"+toString(i)+"_ADDRESS)) when in_READ_"+toString(i)+"_VAL = '1' else "+std_logic_others(_param._size_word,0)+";");
-      }
+    for (uint32_t i = 0; i < _param->_nb_port_read; i++)
+	vhdl->set_body ("out_READ_"+toString(i)+"_DATA <= reg_DATA (conv_integer(in_READ_"+toString(i)+"_ADDRESS)) when in_READ_"+toString(i)+"_VAL = '1' else "+std_logic_others(_param->_size_word,0)+";");
+
+    for (uint32_t i = 0; i < _param->_nb_port_read_write; i++)
+      vhdl->set_body ("out_READ_WRITE_"+toString(i)+"_RDATA <= reg_DATA (conv_integer(in_READ_WRITE_"+toString(i)+"_ADDRESS)) when in_READ_WRITE_"+toString(i)+"_VAL = '1' and in_READ_WRITE_"+toString(i)+"_RW = '"+toString(RW_READ)+"' else "+std_logic_others(_param->_size_word,0)+";");
 
     vhdl->set_body ("");
@@ -39,5 +52,5 @@
     vhdl->set_body ("\tif in_CLOCK'event and in_CLOCK = '1' then");
     
-    for (uint32_t i = 0; i < _param._nb_port_write; i++)
+    for (uint32_t i = 0; i < _param->_nb_port_write; i++)
       {
       vhdl->set_body ("\t\tif (in_WRITE_"+toString(i)+"_VAL = '1') then");
@@ -45,10 +58,13 @@
       vhdl->set_body ("\t\tend if;");
       }
+    for (uint32_t i = 0; i < _param->_nb_port_read_write; i++)
+      {
+      vhdl->set_body ("\t\tif (in_READ_WRITE_"+toString(i)+"_VAL = '1' and in_READ_WRITE_"+toString(i)+"_RW = '"+toString(RW_WRITE)+"') then");
+      vhdl->set_body ("\t\t\treg_DATA(conv_integer(in_READ_WRITE_"+toString(i)+"_ADDRESS)) <= in_READ_WRITE_"+toString(i)+"_WDATA;");
+      vhdl->set_body ("\t\tend if;");
+      }
 
     vhdl->set_body ("\tend if;");
     vhdl->set_body ("end process RegisterFile_write;");
-
-    for (uint32_t i = 0; i < _param._nb_port_write; i++)
-      vhdl->set_body ("out_WRITE_"+toString(i)+"_ACK <= '1';");
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_vhdl_declaration.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_vhdl_declaration.cpp	(revision 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_vhdl_declaration.cpp	(revision 55)
@@ -18,5 +18,5 @@
   void RegisterFile_Monolithic::vhdl_declaration (Vhdl * & vhdl)
   {
-    vhdl->set_type ("Tregfile", "array (" + toString(_param._nb_word-1) + " downto 0) of " + std_logic(_param._size_word));
+    vhdl->set_type ("Tregfile", "array (" + toString(_param->_nb_word-1) + " downto 0) of " + std_logic(_param->_size_word));
 
     vhdl->set_signal ("reg_DATA", "Tregfile");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Statistics.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Statistics.cpp	(revision 53)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Statistics.cpp	(revision 55)
@@ -15,7 +15,7 @@
 namespace registerfile_monolithic    {
 
-  Statistics::Statistics (string                                      name                       ,
-			  morpheo::behavioural::Parameters_Statistics parameters_statistics      ,
-			  Parameters                                  parameters
+  Statistics::Statistics (string                                        name                       ,
+			  morpheo::behavioural::Parameters_Statistics * parameters_statistics      ,
+			  Parameters                                  * parameters
 			  ) :
     morpheo::behavioural::Statistics(name                  ,
@@ -23,10 +23,13 @@
     _parameters(parameters)
   {
+    _param_port_read = new morpheo::behavioural::generic::group::Parameters(_parameters->_nb_port_read);
     _stat_port_read  = new morpheo::behavioural::generic::group::Statistics (name + "_port_read"   ,
 									     parameters_statistics ,
-									     morpheo::behavioural::generic::group::Parameters(_parameters._nb_port_read));
-    _stat_port_write = new morpheo::behavioural::generic::group::Statistics (name + "_port_write"   ,
+									     _param_port_read);
+
+    _param_port_write = new morpheo::behavioural::generic::group::Parameters(_parameters->_nb_port_write);
+    _stat_port_write  = new morpheo::behavioural::generic::group::Statistics (name + "_port_write"   ,
 									     parameters_statistics ,
-									     morpheo::behavioural::generic::group::Parameters(_parameters._nb_port_write));
+									     _param_port_write);
   };
   
@@ -40,4 +43,6 @@
   Statistics::~Statistics () 
   { 
+    delete _param_port_read;
+    delete _param_port_write;
     delete _stat_port_read ;
     delete _stat_port_write;
