Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/config_min.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/config_min.cfg	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/config_min.cfg	(revision 101)
@@ -3,2 +3,4 @@
 1	1	*2	#_size_data 
 0  	1  	+1	#_nb_port_slot
+0       0       +1      #_have_port_write
+0       0       +1      #_have_port_read
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/config_size_queue_log2.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/config_size_queue_log2.cfg	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/config_size_queue_log2.cfg	(revision 101)
@@ -3,2 +3,4 @@
 32	32	*2	#_size_data 
 0  	0  	*2	#_nb_port_slot
+1       1       +1      #_have_port_write
+1       1       +1      #_have_port_read
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/config_size_queue_no_log2.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/config_size_queue_no_log2.cfg	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/config_size_queue_no_log2.cfg	(revision 101)
@@ -3,2 +3,4 @@
 32	32	*2	#_size_data 
 0  	0  	*2	#_nb_port_slot
+1       1       +1      #_have_port_write
+1       1       +1      #_have_port_read
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/config_slot_out_size_queue_log2.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/config_slot_out_size_queue_log2.cfg	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/config_slot_out_size_queue_log2.cfg	(revision 101)
@@ -3,2 +3,4 @@
 32	32	*2	#_size_data 
 1  	8  	*2	#_nb_port_slot
+1       1       +1      #_have_port_write
+1       1       +1      #_have_port_read
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/config_slot_out_size_queue_no_log2.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/config_slot_out_size_queue_no_log2.cfg	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/config_slot_out_size_queue_no_log2.cfg	(revision 101)
@@ -3,2 +3,4 @@
 32	32	*2	#_size_data 
 1  	8  	*2	#_nb_port_slot
+1       1       +1      #_have_port_write
+1       1       +1      #_have_port_read
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/src/main.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/src/main.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/src/main.cpp	(revision 101)
@@ -8,5 +8,5 @@
 #include "Behavioural/Generic/Queue/SelfTest/include/test.h"
 
-#define NB_PARAMS 3
+#define NB_PARAMS 5
 
 void usage (int argc, char * argv[])
@@ -14,7 +14,9 @@
   cerr << "<Usage> " << argv[0] << " name_instance list_params" << endl
        << "list_params is :" << endl
-       << " - size_queue   (uint32_t)" << endl
-       << " - size_data    (uint32_t)" << endl
-       << " - nb_port_slot (uint32_t)" << endl
+       << " - size_queue      (uint32_t)" << endl
+       << " - size_data       (uint32_t)" << endl
+       << " - nb_port_slot    (uint32_t)" << endl
+       << " - have_port_write (bool    )" << endl
+       << " - have_port_read  (bool    )" << endl
        << "" << endl;
 
@@ -37,9 +39,10 @@
   uint32_t       x = 1;
   
-  const string   name         =      argv[x++];
-  const uint32_t size_queue   = atoi(argv[x++]);
-  const uint32_t size_data    = atoi(argv[x++]);
-  const uint32_t nb_port_slot = atoi(argv[x++]);
-
+  const string   name            =      argv[x++];
+  const uint32_t size_queue      = fromString<uint32_t>(argv[x++]);
+  const uint32_t size_data       = fromString<uint32_t>(argv[x++]);
+  const uint32_t nb_port_slot    = fromString<uint32_t>(argv[x++]);
+  const bool     have_port_write = fromString<bool>(argv[x++]);
+  const bool     have_port_read  = fromString<bool>(argv[x++]);
   try 
     {
@@ -47,5 +50,7 @@
 	(size_queue,
 	 size_data ,
-         nb_port_slot
+         nb_port_slot,
+         have_port_write,
+         have_port_read 
         );
       
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/src/test.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/src/test.cpp	(revision 101)
@@ -58,4 +58,6 @@
   ALLOC1_SC_SIGNAL(out_SLOT_VAL   ,"out_SLOT_VAL"   ,Tcontrol_t,_param->_nb_port_slot);
   ALLOC1_SC_SIGNAL(out_SLOT_DATA  ,"out_SLOT_DATA"  ,Tdata_t   ,_param->_nb_port_slot);
+  ALLOC0_SC_SIGNAL(out_PTR_WRITE  ,"out_PTR_WRITE"  ,Tptr_t    );
+  ALLOC0_SC_SIGNAL(out_PTR_READ   ,"out_PTR_READ"   ,Tptr_t    );
   
   /********************************************************
@@ -76,4 +78,8 @@
   INSTANCE1_SC_SIGNAL(_Queue,out_SLOT_VAL   ,_param->_nb_port_slot);
   INSTANCE1_SC_SIGNAL(_Queue,out_SLOT_DATA  ,_param->_nb_port_slot);
+  if (_param->_have_port_ptr_write)
+  INSTANCE0_SC_SIGNAL(_Queue,out_PTR_WRITE  );
+  if (_param->_have_port_ptr_read )
+  INSTANCE0_SC_SIGNAL(_Queue,out_PTR_READ   );
 
   cout << "<" << name << "> Start Simulation ............" << endl;
@@ -168,5 +174,6 @@
   DELETE1_SC_SIGNAL(out_SLOT_VAL   ,_param->_nb_port_slot);
   DELETE1_SC_SIGNAL(out_SLOT_DATA  ,_param->_nb_port_slot);
-
+  DELETE0_SC_SIGNAL(out_PTR_WRITE  );
+  DELETE0_SC_SIGNAL(out_PTR_READ   );
 #endif
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/include/Parameters.h	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/include/Parameters.h	(revision 101)
@@ -22,12 +22,19 @@
   {
     //-----[ fields ]------------------------------------------------------------
-  public : const uint32_t _size_queue  ;
-  public : const uint32_t _size_data   ;
-  public : const uint32_t _nb_port_slot;
+  public : const uint32_t _size_queue         ;
+  public : const uint32_t _size_data          ;
+  public : const uint32_t _nb_port_slot       ;
+  public : const bool     _have_port_ptr_write;
+  public : const bool     _have_port_ptr_read ;
+
+  public : const uint32_t _size_ptr           ;
+  public : const bool     _have_port_ptr      ;
 
     //-----[ methods ]-----------------------------------------------------------
-  public : Parameters  (uint32_t size_queue,
-			uint32_t size_data ,
-                        uint32_t nb_port_slot);
+  public : Parameters  (uint32_t size_queue         ,
+			uint32_t size_data          ,
+                        uint32_t nb_port_slot       ,
+                        bool     have_port_ptr_write,
+                        bool     have_port_ptr_read );
 
 //   public : Parameters  (Parameters & param) ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/include/Queue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/include/Queue.h	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/include/Queue.h	(revision 101)
@@ -78,4 +78,8 @@
   public    : SC_OUT(Tdata_t   )           ** out_SLOT_DATA;
 
+    // ~~~~~[ Interface "ptr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_OUT(Tptr_t    )            * out_PTR_WRITE;
+  public    : SC_OUT(Tptr_t    )            * out_PTR_READ ;
+
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
   protected : morpheo::behavioural::generic::queue_control::Queue_Control * _queue_control;
@@ -87,5 +91,4 @@
   protected : Tcontrol_t                      internal_INSERT_ACK;
   protected : Tcontrol_t                      internal_RETIRE_VAL;
-
 #endif
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Parameters.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Parameters.cpp	(revision 101)
@@ -7,5 +7,5 @@
 
 #include "Behavioural/Generic/Queue/include/Parameters.h"
-
+#include "Common/include/Log2.h"
 namespace morpheo {
 namespace behavioural {
@@ -16,10 +16,16 @@
 #undef  FUNCTION
 #define FUNCTION "Queue::Parameters"
-  Parameters::Parameters (uint32_t size_queue,
-			  uint32_t size_data ,
-                          uint32_t nb_port_slot):
-    _size_queue   (size_queue),
-    _size_data    (size_data ),
-    _nb_port_slot (nb_port_slot)
+  Parameters::Parameters (uint32_t size_queue         ,
+                          uint32_t size_data          ,
+                          uint32_t nb_port_slot       ,
+                          bool     have_port_ptr_write,
+                          bool     have_port_ptr_read ):
+    _size_queue          (size_queue),
+    _size_data           (size_data ),
+    _nb_port_slot        (nb_port_slot),
+    _have_port_ptr_write (have_port_ptr_write and (log2(size_queue)>0)),
+    _have_port_ptr_read  (have_port_ptr_read  and (log2(size_queue)>0)),
+    _size_ptr            (log2(size_queue)),
+    _have_port_ptr       (have_port_ptr_write or have_port_ptr_read)
   {
     log_printf(FUNC,Queue,FUNCTION,"Begin");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_allocation.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_allocation.cpp	(revision 101)
@@ -72,4 +72,15 @@
       ALLOC1_SIGNAL_OUT(out_SLOT_DATA ,"data",Tdata_t,_param->_size_data);
     }
+
+    // ~~~~~[ Interface "ptr" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    if (_param->_have_port_ptr)
+    {
+      ALLOC0_INTERFACE("ptr", OUT, EAST, _("Internal pointer."));
+      
+      if (_param->_have_port_ptr_write)
+      ALLOC0_SIGNAL_OUT(out_PTR_WRITE ,"write",Tptr_t,_param->_size_ptr);
+      if (_param->_have_port_ptr_read )
+      ALLOC0_SIGNAL_OUT(out_PTR_READ  ,"read" ,Tptr_t,_param->_size_ptr);
+    }
      
     if (usage_is_set(_usage,USE_SYSTEMC))
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_deallocation.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_deallocation.cpp	(revision 101)
@@ -36,4 +36,9 @@
         DELETE1_SIGNAL(out_SLOT_VAL    ,_param->_nb_port_slot,1);
         DELETE1_SIGNAL(out_SLOT_DATA   ,_param->_nb_port_slot,_param->_size_data);
+
+        if (_param->_have_port_ptr_write)
+        DELETE0_SIGNAL(out_PTR_WRITE   ,_param->_size_ptr);
+        if (_param->_have_port_ptr_read )
+        DELETE0_SIGNAL(out_PTR_READ    ,_param->_size_ptr);
 	
         // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_genMoore.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_genMoore.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_genMoore.cpp	(revision 101)
@@ -20,5 +20,7 @@
     log_printf(FUNC,Queue,FUNCTION,"Begin");
 
+    //---------------------------------------------
     // Output
+    //---------------------------------------------
     internal_INSERT_ACK = not _queue_control->full();
     internal_RETIRE_VAL = not _queue_control->empty();
@@ -28,5 +30,7 @@
     PORT_WRITE(out_RETIRE_DATA,_queue_data[(*_queue_control)[0]]);
 
+    //---------------------------------------------
     // Slot
+    //---------------------------------------------
     // Note : Slot 0 is the same slot as retire interface.
     uint32_t nb_elt = _queue_control->nb_elt();
@@ -37,4 +41,12 @@
         PORT_WRITE(out_SLOT_DATA [i],_queue_data[(*_queue_control)[i]]);
       }
+
+    //---------------------------------------------
+    // Pointer
+    //---------------------------------------------
+    if (_param->_have_port_ptr_write)
+    PORT_WRITE(out_PTR_WRITE, _queue_control->ptr_push());
+    if (_param->_have_port_ptr_read )
+    PORT_WRITE(out_PTR_READ , _queue_control->ptr_pop ());
 
     log_printf(FUNC,Queue,FUNCTION,"End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_vhdl_body.cpp	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/src/Queue_vhdl_body.cpp	(revision 101)
@@ -62,4 +62,17 @@
           else
             vhdl->set_body   (0,"out_SLOT_"+toString(i)+"_DATA       <= reg_DATA(conv_integer(0));");
+      }
+
+    if (_param->_have_port_ptr)
+      {
+    vhdl->set_body   (0,"");
+    vhdl->set_comment(0,"---------------------------------------------------------------------------");
+    vhdl->set_comment(0," Slot");
+    vhdl->set_comment(0,"---------------------------------------------------------------------------");
+    vhdl->set_body   (0,"");
+    if (_param->_have_port_ptr_write)
+    vhdl->set_body   (0,"out_PTR_WRITE         <= signal_PTR_WRITE;");
+    if (_param->_have_port_ptr_read)
+    vhdl->set_body   (0,"out_PTR_READ          <= signal_PTR_READ;");
       }
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue_Control/include/Queue_Control.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue_Control/include/Queue_Control.h	(revision 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue_Control/include/Queue_Control.h	(revision 101)
@@ -35,9 +35,13 @@
   public  : void     clear    (void);
 
+  public  : uint32_t ptr_pop  (uint32_t index=0);
+  public  : uint32_t ptr_push (void);
+
+
   public  : uint32_t push     (void);
   public  : uint32_t push_ovf (void);
-  public  : void     pop      (uint32_t);
+  public  : void     pop      (uint32_t index);
   public  : void     pop      (void);
-  public  : void     pop_ovf  (uint32_t);
+  public  : void     pop_ovf  (uint32_t index);
   public  : void     pop_ovf  (void);
     
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 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Parameters.h	(revision 101)
@@ -21,17 +21,20 @@
   class Parameters : public morpheo::behavioural::Parameters
   {
-  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    ;
-  public : const uint32_t _size_address ;
-  public : const bool     _have_port_address;
+  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    ;
+  public : const uint32_t    _size_address ;
+  public : const bool        _have_port_address;
+  public : const bool        _have_init_value;
+  public : const std::string _init_value;
 
-  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    );
+  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    ,
+                       std::string init_value="");
 //   public : Parameters (Parameters & param) ;
   public : ~Parameters () ;
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 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Parameters.cpp	(revision 101)
@@ -14,9 +14,10 @@
 namespace registerfile_monolithic    {
 
-  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     
+  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    ,
+                          std::string init_value
 			  ) :
     _nb_port_read      (nb_port_read ),
@@ -26,6 +27,7 @@
     _size_word         (size_word    ),
     _size_address      (static_cast<uint32_t>(log2(_nb_word))),
-    _have_port_address (_size_address != 0)
-
+    _have_port_address (_size_address != 0),
+    _have_init_value   (init_value != ""),
+    _init_value        (init_value)
   { 
     test();
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 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Parameters_msg_error.cpp	(revision 101)
@@ -33,4 +33,6 @@
       test.error("you need a write port");
 
+    // Need test init_value
+
     return test;
   };
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 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_transition.cpp	(revision 101)
@@ -18,60 +18,59 @@
     log_printf(FUNC,RegisterFile,"transition","Begin");
 
-    for (uint32_t i=0; i<_param->_nb_port_write; i++)
+    if (_param->_have_init_value and (PORT_READ(in_NRESET) == 0))
       {
-	// Have a write?
- 	if ( PORT_READ(in_WRITE_VAL[i]) == true)
- 	  {
+        for (uint32_t i=0; i<_param->_nb_word; ++i)
+          reg_DATA[i] = fromString<Tdata_t>(_param->_init_value);
+      }
+    else
+      {
+        for (uint32_t i=0; i<_param->_nb_port_write; i++)
+          {
+            // Have a write?
+            if ( PORT_READ(in_WRITE_VAL[i]) == true)
+              {
 #ifdef STATISTICS
-	    if (usage_is_set(_usage,USE_STATISTICS))
-              (*_stat_nb_write) ++;
-#endif    
-
-	    Taddress_t address;
-	    if (_param->_have_port_address)
-	      address = PORT_READ(in_WRITE_ADDRESS[i]);
-	    else
-	      address = 0;
-
-	    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
-	    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)
-	  {
-	    if (PORT_READ(in_READ_WRITE_RW [i]) == RW_WRITE)
-	      {
-#ifdef STATISTICS
-		if (usage_is_set(_usage,USE_STATISTICS))
+                if (usage_is_set(_usage,USE_STATISTICS))
                   (*_stat_nb_write) ++;
 #endif    
-		
-		Taddress_t address;
-		if (_param->_have_port_address)
-		  address = PORT_READ(in_READ_WRITE_ADDRESS[i]);
-		else
-		  address = 0;
-		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));
-		
-		// Write in registerFile
-		reg_DATA[address] = data;
-	      }
+                
+                Taddress_t address = (_param->_have_port_address)?PORT_READ(in_WRITE_ADDRESS[i]):0;
+                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
+                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)
+              {
+                if (PORT_READ(in_READ_WRITE_RW [i]) == RW_WRITE)
+                  {
 #ifdef STATISTICS
-	    else
-	      {
-		if (usage_is_set(_usage,USE_STATISTICS))
-                  (*_stat_nb_read) ++;
-	      }
+                    if (usage_is_set(_usage,USE_STATISTICS))
+                      (*_stat_nb_write) ++;
 #endif    
-	  }
+                    
+                    Taddress_t address = (_param->_have_port_address)?PORT_READ(in_READ_WRITE_ADDRESS[i]):0;
+                    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));
+                    
+                    // Write in registerFile
+                    reg_DATA[address] = data;
+                  }
+#ifdef STATISTICS
+                else
+                  {
+                    if (usage_is_set(_usage,USE_STATISTICS))
+                      (*_stat_nb_read) ++;
+                  }
+#endif    
+              }
+          }
       }
 
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 100)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_vhdl_body.cpp	(revision 101)
@@ -65,4 +65,16 @@
     vhdl->set_body   (0,"begin  -- process RegisterFile_write");
     vhdl->set_body   (1,"if in_CLOCK'event and in_CLOCK = '1' then");
+
+    if (_param->_have_init_value)
+      {
+        vhdl->set_body   (2,"if in_NRESET = '0' then");
+        
+        std::string init_value = ((_param->_size_word>1)?"\"":"'")+_param->_init_value+((_param->_size_word>1)?"\"":"'");
+        
+        for (uint32_t i=0; i<_param->_nb_word; ++i)
+          vhdl->set_body   (3,"reg_DATA("+toString(i)+") <= "+init_value+";");
+
+        vhdl->set_body   (2,"else");
+      }
     
     for (uint32_t i = 0; i < _param->_nb_port_write; i++)
@@ -92,4 +104,8 @@
 
     vhdl->set_body   (1,"end if;");
+
+    if (_param->_have_init_value)
+      vhdl->set_body   (1,"end if;");
+
     vhdl->set_body   (0,"end process RegisterFile_write;");
   };
