Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/config_size.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/config_size.cfg	(revision 62)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/config_size.cfg	(revision 62)
@@ -0,0 +1,6 @@
+RegisterFile_Monolithic
+4	4 	*2	# nb_port_read
+2	2	*2	# nb_port_write
+0	0	*2	# nb_port_read_write
+1   	128	*2	# nb_word
+32	32	*2	# size_word
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 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/src/test.cpp	(revision 62)
@@ -79,4 +79,5 @@
       (*(registerfile-> in_READ_VAL      [i]))        (READ_VAL      [i]);
       (*(registerfile->out_READ_ACK      [i]))        (READ_ACK      [i]);
+      if (_param->_have_port_address)
       (*(registerfile-> in_READ_ADDRESS  [i]))        (READ_ADDRESS  [i]);
       (*(registerfile->out_READ_DATA     [i]))        (READ_DATA     [i]);
@@ -86,4 +87,5 @@
       (*(registerfile-> in_WRITE_VAL     [i]))        (WRITE_VAL     [i]);
       (*(registerfile->out_WRITE_ACK     [i]))        (WRITE_ACK     [i]);
+      if (_param->_have_port_address)
       (*(registerfile-> in_WRITE_ADDRESS [i]))        (WRITE_ADDRESS [i]);
       (*(registerfile-> in_WRITE_DATA    [i]))        (WRITE_DATA    [i]);
@@ -94,4 +96,5 @@
       (*(registerfile->out_READ_WRITE_ACK     [i])) (READ_WRITE_ACK      [i]);
       (*(registerfile-> in_READ_WRITE_RW      [i])) (READ_WRITE_RW       [i]);
+      if (_param->_have_port_address)
       (*(registerfile-> in_READ_WRITE_ADDRESS [i])) (READ_WRITE_ADDRESS  [i]);
       (*(registerfile-> in_READ_WRITE_WDATA   [i])) (READ_WRITE_WDATA    [i]);
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 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Parameters.h	(revision 62)
@@ -27,4 +27,5 @@
   public : const uint32_t _size_word    ;
   public : const uint32_t _size_address ;
+  public : const bool     _have_port_address;
 
   public : Parameters (uint32_t nb_port_read ,
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 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Parameters.cpp	(revision 62)
@@ -25,5 +25,7 @@
     _nb_word           (nb_word      ),
     _size_word         (size_word    ),
-    _size_address      (static_cast<uint32_t>(log2(_nb_word)))
+    _size_address      (static_cast<uint32_t>(log2(_nb_word))),
+    _have_port_address (_size_address != 0)
+
   { 
     test();
@@ -36,5 +38,6 @@
     _nb_word           (param._nb_word      ),
     _size_word         (param._size_word    ),
-    _size_address      (param._size_address )
+    _size_address      (param._size_address ),
+    _have_port_address (param._have_port_address)
   {
     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 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/Parameters_msg_error.cpp	(revision 62)
@@ -50,9 +50,9 @@
         msg += "    * nb_port_read_write              : " + toString(_nb_port_read_write) + "\n";
       }
-    if (_nb_word < 2)
-      {
-        msg += "  - nb_word must be >= 2\n";
-        msg += "    * nb_word                         : " + toString(_nb_word)    + "\n";
-      }
+//     if (_nb_word < 2)
+//       {
+//         msg += "  - nb_word must be >= 2\n";
+//         msg += "    * nb_word                         : " + toString(_nb_word)    + "\n";
+//       }
 
     return msg;
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 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic.cpp	(revision 62)
@@ -58,10 +58,16 @@
 	sensitive_neg << *(in_CLOCK);
 	for (uint32_t i=0; i<_param->_nb_port_read; i++)
-	  sensitive << *(in_READ_VAL     [i])
-		    << *(in_READ_ADDRESS [i]);
+	  {
+	    sensitive << *(in_READ_VAL     [i]);
+	    if (_param->_have_port_address)
+	      sensitive << *(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]);
+	  {
+	    sensitive << *(in_READ_WRITE_VAL     [i])
+		      << *(in_READ_WRITE_RW      [i]);
+	    if (_param->_have_port_address)
+	      sensitive << *(in_READ_WRITE_ADDRESS [i]);
+	  }
 	
 #  ifdef SYSTEMCASS_SPECIFIC
@@ -70,5 +76,6 @@
 	  {
 	    (*(out_READ_DATA  [i])) (*( in_READ_VAL     [i]));
-	    (*(out_READ_DATA  [i])) (*( in_READ_ADDRESS [i]));
+	    if (_param->_have_port_address)
+	      (*(out_READ_DATA  [i])) (*( in_READ_ADDRESS [i]));
 	  }
 	for (uint32_t i=0; i<_param->_nb_port_read_write; i++)
@@ -76,5 +83,6 @@
 	    (*(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]));
+	    if (_param->_have_port_address)
+	      (*(out_READ_WRITE_RDATA [i])) (*( in_READ_WRITE_ADDRESS [i]));
 	  }
 #  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 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_allocation.cpp	(revision 62)
@@ -44,4 +44,5 @@
      in_READ_VAL         = new SC_IN (Tcontrol_t) * [_param->_nb_port_read];
     out_READ_ACK         = new SC_OUT(Tcontrol_t) * [_param->_nb_port_read];
+    if (_param->_have_port_address)
      in_READ_ADDRESS     = new SC_IN (Taddress_t) * [_param->_nb_port_read];
     out_READ_DATA        = new SC_OUT(Tdata_t   ) * [_param->_nb_port_read];
@@ -59,4 +60,5 @@
 	 in_READ_VAL     [i]  = interface->set_signal_valack_in        ("val"    , VAL);
 	out_READ_ACK     [i]  = interface->set_signal_valack_out       ("ack"    , ACK);
+	if (_param->_have_port_address)
 	 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);
@@ -67,4 +69,5 @@
      in_WRITE_VAL        = new SC_IN (Tcontrol_t) * [_param->_nb_port_write];
     out_WRITE_ACK        = new SC_OUT(Tcontrol_t) * [_param->_nb_port_write];
+    if (_param->_have_port_address)
      in_WRITE_ADDRESS    = new SC_IN (Taddress_t) * [_param->_nb_port_write];
      in_WRITE_DATA       = new SC_IN (Tdata_t   ) * [_param->_nb_port_write];
@@ -82,4 +85,5 @@
 	 in_WRITE_VAL     [i]  = interface->set_signal_valack_in        ("val"    , VAL);
 	out_WRITE_ACK     [i]  = interface->set_signal_valack_out       ("ack"    , ACK);
+	if (_param->_have_port_address)
 	 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);
@@ -91,4 +95,5 @@
     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];
+    if (_param->_have_port_address)
      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];
@@ -108,4 +113,5 @@
 	out_READ_WRITE_ACK     [i]  = interface->set_signal_valack_out       ("ack"    , ACK);
 	 in_READ_WRITE_RW      [i]  = interface->set_signal_valack_in        ("rw"     , VAL);
+	if (_param->_have_port_address)
 	 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);
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 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_deallocation.cpp	(revision 62)
@@ -25,4 +25,5 @@
 	delete []  in_READ_VAL    ;
 	delete [] out_READ_ACK    ;
+	if (_param->_have_port_address)
 	delete []  in_READ_ADDRESS;
 	delete [] out_READ_DATA   ;
@@ -31,4 +32,5 @@
 	delete []  in_WRITE_VAL    ;
 	delete [] out_WRITE_ACK    ;
+	if (_param->_have_port_address)
 	delete []  in_WRITE_ADDRESS;
 	delete []  in_WRITE_DATA   ;
@@ -38,4 +40,5 @@
 	delete [] out_READ_WRITE_ACK    ;
 	delete []  in_READ_WRITE_RW     ;
+	if (_param->_have_port_address)
 	delete []  in_READ_WRITE_ADDRESS;
 	delete []  in_READ_WRITE_WDATA  ;
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 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_genMealy_read.cpp	(revision 62)
@@ -28,5 +28,9 @@
  	if ( PORT_READ(in_READ_VAL [i]) == 1)
  	  {
-	    Taddress_t address = PORT_READ(in_READ_ADDRESS[i]);
+	    Taddress_t address;
+	    if (_param->_have_port_address)
+	      address = PORT_READ(in_READ_ADDRESS[i]);
+	    else
+	      address = 0;
 	    Tdata_t    data    = REGISTER_READ(reg_DATA[address]);
 
@@ -55,5 +59,9 @@
 	     )
  	  {
-	    Taddress_t address = PORT_READ(in_READ_WRITE_ADDRESS[i]);
+	    Taddress_t address;
+	    if (_param->_have_port_address)
+	      address = PORT_READ(in_READ_WRITE_ADDRESS[i]);
+	    else
+	      address = 0;
 	    
 	    data = REGISTER_READ(reg_DATA[address]);
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 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_transition.cpp	(revision 62)
@@ -30,5 +30,10 @@
 #endif    
 
-	    Taddress_t address = PORT_READ(in_WRITE_ADDRESS[i]);
+	    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]);
 	    
@@ -49,5 +54,9 @@
 #endif    
 
-	    Taddress_t address = PORT_READ(in_READ_WRITE_ADDRESS[i]);
+	    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]);
 	    
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 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/src/RegisterFile_Monolithic_vhdl_body.cpp	(revision 62)
@@ -37,8 +37,22 @@
     
     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)+";");
+      {
+	string str_address;
+	if (_param->_have_port_address)
+	  str_address = "conv_integer(in_READ_"+toString(i)+"_ADDRESS)";
+	else
+	  str_address = "0";
 
+	vhdl->set_body ("out_READ_"+toString(i)+"_DATA <= reg_DATA ("+str_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)+";");
+      {
+	string str_address;
+	if (_param->_have_port_address)
+	  str_address = "conv_integer(in_READ_WRITE_"+toString(i)+"_ADDRESS)";
+	else
+	  str_address = "0";
+	vhdl->set_body ("out_READ_WRITE_"+toString(i)+"_RDATA <= reg_DATA ("+str_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 ("");
@@ -54,13 +68,25 @@
     for (uint32_t i = 0; i < _param->_nb_port_write; i++)
       {
-      vhdl->set_body ("\t\tif (in_WRITE_"+toString(i)+"_VAL = '1') then");
-      vhdl->set_body ("\t\t\treg_DATA(conv_integer(in_WRITE_"+toString(i)+"_ADDRESS)) <= in_WRITE_"+toString(i)+"_DATA;");
-      vhdl->set_body ("\t\tend if;");
+	string str_address;
+	if (_param->_have_port_address)
+	  str_address = "conv_integer(in_WRITE_"+toString(i)+"_ADDRESS)";
+	else
+	  str_address = "0";
+
+	vhdl->set_body ("\t\tif (in_WRITE_"+toString(i)+"_VAL = '1') then");
+	vhdl->set_body ("\t\t\treg_DATA("+str_address+") <= in_WRITE_"+toString(i)+"_DATA;");
+	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;");
+	string str_address;
+	if (_param->_have_port_address)
+	  str_address = "conv_integer(in_READ_WRITE_"+toString(i)+"_ADDRESS)";
+	else
+	  str_address = "0";
+	
+	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("+str_address+") <= in_READ_WRITE_"+toString(i)+"_WDATA;");
+	vhdl->set_body ("\t\tend if;");
       }
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest/config-size.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest/config-size.cfg	(revision 62)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest/config-size.cfg	(revision 62)
@@ -0,0 +1,9 @@
+RegisterFile_Multi_Banked
+11	11	*2	# nb_port_read
+5	5	*2	# nb_port_write
+1  	32    	*2	# nb_word
+32	32	*2	# size_word
+1	1	*2	# nb_bank
+3	3 	*2	# nb_port_read_by_bank
+2	2	*2	# nb_port_write_by_bank
+0	1	+1	# crossbar
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest/src/test.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest/src/test.cpp	(revision 62)
@@ -80,4 +80,5 @@
       (*(_RegisterFile_Multi_Banked-> in_READ_VAL      [i]))        (READ_VAL      [i]);
       (*(_RegisterFile_Multi_Banked->out_READ_ACK      [i]))        (READ_ACK      [i]);
+      if (_param->_have_port_address==true)
       (*(_RegisterFile_Multi_Banked-> in_READ_ADDRESS  [i]))        (READ_ADDRESS  [i]);
       (*(_RegisterFile_Multi_Banked->out_READ_DATA     [i]))        (READ_DATA     [i]);
@@ -88,4 +89,5 @@
       (*(_RegisterFile_Multi_Banked-> in_WRITE_VAL     [i]))        (WRITE_VAL     [i]);
       (*(_RegisterFile_Multi_Banked->out_WRITE_ACK     [i]))        (WRITE_ACK     [i]);
+      if (_param->_have_port_address==true)
       (*(_RegisterFile_Multi_Banked-> in_WRITE_ADDRESS [i]))        (WRITE_ADDRESS [i]);
       (*(_RegisterFile_Multi_Banked-> in_WRITE_DATA    [i]))        (WRITE_DATA    [i]);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Parameters.h	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Parameters.h	(revision 62)
@@ -71,4 +71,7 @@
   public : const uint32_t    _nb_word_by_bank      ;
 
+  public : const bool        _have_port_address     ;
+  public : const bool        _have_bank_port_address;
+
     // A lot of table to the partial crossbar
   public :       uint32_t  * _link_port_read_to_bank_read  ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/Parameters.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/Parameters.cpp	(revision 62)
@@ -42,5 +42,7 @@
     _num_reg_shift         (0),
     _num_reg_mask          (gen_mask<Taddress_t>(_size_address_by_bank)),
-    _nb_word_by_bank       (_nb_word / _nb_bank)
+    _nb_word_by_bank       (_nb_word / _nb_bank),
+    _have_port_address     (_size_address         != 0),
+    _have_bank_port_address(_size_address_by_bank != 0)
   {
     log_printf(FUNC,RegisterFile_Multi_Banked,"Parameters","Begin");
@@ -48,5 +50,5 @@
     if (_crossbar == PARTIAL_CROSSBAR)
       {
-	log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","Case : _crossbar == PARTIAL_CROSSBAR");
+	log_printf(TRACE,RegisterFile_Multi_Banked,"Parameters","Case : _crossbar == PARTIAL_CROSSBAR");
 
 	// All port_src is connected with one port_dest on each bank
@@ -68,15 +70,13 @@
 
 
-	log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_read_to_bank_read");
+	log_printf(TRACE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_read_to_bank_read");
 	for (uint32_t i=0; i<_nb_port_read         ;i++)
 	  {
-	  log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Read  in  [%d] to out    [%d]",i,_link_port_read_to_bank_read          [i]);
-	  printf("   * Read  in  [%d] to out    [%d]\n",i,_link_port_read_to_bank_read          [i]);
+	    log_printf(TRACE,RegisterFile_Multi_Banked,"Parameters","   * Read  in  [%d] to out    [%d]",i,_link_port_read_to_bank_read          [i]);
 	  }
-	log_printf(NONE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_write_to_bank_write");
+	log_printf(TRACE,RegisterFile_Multi_Banked,"Parameters"," * _link_port_write_to_bank_write");
 	for (uint32_t i=0; i<_nb_port_write        ;i++)
 	  {
-	    log_printf(NONE,RegisterFile_Multi_Banked,"Parameters","   * Write in  [%d] to out    [%d]",i,_link_port_write_to_bank_write          [i]);
-	    printf("   * Write in  [%d] to out    [%d]\n",i,_link_port_write_to_bank_write          [i]);
+	    log_printf(TRACE,RegisterFile_Multi_Banked,"Parameters","   * Write in  [%d] to out    [%d]",i,_link_port_write_to_bank_write          [i]);
 	  }
       }
@@ -102,5 +102,7 @@
     _num_reg_shift         (param._num_reg_shift        ),
     _num_reg_mask          (param._num_reg_mask         ),
-    _nb_word_by_bank       (param._nb_word_by_bank      )
+    _nb_word_by_bank       (param._nb_word_by_bank      ),
+    _have_port_address     (param._have_port_address     ),
+    _have_bank_port_address(param._have_bank_port_address)
   {
     log_printf(FUNC,RegisterFile_Multi_Banked,"Parameters (copy)","Begin");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked.cpp	(revision 62)
@@ -85,6 +85,9 @@
     sensitive_neg << *(in_CLOCK);
     for (uint32_t i=0; i<_param->_nb_port_read; i++)
-      sensitive << *( in_READ_VAL     [i])
-		<< *( in_READ_ADDRESS [i]);
+      {
+	sensitive << *( in_READ_VAL     [i]);
+	if (_param->_have_port_address == true)
+	  sensitive << *( in_READ_ADDRESS [i]);
+      }
 
 #ifdef SYSTEMCASS_SPECIFIC
@@ -93,6 +96,8 @@
       {
 	(*(out_READ_ACK  [i])) (*( in_READ_VAL     [i]));
+	if (_param->_have_port_address == true)
 	(*(out_READ_ACK  [i])) (*( in_READ_ADDRESS [i]));
 	(*(out_READ_DATA [i])) (*( in_READ_VAL     [i]));
+	if (_param->_have_port_address == true)
 	(*(out_READ_DATA [i])) (*( in_READ_ADDRESS [i]));
       }
@@ -109,7 +114,10 @@
     sensitive_neg << *(in_CLOCK);
     for (uint32_t i=0; i<_param->_nb_port_write; i++)
-      sensitive << *( in_WRITE_VAL     [i])
-		<< *( in_WRITE_ADDRESS [i])
-		<< *( in_WRITE_DATA    [i]);
+      {
+	sensitive << *( in_WRITE_VAL     [i])
+		  << *( in_WRITE_DATA    [i]);
+	if (_param->_have_port_address == true)
+	  sensitive << *( in_WRITE_ADDRESS [i]);
+      }
 
 #ifdef SYSTEMCASS_SPECIFIC
@@ -118,4 +126,5 @@
       {
 	(*(out_WRITE_ACK  [i])) (*( in_WRITE_VAL     [i]));
+	if (_param->_have_port_address == true)
 	(*(out_WRITE_ACK  [i])) (*( in_WRITE_ADDRESS [i]));
 	(*(out_WRITE_ACK  [i])) (*( in_WRITE_DATA    [i]));
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_allocation.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_allocation.cpp	(revision 62)
@@ -50,4 +50,5 @@
      in_READ_VAL         = new SC_IN (Tcontrol_t) * [_param->_nb_port_read];
     out_READ_ACK         = new SC_OUT(Tcontrol_t) * [_param->_nb_port_read];
+    if (_param->_have_port_address == true)
      in_READ_ADDRESS     = new SC_IN (Taddress_t) * [_param->_nb_port_read];
     out_READ_DATA        = new SC_OUT(Tdata_t   ) * [_param->_nb_port_read];
@@ -65,4 +66,5 @@
 	 in_READ_VAL     [i]  = interface->set_signal_valack_in        ("val"    , VAL);
 	out_READ_ACK     [i]  = interface->set_signal_valack_out       ("ack"    , ACK);
+	if (_param->_have_port_address == true)
 	 in_READ_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param->_nb_word)));
 	out_READ_DATA    [i]  = interface->set_signal_out <Tdata_t   > ("data"   , _param->_size_word);
@@ -73,4 +75,5 @@
      in_WRITE_VAL        = new SC_IN (Tcontrol_t) * [_param->_nb_port_write];
     out_WRITE_ACK        = new SC_OUT(Tcontrol_t) * [_param->_nb_port_write];
+    if (_param->_have_port_address == true)
      in_WRITE_ADDRESS    = new SC_IN (Taddress_t) * [_param->_nb_port_write];
      in_WRITE_DATA       = new SC_IN (Tdata_t   ) * [_param->_nb_port_write];
@@ -88,4 +91,5 @@
 	 in_WRITE_VAL     [i]  = interface->set_signal_valack_in        ("val"    , VAL);
 	out_WRITE_ACK     [i]  = interface->set_signal_valack_out       ("ack"    , ACK);
+	if (_param->_have_port_address == true)
 	 in_WRITE_ADDRESS [i]  = interface->set_signal_in  <Taddress_t> ("address", static_cast<uint32_t>(log2(_param->_nb_word)));
 	 in_WRITE_DATA    [i]  = interface->set_signal_in  <Tdata_t   > ("data"   , _param->_size_word);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_deallocation.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_deallocation.cpp	(revision 62)
@@ -26,4 +26,5 @@
     delete []  in_READ_VAL    ;
     delete [] out_READ_ACK    ;
+    if (_param->_have_port_address == true)
     delete []  in_READ_ADDRESS;
     delete [] out_READ_DATA   ;
@@ -32,4 +33,5 @@
     delete []  in_WRITE_VAL    ;
     delete [] out_WRITE_ACK    ;
+    if (_param->_have_port_address == true)
     delete []  in_WRITE_ADDRESS;
     delete []  in_WRITE_DATA   ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_read.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_read.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_read.cpp	(revision 62)
@@ -37,5 +37,10 @@
 	  {
 	    // Compute the adress of the bank
-	    Taddress_t address = PORT_READ(in_READ_ADDRESS[i]);
+	    Taddress_t address;
+	    if (_param->_have_port_address == true)
+	      address = PORT_READ(in_READ_ADDRESS[i]);
+	    else
+	      address = 0;
+
 	    log_printf(TRACE,RegisterFile_Multi_Banked,"full_crossbar_genMealy_read"," * address   : %d",address);
 	    Taddress_t bank    = address_bank    (address);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_write.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_write.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_full_crossbar_genMealy_write.cpp	(revision 62)
@@ -38,5 +38,9 @@
 	    val                = false;
 	    // Compute the adress of the bank
-	    Taddress_t address = PORT_READ(in_WRITE_ADDRESS[i]);
+	    Taddress_t address;
+	    if (_param->_have_port_address == true)
+	      address = PORT_READ(in_WRITE_ADDRESS[i]);
+	    else
+	      address = 0;
 	    log_printf(TRACE,RegisterFile_Multi_Banked,"full_crossbar_genMealy_write"," * address   : %d",address);
 	    Taddress_t bank    = address_bank    (address);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_read.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_read.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_read.cpp	(revision 62)
@@ -37,5 +37,9 @@
 	  {
 	    // Compute the adress of the bank
-	    Taddress_t address = PORT_READ(in_READ_ADDRESS[i]);
+	    Taddress_t address;
+	    if (_param->_have_port_address == true)
+	      address = PORT_READ(in_READ_ADDRESS[i]);
+	    else
+	      address = 0;
 	    log_printf(TRACE,RegisterFile_Multi_Banked,"full_crossbar_genMealy_read"," * address   : %d",address);
 	    Taddress_t bank    = address_bank    (address);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_write.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_write.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_partial_crossbar_genMealy_write.cpp	(revision 62)
@@ -37,5 +37,9 @@
 	    val                = false;
 	    // Compute the adress of the bank
-	    Taddress_t address = PORT_READ(in_WRITE_ADDRESS[i]);
+	    Taddress_t address;
+	    if (_param->_have_port_address == true)
+	      address = PORT_READ(in_WRITE_ADDRESS[i]);
+	    else
+	      address = 0;
 	    log_printf(TRACE,RegisterFile_Multi_Banked,"partial_crossbar_genMealy_write"," * address   : %d",address);
 	    Taddress_t bank    = address_bank    (address);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_body.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_body.cpp	(revision 62)
@@ -51,4 +51,5 @@
 	    vhdl->set_body("\t, in_READ_"+toString(j)+"_VAL     \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_VAL");
 	    vhdl->set_body("\t,out_READ_"+toString(j)+"_ACK     \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ACK");
+	    if (_param->_have_bank_port_address == true)
 	    vhdl->set_body("\t, in_READ_"+toString(j)+"_ADDRESS \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ADDRESS");
 	    vhdl->set_body("\t,out_READ_"+toString(j)+"_DATA    \t=>\tinternal_BANK_READ_"+toString(i)+"_"+toString(j)+"_DATA");
@@ -58,4 +59,5 @@
 	    vhdl->set_body("\t, in_WRITE_"+toString(j)+"_VAL     \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_VAL");
 	    vhdl->set_body("\t,out_WRITE_"+toString(j)+"_ACK     \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ACK");
+	    if (_param->_have_bank_port_address == true)
 	    vhdl->set_body("\t, in_WRITE_"+toString(j)+"_ADDRESS \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ADDRESS");
 	    vhdl->set_body("\t, in_WRITE_"+toString(j)+"_DATA    \t=>\tinternal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_DATA");
@@ -154,4 +156,6 @@
     vhdl->set_body("-----------------------------------");
     vhdl->set_body("");
+
+    if (_param->_have_bank_port_address == true)
     for (uint32_t i=0; i<_param->_nb_bank; i++)
       {
@@ -221,12 +225,23 @@
 	for (uint32_t j=0; j<_param->_nb_port_read; j ++)
 	  {
-	    string address = (_param->_nb_bank==1)?"":("and (in_READ_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address-1,_param->_size_address_by_bank)+"="+std_logic_conv( _param->_size_address-_param->_size_address_by_bank,i)+") ");
-
-	    vhdl->set_body("internal_READ_"+toString(i)+"_"+toString(j)+"_VAL  <= '1' when (in_READ_"+toString(j)+"_VAL ='1') "+address+"else '0';");
+	    string str_address;
+
+	    if (_param->_have_bank_port_address == true)
+	      str_address = (_param->_nb_bank==1)?"":("and (in_READ_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address-1,_param->_size_address_by_bank)+"="+std_logic_conv( _param->_size_address-_param->_size_address_by_bank,i)+") ");
+	    else
+	      str_address = "";
+
+	    vhdl->set_body("internal_READ_"+toString(i)+"_"+toString(j)+"_VAL  <= '1' when (in_READ_"+toString(j)+"_VAL ='1') "+str_address+"else '0';");
 	  }
 	for (uint32_t j=0; j<_param->_nb_port_write; j ++)
 	  {
-	    string address = (_param->_nb_bank==1)?"":("and (in_WRITE_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address-1,_param->_size_address_by_bank)+"="+std_logic_conv( _param->_size_address-_param->_size_address_by_bank,i)+") ");
-	    vhdl->set_body("internal_WRITE_"+toString(i)+"_"+toString(j)+"_VAL <= '1' when (in_WRITE_"+toString(j)+"_VAL='1') "+address+"else '0';");
+	    string str_address;
+
+	    if (_param->_have_port_address == true)
+	      str_address = (_param->_nb_bank==1)?"":("and (in_WRITE_"+toString(j)+"_ADDRESS"+std_logic_range(_param->_size_address-1,_param->_size_address_by_bank)+"="+std_logic_conv( _param->_size_address-_param->_size_address_by_bank,i)+") ");
+	    else
+	      str_address = "";
+
+	    vhdl->set_body("internal_WRITE_"+toString(i)+"_"+toString(j)+"_VAL <= '1' when (in_WRITE_"+toString(j)+"_VAL='1') "+str_address+"else '0';");
 	  }
       }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_declaration.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_declaration.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_vhdl_declaration.cpp	(revision 62)
@@ -41,4 +41,5 @@
 	    vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_VAL" ,1);
 	    vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ACK"    ,1);
+	    if (_param->_have_bank_port_address == true)
 	    vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_ADDRESS",_param->_size_address_by_bank);
 	    vhdl->set_signal ("internal_BANK_READ_"+toString(i)+"_"+toString(j)+"_DATA"   ,_param->_size_word);
@@ -64,4 +65,5 @@
 	    vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_VAL"    ,1);
 	    vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ACK"    ,1);
+	    if (_param->_have_bank_port_address == true)
 	    vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_ADDRESS",_param->_size_address_by_bank);
 	    vhdl->set_signal ("internal_BANK_WRITE_"+toString(i)+"_"+toString(j)+"_DATA"   ,_param->_size_word);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/SelfTest/config-size.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/SelfTest/config-size.cfg	(revision 62)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/SelfTest/config-size.cfg	(revision 62)
@@ -0,0 +1,10 @@
+RegisterFile
+11	11	*2	# nb_port_read
+5	5	*2	# nb_port_write
+1  	32    	*2	# nb_word
+32	32	*2	# size_word
+1	1	*2	# nb_bank
+3	3 	*2	# nb_port_read_by_bank
+2	2	*2	# nb_port_write_by_bank
+0	1	+1	# crossbar
+0	1	+1	# Monolithic / Multi Banked
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/SelfTest/include/test.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/SelfTest/include/test.h	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/SelfTest/include/test.h	(revision 62)
@@ -21,5 +21,4 @@
 using namespace morpheo::behavioural;
 using namespace morpheo::behavioural::generic;
-
 using namespace morpheo::behavioural::generic::registerfile;
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/SelfTest/src/main.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/SelfTest/src/main.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/SelfTest/src/main.cpp	(revision 62)
@@ -50,5 +50,5 @@
   const uint32_t    nb_port_write_by_bank = atoi(argv[8]);
   const Tcrossbar_t crossbar              = fromString<Tcrossbar_t>(argv[9]);
-  const Tinstance_t instance              = (strcmp(argv[10], "0") == 0)?instance_RegisterFile_Monolithic:instance_RegisterFile_Multi_Banked;
+  const morpheo::behavioural::generic::registerfile::Tinstance_t instance              = (strcmp(argv[10], "0") == 0)?instance_RegisterFile_Monolithic:instance_RegisterFile_Multi_Banked;
 
   try 
@@ -60,4 +60,5 @@
 	  morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters * param1 = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters (nb_port_read         ,
 																								nb_port_write        ,
+																								0                    ,
 																								nb_word              ,
 																								size_word            );
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/SelfTest/src/test.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/SelfTest/src/test.cpp	(revision 62)
@@ -33,9 +33,13 @@
   cout << "<" << name << "> : Simulation SystemC" << endl;
 
+#ifdef STATISTICS
+  morpheo::behavioural::Parameters_Statistics * _param_stat = new morpheo::behavioural::Parameters_Statistics(5,50);
+#endif
+  
   RegisterFile * _RegisterFile = new RegisterFile (name.c_str(),
-#ifdef STATISTICS
-					     morpheo::behavioural::Parameters_Statistics(5,50),
+#ifdef STATISTICS     
+						   _param_stat,
 #endif
-					     *_param);
+						   _param);
   
 #ifdef SYSTEMC
@@ -74,4 +78,5 @@
       (*(_RegisterFile-> in_READ_VAL      [i]))        (READ_VAL      [i]);
       (*(_RegisterFile->out_READ_ACK      [i]))        (READ_ACK      [i]);
+      if (_param->_have_port_address == true)
       (*(_RegisterFile-> in_READ_ADDRESS  [i]))        (READ_ADDRESS  [i]);
       (*(_RegisterFile->out_READ_DATA     [i]))        (READ_DATA     [i]);
@@ -82,4 +87,5 @@
       (*(_RegisterFile-> in_WRITE_VAL     [i]))        (WRITE_VAL     [i]);
       (*(_RegisterFile->out_WRITE_ACK     [i]))        (WRITE_ACK     [i]);
+      if (_param->_have_port_address == true)
       (*(_RegisterFile-> in_WRITE_ADDRESS [i]))        (WRITE_ADDRESS [i]);
       (*(_RegisterFile-> in_WRITE_DATA    [i]))        (WRITE_DATA    [i]);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/include/Parameters.h	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/include/Parameters.h	(revision 62)
@@ -23,5 +23,4 @@
 		instance_RegisterFile_Multi_Banked} Tinstance_t;
 
-
   class Parameters : public morpheo::behavioural::Parameters
   {
@@ -33,7 +32,8 @@
   public : const uint32_t    _size_word    ;
   public : const uint32_t    _size_address ;
+  public : const bool        _have_port_address;
+
   public : morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters * _param_registerfile_monolithic;
   public : morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters * _param_registerfile_multi_banked;
-    
 
     //-----[ methods ]-----------------------------------------------------------
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/include/RegisterFile.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/include/RegisterFile.h	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/include/RegisterFile.h	(revision 62)
@@ -45,10 +45,10 @@
     // -----[ fields ]----------------------------------------------------
     // Parameters
-  protected : const string     _name;
+  protected : const string       _name;
 
-  protected : const Parameters _param;
-//#ifdef STATISTICS
-//  protected : const morpheo::behavioural::Parameters_Statistics _param_statistics;
-//#endif
+  protected : const Parameters * _param;
+#ifdef STATISTICS
+  protected : morpheo::behavioural::Parameters_Statistics * _param_statistics;
+#endif
 
   public    : Component                      * _component;
@@ -94,9 +94,8 @@
 #endif					       
 #ifdef STATISTICS
-					      morpheo::behavioural::Parameters_Statistics param_statistics,
+					      morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-					      Parameters                                  param );
+					      Parameters                                  * param );
 					       
-  public  :          RegisterFile              (Parameters param );
   public  :          ~RegisterFile             (void);
 					       
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/Parameters.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/Parameters.cpp	(revision 62)
@@ -20,5 +20,6 @@
     _nb_word           (param->_nb_word      ), 
     _size_word         (param->_size_word    ), 
-    _size_address      (param->_size_address )
+    _size_address      (param->_size_address ),
+    _have_port_address (param->_have_port_address)
   {
     log_printf(FUNC,RegisterFile,"Parameters","Begin");
@@ -37,5 +38,6 @@
     _nb_word           (param->_nb_word      ), 
     _size_word         (param->_size_word    ), 
-    _size_address      (param->_size_address )
+    _size_address      (param->_size_address ),
+    _have_port_address (param->_have_port_address)
   {
     log_printf(FUNC,RegisterFile,"Parameters","Begin");
@@ -54,5 +56,6 @@
     _nb_word           (param._nb_word      ), 
     _size_word         (param._size_word    ), 
-    _size_address      (param._size_address )
+    _size_address      (param._size_address ),
+    _have_port_address (param._have_port_address)
   {
     log_printf(FUNC,RegisterFile,"Parameters (copy)","Begin");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile.cpp	(revision 62)
@@ -20,12 +20,12 @@
 #endif
 #ifdef STATISTICS
-			      morpheo::behavioural::Parameters_Statistics             param_statistics,
+			      morpheo::behavioural::Parameters_Statistics             * param_statistics,
 #endif
-			      morpheo::behavioural::generic::registerfile::Parameters param ):
+			      morpheo::behavioural::generic::registerfile::Parameters * param ):
 			      _name              (name)
 			      ,_param            (param)
-// #ifdef STATISTICS
-// 			      ,_param_statistics (param_statistics)
-// #endif
+#ifdef STATISTICS
+			      ,_param_statistics (param_statistics)
+#endif
   {
     log_printf(FUNC,RegisterFile,"RegisterFile","Begin");
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 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_allocation.cpp	(revision 62)
@@ -28,10 +28,11 @@
     // ~~~~~[ 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];
+    if (_param->_have_port_address == true)
+     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++)
       { 
 	rename =  "in_READ_"+toString(i)+"_VAL"    ;
@@ -39,6 +40,9 @@
 	rename = "out_READ_"+toString(i)+"_ACK"    ;
 	out_READ_ACK     [i]  = new SC_OUT(Tcontrol_t) (rename.c_str());
+	if (_param->_have_port_address == true)
+	  {
 	rename =  "in_READ_"+toString(i)+"_ADDRESS";
 	 in_READ_ADDRESS [i]  = new SC_IN (Taddress_t) (rename.c_str());
+	  }
 	rename = "out_READ_"+toString(i)+"_DATA"   ;
 	out_READ_DATA    [i]  = new SC_OUT(Tdata_t   ) (rename.c_str());
@@ -47,10 +51,11 @@
     // ~~~~~[ 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];
+    if (_param->_have_port_address == true)
+     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++)
       {
 	rename =  "in_WRITE_"+toString(i)+"_VAL"    ;
@@ -58,6 +63,9 @@
 	rename = "out_WRITE_"+toString(i)+"_ACK"    ;
 	out_WRITE_ACK     [i]  = new SC_OUT(Tcontrol_t) (rename.c_str());
+	if (_param->_have_port_address == true)
+	  {
 	rename =  "in_WRITE_"+toString(i)+"_ADDRESS";
 	 in_WRITE_ADDRESS [i]  = new SC_IN (Taddress_t) (rename.c_str());
+	  }
 	rename =  "in_WRITE_"+toString(i)+"_DATA"   ;
 	 in_WRITE_DATA    [i]  = new SC_IN (Tdata_t   ) (rename.c_str());
@@ -65,5 +73,5 @@
 
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                                                                
-    if (_param._instance == instance_RegisterFile_Monolithic)
+    if (_param->_instance == instance_RegisterFile_Monolithic)
     // =====[ component_RegisterFile_Monolithic ]=========================
       {
@@ -72,5 +80,5 @@
 																					       ,_param_statistics
 #endif
-																					       ,*(_param._param_registerfile_monolithic)
+																					       ,_param->_param_registerfile_monolithic
 																					       );
 	
@@ -83,5 +91,5 @@
 																						,_param_statistics
 #endif
-																						,*(_param._param_registerfile_multi_banked)
+																						,_param->_param_registerfile_multi_banked
 																						);
 	
@@ -89,5 +97,5 @@
     // ~~~~~[ Component - Instanciation ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    if (_param._instance == instance_RegisterFile_Monolithic)
+    if (_param->_instance == instance_RegisterFile_Monolithic)
     // =====[ Component_RegisterFile_Monolithic - Instanciation ]=========
       {
@@ -95,16 +103,18 @@
 	(*(component_RegisterFile_Monolithic  ->in_NRESET)) (*(in_NRESET));
 	
-	for (uint32_t i=0; i<_param._nb_port_read; i++)
+	for (uint32_t i=0; i<_param->_nb_port_read; i++)
 	  { 
 	    (*(component_RegisterFile_Monolithic  -> in_READ_VAL     [i])) (*( in_READ_VAL     [i]));   
 	    (*(component_RegisterFile_Monolithic  ->out_READ_ACK     [i])) (*(out_READ_ACK     [i]));
+	    if (_param->_have_port_address == true)
 	    (*(component_RegisterFile_Monolithic  -> in_READ_ADDRESS [i])) (*( in_READ_ADDRESS [i]));
 	    (*(component_RegisterFile_Monolithic  ->out_READ_DATA    [i])) (*(out_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++)
 	  {
 	    (*(component_RegisterFile_Monolithic  -> in_WRITE_VAL     [i])) (*( in_WRITE_VAL     [i]));
 	    (*(component_RegisterFile_Monolithic  ->out_WRITE_ACK     [i])) (*(out_WRITE_ACK     [i]));
+	    if (_param->_have_port_address == true)
 	    (*(component_RegisterFile_Monolithic  -> in_WRITE_ADDRESS [i])) (*( in_WRITE_ADDRESS [i]));
 	    (*(component_RegisterFile_Monolithic  -> in_WRITE_DATA    [i])) (*( in_WRITE_DATA    [i]));
@@ -117,16 +127,18 @@
 	(*(component_RegisterFile_Multi_Banked->in_NRESET)) (*(in_NRESET));
 	
-	for (uint32_t i=0; i<_param._nb_port_read; i++)
+	for (uint32_t i=0; i<_param->_nb_port_read; i++)
 	  { 
 	    (*(component_RegisterFile_Multi_Banked-> in_READ_VAL     [i])) (*( in_READ_VAL     [i]));   
 	    (*(component_RegisterFile_Multi_Banked->out_READ_ACK     [i])) (*(out_READ_ACK     [i]));
+	    if (_param->_have_port_address == true)
 	    (*(component_RegisterFile_Multi_Banked-> in_READ_ADDRESS [i])) (*( in_READ_ADDRESS [i]));
 	    (*(component_RegisterFile_Multi_Banked->out_READ_DATA    [i])) (*(out_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++)
 	  {
 	    (*(component_RegisterFile_Multi_Banked-> in_WRITE_VAL     [i])) (*( in_WRITE_VAL     [i]));
 	    (*(component_RegisterFile_Multi_Banked->out_WRITE_ACK     [i])) (*(out_WRITE_ACK     [i]));
+	    if (_param->_have_port_address == true)
 	    (*(component_RegisterFile_Multi_Banked-> in_WRITE_ADDRESS [i])) (*( in_WRITE_ADDRESS [i]));
 	    (*(component_RegisterFile_Multi_Banked-> in_WRITE_DATA    [i])) (*( in_WRITE_DATA    [i]));
@@ -134,5 +146,5 @@
       }
 
-    if (_param._instance == instance_RegisterFile_Monolithic)
+    if (_param->_instance == instance_RegisterFile_Monolithic)
       _component = component_RegisterFile_Monolithic  ->_component;
     else
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 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_deallocation.cpp	(revision 62)
@@ -24,4 +24,5 @@
     delete []  in_READ_VAL    ;
     delete [] out_READ_ACK    ;
+    if (_param->_have_port_address == true)
     delete []  in_READ_ADDRESS;
     delete [] out_READ_DATA   ;
@@ -30,4 +31,5 @@
     delete []  in_WRITE_VAL    ;
     delete [] out_WRITE_ACK    ;
+    if (_param->_have_port_address == true)
     delete []  in_WRITE_ADDRESS;
     delete []  in_WRITE_DATA   ;
@@ -37,5 +39,5 @@
 //   delete _component;
 
-    if (_param._instance == instance_RegisterFile_Monolithic)
+    if (_param->_instance == instance_RegisterFile_Monolithic)
       delete component_RegisterFile_Monolithic  ;
     else
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_statistics.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_statistics.cpp	(revision 59)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_statistics.cpp	(revision 62)
@@ -19,10 +19,10 @@
     log_printf(FUNC,RegisterFile,"statistics","Begin");
     
-    if (_param->_instance == instance_RegisterFile_Monilithic)
-      component_RegisterFile_Monolithic  ->statistics(depth);
+    string txt;
+
+    if (_param->_instance == instance_RegisterFile_Monolithic)
+      txt = component_RegisterFile_Monolithic  ->statistics(depth);
     else
-      component_RegisterFile_Multi_Banked->statistics(depth);
-
-    string txt = _stat->print(depth);
+      txt = component_RegisterFile_Multi_Banked->statistics(depth);
     
     log_printf(FUNC,RegisterFile,"statistics","End");
