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 98)
+++ 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 98)
+++ 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 98)
+++ 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 98)
+++ 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 98)
+++ 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;");
   };
