Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test.cpp	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test.cpp	(revision 62)
@@ -10,4 +10,5 @@
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/include/test.h"
 #include "Common/include/Test.h"
+#include "Common/include/BitManipulation.h"
 
 #define NB_ITERATION  1
@@ -43,4 +44,5 @@
 
 
+//========================================================={MemoryRequest_t}
 class MemoryRequest_t
 {
@@ -146,11 +148,106 @@
   return os << "<" << toString(x._cycle) << "> : "
 	    << "{" << toString(static_cast<uint32_t>(x._packet_id)) << "}" << endl
-	    << "\t * " << toString(static_cast<uint32_t>(x._context_id)) << endl
-	    << "\t * " << toString(static_cast<uint32_t>(x._operation)) << " " << toString(static_cast<uint32_t>(x._type)) << " " << toString(static_cast<uint32_t>(x._write_spec_ko)) << endl
-	    << "\t * " << toString(static_cast<uint32_t>(x._store_queue_ptr_write)) << " " << toString(static_cast<uint32_t>(x._load_queue_ptr_write)) << endl
-	    << "\t * " << toString(static_cast<uint32_t>(x._immediat)) << " - " << toString(static_cast<uint32_t>(x._data_ra)) << " - " << toString(static_cast<uint32_t>(x._data_rb)) << endl
-	    << "\t * " << toString(static_cast<uint32_t>(x._write_rd)) << " " << toString(static_cast<uint32_t>(x._num_reg_rd)) << endl;
+	    << "\t * context_id                        : " << toString(static_cast<uint32_t>(x._context_id)) << endl
+	    << "\t * operation  / type / write_spec_ko : " << toString(static_cast<uint32_t>(x._operation)) << " " << toString(static_cast<uint32_t>(x._type)) << " " << toString(static_cast<uint32_t>(x._write_spec_ko)) << endl
+	    << "\t * ptr_write store/load              : " << toString(static_cast<uint32_t>(x._store_queue_ptr_write)) << " " << toString(static_cast<uint32_t>(x._load_queue_ptr_write)) << endl
+	    << "\t * immediat / data_ra / data_rb      : " << toString(static_cast<uint32_t>(x._immediat)) << " - " << toString(static_cast<uint32_t>(x._data_ra)) << " - " << toString(static_cast<uint32_t>(x._data_rb)) << endl
+	    << "\t * write_rd / num_reg_rd             : " << toString(static_cast<uint32_t>(x._write_rd)) << " " << toString(static_cast<uint32_t>(x._num_reg_rd)) << endl;
 }
 
+//================================================================{Memory_t}
+class Memory_t
+{
+private : const uint32_t    _nb_context;
+private : const uint32_t    _nb_word   ;
+private : const uint32_t    _size_data ;
+private : const Tdcache_address_t _mask_addr ;
+private : Tdcache_data_t ** _data;
+  
+public  : Memory_t (uint32_t nb_context, 
+		    uint32_t nb_word, 
+		    uint32_t size_data):
+  _nb_context   (nb_context),
+  _nb_word      (nb_word   ),
+  _size_data    (size_data ),
+  _mask_addr    (gen_mask<Tdcache_address_t>(static_cast<uint32_t>(log2(ceil(static_cast<double>(size_data))))))
+  {
+    _data = new Tdcache_data_t * [nb_context];
+    
+    for (uint32_t i=0; i<nb_context; i++)
+      {
+	_data [i] = new Tdcache_data_t [nb_word];
+	
+	for (uint32_t j=0; j<nb_word; j++)
+	  _data [i][j] = rand()%(size_data);
+      }
+  }
+
+public  : ~Memory_t (void)
+  {
+    delete [] _data;
+  }
+
+public  : Tdcache_data_t access (uint32_t          context, 
+				 Tdcache_address_t address,
+				 Tdcache_type_t    type,
+				 Tdcache_data_t    data)
+  {
+    return 0;
+  }
+
+public  : Tdcache_data_t read (uint32_t          context,
+			       Tdcache_address_t address,
+			       Tdcache_type_t    type)
+  {
+    // Address's Read must be aligned
+
+    if ((address & _mask_addr) != 0)
+      TEST_KO("<Memory_t::read> Address is not aligned");
+
+    if (context>_nb_context)
+      TEST_KO("<Memory_t::read> nb context is too high");
+
+    if (address>_nb_word)
+      TEST_KO("<Memory_t::read> address is too high");
+    
+    return _data [context][address];
+  }
+
+public  : void write (uint32_t          context, 
+		      Tdcache_address_t address,
+		      Tdcache_type_t    type,
+		      Tdcache_data_t    data)
+  {
+    if (context>_nb_context)
+      TEST_KO("<Memory_t::read> nb context is too high");
+
+    if (address>_nb_word)
+      TEST_KO("<Memory_t::read> address is too high");
+
+    Tdcache_address_t LSB = address &  _mask;
+    Tdcache_address_t MSB = address & ~_mask;
+  
+    Tdcache_data_t write_data = data;
+    Tdcache_data_t read_data  = _data [context][MSB];
+
+    // exemple to size_data = 32b
+    // LSB index_min
+    // 0   0
+    // 1   8
+    // 2   16
+    // 3   24
+    uint32_t index_min = LSB<<3;
+    uint32_t index_max = index_min;
+    // index max, dependant of access's size
+
+    switch (type)
+      {
+
+
+      }
+  }
+};
+
+//===================================================================={test}
 void test (string name,
 	   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Parameters * _param)
@@ -252,5 +349,4 @@
   (*(_Load_store_unit-> in_MEMORY_IN_PACKET_ID            ))(*( in_MEMORY_IN_PACKET_ID            ));
   (*(_Load_store_unit-> in_MEMORY_IN_OPERATION            ))(*( in_MEMORY_IN_OPERATION            ));
-  (*(_Load_store_unit-> in_MEMORY_IN_TYPE                 ))(*( in_MEMORY_IN_TYPE                 ));
   (*(_Load_store_unit-> in_MEMORY_IN_STORE_QUEUE_PTR_WRITE))(*( in_MEMORY_IN_STORE_QUEUE_PTR_WRITE));
   (*(_Load_store_unit-> in_MEMORY_IN_LOAD_QUEUE_PTR_WRITE ))(*( in_MEMORY_IN_LOAD_QUEUE_PTR_WRITE ));
@@ -269,6 +365,4 @@
   (*(_Load_store_unit->out_MEMORY_OUT_CONTEXT_ID ))(*(out_MEMORY_OUT_CONTEXT_ID ));
   (*(_Load_store_unit->out_MEMORY_OUT_PACKET_ID  ))(*(out_MEMORY_OUT_PACKET_ID  ));
-  (*(_Load_store_unit->out_MEMORY_OUT_OPERATION  ))(*(out_MEMORY_OUT_OPERATION  ));
-  (*(_Load_store_unit->out_MEMORY_OUT_TYPE       ))(*(out_MEMORY_OUT_TYPE       ));
   (*(_Load_store_unit->out_MEMORY_OUT_WRITE_RD   ))(*(out_MEMORY_OUT_WRITE_RD   ));
   (*(_Load_store_unit->out_MEMORY_OUT_NUM_REG_RD ))(*(out_MEMORY_OUT_NUM_REG_RD ));
@@ -322,7 +416,5 @@
   const uint32_t     nb_word      = nb_request;
 
-  const uint32_t     cst_max_cycle                  =   2;
-
-  const int32_t      percent_transaction_memory_in  = 100;
+//const int32_t      percent_transaction_memory_in  = 100;
   const int32_t      percent_transaction_memory_out = 100;
   const int32_t      percent_transaction_dcache     = 100;
@@ -331,5 +423,5 @@
   const int32_t      percent_type_load              =   0;
   const int32_t      percent_type_store             = 100;
-  const int32_t      percent_miss_spec              = 100;
+  const int32_t      percent_miss_spec              =   0;
 
   if ((percent_type_load  +
@@ -337,6 +429,6 @@
     TEST_KO("sum of percent_type > 100");
 
-  const int32_t      seuil_type_load    = seuil_type_load;
-  const int32_t      seuil_type_store   = seuil_type_store+percent_type_load;
+  const int32_t      seuil_type_load    = percent_type_load;
+  const int32_t      seuil_type_store   = percent_type_store+percent_type_load;
 
   uint32_t           nb_request_memory_in ;
@@ -347,4 +439,5 @@
   priority_queue<MemoryRequest_t> fifo_request;
 
+  // emulation of cache
   Tdcache_data_t     cache_data                [_param->_nb_context][nb_word];
 
@@ -371,10 +464,12 @@
   for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
     {
+      LABEL("Iteration "+toString(iteration));
+
+      LABEL("Structure's initialisation");
+
       nb_request_memory_in  = 0;
       nb_request_memory_out = 0;
       nb_request_dcache     = 0;
       
-      LABEL("Iteration "+toString(iteration));
-
       // Fill the request_queue
       
@@ -390,17 +485,12 @@
 	load_queue_use  [i] = false;
 
-      double             store_queue_cycle [_param->_size_store_queue];
-      double             load_queue_cycle  [_param->_size_load_queue ];
       double             current_cycle = sc_simulation_time();
-
-      for (uint32_t i=0; i<_param->_size_store_queue; i++)
-	store_queue_cycle [i] = current_cycle;
-      for (uint32_t i=0; i<_param->_size_load_queue ; i++)
-	load_queue_cycle  [i] = current_cycle;
-
+      double             cycle_min     = current_cycle;
+
+      LABEL("Fifo request initialisation");
       // Init fifo_request
       for (uint32_t i=0; i<nb_request; i++)
 	{
-	  double             cycle                     = current_cycle+(rand()%(cst_max_cycle*nb_request));
+	  double             cycle;
 	  Tcontext_t         context_id                = rand () % _param->_nb_context;
 	  Tpacket_t          packet_id                 = i;
@@ -411,37 +501,37 @@
 	  int32_t            percent = rand()%100;
 
-	  if (percent < seuil_type_load)
+	  uint32_t           size_queue;
+	 
+	  if (percent <= seuil_type_load)
 	    {
-	      operation = OPERATION_MEMORY_LOAD_16_S;
-	      load_queue_ptr_write = (load_queue_ptr_write+1) % (_param->_size_load_queue);
-	    }
-	  else
-	    if (percent < seuil_type_store)
-	      {
-		operation = OPERATION_MEMORY_STORE_16;
-		store_queue_ptr_write = (store_queue_ptr_write+1) % (_param->_size_store_queue);
-	      }
-	    else
-	      {
-		operation = OPERATION_MEMORY_PREFETCH;
-		load_queue_ptr_write = (load_queue_ptr_write+1) % (_param->_size_load_queue);
-	      }
-
-	  // Valid nb cycle ?
-	  if (is_operation_memory_store(operation))
-	    {
-	      if (cycle <= store_queue_cycle[packet_id])
-		cycle = store_queue_cycle[packet_id]+1;
+// 	      LABEL(" * LOAD");
+	      operation            = OPERATION_MEMORY_LOAD_16_S;
+	      size_queue           = _param->_size_load_queue;
+	      load_queue_ptr_write = (load_queue_ptr_write+1) % (size_queue);
 	    }
 	  else
 	    {
-	      if (cycle <= load_queue_cycle[packet_id])
-		cycle = load_queue_cycle[packet_id]+1;
+	      if (percent <= seuil_type_store)
+		{
+// 		  LABEL(" * STORE");
+		  operation             = OPERATION_MEMORY_STORE_16;
+		  size_queue            = _param->_size_store_queue;
+		  store_queue_ptr_write = (store_queue_ptr_write+1) % (size_queue);
+		}
+	      else
+		{
+// 		  LABEL(" * OTHERS");
+		  operation            = OPERATION_MEMORY_PREFETCH;
+		  size_queue           = _param->_size_load_queue;
+		  load_queue_ptr_write = (load_queue_ptr_write+1) % (size_queue);
+		}
 	    }
 
+	  cycle      = cycle_min;
+	  cycle_min ++;
+
 	  Ttype_t            type                  = TYPE_MEMORY;
-
-	  Tgeneral_data_t    address               = rand()%(1<<_param->_size_general_data);
-	  Tgeneral_data_t    offset                = rand()%(1<<_param->_size_general_data);
+	  Tgeneral_data_t    address               = rand()%(nb_word);
+	  Tgeneral_data_t    offset                = rand()%(nb_word);
 
 	  percent = rand()%100;
@@ -474,14 +564,20 @@
 				);
 
+	  cout << tab_request [i] << endl;
+	
 	  fifo_request.push(tab_request [i]);
-	  
+
+	  double cycle_head = 0;
+
 	  if (is_operation_memory_store(operation))
 	    {
-	      cycle = cycle+((rand()%(10))-4);
-
-	      if (cycle <= store_queue_cycle[packet_id])
-		cycle = store_queue_cycle[packet_id]+1;
-			
-	      fifo_request.push(MemoryRequest_t(cycle,
+	      cycle_head = cycle_min;
+	      cycle_min ++;
+
+	      cout << "         * Write head : " << toString(cycle_head) 
+		   << endl
+		   << endl;
+	      
+	      fifo_request.push(MemoryRequest_t(cycle_head,
 						context_id,
 						packet_id,
@@ -497,18 +593,17 @@
 						write_spec_ko));
 	    }
-
-	  // update nb cycle ?
-	  if (is_operation_memory_store(operation))
-	    {
-	      store_queue_cycle[packet_id] = cycle;
-	    }
-	  else
-	    {
-	      load_queue_cycle [packet_id] = cycle;
-	    }
-	}
-            
+  	}
+        
+      LABEL("Simulation of this iteration ...");
+    
       while (nb_request_memory_out < nb_request)
 	{
+	  // ***** MEMORY_IN *****
+
+	  // memory_in_val depends of three factors :
+	  //  1) request's fifo is not empty ?
+	  //  2) the slot destination is free ?
+	  //  3) The head of request's fifo can be issue : the number of cycle is more than current cycle
+
 	  bool can_execute = false;
 
@@ -535,5 +630,8 @@
 
 	  in_MEMORY_OUT_ACK->write((rand()%100)<percent_transaction_memory_out);
-	  
+
+	  // ***** DCACHE_REQ *****
+	  in_DCACHE_REQ_ACK->write((rand()%100)<percent_transaction_dcache);
+
 	  SC_START(0);
   
@@ -541,4 +639,11 @@
 
 	  LABEL("MEMORY_IN  : "+toString(in_MEMORY_IN_VAL ->read())+" - "+toString(out_MEMORY_IN_ACK ->read()));
+	  LABEL("  * fifo_request.empty                     : "+toString(fifo_request.empty()));
+	  LABEL("  * fifo_request.top.cycle                 : "+toString(fifo_request.top()._cycle));
+	  LABEL("  * fifo_request.top.store_queue_ptr_write : "+toString(static_cast<uint32_t>(fifo_request.top()._store_queue_ptr_write)));
+	  LABEL("  * fifo_request.top.load_queue_ptr_write  : "+toString(static_cast<uint32_t>(fifo_request.top()._load_queue_ptr_write)));
+	  LABEL("  * fifo_request.top.operation             : "+toString(static_cast<uint32_t>(fifo_request.top()._operation           )));
+	  LABEL("  * can_execute                            : "+toString(can_execute));
+
 	  if ( in_MEMORY_IN_VAL ->read() and out_MEMORY_IN_ACK ->read())
 	    {
@@ -562,5 +667,5 @@
 	  if (out_MEMORY_OUT_VAL->read() and  in_MEMORY_OUT_ACK->read())
 	    {
-	      LABEL(" * Accepted MEMORY_OUT : " + toString(out_MEMORY_OUT_PACKET_ID->read()));
+	      LABEL(" * Accepted MEMORY_OUT : " + toString(static_cast<uint32_t>(out_MEMORY_OUT_PACKET_ID->read())));
 
 	      if (is_operation_memory_store(tab_request[out_MEMORY_OUT_PACKET_ID->read()]._operation))
@@ -571,4 +676,13 @@
 	      nb_request_memory_out ++;
 	    }
+
+	  LABEL("DCACHE_REQ : "+toString(out_DCACHE_REQ_VAL->read())+" - "+toString(in_DCACHE_REQ_ACK ->read()));
+	  if (out_DCACHE_REQ_VAL->read() and  in_DCACHE_REQ_ACK->read())
+	    {
+	      LABEL(" * Accepted DCACHE_REQ : " + toString(static_cast<uint32_t>(out_DCACHE_REQ_PACKET_ID->read())));
+
+	      // test type : send or not a respons !
+	    }
+
 	}
     }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Load_store_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Load_store_unit.h	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Load_store_unit.h	(revision 62)
@@ -7,4 +7,5 @@
  * [ Description ]
  * 
+ * Ce composant peut être amélioré en placant deux ptr de lecture au lieu d'un : un pour l'accès au cache et un pour le commit
  */
 
@@ -12,7 +13,4 @@
 #include "systemc.h"
 #endif
-
-#define HAVE_MEMORY_OUT_OPERATION
-#define HAVE_MEMORY_OUT_TYPE
 
 #include <iostream>
@@ -79,7 +77,4 @@
   public    : SC_IN (Tpacket_t         )    *  in_MEMORY_IN_PACKET_ID   ;
   public    : SC_IN (Toperation_t      )    *  in_MEMORY_IN_OPERATION   ;
-#ifdef HAVE_MEMORY_OUT_TYPE
-  public    : SC_IN (Ttype_t           )    *  in_MEMORY_IN_TYPE        ;
-#endif
   public    : SC_IN (Tlsq_ptr_t        )    *  in_MEMORY_IN_STORE_QUEUE_PTR_WRITE;
   public    : SC_IN (Tlsq_ptr_t        )    *  in_MEMORY_IN_LOAD_QUEUE_PTR_WRITE;
@@ -99,10 +94,4 @@
   public    : SC_OUT(Tcontext_t        )    * out_MEMORY_OUT_CONTEXT_ID;
   public    : SC_OUT(Tpacket_t         )    * out_MEMORY_OUT_PACKET_ID ;
-#ifdef HAVE_MEMORY_OUT_OPERATION
-  public    : SC_OUT(Toperation_t      )    * out_MEMORY_OUT_OPERATION ;
-#endif
-#ifdef HAVE_MEMORY_OUT_TYPE
-  public    : SC_OUT(Ttype_t           )    * out_MEMORY_OUT_TYPE      ;
-#endif
   public    : SC_OUT(Tcontrol_t        )    * out_MEMORY_OUT_WRITE_RD  ; // = (operation==load)
   public    : SC_OUT(Tgeneral_address_t)    * out_MEMORY_OUT_NUM_REG_RD; // destination (load)
@@ -154,10 +143,15 @@
     // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+    // Registers
   public    : Tlsq_ptr_t                      internal_MEMORY_STORE_QUEUE_PTR_READ;
-  public    : Tlsq_ptr_t                      internal_MEMORY_LOAD_QUEUE_PTR_READ;
-
+  public    : Tlsq_ptr_t                      internal_MEMORY_LOAD_QUEUE_PTR_READ ;
+
+    // signal
   private   : Tcontrol_t                      internal_MEMORY_IN_ACK;
   private   : Tcontrol_t                      internal_MEMORY_OUT_VAL;
   private   : Tselect_queue_t                 internal_MEMORY_OUT_SELECT_QUEUE;
+
+  private   : Tcontrol_t                      internal_DCACHE_REQ_VAL;
+  private   : Tselect_queue_t                 internal_DCACHE_REQ_SELECT_QUEUE;
 #endif
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Parameters.h	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Parameters.h	(revision 62)
@@ -26,24 +26,25 @@
   {
     //-----[ fields ]------------------------------------------------------------
-  public : const uint32_t            _size_store_queue       ;
-  public : const uint32_t            _size_load_queue        ;
+  public : const uint32_t            _size_store_queue             ;
+  public : const uint32_t            _size_load_queue              ;
   public : const uint32_t            _size_speculative_access_queue;
-  public : const uint32_t            _nb_port_check          ;
-  public : const Tspeculative_load_t _speculative_load       ;
-  public : const uint32_t            _nb_context             ;
-  public : const uint32_t            _nb_packet              ;
-  public : const uint32_t            _size_general_data      ;
-  public : const uint32_t            _nb_general_register    ;
-  public : const uint32_t            _nb_operation           ;
-  public : const uint32_t            _nb_type                ;
+  public : const uint32_t            _nb_port_check                ;
+  public : const Tspeculative_load_t _speculative_load             ;
+//public : const uint32_t            _nb_cache_port                ;
+  public : const uint32_t            _nb_context                   ;
+  public : const uint32_t            _nb_packet                    ;
+  public : const uint32_t            _size_general_data            ;
+  public : const uint32_t            _nb_general_register          ;
+  public : const uint32_t            _nb_operation                 ;
+  public : const uint32_t            _nb_type                      ;
 
   public : const uint32_t            _size_address_store_queue             ;
   public : const uint32_t            _size_address_load_queue              ;
   public : const uint32_t            _size_address_speculative_access_queue;
-  public : const uint32_t            _size_context_id        ;
-  public : const uint32_t            _size_packet_id         ;
-  public : const uint32_t            _size_general_register  ;
-  public : const uint32_t            _size_operation         ;
-  public : const uint32_t            _size_type              ;
+  public : const uint32_t            _size_context_id                      ;
+  public : const uint32_t            _size_packet_id                       ;
+  public : const uint32_t            _size_general_register                ;
+  public : const uint32_t            _size_operation                       ;
+  public : const uint32_t            _size_type                            ;
 
     //-----[ methods ]-----------------------------------------------------------
@@ -60,4 +61,5 @@
 			uint32_t            nb_type                
 			);
+
   public : Parameters  (Parameters & param) ;
   public : ~Parameters () ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Types.h	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/include/Types.h	(revision 62)
@@ -56,12 +56,6 @@
   public    : Tcontext_t           _context_id          ;
   public    : Tpacket_t            _packet_id           ;
-  public    : Taccess_t            _access              ;
+  public    : Tdcache_type_t       _dcache_type         ;
   public    : Tcontrol_t           _uncached            ;
-#ifdef HAVE_MEMORY_OUT_OPERATION
-  public    : Toperation_t         _operation           ;
-#endif				   
-#ifdef HAVE_MEMORY_OUT_TYPE	   	              
-  public    : Ttype_t              _type                ;
-#endif				   
   public    : Tlsq_ptr_t           _load_queue_ptr_write;
   public    : Tdcache_data_t       _address             ;
@@ -70,5 +64,16 @@
 //public    : Tgeneral_address_t   _num_reg_rd          ;
   public    : Texception_t         _exception           ;
+
+    friend ostream & operator << (ostream& os, const Tstore_queue_entry_t & x) 
+    {
+      return os << " * state                   : " << x._state << endl
+		<< "   * packet   - context_id : " << toString(static_cast<uint32_t>(x._packet_id           )) << " - " << toString(static_cast<uint32_t>(x._context_id)) << endl
+		<< "   * type     - uncached   : " << toString(static_cast<uint32_t>(x._dcache_type         )) << " - " << toString(static_cast<uint32_t>(x._uncached  )) << endl
+		<< "   * load_ptr - execption  : " << toString(static_cast<uint32_t>(x._load_queue_ptr_write)) << " - " << toString(static_cast<uint32_t>(x._exception )) << endl
+		<< "   * address  - wdata      : " << toString(static_cast<uint32_t>(x._address             )) << " - " << toString(static_cast<uint32_t>(x._wdata     )) << endl;
+    }
   };
+  
+  
 
   // ----------------------------------------------------------
@@ -91,10 +96,4 @@
   public    : Tcontrol_t                         _uncached             ;
   public    : Tcontrol_t                         _sign_extension       ;
-#ifdef HAVE_MEMORY_OUT_OPERATION                 		       
-  public    : Toperation_t                       _operation            ;
-#endif				                 		       
-#ifdef HAVE_MEMORY_OUT_TYPE	                 	               
-  public    : Ttype_t                            _type                 ;
-#endif				                 		       
   public    : Tlsq_ptr_t                         _load_queue_ptr_write ;
   public    : Tlsq_ptr_t                         _store_queue_ptr_write;
@@ -128,10 +127,4 @@
   public    : Tcontrol_t           _uncached            ;
   public    : Tcontrol_t           _sign_extension      ;
-#ifdef HAVE_MEMORY_OUT_OPERATION
-  public    : Toperation_t         _operation           ;
-#endif				   
-#ifdef HAVE_MEMORY_OUT_TYPE	   	              
-  public    : Ttype_t              _type                ;
-#endif				   
   public    : Tlsq_ptr_t           _store_queue_ptr_write;
   public    : Tdcache_address_t    _address             ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_allocation.cpp	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_allocation.cpp	(revision 62)
@@ -67,7 +67,4 @@
    in_MEMORY_IN_PACKET_ID             = interface->set_signal_in  <Tpacket_t         > ("packet_id"   ,_param->_size_packet_id       );
    in_MEMORY_IN_OPERATION             = interface->set_signal_in  <Toperation_t      > ("operation"   ,_param->_size_operation        );
-#ifdef HAVE_MEMORY_OUT_TYPE
-   in_MEMORY_IN_TYPE                  = interface->set_signal_in  <Ttype_t           > ("type"        ,_param->_size_type             );
-#endif
    in_MEMORY_IN_STORE_QUEUE_PTR_WRITE = interface->set_signal_in  <Tlsq_ptr_t        > ("store_queue_ptr_write" ,_param->_size_address_store_queue);
    in_MEMORY_IN_LOAD_QUEUE_PTR_WRITE  = interface->set_signal_in  <Tlsq_ptr_t        > ("load_queue_ptr_write"  ,_param->_size_address_load_queue );
@@ -97,10 +94,4 @@
       out_MEMORY_OUT_CONTEXT_ID  = interface->set_signal_out <Tcontext_t        > ("context_id"  ,_param->_size_context_id       );
       out_MEMORY_OUT_PACKET_ID   = interface->set_signal_out <Tpacket_t         > ("packet_id"   ,_param->_size_packet_id        );
-#ifdef HAVE_MEMORY_OUT_OPERATION
-      out_MEMORY_OUT_OPERATION   = interface->set_signal_out <Toperation_t      > ("operation"   ,_param->_size_operation        );
-#endif
-#ifdef HAVE_MEMORY_OUT_TYPE
-      out_MEMORY_OUT_TYPE        = interface->set_signal_out <Ttype_t           > ("type"        ,_param->_size_type             );
-#endif
       out_MEMORY_OUT_WRITE_RD    = interface->set_signal_out <Tcontrol_t        > ("write_rd"    ,1                              );
       out_MEMORY_OUT_NUM_REG_RD  = interface->set_signal_out <Tgeneral_address_t> ("num_reg_rd"  ,_param->_size_general_register );
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_deallocation.cpp	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_deallocation.cpp	(revision 62)
@@ -38,7 +38,4 @@
     delete     in_MEMORY_IN_PACKET_ID   ;
     delete     in_MEMORY_IN_OPERATION   ;
-#ifdef HAVE_MEMORY_OUT_TYPE
-    delete     in_MEMORY_IN_TYPE        ;
-#endif
     delete     in_MEMORY_IN_STORE_QUEUE_PTR_WRITE;
     delete     in_MEMORY_IN_LOAD_QUEUE_PTR_WRITE ;
@@ -57,10 +54,4 @@
     delete    out_MEMORY_OUT_CONTEXT_ID;
     delete    out_MEMORY_OUT_PACKET_ID ;
-#ifdef HAVE_MEMORY_OUT_OPERATION
-    delete    out_MEMORY_OUT_OPERATION ;
-#endif
-#ifdef HAVE_MEMORY_OUT_TYPE
-    delete    out_MEMORY_OUT_TYPE      ;
-#endif
     delete    out_MEMORY_OUT_WRITE_RD  ;
     delete    out_MEMORY_OUT_NUM_REG_RD;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_genMoore.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_genMoore.cpp	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_genMoore.cpp	(revision 62)
@@ -28,13 +28,6 @@
     // ~~~~~[ Interface "memory_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    // Test store and load queue
     Tcontext_t         memory_out_context_id = 0;
     Tpacket_t          memory_out_packet_id  = 0;
-#ifdef HAVE_MEMORY_OUT_OPERATION
-    Toperation_t       memory_out_operation  = 0;
-#endif
-#ifdef HAVE_MEMORY_OUT_TYPE
-    Ttype_t            memory_out_type       = 0;
-#endif
     Tcontrol_t         memory_out_write_rd   = 0;
     Tgeneral_address_t memory_out_num_reg_rd = 0;
@@ -47,9 +40,8 @@
     internal_MEMORY_OUT_VAL          = 0;
 
-    // TODO : now only store queue
+    // Test store and load queue
+    // TODO : il faut d'abord tester si un elment de l'access queue n'est pas commitable !!!!!!!
 
     // Test an store must be commited.
-
-    
     if (_store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._state == STORE_QUEUE_COMMIT)
       {
@@ -59,10 +51,4 @@
 	memory_out_context_id= _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._context_id;
 	memory_out_packet_id = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._packet_id ;
-#ifdef HAVE_MEMORY_OUT_OPERATION
-	memory_out_operation = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._operation;
-#endif
-#ifdef HAVE_MEMORY_OUT_TYPE
-  	memory_out_type      = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._type;
-#endif
 //	memory_out_write_rd  
 //	memory_out_num_reg_rd
@@ -71,14 +57,9 @@
       }
 
+    // write output
     PORT_WRITE(out_MEMORY_OUT_VAL       , internal_MEMORY_OUT_VAL);
 
     PORT_WRITE(out_MEMORY_OUT_CONTEXT_ID, memory_out_context_id);
     PORT_WRITE(out_MEMORY_OUT_PACKET_ID , memory_out_packet_id );
-#ifdef HAVE_MEMORY_OUT_OPERATION
-    PORT_WRITE(out_MEMORY_OUT_OPERATION , memory_out_operation );
-#endif
-#ifdef HAVE_MEMORY_OUT_TYPE
-    PORT_WRITE(out_MEMORY_OUT_TYPE      , memory_out_type      );
-#endif
     PORT_WRITE(out_MEMORY_OUT_WRITE_RD  , memory_out_write_rd  );
     PORT_WRITE(out_MEMORY_OUT_NUM_REG_RD, memory_out_num_reg_rd);
@@ -89,5 +70,41 @@
     PORT_WRITE(out_MEMORY_OUT_EXCEPTION , memory_out_exception );
 
+    // ~~~~~[ Interface "dache_req" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+    Tcontext_t        dcache_req_context_id;
+    Tpacket_t         dcache_req_packet_id ;
+    Tdcache_address_t dcache_req_address   ;
+    Tdcache_type_t    dcache_req_type      ;
+    Tcontrol_t        dcache_req_uncached  ;
+    Tdcache_data_t    dcache_req_wdata     ;
+
+    internal_DCACHE_REQ_VAL          = 0;
+
+    // Test store and load queue
+
+    // TODO : il faut d'abord tester si un elment de l'access queue n'est pas commitable !!!!!!!
+
+    // Test an store must be commited.
+    if (_store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._state == STORE_QUEUE_VALID_NO_SPECULATIVE)
+      {
+	internal_DCACHE_REQ_VAL          = 1;
+	internal_DCACHE_REQ_SELECT_QUEUE = SELECT_STORE_QUEUE;
+
+	dcache_req_context_id = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._context_id;
+	dcache_req_packet_id  = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._packet_id ;
+	dcache_req_address    = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._address   ;
+	dcache_req_type       = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._dcache_type;
+	dcache_req_uncached   = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._uncached  ;
+	dcache_req_wdata      = _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._wdata     ;
+      }
+
+    PORT_WRITE(out_DCACHE_REQ_VAL       , internal_DCACHE_REQ_VAL);
+    PORT_WRITE(out_DCACHE_REQ_CONTEXT_ID, dcache_req_context_id);
+    PORT_WRITE(out_DCACHE_REQ_PACKET_ID , dcache_req_packet_id );
+    PORT_WRITE(out_DCACHE_REQ_ADDRESS   , dcache_req_address   );
+    PORT_WRITE(out_DCACHE_REQ_TYPE      , dcache_req_type      );
+    PORT_WRITE(out_DCACHE_REQ_UNCACHED  , dcache_req_uncached  );
+    PORT_WRITE(out_DCACHE_REQ_WDATA     , dcache_req_wdata     );
+    
     log_printf(FUNC,Load_store_unit,FUNCTION,"End");
   };
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_transition.cpp	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit_function_speculative_load_commit_transition.cpp	(revision 62)
@@ -57,9 +57,8 @@
 	    //  others in speculation_access_queue
 
-	    Toperation_t    operation           = PORT_READ(in_MEMORY_IN_OPERATION);
-	    Tgeneral_data_t address             = (PORT_READ(in_MEMORY_IN_IMMEDIAT) +
-						   PORT_READ(in_MEMORY_IN_DATA_RA ));
-	    
-	    bool            exception_alignement= (mask_memory_access(operation) & address) != 0;
+	    Toperation_t    operation            = PORT_READ(in_MEMORY_IN_OPERATION);
+	    Tgeneral_data_t address              = (PORT_READ(in_MEMORY_IN_IMMEDIAT) +
+						    PORT_READ(in_MEMORY_IN_DATA_RA ));
+	    bool            exception_alignement = (mask_memory_access(operation) & address) != 0;
 						    
 	    if (is_operation_memory_store(operation) == true)
@@ -159,10 +158,6 @@
 		    _store_queue [index]._context_id           = PORT_READ(in_MEMORY_IN_CONTEXT_ID  );
 		    _store_queue [index]._packet_id            = PORT_READ(in_MEMORY_IN_PACKET_ID   );
-#ifdef HAVE_MEMORY_OUT_OPERATION
-		    _store_queue [index]._operation            = operation;
-#endif
-#ifdef HAVE_MEMORY_OUT_TYPE
-		    _store_queue [index]._type                 = PORT_READ(in_MEMORY_IN_TYPE        );
-#endif
+		    _store_queue [index]._dcache_type          = operation_to_dcache_type(operation);
+		    _store_queue [index]._uncached             = 0; // is the MMU that have this info
 		    _store_queue [index]._load_queue_ptr_write = PORT_READ(in_MEMORY_IN_LOAD_QUEUE_PTR_WRITE);
 		    _store_queue [index]._address              = address;
@@ -217,4 +212,43 @@
 	      }
 	  }
+
+	//================================================================
+	// Interface "DCACHE_REQ"
+	//================================================================
+        if ((    internal_DCACHE_REQ_VAL  == 1) and
+            (PORT_READ(in_DCACHE_REQ_ACK) == 1))
+          {
+	    switch (internal_DCACHE_REQ_SELECT_QUEUE)
+	      {
+	      case SELECT_STORE_QUEUE :
+		{
+		  // =======================
+		  // ===== STORE_QUEUE =====
+		  // =======================
+		  
+		  // Entry flush and increase the read pointer
+		  
+		  _store_queue [internal_MEMORY_STORE_QUEUE_PTR_READ]._state = STORE_QUEUE_COMMIT;
+
+		  break;
+		}
+	      case SELECT_LOAD_QUEUE :
+	      case SELECT_LOAD_QUEUE_SPECULATIVE :
+		break;
+	      }
+	  }
+
+#if DEBUG>=DEBUG_TRACE
+	// ***** dump store queue
+	cout << "Dump store queue" << endl
+	     << "ptr_read : " << toString(static_cast<uint32_t>(internal_MEMORY_STORE_QUEUE_PTR_READ)) << endl;
+	
+	for (uint32_t i=0; i<_param->_size_store_queue; i++)
+	  {
+	    uint32_t j = (internal_MEMORY_STORE_QUEUE_PTR_READ+i)%_param->_size_store_queue;
+	    cout << "{" << j << "}" << endl
+		 << _store_queue[j] << endl;
+	  }
+#endif
       }
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/src/test.cpp	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/src/test.cpp	(revision 62)
@@ -112,5 +112,5 @@
   sc_signal<Tspecial_address_t>  ***  in_RETIRE_ROB_RE_NEW_NUM_REG    ;
 
-  string rename;
+  string rename = "signal";
 
   in_CLOCK                                = new sc_clock ("clock", 1.0, 0.5);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_allocation.cpp	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_allocation.cpp	(revision 62)
@@ -370,6 +370,6 @@
 #endif
 	
-	_component->port_map(name_component,"in_CLOCK" , _name, "in_CLOCK");
-	_component->port_map(name_component,"in_NRESET", _name, "in_NRESET");
+	_component->port_map(name_component,"in_CLOCK"   , _name, "in_CLOCK");
+	_component->port_map(name_component,"in_NRESET"  , _name, "in_NRESET");
 
 	for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
@@ -733,5 +733,7 @@
       _component->port_map(name_component,"in_CLOCK" , _name, "in_CLOCK" );
       _component->port_map(name_component,"in_NRESET", _name, "in_NRESET");
-    
+      _component->port_map(name_component,"out_CONST_0");
+      _component->port_map(name_component,"out_CONST_1");
+
       for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
 	{
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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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 61)
+++ 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");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/SelfTest/mkf.info
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/SelfTest/mkf.info	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/SelfTest/mkf.info	(revision 62)
@@ -3,59 +3,59 @@
 target_dep	all	Select_Priority_Fixed_0.ngc
 target_dep	Select_Priority_Fixed_0.ngc	Select_Priority_Fixed_0.prj
-target_dep	Select_Priority_Fixed_0.prj	Select_Priority_Fixed_0_Pack.vhdl Select_Priority_Fixed_0.vhdl
+target_dep	Select_Priority_Fixed_0.prj	Select_Priority_Fixed_0.vhdl Select_Priority_Fixed_0_Pack.vhdl
+
+# Select_Priority_Fixed_1
+target_dep	all	Select_Priority_Fixed_1.ngc
+target_dep	Select_Priority_Fixed_1.ngc	Select_Priority_Fixed_1.prj
+target_dep	Select_Priority_Fixed_1.prj	Select_Priority_Fixed_1.vhdl Select_Priority_Fixed_10.vhdl Select_Priority_Fixed_10_Pack.vhdl Select_Priority_Fixed_11.vhdl Select_Priority_Fixed_11_Pack.vhdl Select_Priority_Fixed_1_Pack.vhdl
 
 # Select_Priority_Fixed_10
 target_dep	all	Select_Priority_Fixed_10.ngc
 target_dep	Select_Priority_Fixed_10.ngc	Select_Priority_Fixed_10.prj
-target_dep	Select_Priority_Fixed_10.prj	Select_Priority_Fixed_10_Pack.vhdl Select_Priority_Fixed_10.vhdl
+target_dep	Select_Priority_Fixed_10.prj	Select_Priority_Fixed_10.vhdl Select_Priority_Fixed_10_Pack.vhdl
 
 # Select_Priority_Fixed_11
 target_dep	all	Select_Priority_Fixed_11.ngc
 target_dep	Select_Priority_Fixed_11.ngc	Select_Priority_Fixed_11.prj
-target_dep	Select_Priority_Fixed_11.prj	Select_Priority_Fixed_11_Pack.vhdl Select_Priority_Fixed_11.vhdl
-
-# Select_Priority_Fixed_1
-target_dep	all	Select_Priority_Fixed_1.ngc
-target_dep	Select_Priority_Fixed_1.ngc	Select_Priority_Fixed_1.prj
-target_dep	Select_Priority_Fixed_1.prj	Select_Priority_Fixed_10_Pack.vhdl Select_Priority_Fixed_10.vhdl Select_Priority_Fixed_11_Pack.vhdl Select_Priority_Fixed_11.vhdl Select_Priority_Fixed_1_Pack.vhdl Select_Priority_Fixed_1.vhdl
+target_dep	Select_Priority_Fixed_11.prj	Select_Priority_Fixed_11.vhdl Select_Priority_Fixed_11_Pack.vhdl
 
 # Select_Priority_Fixed_2
 target_dep	all	Select_Priority_Fixed_2.ngc
 target_dep	Select_Priority_Fixed_2.ngc	Select_Priority_Fixed_2.prj
-target_dep	Select_Priority_Fixed_2.prj	Select_Priority_Fixed_2_Pack.vhdl Select_Priority_Fixed_2.vhdl
+target_dep	Select_Priority_Fixed_2.prj	Select_Priority_Fixed_2.vhdl Select_Priority_Fixed_2_Pack.vhdl
 
 # Select_Priority_Fixed_3
 target_dep	all	Select_Priority_Fixed_3.ngc
 target_dep	Select_Priority_Fixed_3.ngc	Select_Priority_Fixed_3.prj
-target_dep	Select_Priority_Fixed_3.prj	Select_Priority_Fixed_3_Pack.vhdl Select_Priority_Fixed_3.vhdl
+target_dep	Select_Priority_Fixed_3.prj	Select_Priority_Fixed_3.vhdl Select_Priority_Fixed_3_Pack.vhdl
 
 # Select_Priority_Fixed_4
 target_dep	all	Select_Priority_Fixed_4.ngc
 target_dep	Select_Priority_Fixed_4.ngc	Select_Priority_Fixed_4.prj
-target_dep	Select_Priority_Fixed_4.prj	Select_Priority_Fixed_4_Pack.vhdl Select_Priority_Fixed_4.vhdl
+target_dep	Select_Priority_Fixed_4.prj	Select_Priority_Fixed_4.vhdl Select_Priority_Fixed_4_Pack.vhdl
 
 # Select_Priority_Fixed_5
 target_dep	all	Select_Priority_Fixed_5.ngc
 target_dep	Select_Priority_Fixed_5.ngc	Select_Priority_Fixed_5.prj
-target_dep	Select_Priority_Fixed_5.prj	Select_Priority_Fixed_5_Pack.vhdl Select_Priority_Fixed_5.vhdl
+target_dep	Select_Priority_Fixed_5.prj	Select_Priority_Fixed_5.vhdl Select_Priority_Fixed_5_Pack.vhdl
 
 # Select_Priority_Fixed_6
 target_dep	all	Select_Priority_Fixed_6.ngc
 target_dep	Select_Priority_Fixed_6.ngc	Select_Priority_Fixed_6.prj
-target_dep	Select_Priority_Fixed_6.prj	Select_Priority_Fixed_6_Pack.vhdl Select_Priority_Fixed_6.vhdl
+target_dep	Select_Priority_Fixed_6.prj	Select_Priority_Fixed_6.vhdl Select_Priority_Fixed_6_Pack.vhdl
 
 # Select_Priority_Fixed_7
 target_dep	all	Select_Priority_Fixed_7.ngc
 target_dep	Select_Priority_Fixed_7.ngc	Select_Priority_Fixed_7.prj
-target_dep	Select_Priority_Fixed_7.prj	Select_Priority_Fixed_7_Pack.vhdl Select_Priority_Fixed_7.vhdl
+target_dep	Select_Priority_Fixed_7.prj	Select_Priority_Fixed_7.vhdl Select_Priority_Fixed_7_Pack.vhdl
 
 # Select_Priority_Fixed_8
 target_dep	all	Select_Priority_Fixed_8.ngc
 target_dep	Select_Priority_Fixed_8.ngc	Select_Priority_Fixed_8.prj
-target_dep	Select_Priority_Fixed_8.prj	Select_Priority_Fixed_8_Pack.vhdl Select_Priority_Fixed_8.vhdl
+target_dep	Select_Priority_Fixed_8.prj	Select_Priority_Fixed_8.vhdl Select_Priority_Fixed_8_Pack.vhdl
 
 # Select_Priority_Fixed_9
 target_dep	all	Select_Priority_Fixed_9.ngc
 target_dep	Select_Priority_Fixed_9.ngc	Select_Priority_Fixed_9.prj
-target_dep	Select_Priority_Fixed_9.prj	Select_Priority_Fixed_9_Pack.vhdl Select_Priority_Fixed_9.vhdl
+target_dep	Select_Priority_Fixed_9.prj	Select_Priority_Fixed_9.vhdl Select_Priority_Fixed_9_Pack.vhdl
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.Common
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.Common	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.Common	(revision 62)
@@ -20,9 +20,11 @@
 
 LIBDIR 				= $(DIR_LIBRARY)			\
-				  $(SYSTEMC_LIBDIR_$(SIMULATOR)) 	\
-				  $(SOCLIB_LIBDIR)   			\
-				  $(OR1K_LIBDIR) 				
+				  $(SYSTEMC_LIBDIR_$(SIMULATOR)) 	
+#				  $(SOCLIB_LIBDIR)   			\
+#				  $(OR1K_LIBDIR) 				
 
-LIBS		   		= $(LIBRARY) -lm $(SYSTEMC_LIBNAME_$(SIMULATOR)) $(SOCLIB_LIBNAME) $(OR1K_LIBNAME) -lbfd  -ldl
+LIBS		   		= $(LIBRARY) -lm $(SYSTEMC_LIBNAME_$(SIMULATOR)) -ldl
+
+#                                 $(SOCLIB_LIBNAME) $(OR1K_LIBNAME) -lbfd  
 
 FLAGS_COMMON			= $(SYSTEMC_CFLAGS_$(SIMULATOR))	\
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.Selftest
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.Selftest	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.Selftest	(revision 62)
@@ -47,5 +47,5 @@
 config        			: $(DIR_CFG_GEN)
 				@\
-				$(ECHO) "Generate configuration";\
+				$(ECHO) "Generate configuration";									\
 				declare -i  CPT=0;											\
 				declare     files;											\
@@ -160,4 +160,6 @@
 					*.pos			\
 					*.stat			\
+					*.dot 			\
+					*.txt			\
 					generated_by_systemcass \
 					core*;
@@ -178,5 +180,5 @@
 help				: 
 				@\
-				$(MAKE) common_help  ;\
+				$(MAKE) common_help  ; \
 				$(MAKE) synthesis_help;\  
 				$(MAKE) selftest_help;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.Synthesis
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.Synthesis	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.Synthesis	(revision 62)
@@ -22,5 +22,5 @@
 	  			  $(patsubst $(DIR_CFG_USER)/%.cfg,$(DIR_LOG)/%.fpga.log,$(wildcard $(DIR_CFG_USER)/*.cfg))
 #-----[ Rules ]--------------------------------------------
-.PRECIOUS			: $(DIR_LOG)/%.vhdl.log $(DIR_LOG)/%.vhdl_sim.log
+.PRECIOUS			: $(DIR_LOG)/%.vhdl.log $(DIR_LOG)/%.sim.log
 
 vhdl				: execute $(DIR_WORK)
@@ -36,11 +36,11 @@
 				if $(TEST) $${#log_files[*]} -ne 0; then $(MAKE) $${log_files[*]/#$(DIR_VHDL)/$(DIR_LOG)}; fi;
 
-vhdl_sim			: vhdl
+sim				: vhdl
 				@\
 				declare -a vhdl_files=($$($(LS) $(DIR_VHDL)/*_Testbench.vhdl));						\
-				declare -a log_files=($${vhdl_files[*]/%.vhdl/.vhdl_sim.log});						\
+				declare -a log_files=($${vhdl_files[*]/%.vhdl/.sim.log});						\
 				if $(TEST) $${#log_files[*]} -ne 0; then $(MAKE) $${log_files[*]/#$(DIR_VHDL)/$(DIR_LOG)}; fi;
 
-fpga				: vhdl_sim
+fpga				: sim
 				@\
 				$(ECHO) -e "" > $(FPGA_CFG_FILE_LOCAL);	\
@@ -54,5 +54,5 @@
 					$(ECHO) -e ""                                     >> $(FPGA_CFG_FILE_LOCAL);			\
 				done;					\
-				($(XILINX_ENV); $(CD) $(FPGA_CFG_FILE_GLOBAL_DIR); ./$(FPGA_CFG_FILE_GLOBAL));				\
+				($(XILINX_ENV); $(CD) $(FPGA_CFG_FILE_GLOBAL_DIR); $(FPGA_CFG_FILE_GLOBAL));				\
 				$(MAKE) $(FPGA_LOG_FILES);
 
@@ -67,5 +67,5 @@
 				$(MODELTECH_VLIB) $@;
 
-$(DIR_LOG)/%.vhdl_sim.log	: $(DIR_VHDL)/%.vhdl $(DIR_LOG)/%.vhdl.log
+$(DIR_LOG)/%.sim.log		: $(DIR_VHDL)/%.vhdl $(DIR_LOG)/%.vhdl.log
 				@\
 				$(ECHO) "VHDL's Simulation  : $*"; \
@@ -92,5 +92,5 @@
 				$(ECHO) "";\
 				$(ECHO) " * vhdl                 : compile all vhdl's file";\
-				$(ECHO) " * vhdl_sim             : simulate all testbench's file";\
+				$(ECHO) " * sim                  : simulate all testbench's file";\
 				$(ECHO) " * fpga                 : synthetis with fpga's tools";\
 				$(ECHO) "";
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.flags
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.flags	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.flags	(revision 62)
@@ -2,24 +2,24 @@
 # $Id$
 # 
-# [ Description ]
+# [ Description ]
 # 
 
-#-----[ Simulator ]----------------------------------------
+#-----[ Simulator ]----------------------------------------
 SIMULATOR			= systemcass_deps
 
-# 3 simulators :
-# systemc			- SystemC    
+# 3 simulators :
+# systemc			- SystemC    
 # systemcass 			- SystemCASS
 # systemcass_deps		- Systemcass, and use port dependency information instead of sensitivity list
 
-#-----[ Flags ]--------------------------------------------
+#-----[ Flags ]--------------------------------------------
 MORPHEO_FLAGS			=	-DSYSTEMC		\
-					-DVHDL			\
-  					-DVHDL_TESTBENCH	\
-					-DVHDL_TESTBENCH_ASSERT	\
-					-DSTATISTICS 		\
-					-DDEBUG=DEBUG_TRACE
+					-DDEBUG=DEBUG_TRACE	
 
-
+#					-DVHDL			\
+#  					-DVHDL_TESTBENCH	\
+#					-DVHDL_TESTBENCH_ASSERT	\
+#
+#					-DSTATISTICS 		\
 #					-DCONFIGURATION  	\
 #					-DPOSITION       	\
@@ -28,8 +28,8 @@
 # DEBUG={level}                        - Print Debug Message
 # SYSTEMC                              - To generate a systemc's model
-# VHDL                                 - To generate a vhdl's    models
+# VHDL                                 - To generate a vhdl's    models
 # VHDL_TESTBENCH        (need SYSTEMC) - In the simulation, generate two testbench's file (input and ouput) to validate the vhdl's model
 # VHDL_TESTBENCH_ASSERT (need SYSTEMC) - In the simulation, generate in  testbench's file an serie of assert
-# STATISTICS            (need SYSTEMC) - In the simulation, generate a statistics's file
-# POSITION                             - To generate a position's files     (it's input of viewer)
+# STATISTICS            (need SYSTEMC) - In the simulation, generate a statistics's file
+# POSITION                             - To generate a position's files     (it's input of viewer)
 # CONFIGURATION		               - To generate a configuration's file (it's input of viewer and generator)
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.mkf
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.mkf	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.mkf	(revision 62)
@@ -3,25 +3,30 @@
 #
 
-all: _Generic/RegisterFile/RegisterFile_Monolithic/SelfTest _Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest _Generic/Select/Select_Priority_Fixed/SelfTest
+all: _Generic/RegisterFile/RegisterFile_Monolithic/SelfTest _Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest _Generic/Select/Select_Priority_Fixed/SelfTest _Generic/RegisterFile/RegisterFile_Monolithic/SelfTest _Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest
 
 _Generic/RegisterFile/RegisterFile_Monolithic/SelfTest:
-	gmake all -C Generic/RegisterFile/RegisterFile_Monolithic/SelfTest
+	make all -C Generic/RegisterFile/RegisterFile_Monolithic/SelfTest
 
 _Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest:
-	gmake all -C Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest
+	make all -C Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest
 
 _Generic/Select/Select_Priority_Fixed/SelfTest:
-	gmake all -C Generic/Select/Select_Priority_Fixed/SelfTest
+	make all -C Generic/Select/Select_Priority_Fixed/SelfTest
+
+_Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest:
+	make all -C Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest
 
 clean:
-	gmake clean -C Generic/RegisterFile/RegisterFile_Monolithic/SelfTest
-	gmake clean -C Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest
-	gmake clean -C Generic/Select/Select_Priority_Fixed/SelfTest
+	make clean -C Generic/RegisterFile/RegisterFile_Monolithic/SelfTest
+	make clean -C Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest
+	make clean -C Generic/Select/Select_Priority_Fixed/SelfTest
+	make clean -C Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest
 
 re: clean all
 
 install:
-	gmake install -C Generic/RegisterFile/RegisterFile_Monolithic/SelfTest
-	gmake install -C Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest
-	gmake install -C Generic/Select/Select_Priority_Fixed/SelfTest
+	make install -C Generic/RegisterFile/RegisterFile_Monolithic/SelfTest
+	make install -C Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest
+	make install -C Generic/Select/Select_Priority_Fixed/SelfTest
+	make install -C Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/Makefile.deps
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/Makefile.deps	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/Makefile.deps	(revision 62)
@@ -21,13 +21,17 @@
 					$(Behavioural_DIR_LIBRARY)
 
+@COMPONENT_DEPENDENCIES		=	Behavioural_library
+
+@COMPONENT_CLEAN        	=	Behavioural_library_clean
+
 #-----[ Rules ]--------------------------------------------
 
-@COMPONENT_library		: 
+.NOTPARALLEL			: @COMPONENT_library @COMPONENT_library_clean
+
+@COMPONENT_library		: $(@COMPONENT_DEPENDENCIES)
 				@\
-				$(MAKE) Behavioural_library; \
 				$(MAKE) --directory=$(DIR_MORPHEO)/Behavioural/@DIRECTORY --makefile=Makefile;
-	
-@COMPONENT_library_clean	: 
+
+@COMPONENT_library_clean	: $(@COMPONENT_CLEAN)
 				@\
-				$(MAKE) Behavioural_library_clean; \
 				$(MAKE) --directory=$(DIR_MORPHEO)/Behavioural/@DIRECTORY --makefile=Makefile clean;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/SelfTest/src/main.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/SelfTest/src/main.cpp	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component/SelfTest/src/main.cpp	(revision 62)
@@ -34,7 +34,9 @@
     usage (argc, argv);
 
-  const string   name      = argv[1];
-//const uint32_t size_data = atoi(argv[2]);
-//const uint32_t nb_port   = atoi(argv[3]);
+  uint32_t       x = 1;
+
+  const string   name      =      argv[x++];
+//const uint32_t size_data = atoi(argv[x++]);
+//const uint32_t nb_port   = atoi(argv[x++]);
 
   try 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Component.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Component.h	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Component.h	(revision 62)
@@ -38,5 +38,5 @@
   {
     public : Tinstance_t _instance;
-    public : Entity         * _entity  ;
+    public : Entity    * _entity  ;
   } Tcomponent_t;    
   
@@ -74,6 +74,6 @@
 
   private   : Entity *              find_entity       (string name);
-  private   : Interface *           find_interface    (string   name  , 
-						       Entity * entity);
+//private   : Interface *           find_interface    (string   name  , 
+//						       Entity * entity);
 
 #ifdef VHDL
@@ -81,8 +81,16 @@
 #endif
 
+
+  private   : Signal *              signal_internal   (Entity * entity_productor,
+						       Signal * signal_productor);
+
   public    : void                  port_map          (string component_src ,
 						       string port_src      ,
 						       string component_dest,
 						       string port_dest    );
+  public    : void                  port_map          (string component_src ,
+						       string port_src      );
+
+  public    : bool                  test_map          (void);
 
 #ifdef POSITION
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Constants.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Constants.h	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Constants.h	(revision 62)
@@ -131,4 +131,27 @@
 #define EXCEPTION_MEMORY_BUS_ERROR               0x4  // Access at a invalid physical address
 #define EXCEPTION_MEMORY_MISS_SPECULATION        0x5  // Load miss speculation
+
+  //==================================================[ dcache_type ]=====
+#  define DCACHE_LOAD                    0x0      // 0000
+#  define DCACHE_LOCK                    0x1      // 0001
+#  define DCACHE_INVALIDATE              0x2      // 0010
+#  define DCACHE_PREFETCH                0x3      // 0011
+//#define DCACHE_                        0x4      // 0100
+//#define DCACHE_                        0x5      // 0101
+#  define DCACHE_FLUSH                   0x6      // 0110
+#  define DCACHE_SYNCHRONIZATION         0x7      // 0111
+
+#  define DCACHE_STORE_8                 0x8      // 1000
+#  define DCACHE_STORE_16                0x9      // 1001
+#  define DCACHE_STORE_32                0xa      // 1010
+#  define DCACHE_STORE_64                0xb      // 1011
+//#define DCACHE_                        0xc      // 1100
+//#define DCACHE_                        0xd      // 1101
+//#define DCACHE_                        0xe      // 1110
+//#define DCACHE_                        0xf      // 1111
+
+
+// just take the 4 less significative bits.
+#define operation_to_dcache_type(x) (x&0xf)
 
   /*
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Debug_component.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Debug_component.h	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Debug_component.h	(revision 62)
@@ -25,4 +25,6 @@
 #define             DEBUG_Read_queue                              false
 #define             DEBUG_Reservation_station                     false
+#define         DEBUG_Register_unit				  true
+#define           DEBUG_Register_unit_Glue			  false
 #define     DEBUG_Multi_Front_end                                 false
 #define       DEBUG_Front_end                                     false
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Entity.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Entity.h	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Entity.h	(revision 62)
@@ -80,4 +80,6 @@
 #endif
 
+  public    : bool                  test_map          (bool top_level);
+
 #ifdef POSITION
   public    : XML                   toXML             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface.h	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface.h	(revision 62)
@@ -22,4 +22,5 @@
 #include "Behavioural/include/Vhdl.h"
 #endif
+#include "Common/include/ChangeCase.h"
 #include "Common/include/ToString.h"
 #include "Common/include/ErrorMorpheo.h"
@@ -230,4 +231,6 @@
 #endif
 
+  public    : bool                  test_map             (bool top_level);
+
 #ifdef POSITION
   public    : void                  interface_map        (void * entity,
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interfaces.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interfaces.h	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interfaces.h	(revision 62)
@@ -80,4 +80,7 @@
   public    : XML                   toXML_mapping         (void);
 #endif
+
+  public    : bool                  test_map              (bool top_level);
+
   public    : friend ostream&       operator<<            (ostream& output_stream,
   					  		   morpheo::behavioural::Interfaces & x);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Parameters.h	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Parameters.h	(revision 62)
@@ -15,4 +15,5 @@
 #include "Common/include/ErrorMorpheo.h"
 #include "Common/include/ToString.h"
+#include "Common/include/Log2.h"
 #include "Common/include/Debug.h"
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Signal.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Signal.h	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Signal.h	(revision 62)
@@ -53,19 +53,20 @@
 
     // -----[ fields ]----------------------------------------------------
-  private   : const string          _name         ;
-  private   : const direction_t     _direction    ;
-  private   : const uint32_t        _size         ;
-  private   : const presence_port_t _presence_port;
+  private   : const string          _name          ;
+  private   : const direction_t     _direction     ;
+  private   : const uint32_t        _size          ;
+  private   : const presence_port_t _presence_port ;
 
   private   : Signal *              _connect_to_signal;   // the actual implementaion, this signal link with one signal (but if signal is an output, it can be connect with many signal ...)
   private   : Signal *              _connect_from_signal; // producter of signal. If NULL, then producteur is the current entity
-  private   : bool                  _is_allocate  ; // Have allocate a sc_in or sc_out port
-  private   : void *                _sc_signal    ; // sc_in or sc_out associated at this signal
-  private   : bool                  _is_map       ; 
-  private   : void *                _sc_signal_map; // sc_out generated this signal
-  private   : type_info_t           _type_info    ;
+  private   : bool                  _is_allocate   ; // Have allocate a sc_in or sc_out port
+  private   : void *                _sc_signal     ; // sc_in or sc_out associated at this signal
+  private   : void *                _sc_signal_map ; // sc_out generated this signal
+  private   : bool                  _is_map_as_src ; 
+  private   : bool                  _is_map_as_dest;
+  private   : type_info_t           _type_info     ;
 
 #ifdef VHDL_TESTBENCH
-  private   : list<string>        * _list_value   ;
+  private   : list<string>        * _list_value    ;
 #endif
 
@@ -78,17 +79,20 @@
   public    :                   ~Signal         ();
 
-  public    : string            get_name        (void);
-  public    : uint32_t          get_size        (void);
-  public    : bool              get_is_map      (void);
-  public    : Signal *          get_connect_to_signal (void);
+  public    : string            get_name                (void);
+  public    : uint32_t          get_size                (void);
+  public    : Signal *          get_connect_to_signal   (void);
   public    : Signal *          get_connect_from_signal (void);
-  public    : direction_t       get_direction   (void);
-
-  public    : bool              presence_vhdl      (void);
-  public    : bool              presence_testbench (void);
-
-//   public    : void              mapping         (Signal * signal);
-  public    : void              link            (Signal * signal  ,
-						 bool     is_port_component);
+  public    : direction_t       get_direction           (void);
+  public    : type_info_t       get_type_info           (void);
+
+  public    : bool              presence_vhdl           (void);
+  public    : bool              presence_testbench      (void);
+
+  public    : bool              test_map                (bool top_level);
+
+  public    : void              link                    (Signal * signal_dest,
+							 bool     signal_dest_is_port);
+
+  public    : void              connect                 (Signal * signal_dest);
 
 #ifdef SYSTEMC         
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/mkf.info
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/mkf.info	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/mkf.info	(revision 62)
@@ -18,5 +18,6 @@
 target_dep		all		Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest
 target_dep		all		Generic/Select/Select_Priority_Fixed/SelfTest
-
+target_dep		all		Generic/RegisterFile/RegisterFile_Monolithic/SelfTest
+target_dep		all		Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest
 # mkf include path
 var_define		_mkf_path	include_mkf
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_port_map.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_port_map.cpp	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_port_map.cpp	(revision 62)
@@ -51,7 +51,98 @@
 	       ,signal_dest->get_name().c_str());
 
-    signal_src ->link   (signal_dest, entity_dest == _entity);
-    //signal_dest->mapping(signal_src );
+    // need an internal signal ?
+    bool src_is_port  = entity_src  == _entity;
+    bool dest_is_port = entity_dest == _entity;
+
+    if (src_is_port == true)
+      throw (ErrorMorpheo ("<Component::port_map> src can't be an interface's port of the top level."));
     
+    // 2 cases : 
+    //  a) dest is a top level port -> direct connection
+    //  b) dest is a component port -> need internal signal
+    if (dest_is_port == false)
+      {
+	// 1) find productor of signal
+	//        
+	// Interface      Component
+	//    |	         |	   
+	//  ----> (IN)     --X-> (IN) 
+	//    |	         |	   
+	//  <-X-- (OUT)    <---- (OUT)
+	//    |              |        
+	
+	Signal * signal_productor;
+	Entity * entity_productor;
+
+	bool     src_is_productor = (signal_src->get_direction() == OUT);
+
+	if (src_is_productor == true)
+	  {
+	    signal_productor = signal_src;
+	    entity_productor = entity_src;
+	  }
+	else
+	  {
+	    signal_productor = signal_dest;
+	    entity_productor = entity_dest;
+	  }
+
+	signal_dest  = signal_internal (entity_productor, signal_productor);
+	dest_is_port = false;
+      }
+    
+    try
+      {
+	signal_src->link(signal_dest,
+			 dest_is_port);
+      }
+    catch (morpheo::ErrorMorpheo & error)
+      {
+	throw (ErrorMorpheo ("<Component::port_map> Error in mapping between "+entity_src ->get_name()+"."+signal_src ->get_name()+" and "+entity_dest->get_name()+"."+signal_dest->get_name()+" :\n"+error.what ()));
+      }
+    //catch (...)
+    //  {
+    //  }
+
+    log_printf(FUNC,Behavioural,FUNCTION,"End");
+  };
+
+
+  void Component::port_map (string component_src ,
+			    string port_src      )
+  {
+    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+    
+    Entity * entity_src = find_entity(component_src);
+    
+    if (entity_src == NULL)
+      throw (ErrorMorpheo ("<Component::port_map> in component \""+_entity->get_name()+"\", port map with unknow component \""+component_src+"\"."));
+    
+    Signal * signal_src = entity_src->find_signal (port_src);
+    
+    if (signal_src == NULL)
+      throw (ErrorMorpheo ("<Component::port_map> in component \""+_entity->get_name()+"\", port map with component \""+component_src+"\" and a unknow signal \""+port_src+"\"."));
+    
+    // need an internal signal ?
+    
+    if (entity_src == _entity)
+      throw (ErrorMorpheo ("<Component::port_map> src can't be an interface's port of the top level."));
+    
+    if (signal_src->get_direction() != OUT)
+      throw (ErrorMorpheo ("<Component::port_map> the direction of the signal '"+signal_src->get_name()+"' must be OUT."));
+    
+    try
+      {
+	signal_src->link(signal_internal (entity_src, signal_src),
+			 false);
+      }
+    catch (morpheo::ErrorMorpheo & error)
+      {
+	throw (ErrorMorpheo ("<Component::port_map> Error in mapping "+entity_src ->get_name()+"."+signal_src ->get_name()+" :\n"+error.what ()));
+      }
+    //catch (...)
+    //  {
+    //  }
+
     log_printf(FUNC,Behavioural,FUNCTION,"End");
   };
@@ -59,2 +150,3 @@
 }; // end namespace behavioural          
 }; // end namespace morpheo              
+
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_signal_internal.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_signal_internal.cpp	(revision 62)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_signal_internal.cpp	(revision 62)
@@ -0,0 +1,89 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Component.h"
+
+namespace morpheo              {
+namespace behavioural          {
+
+#undef  FUNCTION
+#define FUNCTION "Component::signal_internal"
+  Signal * Component::signal_internal (Entity * entity_productor,
+				       Signal * signal_productor)
+  {
+    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+
+    // create name of internal's signal
+    string str_entity = entity_productor->get_name();
+    string str_signal = signal_productor->get_name();
+    
+    UpperCase (str_entity);
+    UpperCase (str_signal);
+    
+    string name_internal = "internal_"+str_entity+"_"+str_signal;
+    
+    // test if internal's signal exist ... else, create
+    Signal * signal_internal = _entity->find_signal (name_internal);
+    
+    if (signal_internal == NULL)
+      {
+	// signal don't exist ... create
+	log_printf(TRACE,Behavioural,FUNCTION, " * Create an internal signal : \"%s\".",name_internal.c_str());
+	
+	Interface * interface = _entity->find_interface("");
+	
+	if (interface == NULL)
+	  throw (ErrorMorpheo ("<Component::port_map> Component \""+_entity->get_name()+"\", doesn't have an interface \"\"."));
+	
+	string signame = entity_productor->get_name()+"_"+signal_productor->get_name();
+	
+	// Signal's creation
+	switch (signal_productor->get_type_info())
+	  {
+	  case BOOL     : 
+	    {
+	      interface->set_signal_internal<bool    >(signame, signal_productor->get_size());
+	      break;
+	    }
+	  case UINT8_T  :
+	    {
+	      interface->set_signal_internal<uint8_t >(signame, signal_productor->get_size());
+	      break;
+	    }
+	  case UINT16_T :
+	    {
+	      interface->set_signal_internal<uint16_t>(signame, signal_productor->get_size());
+	      break;
+	    }
+	  case UINT32_T :
+	    {
+	      interface->set_signal_internal<uint32_t>(signame, signal_productor->get_size());
+	      break;
+	    }
+	  case UINT64_T :
+	    {
+	      interface->set_signal_internal<uint64_t>(signame, signal_productor->get_size());
+	      break;
+	    }
+	  default       :
+	    throw (ErrorMorpheo ("Signal \""+name_internal+"\" : type unknow."));
+	  }
+	
+	signal_internal = _entity->find_signal (name_internal);
+	
+	if (signal_internal == NULL)
+	  throw (ErrorMorpheo ("Signal \""+name_internal+"\" : error in creation of internal's signal."));
+      }
+
+    log_printf(FUNC,Behavioural,FUNCTION,"End");
+
+    return signal_internal;
+  };
+
+}; // end namespace behavioural          
+}; // end namespace morpheo              
+
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_test_map.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_test_map.cpp	(revision 62)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_test_map.cpp	(revision 62)
@@ -0,0 +1,49 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Component.h"
+
+namespace morpheo              {
+namespace behavioural          {
+
+#undef  FUNCTION
+#define FUNCTION "Component::test_map"
+  bool Component::test_map (void)
+  {
+    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+
+    string name = _entity->get_name();
+    bool test_ok = true;
+    if (_list_component->empty () == true)
+      log_printf(NONE,Behavioural,FUNCTION, "Component \"%s\" is a behavioural description",name.c_str());
+    else
+      {
+	log_printf(NONE,Behavioural,FUNCTION, "Component \"%s\" is a structural description",name.c_str());
+
+	log_printf(INFO,Behavioural,FUNCTION, "Test port I/O");
+	
+	test_ok &= _entity->test_map(true);
+
+	log_printf(INFO,Behavioural,FUNCTION, "Test all internal component");
+	
+	for (list<Tcomponent_t *>::iterator i= _list_component->begin();
+	     i != _list_component->end();
+	     ++i)
+	  test_ok &= (*i)->_entity->test_map(false);
+      }
+    
+    log_printf(FUNC,Behavioural,FUNCTION,"End");
+    
+    if (test_ok == false)
+      throw (ErrorMorpheo ("<Component::test_map> A lot of port is not connected."));
+
+    return test_ok;
+  };
+
+
+}; // end namespace behavioural          
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Entity_test_map.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Entity_test_map.cpp	(revision 62)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Entity_test_map.cpp	(revision 62)
@@ -0,0 +1,30 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Entity.h"
+
+
+namespace morpheo              {
+namespace behavioural          {
+
+#undef  FUNCTION
+#define FUNCTION "Entity::test_map"
+  bool Entity::test_map (bool top_level)
+  {
+    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+  
+    log_printf(NONE,Behavioural,FUNCTION, " * Test mapping : Entity \"%s\"",_name.c_str());
+  
+    bool _return = _interfaces->test_map(top_level);
+
+    log_printf(FUNC,Behavioural,FUNCTION,"End");
+    
+    return _return;
+  };
+
+}; // end namespace behavioural          
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_fifo_testbench_test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_fifo_testbench_test.cpp	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_fifo_testbench_test.cpp	(revision 62)
@@ -66,5 +66,6 @@
 	    while (i != _list_cycle->end())
 	      {
-		vhdl->set_body("assert not ( ("+counter_name+" = "+toString(*i)+")) report \"***** <"+_name+"> interface's test number "+toString(j)+" *****\" severity NOTE;");
+		vhdl->set_body("assert not (("+counter_name+" = "+toString(*i)+" and "+test_name+" = '1')) report \"***** <"+_name+"> Test number "+toString(j)+" is OK     *****\" severity NOTE;");
+		vhdl->set_body("assert not (("+counter_name+" = "+toString(*i)+" and "+test_name+" = '0')) report \"@@@@@ <"+_name+"> Test number "+toString(j)+" is KO !!! @@@@@\" severity NOTE;");
 		j++;
 		++i;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_signal_name.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_signal_name.cpp	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_signal_name.cpp	(revision 62)
@@ -7,5 +7,4 @@
 
 #include "Behavioural/include/Interface.h"
-#include "Common/include/ChangeCase.h"
 
 namespace morpheo              {
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_test_map.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_test_map.cpp	(revision 62)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_test_map.cpp	(revision 62)
@@ -0,0 +1,35 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Interface.h"
+
+
+namespace morpheo              {
+namespace behavioural          {
+
+#undef  FUNCTION
+#define FUNCTION "Interface::test_map"
+  bool Interface::test_map (bool top_level)
+  {
+    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+
+    bool _return = true;
+
+    log_printf(INFO,Behavioural,FUNCTION, "   * Interface \"%s\"",_name.c_str());
+    
+    for (list<Signal*>::iterator i  = _list_signal->begin();
+	 i != _list_signal->end();
+	 ++i)
+      _return &= (*i)->test_map(top_level);
+
+    log_printf(FUNC,Behavioural,FUNCTION,"End");
+    
+    return _return;
+  };
+
+}; // end namespace behavioural          
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces_test_map.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces_test_map.cpp	(revision 62)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces_test_map.cpp	(revision 62)
@@ -0,0 +1,35 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Interfaces.h"
+
+
+namespace morpheo              {
+namespace behavioural          {
+
+#undef  FUNCTION
+#define FUNCTION "Interfaces::test_map"
+  bool Interfaces::test_map (bool top_level)
+  {
+    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+
+    bool _return = true;
+
+    log_printf(INFO,Behavioural,FUNCTION, "   * Interfaces \"%s\"",_name.c_str());
+    
+    for (list<Interface_fifo*>::iterator i  = _list_interface->begin();
+	 i != _list_interface->end();
+	 ++i)
+      _return &= (*i)->test_map(top_level);
+
+    log_printf(FUNC,Behavioural,FUNCTION,"End");
+    
+    return _return;
+  };
+
+}; // end namespace behavioural          
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal.cpp	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal.cpp	(revision 62)
@@ -22,5 +22,6 @@
     log_printf(FUNC,Behavioural,"Signal","Begin");
     _is_allocate   = false;
-    _is_map        = false;
+    _is_map_as_src = false;
+    _is_map_as_dest= false;
     _connect_from_signal = NULL;
     _connect_to_signal   = NULL;
@@ -41,13 +42,14 @@
   {
     log_printf(FUNC,Behavioural,"Signal (copy)","Begin");
-    _is_allocate= signal._is_allocate;
-    _is_map     = signal._is_map    ;
+    _is_allocate    = signal._is_allocate;
+    _is_map_as_src  = signal._is_map_as_src ;
+    _is_map_as_dest = signal._is_map_as_dest;
     _connect_from_signal = signal._connect_from_signal;
     _connect_to_signal   = signal._connect_to_signal;
-    _sc_signal     = signal._sc_signal    ;
-    _sc_signal_map = signal._sc_signal_map;
-    _type_info  = signal._type_info ;
+    _sc_signal      = signal._sc_signal    ;
+    _sc_signal_map  = signal._sc_signal_map;
+    _type_info      = signal._type_info ;
 #ifdef VHDL_TESTBENCH
-    _list_value = signal._list_value;
+    _list_value     = signal._list_value;
 #endif
     log_printf(FUNC,Behavioural,"Signal (copy)","End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_connect.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_connect.cpp	(revision 62)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_connect.cpp	(revision 62)
@@ -0,0 +1,127 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Signal.h"
+
+
+namespace morpheo              {
+namespace behavioural          {
+
+#undef  FUNCTION
+#define FUNCTION "Signal::connect"
+  void Signal::connect (Signal * signal_dest)
+  {
+    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+    
+    cout << "connected : " << get_name() << "\twith " << signal_dest->get_name() << endl;
+    
+    if ((_direction == IN ) and (signal_dest->_direction == IN ))
+      switch (_type_info)
+	{
+	case BOOL     : {(*(static_cast<sc_in  <bool    > *>(_sc_signal))) (*(static_cast<sc_in  <bool    > *>(signal_dest->_sc_signal))); break;}
+	case UINT8_T  : {(*(static_cast<sc_in  <uint8_t > *>(_sc_signal))) (*(static_cast<sc_in  <uint8_t > *>(signal_dest->_sc_signal))); break;}
+	case UINT16_T : {(*(static_cast<sc_in  <uint16_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint16_t> *>(signal_dest->_sc_signal))); break;}
+	case UINT32_T : {(*(static_cast<sc_in  <uint32_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint32_t> *>(signal_dest->_sc_signal))); break;}
+	case UINT64_T : {(*(static_cast<sc_in  <uint64_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint64_t> *>(signal_dest->_sc_signal))); break;}
+	default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
+	}
+    else
+      if ((_direction == IN ) and (signal_dest->_direction == OUT))
+	switch (_type_info)
+	  {
+	  case BOOL     : {(*(static_cast<sc_in  <bool    > *>(_sc_signal))) (*(static_cast<sc_out <bool    > *>(signal_dest->_sc_signal))); break;}
+	  case UINT8_T  : {(*(static_cast<sc_in  <uint8_t > *>(_sc_signal))) (*(static_cast<sc_out <uint8_t > *>(signal_dest->_sc_signal))); break;}
+	  case UINT16_T : {(*(static_cast<sc_in  <uint16_t> *>(_sc_signal))) (*(static_cast<sc_out <uint16_t> *>(signal_dest->_sc_signal))); break;}
+	  case UINT32_T : {(*(static_cast<sc_in  <uint32_t> *>(_sc_signal))) (*(static_cast<sc_out <uint32_t> *>(signal_dest->_sc_signal))); break;}
+	  case UINT64_T : {(*(static_cast<sc_in  <uint64_t> *>(_sc_signal))) (*(static_cast<sc_out <uint64_t> *>(signal_dest->_sc_signal))); break;}
+	  default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
+	  }
+      else
+	if ((_direction == IN ) and (signal_dest->_direction == INTERNAL))
+	  switch (_type_info)
+	    {
+	    case BOOL     : {(*(static_cast<sc_in  <bool    > *>(_sc_signal))) (*(static_cast<sc_signal<bool    > *>(signal_dest->_sc_signal))); break;}
+	    case UINT8_T  : {(*(static_cast<sc_in  <uint8_t > *>(_sc_signal))) (*(static_cast<sc_signal<uint8_t > *>(signal_dest->_sc_signal))); break;}
+	    case UINT16_T : {(*(static_cast<sc_in  <uint16_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint16_t> *>(signal_dest->_sc_signal))); break;}
+	    case UINT32_T : {(*(static_cast<sc_in  <uint32_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint32_t> *>(signal_dest->_sc_signal))); break;}
+	    case UINT64_T : {(*(static_cast<sc_in  <uint64_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint64_t> *>(signal_dest->_sc_signal))); break;}
+	    default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
+	    }
+	else
+	  if ((_direction == OUT) and (signal_dest->_direction == IN ))
+	    switch (_type_info)
+	      {
+	      case BOOL     : {(*(static_cast<sc_out <bool    > *>(_sc_signal))) (*(static_cast<sc_in  <bool    > *>(signal_dest->_sc_signal))); break;}
+	      case UINT8_T  : {(*(static_cast<sc_out <uint8_t > *>(_sc_signal))) (*(static_cast<sc_in  <uint8_t > *>(signal_dest->_sc_signal))); break;}
+	      case UINT16_T : {(*(static_cast<sc_out <uint16_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint16_t> *>(signal_dest->_sc_signal))); break;}
+	      case UINT32_T : {(*(static_cast<sc_out <uint32_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint32_t> *>(signal_dest->_sc_signal))); break;}
+	      case UINT64_T : {(*(static_cast<sc_out <uint64_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint64_t> *>(signal_dest->_sc_signal))); break;}
+	      default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
+	      }
+	  else
+	    if ((_direction == OUT) and (signal_dest->_direction == OUT))
+	      switch (_type_info)
+		{
+		case BOOL     : {(*(static_cast<sc_out <bool    > *>(_sc_signal))) (*(static_cast<sc_out <bool    > *>(signal_dest->_sc_signal))); break;}
+		case UINT8_T  : {(*(static_cast<sc_out <uint8_t > *>(_sc_signal))) (*(static_cast<sc_out <uint8_t > *>(signal_dest->_sc_signal))); break;}
+		case UINT16_T : {(*(static_cast<sc_out <uint16_t> *>(_sc_signal))) (*(static_cast<sc_out <uint16_t> *>(signal_dest->_sc_signal))); break;}
+		case UINT32_T : {(*(static_cast<sc_out <uint32_t> *>(_sc_signal))) (*(static_cast<sc_out <uint32_t> *>(signal_dest->_sc_signal))); break;}
+		case UINT64_T : {(*(static_cast<sc_out <uint64_t> *>(_sc_signal))) (*(static_cast<sc_out <uint64_t> *>(signal_dest->_sc_signal))); break;}
+		default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
+		}
+	    else
+	      if ((_direction == OUT) and (signal_dest->_direction == INTERNAL))
+		switch (_type_info)
+		  {
+		  case BOOL     : {(*(static_cast<sc_out <bool    > *>(_sc_signal))) (*(static_cast<sc_signal<bool    > *>(signal_dest->_sc_signal))); break;}
+		  case UINT8_T  : {(*(static_cast<sc_out <uint8_t > *>(_sc_signal))) (*(static_cast<sc_signal<uint8_t > *>(signal_dest->_sc_signal))); break;}
+		  case UINT16_T : {(*(static_cast<sc_out <uint16_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint16_t> *>(signal_dest->_sc_signal))); break;}
+		  case UINT32_T : {(*(static_cast<sc_out <uint32_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint32_t> *>(signal_dest->_sc_signal))); break;}
+		  case UINT64_T : {(*(static_cast<sc_out <uint64_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint64_t> *>(signal_dest->_sc_signal))); break;}
+		  default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
+		  }
+// 	      else
+// 		if ((_direction == INTERNAL) and (signal_dest->_direction == IN ))
+// 		  switch (_type_info)
+// 		    {
+// 		    case BOOL     : {(*(static_cast<sc_signal<bool    > *>(_sc_signal))) (*(static_cast<sc_in  <bool    > *>(signal_dest->_sc_signal))); break;}
+// 		    case UINT8_T  : {(*(static_cast<sc_signal<uint8_t > *>(_sc_signal))) (*(static_cast<sc_in  <uint8_t > *>(signal_dest->_sc_signal))); break;}
+// 		    case UINT16_T : {(*(static_cast<sc_signal<uint16_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint16_t> *>(signal_dest->_sc_signal))); break;}
+// 		    case UINT32_T : {(*(static_cast<sc_signal<uint32_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint32_t> *>(signal_dest->_sc_signal))); break;}
+// 		    case UINT64_T : {(*(static_cast<sc_signal<uint64_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint64_t> *>(signal_dest->_sc_signal))); break;}
+// 		    default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
+// 		    }
+// 		else
+// 		  if ((_direction == INTERNAL ) and (signal_dest->_direction == OUT))
+// 		    switch (_type_info)
+// 		      {
+// 		      case BOOL     : {(*(static_cast<sc_signal<bool    > *>(_sc_signal))) (*(static_cast<sc_out <bool    > *>(signal_dest->_sc_signal))); break;}
+// 		      case UINT8_T  : {(*(static_cast<sc_signal<uint8_t > *>(_sc_signal))) (*(static_cast<sc_out <uint8_t > *>(signal_dest->_sc_signal))); break;}
+// 		      case UINT16_T : {(*(static_cast<sc_signal<uint16_t> *>(_sc_signal))) (*(static_cast<sc_out <uint16_t> *>(signal_dest->_sc_signal))); break;}
+// 		      case UINT32_T : {(*(static_cast<sc_signal<uint32_t> *>(_sc_signal))) (*(static_cast<sc_out <uint32_t> *>(signal_dest->_sc_signal))); break;}
+// 		      case UINT64_T : {(*(static_cast<sc_signal<uint64_t> *>(_sc_signal))) (*(static_cast<sc_out <uint64_t> *>(signal_dest->_sc_signal))); break;}
+// 		      default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
+// 		      }
+// 		  else
+// 		    if ((_direction == INTERNAL ) and (signal_dest->_direction == INTERNAL))
+// 		      switch (_type_info)
+// 			{
+// 			case BOOL     : {(*(static_cast<sc_signal<bool    > *>(_sc_signal))) (*(static_cast<sc_signal<bool    > *>(signal_dest->_sc_signal))); break;}
+// 			case UINT8_T  : {(*(static_cast<sc_signal<uint8_t > *>(_sc_signal))) (*(static_cast<sc_signal<uint8_t > *>(signal_dest->_sc_signal))); break;}
+// 			case UINT16_T : {(*(static_cast<sc_signal<uint16_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint16_t> *>(signal_dest->_sc_signal))); break;}
+// 			case UINT32_T : {(*(static_cast<sc_signal<uint32_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint32_t> *>(signal_dest->_sc_signal))); break;}
+// 			case UINT64_T : {(*(static_cast<sc_signal<uint64_t> *>(_sc_signal))) (*(static_cast<sc_signal<uint64_t> *>(signal_dest->_sc_signal))); break;}
+// 			default       : {throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" : type unknow.")); break;}
+// 			}
+		    else
+		      throw (ErrorMorpheo ("<Signal::connect> Signal \""+_name+"\" can't been connected with signal \""+signal_dest->get_name()+"\" : illegal direction ("+toString(_direction)+" with "+toString(signal_dest->_direction)+")."));
+
+    log_printf(FUNC,Behavioural,FUNCTION,"End");
+  };
+
+}; // end namespace behavioural          
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_is_map.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_is_map.cpp	(revision 61)
+++ 	(revision )
@@ -1,26 +1,0 @@
-/*
- * $Id$
- *
- * [ Description ]
- * 
- */
-
-#include "Behavioural/include/Signal.h"
-
-
-namespace morpheo              {
-namespace behavioural          {
-
-#undef  FUNCTION
-#define FUNCTION "Signal::get_is_map"
-  bool Signal::get_is_map (void)
-  {
-    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
-    uint32_t _return = _is_map;
-    log_printf(FUNC,Behavioural,FUNCTION,"End");
-
-    return _return;
-  };
-
-}; // end namespace behavioural          
-}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_type_info.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_type_info.cpp	(revision 62)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_get_type_info.cpp	(revision 62)
@@ -0,0 +1,25 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Signal.h"
+
+
+namespace morpheo              {
+namespace behavioural          {
+
+#undef  FUNCTION
+#define FUNCTION "Signal::get_type_info"
+  type_info_t Signal::get_type_info (void)
+  {
+    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+    type_info_t _return = _type_info;
+    log_printf(FUNC,Behavioural,FUNCTION,"End");
+    return _return;
+  };
+
+}; // end namespace behavioural          
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_link.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_link.cpp	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_link.cpp	(revision 62)
@@ -14,109 +14,55 @@
 #undef  FUNCTION
 #define FUNCTION "Signal::link"
-  void Signal::link (Signal * signal,
-		     bool     is_port_component)
+  void Signal::link (Signal * signal_dest,
+		     bool     signal_dest_is_port)
   {
     log_printf(FUNC,Behavioural,FUNCTION,"Begin");
 
-    if (        _is_allocate == false)
-      throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\", can't map with signal \""+        get_name()+"\", because it's not already allocate."));
-    if (signal->_is_allocate == false)
-      throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\", can't map with signal \""+signal->get_name()+"\", because it's not already allocate."));
-    if (_is_map == true)
-      throw (ErrorMorpheo ("<Signal::mapping> Can't mapping signal \""+_name+"\" with \""+signal->get_name()+"\", because it's already map."));
-    
+    Signal * signal_src = this;
+
+    // Test
+    if (signal_src ->_is_allocate == false)
+      throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\", can't map with signal \""+        get_name()+"\", because the first signal is not already allocate."));
+    if (signal_dest->_is_allocate == false)
+      throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\", can't map with signal \""+signal_dest->get_name()+"\", because the second signal is not already allocate."));
+    if (signal_src ->_is_map_as_src  == true)
+      throw (ErrorMorpheo ("<Signal::mapping> Can't mapping signal \""+_name+"\" with \""+signal_dest->get_name()+"\", because the first signal is already mapped."));
+
+    //     log_printf(TRACE,Behavioural,FUNCTION, " * sc_signal (before) %.8x - %.8x", (uint32_t)(_sc_signal_map), (uint32_t)(signal_dest->_sc_signal_map));
 
     // List of all case
     //
-    //       dest        src             dest        src
-    // PORT {IN } ----- {SIG} COMBI
-    // PORT {OUT} ----- {SIG} COMBI
+    //            src         dest
+    // COMPONENT {IN } ----- {SIG} SIGNAL
+    // COMPONENT {OUT} ----- {SIG} SIGNAL
     //
-    // PORT {IN } --X-- {OUT} COMPONENT {IN } ----- {OUT} COMPONENT
-    // PORT {IN } ----- {IN } COMPONENT {IN } --X-- {IN } COMPONENT
-    // PORT {OUT} ----- {OUT} COMPONENT {OUT} --X-- {OUT} COMPONENT
-    // PORT {OUT} --X-- {IN } COMPONENT {OUT} ----- {IN } COMPONENT
+    // COMPONENT {IN } ----- {IN } PORT
+    // COMPONENT {OUT} ----- {OUT} PORT
 
-//  log_printf(TRACE,Behavioural,FUNCTION, "Signal \"%s\"\tlink with \"%s\"", _name.c_str(), signal->get_name().c_str());
+    // list valid case
+    if (not (    signal_dest_is_port and (((signal_src->_direction == IN ) and (signal_dest->_direction == IN      )) or
+					  ((signal_src->_direction == OUT) and (signal_dest->_direction == OUT     )))) and
+	not (not signal_dest_is_port and (((signal_src->_direction == IN ) and (signal_dest->_direction == INTERNAL)) or
+					  ((signal_src->_direction == OUT) and (signal_dest->_direction == INTERNAL)))))
+      throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\" can't been linked with signal \""+signal_dest->get_name()+"\" : illegal direction ("+toString(signal_src->_direction)+" with "+toString(signal_dest->_direction)+")."));
 
-    log_printf(TRACE,Behavioural,FUNCTION, " * sc_signal (before) %.8x - %.8x", (uint32_t)(_sc_signal_map), (uint32_t)(signal->_sc_signal_map));
+    // update info source
+    signal_src ->_connect_to_signal   = signal_dest;
+    signal_src ->_is_map_as_src       = true;
+    
+    // update info destination
+    signal_dest->_connect_from_signal = signal_src;
+    signal_dest->_is_map_as_dest      = true;
 
-    _connect_to_signal = signal;
-    signal->_connect_from_signal = this;
+    // vhdl_testbench : to read an output producte by a internal component
+    // TODO : à vérifier !!!!!!!!!!!!
+    if ((signal_dest_is_port == true) and 
+	(signal_src ->_direction == OUT))
+      signal_dest->_sc_signal_map = signal_src ->_sc_signal_map;
+    
+    connect (signal_dest);
 
-    if (is_port_component == true)
-      {
-	if ((_direction == IN ) and (signal->_direction == IN ))
-	  {
-	    switch (_type_info)
-	      {
-	      case BOOL     : {(*(static_cast<sc_in  <bool    > *>(_sc_signal))) (*(static_cast<sc_in  <bool    > *>(signal->_sc_signal))); break;}
-	      case UINT8_T  : {(*(static_cast<sc_in  <uint8_t > *>(_sc_signal))) (*(static_cast<sc_in  <uint8_t > *>(signal->_sc_signal))); break;}
-	      case UINT16_T : {(*(static_cast<sc_in  <uint16_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint16_t> *>(signal->_sc_signal))); break;}
-	      case UINT32_T : {(*(static_cast<sc_in  <uint32_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint32_t> *>(signal->_sc_signal))); break;}
-	      case UINT64_T : {(*(static_cast<sc_in  <uint64_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint64_t> *>(signal->_sc_signal))); break;}
-	      default       : {throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\" : type unknow.")); break;}
-	      }
-	  }
-	else
-	  {
-	    if ((_direction == OUT) and (signal->_direction == OUT))
-	      {
-		_is_map = true;
-		signal->_sc_signal_map = _sc_signal_map;
-		
-		switch (_type_info)
-		  {
-		  case BOOL     : {(*(static_cast<sc_out <bool    > *>(_sc_signal))) (*(static_cast<sc_out <bool    > *>(signal->_sc_signal))); break;} 
-		  case UINT8_T  : {(*(static_cast<sc_out <uint8_t > *>(_sc_signal))) (*(static_cast<sc_out <uint8_t > *>(signal->_sc_signal))); break;} 
-		  case UINT16_T : {(*(static_cast<sc_out <uint16_t> *>(_sc_signal))) (*(static_cast<sc_out <uint16_t> *>(signal->_sc_signal))); break;}
-		  case UINT32_T : {(*(static_cast<sc_out <uint32_t> *>(_sc_signal))) (*(static_cast<sc_out <uint32_t> *>(signal->_sc_signal))); break;} 
-		  case UINT64_T : {(*(static_cast<sc_out <uint64_t> *>(_sc_signal))) (*(static_cast<sc_out <uint64_t> *>(signal->_sc_signal))); break;} 
-		  default       : {throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\" : type unknow.")); break;}
-		  }
-	      }
-	    else
-	      {
-		throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\" can't been linked with signal \""+signal->get_name()+"\" : between two components, illegal direction ("+toString(_direction)+" with "+toString(signal->_direction)+")."));
-	      }
-	  }
-      }
-    else
-      {
-	if ((_direction == IN ) and (signal->_direction == OUT))
-	  {
-	    switch (_type_info)
-	      {
-	      case BOOL     : {(*(static_cast<sc_in  <bool    > *>(_sc_signal))) (*(static_cast<sc_out <bool    > *>(signal->_sc_signal))); break;}
-	      case UINT8_T  : {(*(static_cast<sc_in  <uint8_t > *>(_sc_signal))) (*(static_cast<sc_out <uint8_t > *>(signal->_sc_signal))); break;}
-	      case UINT16_T : {(*(static_cast<sc_in  <uint16_t> *>(_sc_signal))) (*(static_cast<sc_out <uint16_t> *>(signal->_sc_signal))); break;}
-	      case UINT32_T : {(*(static_cast<sc_in  <uint32_t> *>(_sc_signal))) (*(static_cast<sc_out <uint32_t> *>(signal->_sc_signal))); break;}
-	      case UINT64_T : {(*(static_cast<sc_in  <uint64_t> *>(_sc_signal))) (*(static_cast<sc_out <uint64_t> *>(signal->_sc_signal))); break;}
-	      default       : {throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\" : type unknow.")); break;}
-	      }
-	  }
-	else
-	  {
-	    if ((_direction == OUT) and (signal->_direction == IN ))
-	      {
-		_is_map = true;
-		switch (_type_info)
-		  {
-		  case BOOL     : {(*(static_cast<sc_out <bool    > *>(_sc_signal))) (*(static_cast<sc_in  <bool    > *>(signal->_sc_signal))); break;}
-		  case UINT8_T  : {(*(static_cast<sc_out <uint8_t > *>(_sc_signal))) (*(static_cast<sc_in  <uint8_t > *>(signal->_sc_signal))); break;}
-		  case UINT16_T : {(*(static_cast<sc_out <uint16_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint16_t> *>(signal->_sc_signal))); break;}
-		  case UINT32_T : {(*(static_cast<sc_out <uint32_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint32_t> *>(signal->_sc_signal))); break;}
-		  case UINT64_T : {(*(static_cast<sc_out <uint64_t> *>(_sc_signal))) (*(static_cast<sc_in  <uint64_t> *>(signal->_sc_signal))); break;}
-		  default       : {throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\" : type unknow.")); break;}
-		  }
-	      }
-	    else
-	      {
-		throw (ErrorMorpheo ("<Signal::link> Signal \""+_name+"\" can't been linked with signal \""+signal->get_name()+"\" : between a interface's port and one component, illegal direction ("+toString(_direction)+" with "+toString(signal->_direction)+")."));
-	      }
-	  }
-      }
-
-    log_printf(TRACE,Behavioural,FUNCTION, " * sc_signal (after ) %.8x - %.8x", (uint32_t)(_sc_signal_map), (uint32_t)(signal->_sc_signal_map));
+    //  log_printf(TRACE,Behavioural,FUNCTION, " * sc_signal (after ) %.8x - %.8x", (uint32_t)(_sc_signal_map), (uint32_t)(signal_dest->_sc_signal_map));
+    
     log_printf(FUNC,Behavioural,FUNCTION,"End");
   };
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_mapping.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_mapping.cpp	(revision 61)
+++ 	(revision )
@@ -1,39 +1,0 @@
-/*
- * $Id$
- *
- * [ Description ]
- * 
- */
-
-#include "Behavioural/include/Signal.h"
-
-
-namespace morpheo              {
-namespace behavioural          {
-
-// #undef  FUNCTION
-// #define FUNCTION "Signal::mapping"
-//   void Signal::mapping (Signal * signal)
-//   {
-//     log_printf(FUNC,Behavioural,FUNCTION,"Begin");
-
-//     if (_is_map == true)
-//       throw (ErrorMorpheo ("<Signal::mapping> Can't mapping signal \""+_name+"\" with \""+signal->get_name()+"\", because it's already map."));
-    
-//     if (signal->_is_allocate == false)
-//       throw (ErrorMorpheo ("<Signal::mapping> Signal \""+_name+"\", can't map with signal \""+signal->get_name()+"\", because it's not already allocate."));
-
-//     if (_direction == OUT)
-//       {
-// 	// This output is mapped
-// 	_is_map     = true;
-
-// 	if (signal->_direction == OUT)
-// 	  _sc_signal_map = signal->_sc_signal_map;
-//       }
-    
-//     log_printf(FUNC,Behavioural,FUNCTION,"End");
-//   };
-
-}; // end namespace behavioural          
-}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_print.cpp	(revision 61)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_print.cpp	(revision 62)
@@ -19,5 +19,6 @@
     output_stream << "\t{" << x._size << "}\t"
 		  << toString(x._direction)    << "\t"
-		  << toString(x._presence_port);
+		  << toString(x._presence_port)
+		  << "sc_signal : " << hex << x._sc_signal << " - " << x._sc_signal_map << dec;
 
     log_printf(FUNC,Behavioural,"operator<<","End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_test_map.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_test_map.cpp	(revision 62)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_test_map.cpp	(revision 62)
@@ -0,0 +1,66 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Signal.h"
+
+
+namespace morpheo              {
+namespace behavioural          {
+
+#undef  FUNCTION
+#define FUNCTION "Signal::test_map"
+  bool Signal::test_map (bool top_level)
+  {
+    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+
+    log_printf(INFO,Behavioural,FUNCTION, "     * Signal \"%s\"",_name.c_str());
+
+    bool _return = false;
+
+    if (top_level == true)
+      {
+	_return = _is_map_as_dest; 
+	      
+	switch (_direction)
+	  {
+	  case morpheo::behavioural::IN       : 
+	    {
+	      if (_return == false)
+		cerr << "Signal \"" << _name << "\" is not mapped with an outpout port or a component." << endl;
+	      break;
+	    }
+	  case morpheo::behavioural::OUT      : 
+	    {
+	      if (_return == false)
+		cerr << "Signal \"" << _name << "\" is not mapped with an input port or a component." << endl;
+	      break;
+	    }
+	    //case morpheo::behavioural::INTERNAL : return "internal" ; break;
+	    //case morpheo::behavioural::INOUT    : return "inout"    ; break;
+	  default    : break;
+	  }
+      }
+    else
+      {
+	_return = _is_map_as_src and _is_map_as_dest;
+
+	if (_return == false)
+	  {
+	    if (_is_map_as_src  == false)
+	      cerr << "Signal \"" << _name << "\" is not mapped as source" << endl;
+	    if (_is_map_as_dest == false)
+	      cerr << "Signal \"" << _name << "\" is not mapped as destination" << endl;
+	  }
+      }
+    
+    log_printf(FUNC,Behavioural,FUNCTION,"End");
+    
+    return _return;
+  };
+
+}; // end namespace behavioural          
+}; // end namespace morpheo              
