Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/Parameters_msg_error.cpp	(revision 3)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/Parameters_msg_error.cpp	(revision 6)
@@ -39,5 +39,5 @@
       {
         msg += "  - nb_word must be >= 2\n";
-        msg +=  "    * nb_word                         : " + toString(_nb_word)    + "\n";
+        msg += "    * nb_word                         : " + toString(_nb_word)    + "\n";
       }
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile.cpp	(revision 3)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile.cpp	(revision 6)
@@ -53,5 +53,5 @@
     sensitive_neg << *(in_CLOCK);
     for (uint32_t i=0; i<_param._nb_port_read; i++)
-      sensitive << *(in_READ_ENABLE  [i])
+      sensitive << *(in_READ_VAL     [i])
 		<< *(in_READ_ADDRESS [i]);
 
@@ -60,8 +60,13 @@
     for (uint32_t i=0; i<_param._nb_port_read; i++)
       {
-	(*(out_READ_DATA [i])) (*( in_READ_ENABLE  [i]));
+	(*(out_READ_DATA [i])) (*( in_READ_VAL     [i]));
 	(*(out_READ_DATA [i])) (*( in_READ_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);
 #endif
   };
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_allocation.cpp	(revision 3)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_allocation.cpp	(revision 6)
@@ -16,8 +16,10 @@
   void RegisterFile::allocation (void)
   {
-    in_CLOCK = new SC_CLOCK ("in_CLOCK");
+    in_CLOCK  = new SC_CLOCK           ("in_CLOCK");
+    in_NRESET = new SC_IN (Tcontrol_t) ("in_NRESET");
 
     // ----- Interface Read
-     in_READ_ENABLE      = new SC_IN (Tcontrol_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];
@@ -27,6 +29,9 @@
 	string rename;
 
-	rename = "in_READ_ENABLE["  + toString(i) + "]";
-	in_READ_ENABLE  [i]  = new SC_IN (Tcontrol_t) (rename.c_str());
+	rename = "in_READ_VAL["     + toString(i) + "]";
+	in_READ_VAL     [i]  = new SC_IN (Tcontrol_t) (rename.c_str());
+
+	rename = "out_READ_ACK["     + toString(i) + "]";
+	out_READ_ACK    [i]  = new SC_OUT(Tcontrol_t) (rename.c_str());
 
 	rename = "in_READ_ADDRESS[" + toString(i) + "]";
@@ -38,5 +43,6 @@
 
     // ----- Interface Write
-     in_WRITE_ENABLE     = new SC_IN (Tcontrol_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];
@@ -46,6 +52,9 @@
 	string rename;
 
-	rename = "in_WRITE_ENABLE["  + toString(i) + "]";
-	in_WRITE_ENABLE  [i]  = new SC_IN (Tcontrol_t) (rename.c_str());
+	rename = "in_WRITE_VAL["  + toString(i) + "]";
+	in_WRITE_VAL     [i]  = new SC_IN (Tcontrol_t) (rename.c_str());
+
+	rename = "out_WRITE_VAL["  + toString(i) + "]";
+	out_WRITE_ACK    [i]  = new SC_OUT(Tcontrol_t) (rename.c_str());
 
 	rename = "in_WRITE_ADDRESS[" + toString(i) + "]";
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_deallocation.cpp	(revision 3)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_deallocation.cpp	(revision 6)
@@ -17,14 +17,16 @@
   {
     delete in_CLOCK;
-
+    delete in_NRESET;
     // ----- Interface Read
     for (uint32_t i=0; i<_param._nb_port_read; i++)
       {
-	delete in_READ_ENABLE  [i];
-	delete in_READ_ADDRESS [i];
-	delete out_READ_DATA   [i];
+	delete  in_READ_VAL     [i];
+	delete out_READ_ACK     [i];
+	delete  in_READ_ADDRESS [i];
+	delete out_READ_DATA    [i];
       }
 
-    delete  in_READ_ENABLE ;
+    delete  in_READ_VAL    ;
+    delete out_READ_ACK    ;
     delete  in_READ_ADDRESS;
     delete out_READ_DATA   ;
@@ -33,12 +35,14 @@
     for (uint32_t i=0; i<_param._nb_port_write; i++)
       {
-	delete in_WRITE_ENABLE  [i];
-	delete in_WRITE_ADDRESS [i];
-	delete in_WRITE_DATA    [i];
+	delete  in_WRITE_VAL     [i];
+	delete out_WRITE_ACK     [i];
+	delete  in_WRITE_ADDRESS [i];
+	delete  in_WRITE_DATA    [i];
       }
 
-    delete in_WRITE_ENABLE ;
-    delete in_WRITE_ADDRESS;
-    delete in_WRITE_DATA   ;
+    delete  in_WRITE_VAL    ;
+    delete out_WRITE_ACK    ;
+    delete  in_WRITE_ADDRESS;
+    delete  in_WRITE_DATA   ;
 
     // ----- Register
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_genMealy_read.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_genMealy_read.cpp	(revision 3)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_genMealy_read.cpp	(revision 6)
@@ -25,5 +25,5 @@
       {
 	// Have a write?
- 	if ( PORT_READ(in_READ_ENABLE[i]) == 1)
+ 	if ( PORT_READ(in_READ_VAL [i]) == 1)
  	  {
 	    Taddress_t address = PORT_READ(in_READ_ADDRESS[i]);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_transition.cpp	(revision 3)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_transition.cpp	(revision 6)
@@ -24,5 +24,5 @@
       {
 	// Have a write?
- 	if ( PORT_READ(in_WRITE_ENABLE[i]) == true)
+ 	if ( PORT_READ(in_WRITE_VAL[i]) == true)
  	  {
 #ifdef STATISTICS
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_vhdl_body.cpp	(revision 3)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_vhdl_body.cpp	(revision 6)
@@ -23,6 +23,8 @@
     
     for (uint32_t i = 0; i < _param._nb_port_read; i++)
-      vhdl.set_body ("out_READ_DATA_"+toString(i)+" <= reg_DATA (conv_integer(in_READ_ADDRESS_"+toString(i)+")) when in_READ_ENABLE_"+toString(i)+" = '1' else "+std_logic_others(_param._size_word,0)+";");
-
+      {
+	vhdl.set_body ("out_READ_ACK_"+toString(i)+"  <= '1';");
+	vhdl.set_body ("out_READ_DATA_"+toString(i)+" <= reg_DATA (conv_integer(in_READ_ADDRESS_"+toString(i)+")) when in_READ_VAL_"+toString(i)+" = '1' else "+std_logic_others(_param._size_word,0)+";");
+      }
     vhdl.set_body ("");
     vhdl.set_body ("-----------------------------------------------------------------------------");
@@ -37,5 +39,5 @@
     for (uint32_t i = 0; i < _param._nb_port_write; i++)
       {
-      vhdl.set_body ("\t\tif (in_WRITE_ENABLE_"+toString(i)+" = '1') then");
+      vhdl.set_body ("\t\tif (in_WRITE_VAL_"+toString(i)+" = '1') then");
       vhdl.set_body ("\t\t\treg_DATA(conv_integer(in_WRITE_ADDRESS_"+toString(i)+")) <= in_WRITE_DATA_"+toString(i)+";");
       vhdl.set_body ("\t\tend if;");
@@ -44,4 +46,7 @@
     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_ACK_"+toString(i)+"<= '1';");
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_vhdl_port.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_vhdl_port.cpp	(revision 3)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_vhdl_port.cpp	(revision 6)
@@ -16,9 +16,11 @@
   void RegisterFile::vhdl_port (Vhdl & vhdl)
   {
-    vhdl.set_port ("in_CLOCK", IN, "std_logic");
+    vhdl.set_port ("in_CLOCK" , IN, 1);
+    vhdl.set_port ("in_NRESET", IN, 1);
 
     for (uint32_t i = 0; i < _param._nb_port_read; i ++)
       {
-	vhdl.set_port (" in_READ_ENABLE_"+toString(i)+" ",IN ,std_logic(1)                    );
+	vhdl.set_port (" in_READ_VAL_"+toString(i)+"    ",IN ,std_logic(1)                    );
+	vhdl.set_port ("out_READ_ACK_"+toString(i)+"    ",OUT,std_logic(1)                    );
 	vhdl.set_port (" in_READ_ADDRESS_"+toString(i)+"",IN ,std_logic(static_cast<uint32_t>(log2(_param._nb_word))));
 	vhdl.set_port ("out_READ_DATA_"+toString(i)+"   ",OUT,std_logic(_param._size_word    ));
@@ -27,5 +29,6 @@
     for (uint32_t i = 0; i < _param._nb_port_write; i ++)
       {
-	vhdl.set_port (" in_WRITE_ENABLE_"+toString(i)+" ",IN ,std_logic(1)                    );
+	vhdl.set_port (" in_WRITE_VAL_"+toString(i)+"    ",IN ,std_logic(1)                    );
+	vhdl.set_port ("out_WRITE_ACK_"+toString(i)+"    ",OUT,std_logic(1)                    );
 	vhdl.set_port (" in_WRITE_ADDRESS_"+toString(i)+"",IN ,std_logic(static_cast<uint32_t>(log2(_param._nb_word))));
 	vhdl.set_port (" in_WRITE_DATA_"+toString(i)+"   ",IN ,std_logic(_param._size_word    ));
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_vhdl_testbench_port.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_vhdl_testbench_port.cpp	(revision 3)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_vhdl_testbench_port.cpp	(revision 6)
@@ -16,7 +16,10 @@
   void RegisterFile::vhdl_testbench_port (Vhdl_Testbench & vhdl_testbench)
   {
+    vhdl_testbench.set_port (" in_NRESET",IN ,1);
+
     for (uint32_t i = 0; i < _param._nb_port_read; i ++)
       {
-	vhdl_testbench.set_port (" in_READ_ENABLE_"+toString(i)+" ",IN ,1);
+	vhdl_testbench.set_port (" in_READ_VAL_"+toString(i)+"    ",IN ,1);
+	vhdl_testbench.set_port ("out_READ_ACK_"+toString(i)+"    ",OUT,1);
 	vhdl_testbench.set_port (" in_READ_ADDRESS_"+toString(i)+"",IN ,static_cast<uint32_t>(log2(_param._nb_word)));
 	vhdl_testbench.set_port ("out_READ_DATA_"+toString(i)+"   ",OUT,_param._size_word);
@@ -25,5 +28,6 @@
     for (uint32_t i = 0; i < _param._nb_port_write; i ++)
       {
-	vhdl_testbench.set_port (" in_WRITE_ENABLE_"+toString(i)+" ",IN ,1);
+	vhdl_testbench.set_port (" in_WRITE_VAL_"+toString(i)+"    ",IN ,1);
+	vhdl_testbench.set_port ("out_WRITE_ACK_"+toString(i)+"    ",OUT,1);
 	vhdl_testbench.set_port (" in_WRITE_ADDRESS_"+toString(i)+"",IN ,static_cast<uint32_t>(log2(_param._nb_word)));
 	vhdl_testbench.set_port (" in_WRITE_DATA_"+toString(i)+"   ",IN ,_param._size_word    );
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_vhdl_testbench_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_vhdl_testbench_transition.cpp	(revision 3)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_vhdl_testbench_transition.cpp	(revision 6)
@@ -19,19 +19,19 @@
     sc_cycle(0);
 #endif
+    vhdl_testbench.add_input (PORT_READ( in_NRESET));
 
     for (uint32_t i = 0; i < _param._nb_port_read ; i ++)
       {
-	vhdl_testbench.add_input (PORT_READ( in_READ_ENABLE  [i]));
+	vhdl_testbench.add_input (PORT_READ( in_READ_VAL     [i]));
+	vhdl_testbench.add_output(PORT_READ(out_READ_ACK     [i]));
 	vhdl_testbench.add_input (PORT_READ( in_READ_ADDRESS [i]));
+	vhdl_testbench.add_output(PORT_READ(out_READ_DATA    [i]));
       }
     for (uint32_t i = 0; i < _param._nb_port_write; i ++)
       {
-	vhdl_testbench.add_input (PORT_READ( in_WRITE_ENABLE [i]));
+	vhdl_testbench.add_input (PORT_READ( in_WRITE_VAL    [i]));
+	vhdl_testbench.add_output(PORT_READ(out_WRITE_ACK    [i]));
 	vhdl_testbench.add_input (PORT_READ( in_WRITE_ADDRESS[i]));
 	vhdl_testbench.add_input (PORT_READ( in_WRITE_DATA   [i]));
-      }
-    for (uint32_t i = 0; i < _param._nb_port_read ; i ++)
-      {
-	vhdl_testbench.add_output(PORT_READ(out_READ_DATA    [i]));
       }
 
