Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/configuration.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/configuration.cfg	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/configuration.cfg	(revision 82)
@@ -3,5 +3,5 @@
 1	1	+1	# nb_front_end       
 2	2	+1	# nb_ooo_engine      
-1024	1024	+1	# nb_packet          
+256 	256 	+1	# nb_packet          
 32	32	+1	# size_general_data  
 32	32	+1	# nb_general_register
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/src/test.cpp	(revision 82)
@@ -7,37 +7,9 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (1024*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/SelfTest/include/test.h"
 #include "Common/include/Test.h"
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (1024*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
 class execute_transaction
@@ -121,7 +93,8 @@
   Functionnal_unit * _Functionnal_unit = new Functionnal_unit (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+							       _parameters_statistics,
 #endif
-					     _param);
+							       _param,
+							       USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit/include/Functionnal_unit.h	(revision 82)
@@ -148,5 +148,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :             ~Functionnal_unit         (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/include/test.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/include/test.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/include/test.h	(revision 82)
@@ -7,4 +7,5 @@
  */
 
+#define CYCLE_MAX     1024
 
 #include "Common/include/Time.h"
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test1.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test1.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test1.cpp	(revision 82)
@@ -7,33 +7,8 @@
  */
 
+  /*
+
 #include <queue>
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/include/test.h"
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (1024*NB_ITERATION)
-
-#define LABEL(str)							\
-  {									\
-    cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} " << str << endl; \
-  } while(0)
-
-#define SC_START(cycle_offset)						\
-  do									\
-    {									\
-      /*cout << "SC_START (begin)" << endl;*/				\
-									\
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \
-      if (cycle_offset != 0)						\
-	{								\
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								\
-									\
-      if (cycle_current > CYCLE_MAX)					\
-	{								\
-	  TEST_KO("Maximal cycles Reached");				\
-	}								\
-      sc_start(cycle_offset);						\
-      /*cout << "SC_START (end  )" << endl;*/				\
-    } while(0)
 
 
@@ -55,7 +30,5 @@
   
 #ifdef SYSTEMC
-  /*********************************************************************
-   * Déclarations des signaux
-   *********************************************************************/
+
   string rename = "";
 
@@ -129,7 +102,5 @@
     }
   
-  /********************************************************
-   * Instanciation
-   ********************************************************/
+  // Instanciation
   
   cout << "<" << name << "> Instanciation of _Load_store_unit" << endl;
@@ -215,7 +186,5 @@
   Time * _time = new Time();
 
-  /********************************************************
-   * Simulation - Begin
-   ********************************************************/
+  // Simulation - Begin
 
   // Initialisation
@@ -656,5 +625,5 @@
 		}
 
-	      LABEL("DCACHE_RSP : "+toString(in_DCACHE_RSP_VAL->read())+" - "+toString(out_DCACHE_RSP_ACK ->read()));
+		LABEL("DCACHE_RSP : "+toString(in_DCACHE_RSP_VAL->read())+" - "+toString(out_DCACHE_RSP_ACK ->read()));
 	      if (in_DCACHE_RSP_VAL->read() and out_DCACHE_RSP_ACK->read())
 		{
@@ -677,7 +646,5 @@
 
   
-  /********************************************************
-   * Simulation - End
-   ********************************************************/
+  // Simulation - End
 
   TEST_OK ("End of Simulation");
@@ -755,2 +722,3 @@
 #endif
 }
+  */
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test2.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test2.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/src/test2.cpp	(revision 82)
@@ -9,31 +9,4 @@
 #include <queue>
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/SelfTest/include/test.h"
-
-#define CYCLE_MAX     1024
-
-#define LABEL(str)							\
-  {									\
-    cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} " << str << endl; \
-  } while(0)
-
-#define SC_START(cycle_offset)						\
-  do									\
-    {									\
-      /*cout << "SC_START (begin)" << endl;*/				\
-									\
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \
-      if (cycle_offset != 0)						\
-	{								\
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								\
-									\
-      if (cycle_current > CYCLE_MAX)					\
-	{								\
-	  TEST_KO("Maximal cycles Reached");				\
-	}								\
-      sc_start(cycle_offset);						\
-      /*cout << "SC_START (end  )" << endl;*/				\
-    } while(0)
-
 
 //===================================================================={test}
@@ -71,5 +44,6 @@
 							    _parameters_statistics,
 #endif
-							    _param);
+							    _param,
+							    USE_ALL);
   
 #ifdef SYSTEMC
@@ -487,10 +461,10 @@
 	      SC_START(0);
 
-	      LABEL("MEMORY_IN  : "+toString(in_MEMORY_IN_VAL ->read())+" - "+toString(out_MEMORY_IN_ACK ->read()));
+	      LABEL("MEMORY_IN  : %d - %d",in_MEMORY_IN_VAL ->read(),out_MEMORY_IN_ACK ->read());
 	      if ( in_MEMORY_IN_VAL ->read() and out_MEMORY_IN_ACK ->read())
 		{
 		  Tpacket_t  packet_id = in_MEMORY_IN_PACKET_ID->read();
 
-		  LABEL(" * Accepted MEMORY_IN  : " + toString(packet_id));
+		  LABEL(" * Accepted MEMORY_IN  : %d",packet_id);
 		  cout << fifo_request.top();
 
@@ -509,10 +483,10 @@
 		}
 
-	      LABEL("MEMORY_OUT : "+toString(out_MEMORY_OUT_VAL->read())+" - "+toString(in_MEMORY_OUT_ACK ->read()));
+	      LABEL("MEMORY_OUT : %d - %d",out_MEMORY_OUT_VAL->read(),in_MEMORY_OUT_ACK ->read());
 	      if (out_MEMORY_OUT_VAL->read() and  in_MEMORY_OUT_ACK->read())
 		{
 		  Tpacket_t  packet_id = out_MEMORY_OUT_PACKET_ID->read();
 
-		  LABEL(" * Accepted MEMORY_OUT : " + toString(packet_id));
+		  LABEL(" * Accepted MEMORY_OUT : %d",packet_id);
 
 		  if (is_operation_memory_store(tab_request[packet_id]._operation))
@@ -650,5 +624,5 @@
 		}
 
-	      LABEL("DCACHE_REQ : "+toString(out_DCACHE_REQ_VAL->read())+" - "+toString(in_DCACHE_REQ_ACK ->read()));
+	      LABEL("DCACHE_REQ : %d - %d",out_DCACHE_REQ_VAL->read(),in_DCACHE_REQ_ACK ->read());
 	      if (out_DCACHE_REQ_VAL->read() and  in_DCACHE_REQ_ACK->read())
 		{
@@ -665,5 +639,5 @@
 		  packet_id  = (out_DCACHE_REQ_PACKET_ID ->read())>>1;
 	      
-		  LABEL(" * Accepted DCACHE_REQ : " + toString(packet_id));
+		  LABEL(" * Accepted DCACHE_REQ : %d",packet_id);
 
 		  if (address >= size_memory)
@@ -676,5 +650,5 @@
 		    {
 		      rdata = _memory->access (context_id, address, out_DCACHE_REQ_TYPE->read(), out_DCACHE_REQ_WDATA->read());
-		      LABEL("   * rdata : " + toString(rdata));
+		      LABEL("   * rdata : 0x%x",rdata);
 		    }
 
@@ -699,5 +673,5 @@
 		}
 
-	      LABEL("DCACHE_RSP : "+toString(in_DCACHE_RSP_VAL->read())+" - "+toString(out_DCACHE_RSP_ACK ->read()));
+	      LABEL("DCACHE_RSP : %d - %d",in_DCACHE_RSP_VAL->read(),out_DCACHE_RSP_ACK ->read());
 	      if (in_DCACHE_RSP_VAL->read() and out_DCACHE_RSP_ACK->read())
 		{
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 81)
+++ 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 82)
@@ -30,4 +30,5 @@
 #include "Behavioural/include/Vhdl.h"
 #endif
+#include "Behavioural/include/Usage.h"
 
 namespace morpheo {
@@ -48,7 +49,7 @@
     // -----[ fields ]----------------------------------------------------
     // Parameters
-  protected : const std::string       _name;
-
+  protected : const std::string  _name;
   protected : const Parameters * _param;
+  private   : const Tusage_t     _usage;
 
 #ifdef STATISTICS
@@ -202,5 +203,6 @@
    morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-   Parameters                                  * param );
+   Parameters                                  * param,
+   morpheo::behavioural::Tusage_t                usage );
   public  :          ~Load_store_unit             (void);
 					       
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.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.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit/src/Load_store_unit.cpp	(revision 82)
@@ -20,15 +20,20 @@
 #undef  FUNCTION
 #define FUNCTION "Load_store_unit::Load_store_unit"
+  Load_store_unit::Load_store_unit 
+  (
 #ifdef SYSTEMC
-  Load_store_unit::Load_store_unit (sc_module_name name,
+   sc_module_name name,
 #else
-  Load_store_unit::Load_store_unit (string name,
+   std::string name,
 #endif
 #ifdef STATISTICS
-			  morpheo::behavioural::Parameters_Statistics * param_statistics,
+   morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-			  morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Parameters * param ):
-			      _name              (name)
-			      ,_param            (param)
+   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::load_store_unit::Parameters * param ,
+   morpheo::behavioural::Tusage_t usage
+   ):
+    _name              (name)
+    ,_param            (param)
+    ,_usage (usage)
   {
     log_printf(FUNC,Load_store_unit,FUNCTION,"Begin");
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 81)
+++ 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 82)
@@ -26,5 +26,5 @@
     log_printf(FUNC,Load_store_unit,FUNCTION,"Begin");
 
-    _component   = new Component ();
+    _component   = new Component (_usage);
 
     Entity * entity = _component->set_entity (_name       
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/SelfTest/src/test.cpp	(revision 82)
@@ -7,37 +7,10 @@
  */
 
-#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/SelfTest/include/test.h"
-#include "Common/include/Test.h"
-
 #define NB_ITERATION  1
 //64
 #define CYCLE_MAX     (1024*NB_ITERATION)
 
-#define LABEL(str)                                                                       \
-{                                                                                        \
-  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} " << str << endl; \
-} while(0)
-
-static uint32_t cycle = 0;
-
-#define SC_START(cycle_offset)                                          \
-do                                                                      \
-{                                                                       \
-/*cout << "SC_START (begin)" << endl;*/                                 \
-                                                                        \
-  uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \
-  if (cycle_current != cycle)                                           \
-    {                                                                   \
-      cycle = cycle_current;                                            \
-      cout << "##########[ cycle "<< cycle << " ]" << endl;             \
-    }                                                                   \
-                                                                        \
-  if (cycle_current > CYCLE_MAX)                                        \
-    {                                                                   \
-      TEST_KO("Maximal cycles Reached");                                \
-    }                                                                   \
-  sc_start(cycle_offset);                                               \
-/*cout << "SC_START (end  )" << endl;*/                                 \
-} while(0)
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/SelfTest/include/test.h"
+#include "Common/include/Test.h"
 
 void test (string name,
@@ -54,5 +27,6 @@
 					     _parameters_statistics,
 #endif
-					     _param);
+					     _param,
+					     USE_ALL);
   
 #ifdef SYSTEMC
@@ -362,5 +336,5 @@
   for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
     {
-      LABEL("Iteration "+toString(iteration));
+      LABEL("Iteration %d",iteration);
       int32_t percent_transaction_queue_in     = (rand()%45)+30;
       int32_t percent_transaction_queue_out    = (rand()%45)+30;
@@ -518,12 +492,12 @@
 	  SC_START(0);
 	  
-	  LABEL("Test     READ_QUEUE_IN  : "+toString(READ_QUEUE_IN_VAL->read())+","+toString(READ_QUEUE_IN_ACK->read()));
+	  LABEL("Test     READ_QUEUE_IN  : %d,%d",READ_QUEUE_IN_VAL->read(),READ_QUEUE_IN_ACK->read());
 	  if ((READ_QUEUE_IN_VAL->read() == 1) and
 	      (READ_QUEUE_IN_ACK->read() == 1))
 	    {
-	      LABEL("Accepted READ_QUEUE_IN  ["+toString(request_in)+"]");
+	      LABEL("Accepted READ_QUEUE_IN  [%d]",request_in);
 	      request_in  ++;
 	    }
-	  LABEL("Test     READ_QUEUE_OUT : "+toString(READ_QUEUE_OUT_VAL->read())+","+toString(READ_QUEUE_OUT_ACK->read()));
+	  LABEL("Test     READ_QUEUE_OUT : %d,%d",READ_QUEUE_OUT_VAL->read(),READ_QUEUE_OUT_ACK->read());
 	  if ((READ_QUEUE_OUT_VAL->read() == 1) and
 	      (READ_QUEUE_OUT_ACK->read() == 1))
@@ -535,5 +509,5 @@
 		rob_id = 0;
 	      Tcontext_t ctxt   = _ooo_engine_id [rob_id];
-	      LABEL("Accepted READ_QUEUE_OUT ["+toString(rob_id)+"]");
+	      LABEL("Accepted READ_QUEUE_OUT [%d]",rob_id);
 	      
 	      TEST(uint32_t          , rob_id ,request_out);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Read_queue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Read_queue.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Read_queue.h	(revision 82)
@@ -17,7 +17,7 @@
 #include "Common/include/ToString.h"
 #include "Common/include/Debug.h"
-#include "Behavioural/include/Types.h"
 
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Parameters.h"
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Types.h"
 #ifdef STATISTICS
 #include "Behavioural/include/Stat.h"
@@ -27,4 +27,5 @@
 #include "Behavioural/include/Vhdl.h"
 #endif
+#include "Behavioural/include/Usage.h"
 
 namespace morpheo {
@@ -36,166 +37,4 @@
 namespace read_unit {
 namespace read_queue {
-  
-  class Tread_queue_entry_t
-  {
-  public    : Tcontext_t         _context_id   ;
-  public    : Tcontext_t         _front_end_id ;
-  public    : Tcontext_t         _ooo_engine_id;
-  public    : Tpacket_t          _rob_id       ;
-  public    : Toperation_t       _operation    ;
-  public    : Ttype_t            _type         ;
-  public    : Tlsq_ptr_t         _store_queue_ptr_write;
-  public    : Tlsq_ptr_t         _load_queue_ptr_write;
-  public    : Tcontrol_t         _has_immediat ;
-  public    : Tgeneral_data_t    _immediat     ;
-  public    : Tcontrol_t         _read_ra      ;
-  public    : Tgeneral_address_t _num_reg_ra   ;
-  public    : Tcontrol_t         _read_rb      ;
-  public    : Tgeneral_address_t _num_reg_rb   ;
-  public    : Tcontrol_t         _read_rc      ;
-  public    : Tspecial_address_t _num_reg_rc   ;
-  public    : Tcontrol_t         _write_rd     ;
-  public    : Tgeneral_address_t _num_reg_rd   ;
-  public    : Tcontrol_t         _write_re     ;
-  public    : Tspecial_address_t _num_reg_re   ;
-
-    friend std::ostream& operator<< (std::ostream& output_stream,
-				morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::read_queue::Tread_queue_entry_t & x)
-    {
-      output_stream << " * _context_id            : " << toString(x._context_id   ) << std::endl
-		    << " * _front_end_id          : " << toString(x._front_end_id ) << std::endl
-		    << " * _ooo_engine_id         : " << toString(x._ooo_engine_id) << std::endl
-		    << " * _rob_id                : " << toString(x._rob_id       ) << std::endl
-		    << " * _operation             : " << toString(x._operation    ) << std::endl
-		    << " * _type                  : " << toString(x._type         ) << std::endl
-		    << " * _store_queue_ptr_write : " << toString(x._store_queue_ptr_write) << std::endl
-		    << " * _load_queue_ptr_write  : " << toString(x._load_queue_ptr_write ) << std::endl
-		    << " * _has_immediat          : " << toString(x._has_immediat ) << std::endl
-		    << " * _immediat              : " << toString(x._immediat     ) << std::endl
-		    << " * _read_ra               : " << toString(x._read_ra      ) << std::endl
-		    << " * _num_reg_ra            : " << toString(x._num_reg_ra   ) << std::endl
-		    << " * _read_rb               : " << toString(x._read_rb      ) << std::endl
-		    << " * _num_reg_rb            : " << toString(x._num_reg_rb   ) << std::endl
-		    << " * _read_rc               : " << toString(x._read_rc      ) << std::endl
-		    << " * _num_reg_rc            : " << toString(x._num_reg_rc   ) << std::endl
-		    << " * _write_rd              : " << toString(x._write_rd     ) << std::endl
-		    << " * _num_reg_rd            : " << toString(x._num_reg_rd   ) << std::endl
-		    << " * _write_re              : " << toString(x._write_re     ) << std::endl
-		    << " * _num_reg_re            : " << toString(x._num_reg_re   ) << std::endl;
-
-      return output_stream;
-    }
-
-  };
-
-  class Tread_queue_head_entry_t
-  {
-  public    : Tcontext_t         _context_id   ;
-  public    : Tcontext_t         _front_end_id ;
-  public    : Tcontext_t         _ooo_engine_id;
-  public    : Tpacket_t          _rob_id       ;
-  public    : Toperation_t       _operation    ;
-  public    : Ttype_t            _type         ;
-  public    : Tlsq_ptr_t         _store_queue_ptr_write;
-  public    : Tlsq_ptr_t         _load_queue_ptr_write;
-  public    : Tcontrol_t         _has_immediat ;
-  public    : Tgeneral_data_t    _immediat     ;
-  public    : Tcontrol_t         _read_ra      ;
-  public    : Tcontrol_t         _read_ra_val  ; // 1 : must access at the registerFile (after access, is set at 0)
-  public    : Tgeneral_address_t _num_reg_ra   ;
-  public    : Tcontrol_t         _data_ra_val  ; // 1 : the read of registerFile is valid
-  public    : Tgeneral_data_t    _data_ra      ;
-  public    : Tcontrol_t         _read_rb      ;
-  public    : Tcontrol_t         _read_rb_val  ;
-  public    : Tgeneral_address_t _num_reg_rb   ;
-  public    : Tcontrol_t         _data_rb_val  ;
-  public    : Tgeneral_data_t    _data_rb      ;
-  public    : Tcontrol_t         _read_rc      ;
-  public    : Tcontrol_t         _read_rc_val  ;
-  public    : Tspecial_address_t _num_reg_rc   ;
-  public    : Tcontrol_t         _data_rc_val  ;
-  public    : Tspecial_data_t    _data_rc      ;
-  public    : Tcontrol_t         _write_rd     ;
-  public    : Tgeneral_address_t _num_reg_rd   ;
-  public    : Tcontrol_t         _write_re     ;
-  public    : Tspecial_address_t _num_reg_re   ;
-
-#undef  FUNCTION 
-#define FUNCTION "Tread_queue_head_entry_t::operator="
-  public    : Tread_queue_head_entry_t& operator=(Tread_queue_entry_t x)
-    {
-      log_printf(FUNC,Read_queue,FUNCTION,"Begin");
-	  
-      _context_id   = x._context_id   ;
-      _front_end_id = x._front_end_id ;
-      _ooo_engine_id= x._ooo_engine_id;
-      _rob_id       = x._rob_id       ;
-      _operation    = x._operation    ;
-      _type         = x._type         ;
-      _store_queue_ptr_write = x._store_queue_ptr_write;
-      _load_queue_ptr_write  = x._load_queue_ptr_write ;
-      _has_immediat = x._has_immediat ;
-      _immediat     = x._immediat     ;
-      _read_ra      = x._read_ra      ;
-      _read_ra_val  = x._read_ra == 1 ; //if not must read, the registerFile is already access
-      _num_reg_ra   = x._num_reg_ra   ;
-      _data_ra_val  = x._read_ra == 0 ; //if not must read, the data is already valid
-      _data_ra      = 0               ;
-      _read_rb      = x._read_rb      ;
-      _read_rb_val  = x._read_rb == 1 ;
-      _num_reg_rb   = x._num_reg_rb   ;
-      _data_rb_val  = x._read_rb == 0 ;
-      _data_rb      = 0               ;
-      _read_rc      = x._read_rc      ;
-      _read_rc_val  = x._read_rc == 1 ;
-      _num_reg_rc   = x._num_reg_rc   ;
-      _data_rc_val  = x._read_rc == 0 ;
-      _data_rc      = 0               ;
-      _write_rd     = x._write_rd     ;
-      _num_reg_rd   = x._num_reg_rd   ;
-      _write_re     = x._write_re     ;
-      _num_reg_re   = x._num_reg_re   ;
-
-      log_printf(FUNC,Read_queue,FUNCTION,"End");
-
-      return *this;
-    }
-
-    friend std::ostream& operator<< (std::ostream& output_stream,
-				morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::read_queue::Tread_queue_head_entry_t & x)
-    {
-      output_stream << " * _context_id            : " << x._context_id   << std::endl
-		    << " * _front_end_id          : " << x._front_end_id << std::endl
-		    << " * _ooo_engine_id         : " << x._ooo_engine_id<< std::endl
-		    << " * _rob_id                : " << x._rob_id       << std::endl
-		    << " * _operation             : " << x._operation    << std::endl
-		    << " * _type                  : " << x._type         << std::endl
-		    << " * _store_queue_ptr_write : " << toString(x._store_queue_ptr_write) << std::endl
-		    << " * _load_queue_ptr_write  : " << toString(x._load_queue_ptr_write ) << std::endl
-		    << " * _has_immediat          : " << x._has_immediat << std::endl
-		    << " * _immediat              : " << x._immediat     << std::endl
-		    << " * _read_ra               : " << x._read_ra      << std::endl
-		    << " * _read_ra_val           : " << x._read_ra_val  << std::endl 
-		    << " * _num_reg_ra            : " << x._num_reg_ra   << std::endl
-		    << " * _data_ra_val           : " << x._data_ra_val  << std::endl
-		    << " * _data_ra               : " << x._data_ra      << std::endl
-		    << " * _read_rb               : " << x._read_rb      << std::endl
-		    << " * _read_rb_val           : " << x._read_rb_val  << std::endl
-		    << " * _num_reg_rb            : " << x._num_reg_rb   << std::endl
-		    << " * _data_rb_val           : " << x._data_rb_val  << std::endl
-		    << " * _data_rb               : " << x._data_rb      << std::endl
-		    << " * _read_rc               : " << x._read_rc      << std::endl
-		    << " * _read_rc_val           : " << x._read_rc_val  << std::endl
-		    << " * _num_reg_rc            : " << x._num_reg_rc   << std::endl
-		    << " * _data_rc_val           : " << x._data_rc_val  << std::endl
-		    << " * _data_rc               : " << x._data_rc      << std::endl
-		    << " * _write_rd              : " << x._write_rd     << std::endl
-		    << " * _num_reg_rd            : " << x._num_reg_rd   << std::endl
-		    << " * _write_re              : " << x._write_re     << std::endl
-		    << " * _num_reg_re            : " << x._num_reg_re   << std::endl;
-
-      return output_stream;
-    }
-  };
 
   class Read_queue 
@@ -206,6 +45,7 @@
     // -----[ fields ]----------------------------------------------------
     // Parameters
-  protected : const std::string                _name;
-  protected : const Parameters               * _param;
+  protected : const std::string  _name;
+  protected : const Parameters * _param;
+  private   : const Tusage_t     _usage;
 
 #ifdef STATISTICS
@@ -345,5 +185,6 @@
 					      morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-					      Parameters                                  * param );
+					      Parameters                                  * param,
+					      morpheo::behavioural::Tusage_t                usage);
 					       
   public  :          Read_queue              (Parameters * param );
@@ -381,5 +222,4 @@
 }; // end namespace multi_execute_loop
 }; // end namespace core
-
 }; // end namespace behavioural
 }; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Types.h	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/include/Types.h	(revision 82)
@@ -0,0 +1,194 @@
+#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_read_unit_read_unit_read_queue_Types_h
+#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_read_unit_read_unit_read_queue_Types_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Types.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_read_unit {
+namespace read_unit {
+namespace read_queue {
+  
+  class Tread_queue_entry_t
+  {
+  public    : Tcontext_t         _context_id   ;
+  public    : Tcontext_t         _front_end_id ;
+  public    : Tcontext_t         _ooo_engine_id;
+  public    : Tpacket_t          _rob_id       ;
+  public    : Toperation_t       _operation    ;
+  public    : Ttype_t            _type         ;
+  public    : Tlsq_ptr_t         _store_queue_ptr_write;
+  public    : Tlsq_ptr_t         _load_queue_ptr_write;
+  public    : Tcontrol_t         _has_immediat ;
+  public    : Tgeneral_data_t    _immediat     ;
+  public    : Tcontrol_t         _read_ra      ;
+  public    : Tgeneral_address_t _num_reg_ra   ;
+  public    : Tcontrol_t         _read_rb      ;
+  public    : Tgeneral_address_t _num_reg_rb   ;
+  public    : Tcontrol_t         _read_rc      ;
+  public    : Tspecial_address_t _num_reg_rc   ;
+  public    : Tcontrol_t         _write_rd     ;
+  public    : Tgeneral_address_t _num_reg_rd   ;
+  public    : Tcontrol_t         _write_re     ;
+  public    : Tspecial_address_t _num_reg_re   ;
+
+    friend std::ostream& operator<< (std::ostream& output_stream,
+				morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::read_queue::Tread_queue_entry_t & x)
+    {
+      output_stream << " * _context_id            : " << toString(x._context_id   ) << std::endl
+		    << " * _front_end_id          : " << toString(x._front_end_id ) << std::endl
+		    << " * _ooo_engine_id         : " << toString(x._ooo_engine_id) << std::endl
+		    << " * _rob_id                : " << toString(x._rob_id       ) << std::endl
+		    << " * _operation             : " << toString(x._operation    ) << std::endl
+		    << " * _type                  : " << toString(x._type         ) << std::endl
+		    << " * _store_queue_ptr_write : " << toString(x._store_queue_ptr_write) << std::endl
+		    << " * _load_queue_ptr_write  : " << toString(x._load_queue_ptr_write ) << std::endl
+		    << " * _has_immediat          : " << toString(x._has_immediat ) << std::endl
+		    << " * _immediat              : " << toString(x._immediat     ) << std::endl
+		    << " * _read_ra               : " << toString(x._read_ra      ) << std::endl
+		    << " * _num_reg_ra            : " << toString(x._num_reg_ra   ) << std::endl
+		    << " * _read_rb               : " << toString(x._read_rb      ) << std::endl
+		    << " * _num_reg_rb            : " << toString(x._num_reg_rb   ) << std::endl
+		    << " * _read_rc               : " << toString(x._read_rc      ) << std::endl
+		    << " * _num_reg_rc            : " << toString(x._num_reg_rc   ) << std::endl
+		    << " * _write_rd              : " << toString(x._write_rd     ) << std::endl
+		    << " * _num_reg_rd            : " << toString(x._num_reg_rd   ) << std::endl
+		    << " * _write_re              : " << toString(x._write_re     ) << std::endl
+		    << " * _num_reg_re            : " << toString(x._num_reg_re   ) << std::endl;
+
+      return output_stream;
+    }
+
+  };
+
+  class Tread_queue_head_entry_t
+  {
+  public    : Tcontext_t         _context_id   ;
+  public    : Tcontext_t         _front_end_id ;
+  public    : Tcontext_t         _ooo_engine_id;
+  public    : Tpacket_t          _rob_id       ;
+  public    : Toperation_t       _operation    ;
+  public    : Ttype_t            _type         ;
+  public    : Tlsq_ptr_t         _store_queue_ptr_write;
+  public    : Tlsq_ptr_t         _load_queue_ptr_write;
+  public    : Tcontrol_t         _has_immediat ;
+  public    : Tgeneral_data_t    _immediat     ;
+  public    : Tcontrol_t         _read_ra      ;
+  public    : Tcontrol_t         _read_ra_val  ; // 1 : must access at the registerFile (after access, is set at 0)
+  public    : Tgeneral_address_t _num_reg_ra   ;
+  public    : Tcontrol_t         _data_ra_val  ; // 1 : the read of registerFile is valid
+  public    : Tgeneral_data_t    _data_ra      ;
+  public    : Tcontrol_t         _read_rb      ;
+  public    : Tcontrol_t         _read_rb_val  ;
+  public    : Tgeneral_address_t _num_reg_rb   ;
+  public    : Tcontrol_t         _data_rb_val  ;
+  public    : Tgeneral_data_t    _data_rb      ;
+  public    : Tcontrol_t         _read_rc      ;
+  public    : Tcontrol_t         _read_rc_val  ;
+  public    : Tspecial_address_t _num_reg_rc   ;
+  public    : Tcontrol_t         _data_rc_val  ;
+  public    : Tspecial_data_t    _data_rc      ;
+  public    : Tcontrol_t         _write_rd     ;
+  public    : Tgeneral_address_t _num_reg_rd   ;
+  public    : Tcontrol_t         _write_re     ;
+  public    : Tspecial_address_t _num_reg_re   ;
+
+#undef  FUNCTION 
+#define FUNCTION "Tread_queue_head_entry_t::operator="
+  public    : Tread_queue_head_entry_t& operator=(Tread_queue_entry_t x)
+    {
+      log_printf(FUNC,Read_queue,FUNCTION,"Begin");
+	  
+      _context_id   = x._context_id   ;
+      _front_end_id = x._front_end_id ;
+      _ooo_engine_id= x._ooo_engine_id;
+      _rob_id       = x._rob_id       ;
+      _operation    = x._operation    ;
+      _type         = x._type         ;
+      _store_queue_ptr_write = x._store_queue_ptr_write;
+      _load_queue_ptr_write  = x._load_queue_ptr_write ;
+      _has_immediat = x._has_immediat ;
+      _immediat     = x._immediat     ;
+      _read_ra      = x._read_ra      ;
+      _read_ra_val  = x._read_ra == 1 ; //if not must read, the registerFile is already access
+      _num_reg_ra   = x._num_reg_ra   ;
+      _data_ra_val  = x._read_ra == 0 ; //if not must read, the data is already valid
+      _data_ra      = 0               ;
+      _read_rb      = x._read_rb      ;
+      _read_rb_val  = x._read_rb == 1 ;
+      _num_reg_rb   = x._num_reg_rb   ;
+      _data_rb_val  = x._read_rb == 0 ;
+      _data_rb      = 0               ;
+      _read_rc      = x._read_rc      ;
+      _read_rc_val  = x._read_rc == 1 ;
+      _num_reg_rc   = x._num_reg_rc   ;
+      _data_rc_val  = x._read_rc == 0 ;
+      _data_rc      = 0               ;
+      _write_rd     = x._write_rd     ;
+      _num_reg_rd   = x._num_reg_rd   ;
+      _write_re     = x._write_re     ;
+      _num_reg_re   = x._num_reg_re   ;
+
+      log_printf(FUNC,Read_queue,FUNCTION,"End");
+
+      return *this;
+    }
+
+    friend std::ostream& operator<< (std::ostream& output_stream,
+				morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::read_queue::Tread_queue_head_entry_t & x)
+    {
+      output_stream << " * _context_id            : " << x._context_id   << std::endl
+		    << " * _front_end_id          : " << x._front_end_id << std::endl
+		    << " * _ooo_engine_id         : " << x._ooo_engine_id<< std::endl
+		    << " * _rob_id                : " << x._rob_id       << std::endl
+		    << " * _operation             : " << x._operation    << std::endl
+		    << " * _type                  : " << x._type         << std::endl
+		    << " * _store_queue_ptr_write : " << toString(x._store_queue_ptr_write) << std::endl
+		    << " * _load_queue_ptr_write  : " << toString(x._load_queue_ptr_write ) << std::endl
+		    << " * _has_immediat          : " << x._has_immediat << std::endl
+		    << " * _immediat              : " << x._immediat     << std::endl
+		    << " * _read_ra               : " << x._read_ra      << std::endl
+		    << " * _read_ra_val           : " << x._read_ra_val  << std::endl 
+		    << " * _num_reg_ra            : " << x._num_reg_ra   << std::endl
+		    << " * _data_ra_val           : " << x._data_ra_val  << std::endl
+		    << " * _data_ra               : " << x._data_ra      << std::endl
+		    << " * _read_rb               : " << x._read_rb      << std::endl
+		    << " * _read_rb_val           : " << x._read_rb_val  << std::endl
+		    << " * _num_reg_rb            : " << x._num_reg_rb   << std::endl
+		    << " * _data_rb_val           : " << x._data_rb_val  << std::endl
+		    << " * _data_rb               : " << x._data_rb      << std::endl
+		    << " * _read_rc               : " << x._read_rc      << std::endl
+		    << " * _read_rc_val           : " << x._read_rc_val  << std::endl
+		    << " * _num_reg_rc            : " << x._num_reg_rc   << std::endl
+		    << " * _data_rc_val           : " << x._data_rc_val  << std::endl
+		    << " * _data_rc               : " << x._data_rc      << std::endl
+		    << " * _write_rd              : " << x._write_rd     << std::endl
+		    << " * _num_reg_rd            : " << x._num_reg_rd   << std::endl
+		    << " * _write_re              : " << x._write_re     << std::endl
+		    << " * _num_reg_re            : " << x._num_reg_re   << std::endl;
+
+      return output_stream;
+    }
+  };
+
+}; // end namespace read_queue
+}; // end namespace read_unit
+}; // end namespace multi_read_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue.cpp	(revision 82)
@@ -18,15 +18,19 @@
 
 
-#ifdef SYSTEMC
-  Read_queue::Read_queue (sc_module_name name,
+  Read_queue::Read_queue 
+  (
+#ifdef SYSTEMC
+   sc_module_name name,
 #else
-  Read_queue::Read_queue (string name,
+   std::string name,
 #endif
 #ifdef STATISTICS
-			      morpheo::behavioural::Parameters_Statistics            * param_statistics,
-#endif
-			      morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::read_queue::Parameters * param ):
-			      _name              (name)
-			      ,_param            (param)
+   morpheo::behavioural::Parameters_Statistics            * param_statistics,
+#endif
+   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::read_queue::Parameters * param,
+   morpheo::behavioural::Tusage_t usage ):
+    _name              (name)
+    ,_param            (param)
+    ,_usage (usage)
   {
     log_printf(FUNC,Read_queue,"Read_queue","Begin");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue/src/Read_queue_allocation.cpp	(revision 82)
@@ -23,5 +23,5 @@
     log_printf(FUNC,Read_queue,"allocation","Begin");
 
-    _component   = new Component ();
+    _component   = new Component (_usage);
 
     Entity * entity = _component->set_entity (_name       
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/SelfTest/src/test.cpp	(revision 82)
@@ -6,38 +6,10 @@
  * Test
  */
+#define NB_ITERATION  2
+#define CYCLE_MAX     (2048*NB_ITERATION)
 
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Common/include/BitManipulation.h"
-
-#define NB_ITERATION  2
-#define CYCLE_MAX     (2048*NB_ITERATION)
-
-#define LABEL(str)                                                                       \
-{                                                                                        \
-  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} " << str << endl; \
-} while(0)
-
-static uint32_t cycle = 0;
-
-#define SC_START(cycle_offset)                                          \
-do                                                                      \
-{                                                                       \
-/*cout << "SC_START (begin)" << endl;*/                                 \
-                                                                        \
-  uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \
-  sc_start(cycle_offset);                                               \
-  if (cycle_current != cycle)                                           \
-    {                                                                   \
-      cycle = cycle_current;                                            \
-      cout << "##########[ cycle "<< cycle << " ]" << endl;             \
-    }                                                                   \
-                                                                        \
-  if (cycle_current > CYCLE_MAX)                                        \
-    {                                                                   \
-      TEST_KO("Maximal cycles Reached");                                \
-    }                                                                   \
-/*cout << "SC_START (end  )" << endl;*/                                 \
-} while(0)
 
 void test (string name,
@@ -50,9 +22,11 @@
 #endif
 
-  Reservation_station * _Reservation_station = new Reservation_station (name.c_str(),
+  Reservation_station * _Reservation_station = new Reservation_station 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
@@ -354,5 +328,5 @@
   for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
     {
-      LABEL("Iteration "+toString(iteration));
+      LABEL("Iteration %d",iteration);
 
       int32_t percent_transaction_queue_in     = (rand()%50)+25;
@@ -507,5 +481,5 @@
 	      if (val)
 		{
-		  LABEL(" * GPR_WRITE     ["+toString(i)+"] - gpr["+toString(num_reg)+"]["+toString(ooo_engine)+"] <- "+toString(data));
+		  LABEL(" * GPR_WRITE     [%d] - gpr[%d][%d] <- 0x%x",i,num_reg,ooo_engine,data);
 		  can_gpr_use [ooo_engine][num_reg] = false;
 		  need_gpr [ooo_engine][num_reg]    = false;
@@ -533,5 +507,6 @@
 	      if (val == 1)
 		{
-		  LABEL(" * SPR_WRITE     ["+toString(i)+"] - spr["+toString(num_reg)+"]["+toString(ooo_engine)+"] <- "+toString(data));
+		  LABEL(" * SPR_WRITE     [%d] - spr[%d][%d] <- 0x%x",i,num_reg,ooo_engine,data);
+
 		  can_spr_use [ooo_engine][num_reg] = false;
 		  need_spr[ooo_engine][num_reg]     = false;
@@ -560,5 +535,5 @@
 	      if (gpr_val)
 		{
-		  LABEL(" * BYPASS_WRITE  ["+toString(i)+"] - gpr["+toString(gpr_num_reg)+"]["+toString(ooo_engine)+"] <- "+toString(gpr_data));
+		  LABEL(" * BYPASS_WRITE  [%d] - gpr[%d][%d] <- 0x%x",i,gpr_num_reg,ooo_engine,gpr_data);
 		  can_gpr_use [ooo_engine][gpr_num_reg] = false;
 		  need_gpr[ooo_engine][gpr_num_reg]     = false;
@@ -580,5 +555,6 @@
 	      if (spr_val)
 		{
-		  LABEL(" * BYPASS_WRITE  ["+toString(i)+"] - spr["+toString(spr_num_reg)+"]["+toString(ooo_engine)+"] <- "+toString(spr_data));
+		  LABEL(" * BYPASS_WRITE  [%d] - spr[%d][%d] <- 0x%x",i,spr_num_reg,ooo_engine,spr_data);
+
 		  can_spr_use [ooo_engine][spr_num_reg] = false;
 		  need_spr[ooo_engine][spr_num_reg]     = false;
@@ -608,5 +584,6 @@
 	      if (val)
 		{
-		  LABEL(" * BYPASS_MEMORY ["+toString(i)+"] - gpr["+toString(num_reg)+"]["+toString(ooo_engine)+"] <- "+toString(data));
+		  LABEL(" * BYPASS_MEMORY [%d] - spr[%d][%d] <- 0x%x",i,num_reg,ooo_engine,data);
+
 		  can_gpr_use [ooo_engine][num_reg] = false;
 		  need_gpr [ooo_engine][num_reg] = false;
@@ -622,5 +599,5 @@
 	      (out_INSERT_ACK->read() == 1))
 	    {
-	      LABEL("Accepted INSERT  number : "+toString(request_in));
+	      LABEL("Accepted INSERT  number : %d",request_in);
 	      request_in  ++;
 	    }
@@ -628,5 +605,5 @@
 	  for (uint32_t i=0; i<_param->_nb_inst_retire; i++)
 	    {
- 	      LABEL("Test     RETIRE "+toString(i)+" : "+toString(out_RETIRE_VAL[i]->read())+","+toString(in_RETIRE_ACK[i]->read()));
+ 	      LABEL("Test     RETIRE %d : %d,%d",i,out_RETIRE_VAL[i]->read(),in_RETIRE_ACK[i]->read());
 	      if ((out_RETIRE_VAL [i]->read() == 1) and
 		  ( in_RETIRE_ACK [i]->read() == 1))
@@ -637,5 +614,5 @@
 		  else
 		    rob_id = 0;
-		  LABEL("Accepted RETIRE ["+toString(i)+"] number : "+toString(rob_id)+", request number : "+toString(request_out));
+		  LABEL("Accepted RETIRE [%d] number : %d, request number : %d",i,rob_id,request_out);
 		  TEST(bool, request_out_wait [rob_id] , true);
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/include/Reservation_station.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/include/Reservation_station.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/include/Reservation_station.h	(revision 82)
@@ -21,5 +21,5 @@
 #endif
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/include/Parameters.h"
-#include "Behavioural/include/Types.h"
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/include/Types.h"
 #ifdef STATISTICS
 #include "Behavioural/include/Stat.h"
@@ -29,4 +29,5 @@
 #include "Behavioural/include/Vhdl.h"
 #endif
+#include "Behavioural/include/Usage.h"
 
 namespace morpheo {
@@ -39,67 +40,4 @@
 namespace reservation_station {
 
-  class Treservation_station_entry_t
-  {
-  public    : Tcontext_t         _context_id     ;
-  public    : Tcontext_t         _front_end_id   ;
-  public    : Tcontext_t         _ooo_engine_id  ;
-  public    : Tpacket_t          _rob_id         ;
-  public    : Toperation_t       _operation   ;
-  public    : Ttype_t            _type        ;
-  public    : Tlsq_ptr_t         _store_queue_ptr_write;
-  public    : Tlsq_ptr_t         _load_queue_ptr_write ;
-  public    : Tcontrol_t         _has_immediat;
-  public    : Tgeneral_data_t    _immediat    ;
-//public    : Tcontrol_t         _read_ra     ;
-  public    : Tgeneral_address_t _num_reg_ra  ;
-  public    : Tcontrol_t         _data_ra_val ;
-  public    : Tgeneral_data_t    _data_ra     ;
-//public    : Tcontrol_t         _read_rb     ;
-  public    : Tgeneral_address_t _num_reg_rb  ;
-  public    : Tcontrol_t         _data_rb_val ;
-  public    : Tgeneral_data_t    _data_rb     ;
-//public    : Tcontrol_t         _read_rc     ;
-  public    : Tspecial_address_t _num_reg_rc  ;
-  public    : Tcontrol_t         _data_rc_val ;
-  public    : Tspecial_data_t    _data_rc     ;
-  public    : Tcontrol_t         _write_rd    ;
-  public    : Tgeneral_address_t _num_reg_rd  ;
-  public    : Tcontrol_t         _write_re    ;
-  public    : Tspecial_address_t _num_reg_re  ;
-
-    friend std::ostream& operator<< (std::ostream& output_stream,
-				morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::reservation_station::Treservation_station_entry_t & x)
-    {
-      output_stream << " * _context_id            : " << toString(x._context_id     ) << std::endl
-		    << " * _front_end_id          : " << toString(x._front_end_id   ) << std::endl
-		    << " * _ooo_engine_id         : " << toString(x._ooo_engine_id  ) << std::endl
-		    << " * _rob_id                : " << toString(x._rob_id         ) << std::endl
-		    << " * _operation             : " << toString(x._operation      ) << std::endl
-		    << " * _type                  : " << toString(x._type           ) << std::endl
-		    << " * _store_queue_ptr_write : " << toString(x._store_queue_ptr_write) << std::endl
-		    << " * _load_queue_ptr_write  : " << toString(x._load_queue_ptr_write ) << std::endl
-		    << " * _has_immediat          : " << toString(x._has_immediat   ) << std::endl
-		    << " * _immediat              : " << toString(x._immediat       ) << std::endl
-// 		    << " * _read_ra               : " << toString(x._read_ra        ) << std::endl
-		    << " * _num_reg_ra            : " << toString(x._num_reg_ra     ) << std::endl
-		    << " * _data_ra_val           : " << toString(x._data_ra_val    ) << std::endl
-		    << " * _data_ra               : " << toString(x._data_ra        ) << std::endl
-// 		    << " * _read_rb               : " << toString(x._read_rb        ) << std::endl
-		    << " * _num_reg_rb            : " << toString(x._num_reg_rb     ) << std::endl
-		    << " * _data_rb_val           : " << toString(x._data_rb_val    ) << std::endl
-		    << " * _data_rb               : " << toString(x._data_rb        ) << std::endl
-// 		    << " * _read_rc               : " << toString(x._read_rc        ) << std::endl
-		    << " * _num_reg_rc            : " << toString(x._num_reg_rc     ) << std::endl
-		    << " * _data_rc_val           : " << toString(x._data_rc_val    ) << std::endl
-		    << " * _data_rc               : " << toString(x._data_rc        ) << std::endl
-		    << " * _write_rd              : " << toString(x._write_rd       ) << std::endl
-		    << " * _num_reg_rd            : " << toString(x._num_reg_rd     ) << std::endl
-		    << " * _write_re              : " << toString(x._write_re       ) << std::endl
-		    << " * _num_reg_re            : " << toString(x._num_reg_re     ) << std::endl;
-
-      return output_stream;
-    }
-  };
-
   class Reservation_station 
 #if SYSTEMC
@@ -109,7 +47,7 @@
     // -----[ fields ]----------------------------------------------------
     // Parameters
-  protected : const std::string       _name;
-
+  protected : const std::string  _name;
   protected : const Parameters * _param;
+  private   : const Tusage_t     _usage;
 
 #ifdef STATISTICS
@@ -241,5 +179,7 @@
 						       morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-						       Parameters                                  * param );
+						       Parameters                                  * param,
+						       morpheo::behavioural::Tusage_t                usage );
+
   public  :          ~Reservation_station             (void);
 					       
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/include/Types.h	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/include/Types.h	(revision 82)
@@ -0,0 +1,95 @@
+#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_read_unit_read_unit_reservation_station_Types_h
+#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_read_unit_read_unit_reservation_station_Types_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Types.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_read_unit {
+namespace read_unit {
+namespace reservation_station {
+
+  class Treservation_station_entry_t
+  {
+  public    : Tcontext_t         _context_id     ;
+  public    : Tcontext_t         _front_end_id   ;
+  public    : Tcontext_t         _ooo_engine_id  ;
+  public    : Tpacket_t          _rob_id         ;
+  public    : Toperation_t       _operation   ;
+  public    : Ttype_t            _type        ;
+  public    : Tlsq_ptr_t         _store_queue_ptr_write;
+  public    : Tlsq_ptr_t         _load_queue_ptr_write ;
+  public    : Tcontrol_t         _has_immediat;
+  public    : Tgeneral_data_t    _immediat    ;
+//public    : Tcontrol_t         _read_ra     ;
+  public    : Tgeneral_address_t _num_reg_ra  ;
+  public    : Tcontrol_t         _data_ra_val ;
+  public    : Tgeneral_data_t    _data_ra     ;
+//public    : Tcontrol_t         _read_rb     ;
+  public    : Tgeneral_address_t _num_reg_rb  ;
+  public    : Tcontrol_t         _data_rb_val ;
+  public    : Tgeneral_data_t    _data_rb     ;
+//public    : Tcontrol_t         _read_rc     ;
+  public    : Tspecial_address_t _num_reg_rc  ;
+  public    : Tcontrol_t         _data_rc_val ;
+  public    : Tspecial_data_t    _data_rc     ;
+  public    : Tcontrol_t         _write_rd    ;
+  public    : Tgeneral_address_t _num_reg_rd  ;
+  public    : Tcontrol_t         _write_re    ;
+  public    : Tspecial_address_t _num_reg_re  ;
+
+    friend std::ostream& operator<< (std::ostream& output_stream,
+				morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::reservation_station::Treservation_station_entry_t & x)
+    {
+      output_stream << " * _context_id            : " << toString(x._context_id     ) << std::endl
+		    << " * _front_end_id          : " << toString(x._front_end_id   ) << std::endl
+		    << " * _ooo_engine_id         : " << toString(x._ooo_engine_id  ) << std::endl
+		    << " * _rob_id                : " << toString(x._rob_id         ) << std::endl
+		    << " * _operation             : " << toString(x._operation      ) << std::endl
+		    << " * _type                  : " << toString(x._type           ) << std::endl
+		    << " * _store_queue_ptr_write : " << toString(x._store_queue_ptr_write) << std::endl
+		    << " * _load_queue_ptr_write  : " << toString(x._load_queue_ptr_write ) << std::endl
+		    << " * _has_immediat          : " << toString(x._has_immediat   ) << std::endl
+		    << " * _immediat              : " << toString(x._immediat       ) << std::endl
+// 		    << " * _read_ra               : " << toString(x._read_ra        ) << std::endl
+		    << " * _num_reg_ra            : " << toString(x._num_reg_ra     ) << std::endl
+		    << " * _data_ra_val           : " << toString(x._data_ra_val    ) << std::endl
+		    << " * _data_ra               : " << toString(x._data_ra        ) << std::endl
+// 		    << " * _read_rb               : " << toString(x._read_rb        ) << std::endl
+		    << " * _num_reg_rb            : " << toString(x._num_reg_rb     ) << std::endl
+		    << " * _data_rb_val           : " << toString(x._data_rb_val    ) << std::endl
+		    << " * _data_rb               : " << toString(x._data_rb        ) << std::endl
+// 		    << " * _read_rc               : " << toString(x._read_rc        ) << std::endl
+		    << " * _num_reg_rc            : " << toString(x._num_reg_rc     ) << std::endl
+		    << " * _data_rc_val           : " << toString(x._data_rc_val    ) << std::endl
+		    << " * _data_rc               : " << toString(x._data_rc        ) << std::endl
+		    << " * _write_rd              : " << toString(x._write_rd       ) << std::endl
+		    << " * _num_reg_rd            : " << toString(x._num_reg_rd     ) << std::endl
+		    << " * _write_re              : " << toString(x._write_re       ) << std::endl
+		    << " * _num_reg_re            : " << toString(x._num_reg_re     ) << std::endl;
+
+      return output_stream;
+    }
+  };
+
+}; // end namespace reservation_station
+}; // end namespace read_unit
+}; // end namespace multi_read_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station.cpp	(revision 82)
@@ -20,15 +20,20 @@
 #undef  FUNCTION
 #define FUNCTION "Reservation_station::Reservation_station"
+
+  Reservation_station::Reservation_station 
+  (
 #ifdef SYSTEMC
-  Reservation_station::Reservation_station (sc_module_name name,
+   sc_module_name name,
 #else
-  Reservation_station::Reservation_station (string name,
+   std::string name,
 #endif
 #ifdef STATISTICS
-			  morpheo::behavioural::Parameters_Statistics * param_statistics,
+   morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-			  morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::reservation_station::Parameters * param ):
-			      _name              (name)
-			      ,_param            (param)
+   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::reservation_station::Parameters * param,
+   morpheo::behavioural::Tusage_t                usage ):
+    _name   (name)
+    ,_param (param)
+    ,_usage (usage)
   {
     log_printf(FUNC,Reservation_station,FUNCTION,"Begin");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station/src/Reservation_station_allocation.cpp	(revision 82)
@@ -26,5 +26,5 @@
     log_printf(FUNC,Reservation_station,FUNCTION,"Begin");
 
-    _component   = new Component ();
+    _component   = new Component (_usage);
 
     Entity * entity = _component->set_entity (_name       
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/SelfTest/src/test.cpp	(revision 82)
@@ -7,38 +7,10 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
 void test (string name,
@@ -51,9 +23,11 @@
 #endif
 
-  Read_unit * _Read_unit = new Read_unit (name.c_str(),
+  Read_unit * _Read_unit = new Read_unit 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
-#endif
-					     _param);
+     _parameters_statistics,
+#endif
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/include/Read_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/include/Read_unit.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/include/Read_unit.h	(revision 82)
@@ -178,5 +178,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Read_unit             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/src/Read_unit_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/src/Read_unit_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/src/Read_unit_allocation.cpp	(revision 82)
@@ -184,9 +184,11 @@
        name = _name+"_read_queue";
        
-       _component_read_queue  = new morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::read_queue::Read_queue (name.c_str()
+       _component_read_queue  = new morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::read_queue::Read_queue
+	 (name.c_str()
 #ifdef STATISTICS
-																		      ,param_statistics
-#endif
-																		      ,_param->_param_read_queue);
+	  ,param_statistics
+#endif
+	  ,_param->_param_read_queue
+	  ,_usage);
        
        _component->set_component (_component_read_queue->_component
@@ -199,9 +201,11 @@
        name = _name+"_reservation_station";
        
-       _component_reservation_station  = new morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::reservation_station::Reservation_station (name.c_str()
+       _component_reservation_station  = new morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_read_unit::read_unit::reservation_station::Reservation_station 
+	 (name.c_str()
 #ifdef STATISTICS
-																						 ,param_statistics
-#endif
-																						 ,_param->_param_reservation_station);
+	  ,param_statistics
+#endif
+	  ,_param->_param_reservation_station
+	  ,_usage);
        
        _component->set_component (_component_reservation_station->_component
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/SelfTest/src/test.cpp	(revision 82)
@@ -7,39 +7,11 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Behavioural/include/Allocation.h"
 #include "Common/include/BitManipulation.h"
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
   class entry_t
@@ -109,9 +81,11 @@
 #endif
 
-  Execute_queue * _Execute_queue = new Execute_queue (name.c_str(),
+  Execute_queue * _Execute_queue = new Execute_queue 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Execute_queue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Execute_queue.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Execute_queue.h	(revision 82)
@@ -17,7 +17,7 @@
 #include "Common/include/ToString.h"
 #include "Common/include/Debug.h"
-#include "Behavioural/include/Types.h"
 
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Parameters.h"
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Types.h"
 #ifdef STATISTICS
 #include "Behavioural/include/Stat.h"
@@ -31,5 +31,4 @@
 namespace morpheo {
 namespace behavioural {
-
 namespace core {
 namespace multi_execute_loop {
@@ -38,43 +37,4 @@
 namespace write_unit {
 namespace execute_queue {
-
-
-  class execute_queue_entry_t
-  {
-  public  : Tcontext_t         _context_id   ;
-  public  : Tcontext_t         _front_end_id ;
-  public  : Tcontext_t         _ooo_engine_id;
-  public  : Tpacket_t          _packet_id    ;
-//public  : Toperation_t       _operation    ;
-//public  : Ttype_t            _type         ;
-  public  : Tspecial_data_t    _flags        ;
-  public  : Texception_t       _exception    ;
-  public  : Tcontrol_t         _no_sequence  ;
-  public  : Tgeneral_data_t    _address      ;
-    
-  public  : execute_queue_entry_t (Tcontext_t         context_id   ,
-				   Tcontext_t         front_end_id ,
-				   Tcontext_t         ooo_engine_id,
-				   Tpacket_t          packet_id    ,
-			         //Toperation_t       operation    ,
-			         //Ttype_t            type         ,
-				   Tspecial_data_t    flags        ,
-				   Texception_t       exception    ,
-				   Tcontrol_t         no_sequence  ,
-				   Tgeneral_data_t    address      )
-    {
-      _context_id    = context_id   ;
-      _front_end_id  = front_end_id ;
-      _ooo_engine_id = ooo_engine_id;
-      _packet_id     = packet_id    ;
-    //_operation     = operation    ;
-    //_type          = type         ;
-      _flags         = flags        ;
-      _exception     = exception    ;
-      _no_sequence   = no_sequence  ;
-      _address       = address      ;
-    };
-  };
-
 
   class Execute_queue 
@@ -159,5 +119,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Execute_queue             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Types.h	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue/include/Types.h	(revision 82)
@@ -0,0 +1,69 @@
+#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_write_unit_write_unit_execute_queue_Types_h
+#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_write_unit_write_unit_execute_queue_Types_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Types.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_write_unit {
+namespace write_unit {
+namespace execute_queue {
+
+  class execute_queue_entry_t
+  {
+  public  : Tcontext_t         _context_id   ;
+  public  : Tcontext_t         _front_end_id ;
+  public  : Tcontext_t         _ooo_engine_id;
+  public  : Tpacket_t          _packet_id    ;
+//public  : Toperation_t       _operation    ;
+//public  : Ttype_t            _type         ;
+  public  : Tspecial_data_t    _flags        ;
+  public  : Texception_t       _exception    ;
+  public  : Tcontrol_t         _no_sequence  ;
+  public  : Tgeneral_data_t    _address      ;
+    
+  public  : execute_queue_entry_t (Tcontext_t         context_id   ,
+				   Tcontext_t         front_end_id ,
+				   Tcontext_t         ooo_engine_id,
+				   Tpacket_t          packet_id    ,
+			         //Toperation_t       operation    ,
+			         //Ttype_t            type         ,
+				   Tspecial_data_t    flags        ,
+				   Texception_t       exception    ,
+				   Tcontrol_t         no_sequence  ,
+				   Tgeneral_data_t    address      )
+    {
+      _context_id    = context_id   ;
+      _front_end_id  = front_end_id ;
+      _ooo_engine_id = ooo_engine_id;
+      _packet_id     = packet_id    ;
+    //_operation     = operation    ;
+    //_type          = type         ;
+      _flags         = flags        ;
+      _exception     = exception    ;
+      _no_sequence   = no_sequence  ;
+      _address       = address      ;
+    };
+  };
+
+}; // end namespace execute_queue
+}; // end namespace write_unit
+}; // end namespace multi_write_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/SelfTest/src/test.cpp	(revision 82)
@@ -7,39 +7,11 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Common/include/BitManipulation.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
   class entry_t
@@ -127,9 +99,11 @@
 #endif
 
-  Write_unit * _Write_unit = new Write_unit (name.c_str(),
+  Write_unit * _Write_unit = new Write_unit 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/SelfTest/src/test.cpp	(revision 82)
@@ -7,39 +7,11 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Common/include/BitManipulation.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
   class entry_t
@@ -127,9 +99,11 @@
 
 
-  Write_queue * _Write_queue = new Write_queue (name.c_str(),
+  Write_queue * _Write_queue = new Write_queue 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/include/Types.h	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/include/Types.h	(revision 82)
@@ -0,0 +1,84 @@
+#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_write_unit_write_unit_write_queue_Types_h
+#define morpheo_behavioural_core_multi_execute_loop_execute_loop_multi_write_unit_write_unit_write_queue_Types_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Types.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace multi_write_unit {
+namespace write_unit {
+namespace write_queue {
+
+  class write_queue_entry_t
+  {
+  public  : Tcontext_t         _context_id   ;
+  public  : Tcontext_t         _front_end_id ;
+  public  : Tcontext_t         _ooo_engine_id;
+  public  : Tpacket_t          _packet_id    ;
+//public  : Toperation_t       _operation    ;
+  public  : Ttype_t            _type         ;
+  public  : Tcontrol_t         _write_rd     ;
+  public  : Tgeneral_address_t _num_reg_rd   ;
+  public  : Tgeneral_data_t    _data_rd      ;
+  public  : Tcontrol_t         _write_re     ;
+  public  : Tspecial_address_t _num_reg_re   ;
+  public  : Tspecial_data_t    _data_re      ;
+  public  : Texception_t       _exception    ;
+  public  : Tcontrol_t         _no_sequence  ;
+  public  : Tgeneral_data_t    _address      ;
+    
+  public  : write_queue_entry_t (Tcontext_t         context_id   ,
+				 Tcontext_t         front_end_id ,
+				 Tcontext_t         ooo_engine_id,
+				 Tpacket_t          packet_id    ,
+			       //Toperation_t       operation    ,
+				 Ttype_t            type         ,
+				 Tcontrol_t         write_rd     ,
+				 Tgeneral_address_t num_reg_rd   ,
+				 Tgeneral_data_t    data_rd      ,
+				 Tcontrol_t         write_re     ,
+				 Tspecial_address_t num_reg_re   ,
+				 Tspecial_data_t    data_re      ,
+				 Texception_t       exception    ,
+				 Tcontrol_t         no_sequence  ,
+				 Tgeneral_data_t    address      )
+    {
+      _context_id    = context_id   ;
+      _front_end_id  = front_end_id ;
+      _ooo_engine_id = ooo_engine_id;
+      _packet_id     = packet_id    ;
+    //_operation     = operation    ;
+      _type          = type         ;
+      _write_rd      = write_rd     ;
+      _num_reg_rd    = num_reg_rd   ;
+      _data_rd       = data_rd      ;
+      _write_re      = write_re     ;
+      _num_reg_re    = num_reg_re   ;
+      _data_re       = data_re      ;
+      _exception     = exception    ;
+      _no_sequence   = no_sequence  ;
+      _address       = address      ;
+    };
+  };
+
+}; // end namespace write_queue
+}; // end namespace write_unit
+}; // end namespace multi_write_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/include/Write_queue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/include/Write_queue.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/include/Write_queue.h	(revision 82)
@@ -17,7 +17,8 @@
 #include "Common/include/ToString.h"
 #include "Common/include/Debug.h"
-#include "Behavioural/include/Types.h"
 
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/include/Parameters.h"
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue/include/Types.h"
+
 #ifdef STATISTICS
 #include "Behavioural/include/Stat.h"
@@ -37,57 +38,4 @@
 namespace write_unit {
 namespace write_queue {
-
-  class write_queue_entry_t
-  {
-  public  : Tcontext_t         _context_id   ;
-  public  : Tcontext_t         _front_end_id ;
-  public  : Tcontext_t         _ooo_engine_id;
-  public  : Tpacket_t          _packet_id    ;
-//public  : Toperation_t       _operation    ;
-  public  : Ttype_t            _type         ;
-  public  : Tcontrol_t         _write_rd     ;
-  public  : Tgeneral_address_t _num_reg_rd   ;
-  public  : Tgeneral_data_t    _data_rd      ;
-  public  : Tcontrol_t         _write_re     ;
-  public  : Tspecial_address_t _num_reg_re   ;
-  public  : Tspecial_data_t    _data_re      ;
-  public  : Texception_t       _exception    ;
-  public  : Tcontrol_t         _no_sequence  ;
-  public  : Tgeneral_data_t    _address      ;
-    
-  public  : write_queue_entry_t (Tcontext_t         context_id   ,
-				 Tcontext_t         front_end_id ,
-				 Tcontext_t         ooo_engine_id,
-				 Tpacket_t          packet_id    ,
-			       //Toperation_t       operation    ,
-				 Ttype_t            type         ,
-				 Tcontrol_t         write_rd     ,
-				 Tgeneral_address_t num_reg_rd   ,
-				 Tgeneral_data_t    data_rd      ,
-				 Tcontrol_t         write_re     ,
-				 Tspecial_address_t num_reg_re   ,
-				 Tspecial_data_t    data_re      ,
-				 Texception_t       exception    ,
-				 Tcontrol_t         no_sequence  ,
-				 Tgeneral_data_t    address      )
-    {
-      _context_id    = context_id   ;
-      _front_end_id  = front_end_id ;
-      _ooo_engine_id = ooo_engine_id;
-      _packet_id     = packet_id    ;
-    //_operation     = operation    ;
-      _type          = type         ;
-      _write_rd      = write_rd     ;
-      _num_reg_rd    = num_reg_rd   ;
-      _data_rd       = data_rd      ;
-      _write_re      = write_re     ;
-      _num_reg_re    = num_reg_re   ;
-      _data_re       = data_re      ;
-      _exception     = exception    ;
-      _no_sequence   = no_sequence  ;
-      _address       = address      ;
-    };
-  };
-
 
   class Write_queue 
@@ -204,5 +152,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Write_queue             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/include/Write_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/include/Write_unit.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/include/Write_unit.h	(revision 82)
@@ -145,5 +145,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Write_unit             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/src/Write_unit_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/src/Write_unit_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/src/Write_unit_allocation.cpp	(revision 82)
@@ -139,9 +139,11 @@
        name = _name+"_write_queue";
        
-       component_write_queue  = new morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Write_queue (name.c_str()
+       component_write_queue  = new morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::write_queue::Write_queue 
+	 (name.c_str()
 #ifdef STATISTICS
-																			  ,param_statistics
-#endif
-																			  ,_param->_param_write_queue);
+	  ,param_statistics
+#endif
+	  ,_param->_param_write_queue
+	  ,_usage);
        
        _component->set_component (component_write_queue->_component
@@ -156,9 +158,11 @@
        name = _name+"_execute_queue";
        
-       component_execute_queue  = new morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::execute_queue::Execute_queue (name.c_str()
+       component_execute_queue  = new morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_write_unit::write_unit::execute_queue::Execute_queue 
+	 (name.c_str()
 #ifdef STATISTICS
-																				,param_statistics
-#endif
-																				,_param->_param_execute_queue);
+	  ,param_statistics
+#endif
+	  ,_param->_param_execute_queue
+	  ,_usage);
        
        _component->set_component (component_execute_queue->_component
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/src/test.cpp	(revision 82)
@@ -7,4 +7,7 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/SelfTest/include/test.h"
 #include "Common/include/Test.h"
@@ -12,35 +15,4 @@
 #include "Behavioural/include/Allocation.h"
 #include <set>
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
 
@@ -106,9 +78,11 @@
 #endif
 
-  Execution_unit_to_Write_unit * _Execution_unit_to_Write_unit = new Execution_unit_to_Write_unit (name.c_str(),
+  Execution_unit_to_Write_unit * _Execution_unit_to_Write_unit = new Execution_unit_to_Write_unit 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/include/Execution_unit_to_Write_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/include/Execution_unit_to_Write_unit.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit/include/Execution_unit_to_Write_unit.h	(revision 82)
@@ -126,5 +126,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Execution_unit_to_Write_unit             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/SelfTest/src/test.cpp	(revision 82)
@@ -7,4 +7,7 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/SelfTest/include/test.h"
 #include "Common/include/Test.h"
@@ -13,36 +16,4 @@
 #include <list>
 #include <set>
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
-
 
 class entry_t 
@@ -113,9 +84,11 @@
 #endif
 
-  Read_unit_to_Execution_unit * _Read_unit_to_Execution_unit = new Read_unit_to_Execution_unit (name.c_str(),
+  Read_unit_to_Execution_unit * _Read_unit_to_Execution_unit = new Read_unit_to_Execution_unit 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/include/Read_unit_to_Execution_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/include/Read_unit_to_Execution_unit.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit/include/Read_unit_to_Execution_unit.h	(revision 82)
@@ -130,5 +130,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Read_unit_to_Execution_unit             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/src/test.cpp	(revision 82)
@@ -7,36 +7,9 @@
  */
 
+#define NB_ITERATION  128
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/include/test.h"
 #include "Common/include/Test.h"
-
-#define NB_ITERATION  128
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str)                                                                       \
-{                                                                                        \
-  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} " << str << endl; \
-} while(0)
-
-static uint32_t cycle = 0;
-
-#define SC_START(cycle_offset)                                          \
-do                                                                      \
-{                                                                       \
-/*cout << "SC_START (begin)" << endl;*/                                 \
-                                                                        \
-  uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \
-  if (cycle_current != cycle)                                           \
-    {                                                                   \
-      cycle = cycle_current;                                            \
-      cout << "##########[ cycle "<< cycle << " ]" << endl;             \
-    }                                                                   \
-                                                                        \
-  if (cycle_current > CYCLE_MAX)                                        \
-    {                                                                   \
-      TEST_KO("Maximal cycles Reached");                                \
-    }                                                                   \
-  sc_start(cycle_offset);                                               \
-/*cout << "SC_START (end  )" << endl;*/                                 \
-} while(0)
 
 void test (string name,
@@ -49,9 +22,11 @@
 #endif
 
-  Register_unit_Glue * _Register_unit_Glue = new Register_unit_Glue (name.c_str(),
+  Register_unit_Glue * _Register_unit_Glue = new Register_unit_Glue 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
@@ -575,5 +550,5 @@
   for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
     {
-      LABEL("Iteration "+toString(iteration));
+      LABEL("Iteration %d",iteration);
 
       if (test_read == true)
@@ -584,5 +559,5 @@
 	      Tcontrol_t      val = (rand()%100)<=percent_transaction;
 	      
-	      LABEL("GPR_READ  ["+toString(j)+"] : "+toString(val)+" - " +toString(static_cast<uint32_t>(context)));
+	      LABEL("GPR_READ  [%d] : %d - %d",j,val,context);
 	      
 	      in_GPR_READ_VAL           [j] ->write(val);
@@ -623,5 +598,5 @@
 	      Tcontrol_t      val = (rand()%100)<=percent_transaction;
 	      
-	      LABEL("SPR_READ  ["+toString(j)+"] : "+toString(val)+" - " +toString(static_cast<uint32_t>(context)));
+	      LABEL("SPR_READ  [%d] : %d - %d",j,val,context);
 	      
 	      in_SPR_READ_VAL           [j] ->write(val);
@@ -666,6 +641,6 @@
 	      Tcontrol_t      val = (rand()%100)<=percent_transaction;
 	      
-	      LABEL("GPR_WRITE ["+toString(j)+"] : "+toString(val)+" - " +toString(static_cast<uint32_t>(context)));
-	      
+	      LABEL("GPR_WRITE [%d] : %d - %d",j,val,context);
+
 	      in_GPR_WRITE_VAL           [j] ->write(val);
 	      in_GPR_WRITE_OOO_ENGINE_ID [j] ->write(context);
@@ -701,5 +676,5 @@
 	      Tcontrol_t      val = (rand()%100)<=percent_transaction;
 	      
-	      LABEL("SPR_WRITE ["+toString(j)+"] : "+toString(val)+" - " +toString(static_cast<uint32_t>(context)));
+	      LABEL("SPR_WRITE [%d] : %d - %d",j,val,context);
 	      
 	      in_SPR_WRITE_VAL           [j] ->write(val);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h	(revision 82)
@@ -169,5 +169,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Register_unit_Glue             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_allocation.cpp	(revision 82)
@@ -24,5 +24,5 @@
     log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
 
-    _component   = new Component ();
+    _component   = new Component (_usage);
 
     Entity * entity = _component->set_entity (_name       
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 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/src/test.cpp	(revision 82)
@@ -7,36 +7,9 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (10240*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/include/test.h"
 #include "Common/include/Test.h"
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (10240*NB_ITERATION)
-
-#define LABEL(str)                                                                       \
-{                                                                                        \
-  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} " << str << endl; \
-} while(0)
-
-static uint32_t cycle = 0;
-
-#define SC_START(cycle_offset)                                          \
-do                                                                      \
-{                                                                       \
-/*cout << "SC_START (begin)" << endl;*/                                 \
-                                                                        \
-  uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \
-  if (cycle_current != cycle)                                           \
-    {                                                                   \
-      cycle = cycle_current;                                            \
-      cout << "##########[ cycle "<< cycle << " ]" << endl;             \
-    }                                                                   \
-                                                                        \
-  if (cycle_current > CYCLE_MAX)                                        \
-    {                                                                   \
-      TEST_KO("Maximal cycles Reached");                                \
-    }                                                                   \
-  sc_start(cycle_offset);                                               \
-/*cout << "SC_START (end  )" << endl;*/                                 \
-} while(0)
 
 void test (string name,
@@ -49,9 +22,11 @@
 #endif
 
-  Register_unit * _Register_unit = new Register_unit (name.c_str(),
+  Register_unit * _Register_unit = new Register_unit 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
@@ -406,5 +381,5 @@
   for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
     {
-      LABEL("Iteration "+toString(iteration));
+      LABEL("Iteration %d",iteration);
 
       LABEL("(GPR) Write default value");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h	(revision 82)
@@ -142,5 +142,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Register_unit             (void);
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 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_allocation.cpp	(revision 82)
@@ -29,5 +29,5 @@
     log_printf(FUNC,Register_unit,FUNCTION,"Begin");
 
-    _component   = new Component ();
+    _component   = new Component (_usage);
 
     Entity * entity = _component->set_entity (_name       
@@ -270,4 +270,5 @@
 #endif
 	   ,_param->_param_gpr [i]
+	   ,_usage
 	   );
 	 
@@ -290,4 +291,5 @@
 #endif
 	   ,_param->_param_gpr_status [i]
+	   ,_usage
 	   );
 
@@ -310,4 +312,5 @@
 #endif
 	   ,_param->_param_spr [i]
+	   ,_usage
 	   );
 
@@ -329,4 +332,5 @@
 #endif
 	   ,_param->_param_spr_status [i]
+	   ,_usage
 	   );
 
@@ -350,4 +354,5 @@
 #endif
        ,_param->_param_glue
+       ,_usage
        );
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/SelfTest/src/test.cpp	(revision 82)
@@ -7,38 +7,11 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Execute_loop/Execute_loop/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Behavioural/include/Allocation.h"
 
-#define NB_ITERATION  1
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
 void test (string name,
@@ -51,9 +24,11 @@
 #endif
 
-  Execute_loop * _Execute_loop = new Execute_loop (name.c_str(),
+  Execute_loop * _Execute_loop = new Execute_loop 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/include/Execute_loop.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/include/Execute_loop.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/include/Execute_loop.h	(revision 82)
@@ -176,5 +176,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Execute_loop             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/src/Execute_loop_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/src/Execute_loop_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/src/Execute_loop_allocation.cpp	(revision 82)
@@ -164,5 +164,6 @@
 	    ,param_statistics
 #endif
-	    ,_param->_param_read_unit[i]);
+	    ,_param->_param_read_unit[i]
+	    ,_usage);
 
 	 _component->set_component (_component_read_unit [i]->_component
@@ -184,5 +185,6 @@
 	    ,param_statistics
 #endif
-	    ,_param->_param_functionnal_unit[i]);
+	    ,_param->_param_functionnal_unit[i]
+	    ,_usage);
 
 	 _component->set_component (_component_functionnal_unit [i]->_component
@@ -204,5 +206,6 @@
 	    ,param_statistics
 #endif
-	    ,_param->_param_load_store_unit[i]);
+	    ,_param->_param_load_store_unit[i]
+	    ,_usage);
 
 	 _component->set_component (_component_load_store_unit [i]->_component
@@ -224,5 +227,6 @@
 	    ,param_statistics
 #endif
-	    ,_param->_param_write_unit[i]);
+	    ,_param->_param_write_unit[i]
+	    ,_usage);
 
 	 _component->set_component (_component_write_unit [i]->_component
@@ -242,5 +246,6 @@
 	  ,param_statistics
 #endif
-	  ,_param->_param_read_unit_to_execution_unit);
+	  ,_param->_param_read_unit_to_execution_unit
+	  ,_usage);
        
        _component->set_component (_component_read_unit_to_execution_unit->_component
@@ -260,5 +265,6 @@
 	  ,param_statistics
 #endif
-	  ,_param->_param_execution_unit_to_write_unit);
+	  ,_param->_param_execution_unit_to_write_unit
+	  ,_usage);
        
        _component->set_component (_component_execution_unit_to_write_unit->_component
@@ -278,5 +284,6 @@
 	  ,param_statistics
 #endif
-	  ,_param->_param_register_unit);
+	  ,_param->_param_register_unit
+	  ,_usage);
        
        _component->set_component (_component_register_unit->_component
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/SelfTest/src/test.cpp	(revision 82)
@@ -7,39 +7,11 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (2048*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/SelfTest/include/test.h"
 #include <list>
 #include "Common/include/Test.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (2048*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
   class entry_t
@@ -151,9 +123,11 @@
 #endif
 
-  Decod * _Decod = new Decod (name.c_str(),
+  Decod * _Decod = new Decod 
+    (name.c_str(),
 #ifdef STATISTICS
-			      _parameters_statistics,
+     _parameters_statistics,
 #endif
-			      _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/include/Decod.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/include/Decod.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/include/Decod.h	(revision 82)
@@ -159,5 +159,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Decod             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/include/Parameters.h	(revision 82)
@@ -66,9 +66,9 @@
   public : ~Parameters () ;
 
-  public :        std::string   msg_error  (void);
+  public :        Parameters_test msg_error  (void);
 
-  public :        std::string   print      (uint32_t depth);
-  public : friend std::ostream& operator<< (std::ostream& output_stream,
-					    morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod::Parameters & x);
+  public :        std::string     print      (uint32_t depth);
+  public : friend std::ostream&   operator<< (std::ostream& output_stream,
+					      morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod::Parameters & x);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Parameters_msg_error.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod/src/Parameters_msg_error.cpp	(revision 82)
@@ -21,32 +21,32 @@
 #undef  FUNCTION
 #define FUNCTION "Decod::msg_error"
-  std::string Parameters::msg_error(void)
+  Parameters_test Parameters::msg_error(void)
   {
     log_printf(FUNC,Decod,FUNCTION,"Begin");
-
-    std::string msg = "";
+    
+    Parameters_test test("Decod");
 
     if (_nb_inst_decod == 0)
-      msg += "  - nb_inst_decod must be > 0.\n";
+      test.error(_("nb_inst_decod must be > 0.\n"));
 
     if ((_size_general_data != 32) and
 	(_size_general_data != 64))
-      msg += "  - size_general_data must be equal at 32 or 64 bits.\n";
+      test.error(_("size_general_data must be equal at 32 or 64 bits.\n"));
 
     if ((_nb_branch_speculated == 0) or
 	(_nb_branch_speculated > _nb_context))
-      msg += "  - nb_branch_speculated must be in [1:nb_context].\n";
+      test.error(_("nb_branch_speculated must be in [1:nb_context].\n"));
 
     if ((_nb_context_select == 0) or
         (_nb_context_select > _nb_context))
-      msg += "  - nb_context_select must be in [1:nb_context].\n";
+      test.error(_("nb_context_select must be in [1:nb_context].\n"));
 
     if ((_priority != PRIORITY_ROUND_ROBIN))
-      msg += "  - Unsupported priority scheme. Supported scheme are : "+toString(PRIORITY_ROUND_ROBIN)+".\n";
+      test.error(toString(_("Unsupported priority scheme. Supported scheme are : %s.\n"),toString(PRIORITY_ROUND_ROBIN).c_str()));
     
     if ((_load_balancing != LOAD_BALANCING_MAXIMUM_FOR_PRIORITY))
-      msg += "  - Unsupported load_balancing scheme. Supported scheme are : "+toString(LOAD_BALANCING_MAXIMUM_FOR_PRIORITY)+".\n";
+      test.error(toString(_("Unsupported load_balancing scheme. Supported scheme are : %s.\n"),toString(LOAD_BALANCING_MAXIMUM_FOR_PRIORITY).c_str()));
 
-    return msg;
+    return test;
 
     log_printf(FUNC,Decod,FUNCTION,"End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/Makefile
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/Makefile	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/Makefile	(revision 82)
@@ -0,0 +1,24 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_COMPONENT			= ./
+include				$(DIR_COMPONENT)/Makefile.defs
+
+#-----[ Library ]------------------------------------------
+LIBRARY				= $(DIR_LIB)/libDecod_queue.a
+
+
+#-----[ include ]------------------------------------------
+
+all				:
+				@$(MAKE) all_component
+
+include                         $(DIR_MORPHEO)/Behavioural/Makefile.flags
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Common
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Component
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/Makefile.defs
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/Makefile.defs	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/Makefile.defs	(revision 82)
@@ -0,0 +1,11 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_COMPONENT_MORPHEO		= ../../../../../..
+DIR_MORPHEO			= $(DIR_COMPONENT)/$(DIR_COMPONENT_MORPHEO)
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/Makefile.deps
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/Makefile.deps	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/Makefile.deps	(revision 82)
@@ -0,0 +1,38 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+# DIR_MORPHEO must be defined
+
+Decod_queue			= yes
+
+ifndef Behavioural
+include 			$(DIR_MORPHEO)/Behavioural/Makefile.deps
+endif
+
+#-----[ Directory ]----------------------------------------
+
+Decod_queue_DIR			=	$(DIR_MORPHEO)/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue
+
+#-----[ Library ]------------------------------------------
+
+Decod_queue_LIBRARY		= 	-lDecod_queue	\
+					$(Behavioural_LIBRARY)	
+
+Decod_queue_DIR_LIBRARY		=	-L$(Decod_queue_DIR)/lib	\
+					$(Behavioural_DIR_LIBRARY)
+
+#-----[ Rules ]--------------------------------------------
+
+Decod_queue_library		:
+				@\
+				$(MAKE) Behavioural_library;		\
+				$(MAKE) --directory=$(Decod_queue_DIR) --makefile=Makefile;
+
+Decod_queue_library_clean	:
+				@\
+				$(MAKE) Behavioural_library_clean;	\
+				$(MAKE) --directory=$(Decod_queue_DIR) --makefile=Makefile clean;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/Makefile
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/Makefile	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/Makefile	(revision 82)
@@ -0,0 +1,30 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_COMPONENT			= ../
+include				$(DIR_COMPONENT)/Makefile.defs
+
+LIBRARY				= $(Decod_queue_LIBRARY)
+
+DIR_LIBRARY			= $(Decod_queue_DIR_LIBRARY)
+
+#-----[ include ]------------------------------------------
+
+all				:
+				@$(MAKE) all_selftest
+
+library				: Decod_queue_library
+
+library_clean			: Decod_queue_library_clean
+
+include                         $(DIR_COMPONENT)/Makefile.deps
+include                         $(DIR_MORPHEO)/Behavioural/Makefile.flags
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Common
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Selftest
+include 			$(DIR_MORPHEO)/Behavioural/Makefile.Synthesis
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/config_min.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/config_min.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/config_min.cfg	(revision 82)
@@ -0,0 +1,6 @@
+Decod_queue
+1	1	+1	# nb_context       
+1	1	*4	# nb_inst_decod    
+1	1	*4	# size_queue       
+32	32	+1	# size_general_data
+1	1	+1	# nb_branch_speculated [0] [nb_context]
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/config_mono_context.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/config_mono_context.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/config_mono_context.cfg	(revision 82)
@@ -0,0 +1,6 @@
+Decod_queue
+1	1	+1	# nb_context       
+1	4	*4	# nb_inst_decod    
+4	16	*4	# size_queue       
+32	32	+1	# size_general_data
+1	2	+1	# nb_branch_speculated [0] [nb_context]
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/config_multi_context.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/config_multi_context.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/config_multi_context.cfg	(revision 82)
@@ -0,0 +1,9 @@
+Decod_queue
+4	4	+1	# nb_context       
+4	4	*4	# nb_inst_decod    
+16	16	*4	# size_queue       
+32	32	+1	# size_general_data
+2	2	+1	# nb_branch_speculated [0] [nb_context]
+4	4	+1	# nb_branch_speculated [1] [nb_context]
+1	1	+1	# nb_branch_speculated [2] [nb_context]
+8	8	+1	# nb_branch_speculated [3] [nb_context]
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/include/test.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/include/test.h	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/include/test.h	(revision 82)
@@ -0,0 +1,31 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ * Test "RegisterFile"
+ */
+
+#ifdef SYSTEMC
+#include "systemc.h"
+#endif
+
+#include <string>
+#include <iostream>
+#include <sys/time.h>
+
+#include "Common/include/Time.h"
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
+
+using namespace std;
+using namespace morpheo;
+using namespace morpheo::behavioural;
+using namespace morpheo::behavioural::core;
+using namespace morpheo::behavioural::core::multi_front_end;
+using namespace morpheo::behavioural::core::multi_front_end::front_end;
+using namespace morpheo::behavioural::core::multi_front_end::front_end::decod_unit;
+
+using namespace morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue;
+
+void test    (string name,
+	      morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Parameters * param);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/src/main.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/src/main.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/src/main.cpp	(revision 82)
@@ -0,0 +1,77 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/include/test.h"
+
+#define NB_PARAMS 4
+
+void usage (int argc, char * argv[])
+{
+  err (_("<Usage> %s name_instance list_params.\n"),argv[0]);
+  err (_("list_params is :\n"));
+  err (_(" * nb_context                        (uint32_t)\n"));
+  err (_(" * nb_inst_decod                     (uint32_t)\n"));
+  err (_(" * size_queue                        (uint32_t)\n"));
+  err (_(" * size_general_data                 (uint32_t)\n"));
+  err (_(" * nb_branch_speculated [nb_context] (uint32_t)\n"));
+
+  exit (1);
+}
+
+#ifndef SYSTEMC
+int main    (int argc, char * argv[])
+#else
+int sc_main (int argc, char * argv[])
+#endif
+{
+  if (argc < static_cast<int>(2+NB_PARAMS))
+    usage (argc, argv);
+
+  uint32_t x = 1;
+
+  string name = argv[x++];
+  uint32_t _nb_context        = fromString<uint32_t>(argv[x++]);
+  uint32_t _nb_inst_decod     = fromString<uint32_t>(argv[x++]);
+  uint32_t _size_queue        = fromString<uint32_t>(argv[x++]);
+  uint32_t _size_general_data = fromString<uint32_t>(argv[x++]);
+
+  if (argc != static_cast<int>(2+NB_PARAMS+_nb_context))
+    usage (argc, argv);
+
+  uint32_t * _nb_branch_speculated = new uint32_t [_nb_context];
+  for (uint32_t i=0; i<_nb_context; i++)
+    _nb_branch_speculated [i] = fromString<uint32_t>(argv[x++]);
+
+  int _return = EXIT_SUCCESS;
+  try 
+    {
+      morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Parameters * param = new morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Parameters
+	(_nb_context       ,
+	 _nb_inst_decod    ,
+	 _size_queue       ,
+	 _size_general_data,
+	 _nb_branch_speculated);
+      
+      msg(_("%s"),param->print(1).c_str());
+      
+      test (name,param);
+    }
+  catch (morpheo::ErrorMorpheo & error)
+    {
+      msg (_("<%s> :\n%s"),name.c_str(), error.what ());
+      _return = EXIT_FAILURE;
+    }
+  catch (...)
+    {
+      err (_("<%s> : This test must generate a error.\n"),name.c_str());
+      _return = EXIT_FAILURE;
+    }
+
+  delete [] _nb_branch_speculated;
+
+  return (_return);
+}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/src/test.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/src/test.cpp	(revision 82)
@@ -0,0 +1,344 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ * Test
+ */
+
+#define NB_ITERATION  128
+#define CYCLE_MAX     (128*NB_ITERATION)
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/SelfTest/include/test.h"
+#include "Common/include/Test.h"
+#include "Behavioural/include/Allocation.h"
+
+void test (string name,
+	   morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Parameters * _param)
+{
+  msg(_("<%s> : Simulation SystemC.\n"),name.c_str());
+
+#ifdef STATISTICS
+  morpheo::behavioural::Parameters_Statistics * _parameters_statistics = new morpheo::behavioural::Parameters_Statistics (5,50);
+#endif
+
+  Tusage_t _usage = USE_ALL;
+
+//   _usage = usage_unset(_usage,USE_SYSTEMC              );
+//   _usage = usage_unset(_usage,USE_VHDL                 );
+//   _usage = usage_unset(_usage,USE_VHDL_TESTBENCH       );
+//   _usage = usage_unset(_usage,USE_VHDL_TESTBENCH_ASSERT);
+//   _usage = usage_unset(_usage,USE_POSITION             );
+//   _usage = usage_unset(_usage,USE_STATISTICS           );
+//   _usage = usage_unset(_usage,USE_INFORMATION          );
+
+  Decod_queue * _Decod_queue = new Decod_queue 
+    (name.c_str(),
+#ifdef STATISTICS
+     _parameters_statistics,
+#endif
+     _param,
+     _usage);
+  
+#ifdef SYSTEMC
+  if (usage_is_set(_usage,USE_SYSTEMC))
+    {
+  /*********************************************************************
+   * Déclarations des signaux
+   *********************************************************************/
+  string rename;
+
+  sc_clock              *  in_CLOCK  = new sc_clock ("clock", 1.0, 0.5);	 
+  sc_signal<Tcontrol_t> *  in_NRESET = new sc_signal<Tcontrol_t> ("NRESET");
+
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_VAL            ," in_DECOD_IN_VAL           ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_IN_ACK            ,"out_DECOD_IN_ACK           ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_CONTEXT_ID     ," in_DECOD_IN_CONTEXT_ID    ",Tcontext_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_DEPTH          ," in_DECOD_IN_DEPTH         ",Tdepth_t           ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_TYPE           ," in_DECOD_IN_TYPE          ",Ttype_t            ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_OPERATION      ," in_DECOD_IN_OPERATION     ",Toperation_t       ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_IS_DELAY_SLOT  ," in_DECOD_IN_IS_DELAY_SLOT ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_ADDRESS        ," in_DECOD_IN_ADDRESS       ",Tgeneral_data_t    ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_HAS_IMMEDIAT   ," in_DECOD_IN_HAS_IMMEDIAT  ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_IMMEDIAT       ," in_DECOD_IN_IMMEDIAT      ",Tgeneral_data_t    ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_READ_RA        ," in_DECOD_IN_READ_RA       ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_NUM_REG_RA     ," in_DECOD_IN_NUM_REG_RA    ",Tgeneral_address_t ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_READ_RB        ," in_DECOD_IN_READ_RB       ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_NUM_REG_RB     ," in_DECOD_IN_NUM_REG_RB    ",Tgeneral_address_t ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_READ_RC        ," in_DECOD_IN_READ_RC       ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_NUM_REG_RC     ," in_DECOD_IN_NUM_REG_RC    ",Tspecial_address_t ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_WRITE_RD       ," in_DECOD_IN_WRITE_RD      ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_NUM_REG_RD     ," in_DECOD_IN_NUM_REG_RD    ",Tgeneral_address_t ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_WRITE_RE       ," in_DECOD_IN_WRITE_RE      ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_NUM_REG_RE     ," in_DECOD_IN_NUM_REG_RE    ",Tspecial_address_t ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IN_EXCEPTION_USE  ," in_DECOD_IN_EXCEPTION_USE ",Texception_t       ,_param->_nb_inst_decod);
+									                          
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_VAL           ,"out_DECOD_OUT_VAL          ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_OUT_ACK           ," in_DECOD_OUT_ACK          ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_CONTEXT_ID    ,"out_DECOD_OUT_CONTEXT_ID   ",Tcontext_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_DEPTH         ,"out_DECOD_OUT_DEPTH        ",Tdepth_t           ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_TYPE          ,"out_DECOD_OUT_TYPE         ",Ttype_t            ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_OPERATION     ,"out_DECOD_OUT_OPERATION    ",Toperation_t       ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_IS_DELAY_SLOT ,"out_DECOD_OUT_IS_DELAY_SLOT",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_ADDRESS       ,"out_DECOD_OUT_ADDRESS      ",Tgeneral_data_t    ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_HAS_IMMEDIAT  ,"out_DECOD_OUT_HAS_IMMEDIAT ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_IMMEDIAT      ,"out_DECOD_OUT_IMMEDIAT     ",Tgeneral_data_t    ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_READ_RA       ,"out_DECOD_OUT_READ_RA      ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_NUM_REG_RA    ,"out_DECOD_OUT_NUM_REG_RA   ",Tgeneral_address_t ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_READ_RB       ,"out_DECOD_OUT_READ_RB      ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_NUM_REG_RB    ,"out_DECOD_OUT_NUM_REG_RB   ",Tgeneral_address_t ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_READ_RC       ,"out_DECOD_OUT_READ_RC      ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_NUM_REG_RC    ,"out_DECOD_OUT_NUM_REG_RC   ",Tspecial_address_t ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_WRITE_RD      ,"out_DECOD_OUT_WRITE_RD     ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_NUM_REG_RD    ,"out_DECOD_OUT_NUM_REG_RD   ",Tgeneral_address_t ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_WRITE_RE      ,"out_DECOD_OUT_WRITE_RE     ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_NUM_REG_RE    ,"out_DECOD_OUT_NUM_REG_RE   ",Tspecial_address_t ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_OUT_EXCEPTION_USE ,"out_DECOD_OUT_EXCEPTION_USE",Texception_t       ,_param->_nb_inst_decod);
+									                          
+  ALLOC1_SC_SIGNAL( in_DEPTH_TAIL              ," in_DEPTH_TAIL             ",Tdepth_t           ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL( in_DEPTH_NB_BRANCH         ," in_DEPTH_NB_BRANCH        ",Tdepth_t           ,_param->_nb_context);
+
+  ALLOC1_SC_SIGNAL(out_NB_INST_ALL             ,"out_NB_INST_ALL            ",Tcounter_t         ,_param->_nb_context);
+  
+  /********************************************************
+   * Instanciation
+   ********************************************************/
+  
+  msg(_("<%s> : Instanciation of _Decod_queue.\n"),name.c_str());
+
+  (*(_Decod_queue->in_CLOCK))        (*(in_CLOCK));
+  (*(_Decod_queue->in_NRESET))       (*(in_NRESET));
+
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_VAL            ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_IN_ACK            ,_param->_nb_inst_decod);
+  if (_param->_have_port_context_id)
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_CONTEXT_ID     ,_param->_nb_inst_decod);
+  if (_param->_have_port_depth)
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_DEPTH          ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_TYPE           ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_OPERATION      ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_IS_DELAY_SLOT  ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_ADDRESS        ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_HAS_IMMEDIAT   ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_IMMEDIAT       ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_READ_RA        ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_NUM_REG_RA     ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_READ_RB        ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_NUM_REG_RB     ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_READ_RC        ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_NUM_REG_RC     ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_WRITE_RD       ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_NUM_REG_RD     ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_WRITE_RE       ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_NUM_REG_RE     ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_IN_EXCEPTION_USE  ,_param->_nb_inst_decod);
+  
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_VAL           ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DECOD_OUT_ACK           ,_param->_nb_inst_decod);
+  if (_param->_have_port_context_id)
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_CONTEXT_ID    ,_param->_nb_inst_decod);
+  if (_param->_have_port_depth)
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_DEPTH         ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_TYPE          ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_OPERATION     ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_IS_DELAY_SLOT ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_ADDRESS       ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_HAS_IMMEDIAT  ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_IMMEDIAT      ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_READ_RA       ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_NUM_REG_RA    ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_READ_RB       ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_NUM_REG_RB    ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_READ_RC       ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_NUM_REG_RC    ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_WRITE_RD      ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_NUM_REG_RD    ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_WRITE_RE      ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_NUM_REG_RE    ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_DECOD_OUT_EXCEPTION_USE ,_param->_nb_inst_decod);
+  
+  if (_param->_have_port_depth)
+    {
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DEPTH_TAIL              ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Decod_queue, in_DEPTH_NB_BRANCH         ,_param->_nb_context);
+    }
+  
+  INSTANCE1_SC_SIGNAL(_Decod_queue,out_NB_INST_ALL             ,_param->_nb_context);
+  msg(_("<%s> : Start Simulation ............\n"),name.c_str());
+    
+  Time * _time = new Time();
+
+  /********************************************************
+   * Simulation - Begin
+   ********************************************************/
+
+  // Initialisation
+
+  const uint32_t seed = 0;
+//const uint32_t seed = static_cast<uint32_t>(time(NULL));
+
+  srand(seed);
+
+  SC_START(0);
+  LABEL("Initialisation");
+
+  LABEL("Reset");
+  in_NRESET->write(0);
+  SC_START(5);
+  in_NRESET->write(1);  
+
+  LABEL("Loop of Test");
+
+  Tcounter_t nb_inst      [_param->_nb_context];
+  Tdepth_t   depth        [_param->_nb_context];
+  Taddress_t address_src  [_param->_nb_context];
+  Taddress_t address_dest [_param->_nb_context];
+
+  for (uint32_t i=0; i<_param->_nb_context; i++)
+    {
+      nb_inst      [i] = 0;
+      depth        [i] = 0;
+      address_src  [i] = 0;
+      address_dest [i] = 0;
+    }
+
+  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
+    {
+      LABEL("Iteration %d",iteration);
+
+      {
+	Taddress_t address_tmp [_param->_nb_context];
+	
+	for (uint32_t i=0; i<_param->_nb_context; i++)
+	  address_tmp [i] = address_src [i];
+
+	uint32_t x = rand()%_param->_nb_inst_decod;
+	for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
+	  {
+	    Tcontext_t context = rand()%_param->_nb_context;
+
+	    in_DECOD_IN_VAL        [i]->write(i<=x);
+	    in_DECOD_IN_CONTEXT_ID [i]->write(context);
+	    in_DECOD_IN_DEPTH      [i]->write(depth [context]);
+	    in_DECOD_IN_ADDRESS    [i]->write(address_tmp [context]);
+
+	    address_tmp [context] ++;
+	  }
+      }
+
+      {
+	uint32_t x = rand()%_param->_nb_inst_decod;
+	for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
+	  {
+	    in_DECOD_OUT_ACK       [i]->write(i<=x);
+	  }
+      }
+      
+      SC_START(0);
+
+      for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
+	{
+	  LABEL("DECOD_IN  [%d] - %d %d",i,in_DECOD_IN_VAL [i]->read(),out_DECOD_IN_ACK [i]->read());
+
+	  if (in_DECOD_IN_VAL [i]->read() and out_DECOD_IN_ACK [i]->read())
+	    {
+	      LABEL("DECOD_IN  [%d] - Transaction Accepted",i);
+	      Tcontext_t context = in_DECOD_IN_CONTEXT_ID [i]->read();
+	      LABEL("  * context  : %d",context);
+	      
+	      nb_inst      [context] ++;
+	      address_src  [context] ++;
+	    }
+	}
+
+      for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
+	{
+	  LABEL("DECOD_OUT [%d] - %d %d",i,out_DECOD_OUT_VAL [i]->read(),in_DECOD_OUT_ACK [i]->read());
+	  if (out_DECOD_OUT_VAL [i]->read() and in_DECOD_OUT_ACK [i]->read())
+	    {
+	      LABEL("DECOD_OUT [%d] - Transaction Accepted",i);
+	      Tcontext_t context = out_DECOD_OUT_CONTEXT_ID [i]->read();
+	      LABEL("  * context  : %d",context);
+	      
+	      TEST(Tdepth_t  ,out_DECOD_OUT_DEPTH   [i]->read(),depth        [context]);
+	      TEST(Taddress_t,out_DECOD_OUT_ADDRESS [i]->read(),address_dest [context]);
+	      
+	      nb_inst      [context] --;
+	      address_dest [context] ++;
+	    }
+	}
+
+      SC_START(1);
+
+      for (uint32_t i=0; i<_param->_nb_context; i++)
+	TEST(Tcounter_t,out_NB_INST_ALL[i]->read(), nb_inst[i]);
+    }
+
+  /********************************************************
+   * Simulation - End
+   ********************************************************/
+
+  TEST_OK ("End of Simulation");
+  delete _time;
+
+  msg(_("<%s> : ............ Stop Simulation\n"),name.c_str());
+
+  delete in_CLOCK;
+  delete in_NRESET;
+
+  DELETE1_SC_SIGNAL( in_DECOD_IN_VAL            ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_IN_ACK            ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_CONTEXT_ID     ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_DEPTH          ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_TYPE           ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_OPERATION      ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_IS_DELAY_SLOT  ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_ADDRESS        ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_HAS_IMMEDIAT   ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_IMMEDIAT       ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_READ_RA        ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_NUM_REG_RA     ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_READ_RB        ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_NUM_REG_RB     ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_READ_RC        ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_NUM_REG_RC     ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_WRITE_RD       ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_NUM_REG_RD     ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_WRITE_RE       ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_NUM_REG_RE     ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_IN_EXCEPTION_USE  ,_param->_nb_inst_decod);
+
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_VAL           ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_OUT_ACK           ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_CONTEXT_ID    ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_DEPTH         ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_TYPE          ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_OPERATION     ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_IS_DELAY_SLOT ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_ADDRESS       ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_HAS_IMMEDIAT  ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_IMMEDIAT      ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_READ_RA       ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_NUM_REG_RA    ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_READ_RB       ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_NUM_REG_RB    ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_READ_RC       ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_NUM_REG_RC    ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_WRITE_RD      ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_NUM_REG_RD    ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_WRITE_RE      ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_NUM_REG_RE    ,_param->_nb_inst_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_OUT_EXCEPTION_USE ,_param->_nb_inst_decod);
+
+  DELETE1_SC_SIGNAL( in_DEPTH_TAIL              ,_param->_nb_context);
+  DELETE1_SC_SIGNAL( in_DEPTH_NB_BRANCH         ,_param->_nb_context);
+
+  DELETE1_SC_SIGNAL(out_NB_INST_ALL             ,_param->_nb_context);
+    }
+#endif
+
+  delete _Decod_queue;
+#ifdef STATISTICS
+  delete _parameters_statistics;
+#endif
+}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/Decod_queue.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/Decod_queue.tex	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/Decod_queue.tex	(revision 82)
@@ -0,0 +1,38 @@
+\documentclass[10pt,a4paper,twocolumn]{article}
+
+\def\dirdoc{tex}
+\def\dirschema{eps}
+
+% Package de variables d'environnement : Titre, command etc ...
+\usepackage{../../../../../../../Behavioural/doc/sty/doc-style}
+\usepackage{sty/header}
+
+
+%------------------------------------------------------------------------------
+% Début document
+%------------------------------------------------------------------------------
+
+\pagestyle{empty}
+
+\begin{document}
+
+% Créez une page de titre
+\maketitle
+\thispagestyle{empty}
+
+%Table des matières et des figures
+%\tableofcontents
+%\newpage
+%\listoffigures
+
+%------------------------------------------------------------------------------
+% Ajout du corps du documents
+%------------------------------------------------------------------------------
+
+\input{tex/root}
+
+%------------------------------------------------------------------------------
+% Fin d'ajout du corps du document
+%------------------------------------------------------------------------------
+
+\end{document}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/Makefile
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/Makefile	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/Makefile	(revision 82)
@@ -0,0 +1,19 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_COMPONENT			= ../
+include				$(DIR_COMPONENT)/Makefile.defs
+
+#-----[ include ]------------------------------------------
+
+all				:
+				$(MAKE) all_documentation
+
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Common
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Documentation
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/sty/header.sty
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/sty/header.sty	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/sty/header.sty	(revision 82)
@@ -0,0 +1,12 @@
+\def\review{YYYY/MM/DD}
+%\def\review{\number\day/\number\month/\number\year\xspace}
+
+\title{Decod_queue}
+ 
+\author{}
+
+\affiliation{}
+
+\email{}
+
+\date{\review}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/01_introduction.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/01_introduction.tex	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/01_introduction.tex	(revision 82)
@@ -0,0 +1,1 @@
+\Section{Introduction}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/02_features.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/02_features.tex	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/02_features.tex	(revision 82)
@@ -0,0 +1,1 @@
+\Section{Features}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/03_description.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/03_description.tex	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/03_description.tex	(revision 82)
@@ -0,0 +1,1 @@
+\Section{Functional Description}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/04_pinout.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/04_pinout.tex	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/04_pinout.tex	(revision 82)
@@ -0,0 +1,1 @@
+\Section{Pin out}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/05_parameters.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/05_parameters.tex	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/05_parameters.tex	(revision 82)
@@ -0,0 +1,1 @@
+\Section{Parameters}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/06_performance.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/06_performance.tex	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/06_performance.tex	(revision 82)
@@ -0,0 +1,1 @@
+\Section{Performance}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/07_details.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/07_details.tex	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/07_details.tex	(revision 82)
@@ -0,0 +1,1 @@
+\Section{Details}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/08_history.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/08_history.tex	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/08_history.tex	(revision 82)
@@ -0,0 +1,10 @@
+\Section{Revision History}
+
+\begin{tabular}{|c|c|c|}
+\hline
+Revision Date & By  & Modifications\\
+\hline
+\hline
+yyyy/mm/dd    & xxx & Initial document \\
+\hline
+\end{tabular}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/root.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/root.tex	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/doc/tex/root.tex	(revision 82)
@@ -0,0 +1,8 @@
+\input{\dirdoc/01_introduction}
+\input{\dirdoc/02_features}
+\input{\dirdoc/03_description}
+\input{\dirdoc/04_pinout}
+\input{\dirdoc/05_parameters}
+\input{\dirdoc/06_performance}
+\input{\dirdoc/07_details}
+\input{\dirdoc/08_history}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h	(revision 82)
@@ -0,0 +1,191 @@
+#ifndef morpheo_behavioural_core_multi_front_end_front_end_decod_unit_decod_queue_Decod_queue_h
+#define morpheo_behavioural_core_multi_front_end_front_end_decod_unit_decod_queue_Decod_queue_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#ifdef SYSTEMC
+#include "systemc.h"
+#endif
+
+#include "Common/include/ToString.h"
+#include "Common/include/Debug.h"
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Parameters.h"
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Types.h"
+#ifdef STATISTICS
+#include "Behavioural/include/Stat.h"
+#endif
+#include "Behavioural/include/Component.h"
+#ifdef VHDL
+#include "Behavioural/include/Vhdl.h"
+#endif
+#include "Behavioural/include/Usage.h"
+
+#include <iostream>
+#include <list>
+
+namespace morpheo {
+namespace behavioural {
+
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+  class Decod_queue 
+#if SYSTEMC
+    : public sc_module
+#endif
+  {
+    // -----[ fields ]----------------------------------------------------
+    // Parameters
+  protected : const std::string  _name;
+  protected : const Parameters * _param;
+  private   : const Tusage_t     _usage;
+
+#ifdef STATISTICS
+  public    : Stat                           * _stat;
+  private   : counter_t                     ** _stat_nb_inst;
+#endif
+
+  public    : Component                      * _component;
+  private   : Interfaces                     * _interfaces;
+
+#ifdef SYSTEMC
+    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_CLOCK                      *  in_CLOCK        ;
+  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
+
+    // ~~~~~[ Interface : "decod_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_VAL            ;//[nb_inst_decod]
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_IN_ACK            ;//[nb_inst_decod]
+  public    : SC_IN (Tcontext_t         )  **  in_DECOD_IN_CONTEXT_ID     ;//[nb_inst_decod]
+  public    : SC_IN (Tdepth_t           )  **  in_DECOD_IN_DEPTH          ;//[nb_inst_decod]
+  public    : SC_IN (Ttype_t            )  **  in_DECOD_IN_TYPE           ;//[nb_inst_decod]
+  public    : SC_IN (Toperation_t       )  **  in_DECOD_IN_OPERATION      ;//[nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_IS_DELAY_SLOT  ;//[nb_inst_decod]
+  public    : SC_IN (Tgeneral_data_t    )  **  in_DECOD_IN_ADDRESS        ;//[nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_HAS_IMMEDIAT   ;//[nb_inst_decod]
+  public    : SC_IN (Tgeneral_data_t    )  **  in_DECOD_IN_IMMEDIAT       ;//[nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_READ_RA        ;//[nb_inst_decod]
+  public    : SC_IN (Tgeneral_address_t )  **  in_DECOD_IN_NUM_REG_RA     ;//[nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_READ_RB        ;//[nb_inst_decod]
+  public    : SC_IN (Tgeneral_address_t )  **  in_DECOD_IN_NUM_REG_RB     ;//[nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_READ_RC        ;//[nb_inst_decod]
+  public    : SC_IN (Tspecial_address_t )  **  in_DECOD_IN_NUM_REG_RC     ;//[nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_WRITE_RD       ;//[nb_inst_decod]
+  public    : SC_IN (Tgeneral_address_t )  **  in_DECOD_IN_NUM_REG_RD     ;//[nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IN_WRITE_RE       ;//[nb_inst_decod]
+  public    : SC_IN (Tspecial_address_t )  **  in_DECOD_IN_NUM_REG_RE     ;//[nb_inst_decod]
+  public    : SC_IN (Texception_t       )  **  in_DECOD_IN_EXCEPTION_USE  ;//[nb_inst_decod]
+
+    // ~~~~~[ Interface : "decod_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_VAL           ;//[nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_OUT_ACK           ;//[nb_inst_decod]
+  public    : SC_OUT(Tcontext_t         )  ** out_DECOD_OUT_CONTEXT_ID    ;//[nb_inst_decod]
+  public    : SC_OUT(Tdepth_t           )  ** out_DECOD_OUT_DEPTH         ;//[nb_inst_decod]
+  public    : SC_OUT(Ttype_t            )  ** out_DECOD_OUT_TYPE          ;//[nb_inst_decod]
+  public    : SC_OUT(Toperation_t       )  ** out_DECOD_OUT_OPERATION     ;//[nb_inst_decod]
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_IS_DELAY_SLOT ;//[nb_inst_decod]
+  public    : SC_OUT(Tgeneral_data_t    )  ** out_DECOD_OUT_ADDRESS       ;//[nb_inst_decod]
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_HAS_IMMEDIAT  ;//[nb_inst_decod]
+  public    : SC_OUT(Tgeneral_data_t    )  ** out_DECOD_OUT_IMMEDIAT      ;//[nb_inst_decod]
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_READ_RA       ;//[nb_inst_decod]
+  public    : SC_OUT(Tgeneral_address_t )  ** out_DECOD_OUT_NUM_REG_RA    ;//[nb_inst_decod]
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_READ_RB       ;//[nb_inst_decod]
+  public    : SC_OUT(Tgeneral_address_t )  ** out_DECOD_OUT_NUM_REG_RB    ;//[nb_inst_decod]
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_READ_RC       ;//[nb_inst_decod]
+  public    : SC_OUT(Tspecial_address_t )  ** out_DECOD_OUT_NUM_REG_RC    ;//[nb_inst_decod]
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_WRITE_RD      ;//[nb_inst_decod]
+  public    : SC_OUT(Tgeneral_address_t )  ** out_DECOD_OUT_NUM_REG_RD    ;//[nb_inst_decod]
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_OUT_WRITE_RE      ;//[nb_inst_decod]
+  public    : SC_OUT(Tspecial_address_t )  ** out_DECOD_OUT_NUM_REG_RE    ;//[nb_inst_decod]
+  public    : SC_OUT(Texception_t       )  ** out_DECOD_OUT_EXCEPTION_USE ;//[nb_inst_decod]
+
+    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tdepth_t           )  **  in_DEPTH_TAIL              ;//[nb_context]
+  public    : SC_IN (Tdepth_t           )  **  in_DEPTH_NB_BRANCH         ;//[nb_context]
+
+    // ~~~~~[ Interface : "nb_inst" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_OUT(Tcounter_t         )  ** out_NB_INST_ALL             ;//[nb_context]
+
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+  private   : std::list<decod_queue_entry_t*>* reg_QUEUE                  ;
+  private   : uint32_t                       * reg_NB_INST                ;//[nb_context]
+    
+    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  private   : Tcontrol_t                     * internal_DECOD_IN_ACK      ;//[nb_inst_decod]
+  private   : Tcontrol_t                     * internal_DECOD_OUT_VAL     ;//[nb_inst_decod]
+  private   : Tcontrol_t                     * internal_DECOD_OUT_ACK     ;//[nb_inst_decod]
+#endif
+
+    // -----[ Methods ]---------------------------------------------------
+
+#ifdef SYSTEMC
+    SC_HAS_PROCESS (Decod_queue);
+#endif
+  public  :          Decod_queue              
+  (
+#ifdef SYSTEMC
+   sc_module_name                                name,
+#else					       
+   std::string                                   name,
+#endif					       
+#ifdef STATISTICS
+   morpheo::behavioural::Parameters_Statistics * param_statistics,
+#endif
+   Parameters                                  * param,
+   morpheo::behavioural::Tusage_t                usage
+   );
+  public  :          ~Decod_queue             (void);
+					       
+  private : void        allocation                (
+#ifdef STATISTICS
+						   morpheo::behavioural::Parameters_Statistics * param_statistics
+#else
+						   void
+#endif
+						   );
+  private : void        deallocation              (void);
+					       
+#ifdef SYSTEMC				       
+  public  : void        transition                (void);
+  public  : void        genMoore                  (void);
+  public  : void        genMealy_decod_out        (void);
+#endif					       
+
+#if VHDL				       
+  public  : void        vhdl                      (void);
+  private : void        vhdl_declaration          (Vhdl * & vhdl);
+  private : void        vhdl_body                 (Vhdl * & vhdl);
+#endif					       
+
+#ifdef STATISTICS
+  public  : void        statistics_allocation     (morpheo::behavioural::Parameters_Statistics * param_statistics);
+  public  : void        statistics_deallocation   (void);
+#endif
+#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+  private : void        end_cycle                 (void);
+#endif
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Parameters.h	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Parameters.h	(revision 82)
@@ -0,0 +1,67 @@
+#ifndef morpheo_behavioural_core_multi_front_end_front_end_decod_unit_decod_queue_Parameters_h
+#define morpheo_behavioural_core_multi_front_end_front_end_decod_unit_decod_queue_Parameters_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Common/include/Debug.h"
+#include "Behavioural/include/Parameters.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+  class Parameters : public morpheo::behavioural::Parameters
+  {
+    //-----[ fields ]------------------------------------------------------------
+  public : uint32_t            _nb_context           ;
+  public : uint32_t            _nb_inst_decod        ;
+  public : uint32_t            _size_queue           ;
+  public : uint32_t            _size_general_data    ;
+  public : uint32_t          * _nb_branch_speculated ; //[nb_context]
+
+  public : uint32_t            _nb_bank              ;
+  public : uint32_t            _size_bank            ;
+						     
+  public : uint32_t            _size_context_id      ;
+  public : uint32_t            _size_depth           ;
+  public : uint32_t            _size_nb_inst         ;
+   						     
+  public : bool                _have_port_context_id ;
+  public : bool                _have_port_depth      ;
+
+    //-----[ methods ]-----------------------------------------------------------
+  public : Parameters  (uint32_t   nb_context          ,
+			uint32_t   nb_inst_decod       ,
+			uint32_t   size_queue          ,
+			uint32_t   size_general_data   ,
+			uint32_t * nb_branch_speculated);
+//   public : Parameters  (Parameters & param) ;
+  public : ~Parameters () ;
+
+  public :        Parameters_test msg_error  (void);
+
+  public :        std::string     print      (uint32_t depth);
+  public : friend std::ostream&   operator<< (std::ostream& output_stream,
+					      morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Parameters & x);
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Types.h	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Types.h	(revision 82)
@@ -0,0 +1,108 @@
+#ifndef morpheo_behavioural_core_multi_front_end_front_end_decod_unit_decod_queue_Types_h
+#define morpheo_behavioural_core_multi_front_end_front_end_decod_unit_decod_queue_Types_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Types.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+  class decod_queue_entry_t
+  {
+  private: const uint32_t       _nb_inst        ;
+
+  public : Tcontrol_t         * _val            ;
+  public : Tcontext_t         * _context_id     ;
+  public : Tdepth_t           * _depth          ;
+  public : Ttype_t            * _type           ;
+  public : Toperation_t       * _operation      ;
+  public : Tcontrol_t         * _is_delay_slot  ;
+  public : Tgeneral_data_t    * _address        ;
+  public : Tcontrol_t         * _has_immediat   ;
+  public : Tgeneral_data_t    * _immediat       ;
+  public : Tcontrol_t         * _read_ra        ;
+  public : Tgeneral_address_t * _num_reg_ra     ;
+  public : Tcontrol_t         * _read_rb        ;
+  public : Tgeneral_address_t * _num_reg_rb     ;
+  public : Tcontrol_t         * _read_rc        ;
+  public : Tspecial_address_t * _num_reg_rc     ;
+  public : Tcontrol_t         * _write_rd       ;
+  public : Tgeneral_address_t * _num_reg_rd     ;
+  public : Tcontrol_t         * _write_re       ;
+  public : Tspecial_address_t * _num_reg_re     ;
+  public : Texception_t       * _exception_use  ;
+
+  public :  decod_queue_entry_t (uint32_t nb_inst):
+    _nb_inst (nb_inst)
+    {
+      _val            = new Tcontrol_t         [_nb_inst];
+      _context_id     = new Tcontext_t         [_nb_inst];
+      _depth          = new Tdepth_t           [_nb_inst];
+      _type           = new Ttype_t            [_nb_inst];
+      _operation      = new Toperation_t       [_nb_inst];
+      _is_delay_slot  = new Tcontrol_t         [_nb_inst];
+      _address        = new Tgeneral_data_t    [_nb_inst];
+      _has_immediat   = new Tcontrol_t         [_nb_inst];
+      _immediat       = new Tgeneral_data_t    [_nb_inst];
+      _read_ra        = new Tcontrol_t         [_nb_inst];
+      _num_reg_ra     = new Tgeneral_address_t [_nb_inst];
+      _read_rb        = new Tcontrol_t         [_nb_inst];
+      _num_reg_rb     = new Tgeneral_address_t [_nb_inst];
+      _read_rc        = new Tcontrol_t         [_nb_inst];
+      _num_reg_rc     = new Tspecial_address_t [_nb_inst];
+      _write_rd       = new Tcontrol_t         [_nb_inst];
+      _num_reg_rd     = new Tgeneral_address_t [_nb_inst];
+      _write_re       = new Tcontrol_t         [_nb_inst];
+      _num_reg_re     = new Tspecial_address_t [_nb_inst];
+      _exception_use  = new Texception_t       [_nb_inst];
+
+      for (uint32_t i=0; i<_nb_inst; i++)
+	_val [i]=0; // default : not valid
+    }
+
+  public : ~decod_queue_entry_t (void)
+    {
+      delete [] _val            ;
+      delete [] _context_id     ;
+      delete [] _depth          ;
+      delete [] _type           ;
+      delete [] _operation      ;
+      delete [] _is_delay_slot  ;
+      delete [] _address        ;
+      delete [] _has_immediat   ;
+      delete [] _immediat       ;
+      delete [] _read_ra        ;
+      delete [] _num_reg_ra     ;
+      delete [] _read_rb        ;
+      delete [] _num_reg_rb     ;
+      delete [] _read_rc        ;
+      delete [] _num_reg_rc     ;
+      delete [] _write_rd       ;
+      delete [] _num_reg_rd     ;
+      delete [] _write_re       ;
+      delete [] _num_reg_re     ;
+      delete [] _exception_use  ;
+    }
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue.cpp	(revision 82)
@@ -0,0 +1,150 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::Decod_queue"
+  Decod_queue::Decod_queue 
+  (
+#ifdef SYSTEMC
+   sc_module_name name,
+#else
+   string name,
+#endif
+#ifdef STATISTICS
+   morpheo::behavioural::Parameters_Statistics * param_statistics,
+#endif
+   morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Parameters * param,
+   morpheo::behavioural::Tusage_t usage
+   ):
+    _name              (name)
+    ,_param            (param)
+    ,_usage            (usage)
+  {
+    log_begin(Decod_queue,FUNCTION);
+
+    usage_environment(_usage);
+
+    log_printf(INFO,Decod_queue,FUNCTION,_("Allocation"));
+
+    allocation (
+#ifdef STATISTICS
+		param_statistics
+#endif
+		);
+
+#ifdef STATISTICS
+    if (usage_is_set(_usage,USE_STATISTICS))
+      {	
+	log_printf(INFO,Decod_queue,FUNCTION,_("Allocation of statistics"));
+
+	statistics_allocation(param_statistics);
+      }
+#endif
+
+#ifdef VHDL
+    if (usage_is_set(_usage,USE_VHDL))
+      {
+	// generate the vhdl
+	log_printf(INFO,Decod_queue,FUNCTION,_("Generate the vhdl"));
+	
+	vhdl();
+      }
+#endif
+
+#ifdef SYSTEMC
+    if (usage_is_set(_usage,USE_SYSTEMC))
+      {
+	log_printf(INFO,Decod_queue,FUNCTION,_("Method - transition"));
+
+	SC_METHOD (transition);
+	dont_initialize ();
+	sensitive << (*(in_CLOCK)).pos();
+	
+# ifdef SYSTEMCASS_SPECIFIC
+	// List dependency information
+# endif    
+
+	log_printf(INFO,Decod_queue,FUNCTION,_("Method - genMoore"));
+
+	SC_METHOD (genMoore);
+	dont_initialize ();
+	sensitive << (*(in_CLOCK)).neg(); // use internal register
+	
+# ifdef SYSTEMCASS_SPECIFIC
+	// List dependency information
+# endif    
+
+	log_printf(INFO,Decod_queue,FUNCTION,_("Method - genMealy_decod_out"));
+
+	SC_METHOD (genMealy_decod_out);
+	dont_initialize ();
+	sensitive << (*(in_CLOCK)).neg(); // use internal register
+
+	for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
+	  sensitive << (*(in_DECOD_OUT_ACK [i]));
+	if (_param->_have_port_depth)
+	  for (uint32_t i=0; i<_param->_nb_context; i++)
+	    sensitive << (*(in_DEPTH_TAIL      [i]))
+		      << (*(in_DEPTH_NB_BRANCH [i]));
+
+# ifdef SYSTEMCASS_SPECIFIC
+	// List dependency information
+	for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
+	  {
+	    (*(out_DECOD_OUT_VAL [i])) (*(in_DECOD_OUT_ACK [i]));
+	    if (_param->_have_port_depth)
+	      for (uint32_t i=0; i<_param->_nb_context; i++)
+		{
+		  (*(out_DECOD_OUT_VAL [i])) (*(in_DEPTH_TAIL      [i]));
+		  (*(out_DECOD_OUT_VAL [i])) (*(in_DEPTH_NB_BRANCH [i]));
+		}
+	  }
+# endif    
+	
+#endif
+      }
+    log_end(Decod_queue,FUNCTION);
+  };
+    
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::~Decod_queue"
+  Decod_queue::~Decod_queue (void)
+  {
+    log_begin(Decod_queue,FUNCTION);
+
+#ifdef STATISTICS
+    if (usage_is_set(_usage,USE_STATISTICS))
+      {
+	statistics_deallocation();
+      }
+#endif
+
+    log_printf(INFO,Decod_queue,FUNCTION,_("Deallocation"));
+    deallocation ();
+
+    log_end(Decod_queue,FUNCTION);
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_allocation.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_allocation.cpp	(revision 82)
@@ -0,0 +1,153 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
+#include "Behavioural/include/Allocation.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::allocation"
+  void Decod_queue::allocation 
+  (
+#ifdef STATISTICS
+   morpheo::behavioural::Parameters_Statistics * param_statistics
+#else
+   void
+#endif
+   )
+  {
+    log_begin(Decod_queue,FUNCTION);
+
+    _component   = new Component (_usage);
+
+    Entity * entity = _component->set_entity (_name       
+					      ,"Decod_queue"
+#ifdef POSITION
+					      ,COMBINATORY 
+#endif
+					      );
+
+    _interfaces = entity->set_interfaces();
+
+    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    {
+      Interface * interface = _interfaces->set_interface(""
+#ifdef POSITION
+							 ,IN
+							 ,SOUTH,
+							 _("Generalist interface")
+#endif
+							 );
+      
+      in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_YES);
+      in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_YES);
+    }
+
+    // ~~~~~[ Interface : "decod_in" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    {
+      ALLOC1_INTERFACE("decod_in",IN ,WEST,"Input of decod_queue", _param->_nb_inst_decod);
+
+      ALLOC1_VALACK_IN ( in_DECOD_IN_VAL            ,VAL);
+      ALLOC1_VALACK_OUT(out_DECOD_IN_ACK            ,ACK);
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_CONTEXT_ID     ,"context_id"   ,Tcontext_t         ,_param->_size_context_id            );
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_DEPTH          ,"depth"        ,Tdepth_t           ,_param->_size_depth                 );
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_TYPE           ,"type"         ,Ttype_t            ,_param->_size_type                  );
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_OPERATION      ,"operation"    ,Toperation_t       ,_param->_size_operation             );
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_IS_DELAY_SLOT  ,"is_delay_slot",Tcontrol_t         ,1                                   );
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_ADDRESS        ,"address"      ,Tgeneral_data_t    ,_param->_size_general_data          );
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_HAS_IMMEDIAT   ,"has_immediat" ,Tcontrol_t         ,1                                   );
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_IMMEDIAT       ,"immediat"     ,Tgeneral_data_t    ,_param->_size_general_data          );
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_READ_RA        ,"read_ra"      ,Tcontrol_t         ,1                                   );
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_NUM_REG_RA     ,"num_reg_ra"   ,Tgeneral_address_t ,_param->_size_general_register_logic);
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_READ_RB        ,"read_rb"      ,Tcontrol_t         ,1                                   );
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_NUM_REG_RB     ,"num_reg_rb"   ,Tgeneral_address_t ,_param->_size_general_register_logic);
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_READ_RC        ,"read_rc"      ,Tcontrol_t         ,1                                   );
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_NUM_REG_RC     ,"num_reg_rc"   ,Tspecial_address_t ,_param->_size_special_register_logic);
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_WRITE_RD       ,"write_rd"     ,Tcontrol_t         ,1                                   );
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_NUM_REG_RD     ,"num_reg_rd"   ,Tgeneral_address_t ,_param->_size_general_register_logic);
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_WRITE_RE       ,"write_re"     ,Tcontrol_t         ,1                                   );
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_NUM_REG_RE     ,"num_reg_re"   ,Tspecial_address_t ,_param->_size_special_register_logic);
+      ALLOC1_SIGNAL_IN ( in_DECOD_IN_EXCEPTION_USE  ,"exception_use",Texception_t       ,_param->_size_exception_use         );
+    }
+
+    // ~~~~~[ Interface : "decod_out" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    {
+      ALLOC1_INTERFACE("decod_out",OUT,EAST,"Output of decod_queue", _param->_nb_inst_decod);
+
+      ALLOC1_VALACK_OUT(out_DECOD_OUT_VAL            ,VAL);
+      ALLOC1_VALACK_IN ( in_DECOD_OUT_ACK            ,ACK);
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_CONTEXT_ID     ,"context_id"   ,Tcontext_t         ,_param->_size_context_id            );
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_DEPTH          ,"depth"        ,Tdepth_t           ,_param->_size_depth                 );
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_TYPE           ,"type"         ,Ttype_t            ,_param->_size_type                  );
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_OPERATION      ,"operation"    ,Toperation_t       ,_param->_size_operation             );
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_IS_DELAY_SLOT  ,"is_delay_slot",Tcontrol_t         ,1                                   );
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_ADDRESS        ,"address"      ,Tgeneral_data_t    ,_param->_size_general_data          );
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_HAS_IMMEDIAT   ,"has_immediat" ,Tcontrol_t         ,1                                   );
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_IMMEDIAT       ,"immediat"     ,Tgeneral_data_t    ,_param->_size_general_data          );
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_READ_RA        ,"read_ra"      ,Tcontrol_t         ,1                                   );
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_NUM_REG_RA     ,"num_reg_ra"   ,Tgeneral_address_t ,_param->_size_general_register_logic);
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_READ_RB        ,"read_rb"      ,Tcontrol_t         ,1                                   );
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_NUM_REG_RB     ,"num_reg_rb"   ,Tgeneral_address_t ,_param->_size_general_register_logic);
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_READ_RC        ,"read_rc"      ,Tcontrol_t         ,1                                   );
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_NUM_REG_RC     ,"num_reg_rc"   ,Tspecial_address_t ,_param->_size_special_register_logic);
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_WRITE_RD       ,"write_rd"     ,Tcontrol_t         ,1                                   );
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_NUM_REG_RD     ,"num_reg_rd"   ,Tgeneral_address_t ,_param->_size_general_register_logic);
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_WRITE_RE       ,"write_re"     ,Tcontrol_t         ,1                                   );
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_NUM_REG_RE     ,"num_reg_re"   ,Tspecial_address_t ,_param->_size_special_register_logic);
+      ALLOC1_SIGNAL_OUT(out_DECOD_OUT_EXCEPTION_USE  ,"exception_use",Texception_t       ,_param->_size_exception_use         );
+    }
+
+    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~            
+    {
+      ALLOC1_INTERFACE("depth",IN ,NORTH,"Depth", _param->_nb_context);
+
+      ALLOC1_SIGNAL_IN ( in_DEPTH_TAIL     ,"tail"     ,Tdepth_t           ,_param->_size_depth  );
+      if (_param->_have_port_depth)
+      ALLOC1_SIGNAL_IN ( in_DEPTH_NB_BRANCH,"nb_branch",Tdepth_t           ,_param->_size_depth+1);
+    }
+
+    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~            
+    {
+      ALLOC1_INTERFACE("nb_inst",OUT,NORTH,"Instruction's number", _param->_nb_context);
+
+      ALLOC1_SIGNAL_OUT(out_NB_INST_ALL    ,"all"      ,Tcontext_t         ,_param->_size_nb_inst+1);
+    }
+
+    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+    reg_QUEUE              = new std::list<decod_queue_entry_t*>;
+    reg_NB_INST            = new uint32_t   [_param->_nb_context];
+
+    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    internal_DECOD_IN_ACK  = new Tcontrol_t [_param->_nb_inst_decod];
+    internal_DECOD_OUT_VAL = new Tcontrol_t [_param->_nb_inst_decod];
+    internal_DECOD_OUT_ACK = new Tcontrol_t [_param->_nb_inst_decod];
+    
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+#ifdef POSITION
+    if (usage_is_set(_usage,USE_POSITION))
+      _component->generate_file();
+#endif
+
+    log_end(Decod_queue,FUNCTION);
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_deallocation.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_deallocation.cpp	(revision 82)
@@ -0,0 +1,104 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
+#include "Behavioural/include/Allocation.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::deallocation"
+  void Decod_queue::deallocation (void)
+  {
+    log_begin(Decod_queue,FUNCTION);
+
+    if (usage_is_set(_usage,USE_SYSTEMC))
+      {
+	delete    in_CLOCK ;
+	delete    in_NRESET;
+
+	DELETE1_SIGNAL( in_DECOD_IN_VAL            ,_param->_nb_inst_decod,1);
+	DELETE1_SIGNAL(out_DECOD_IN_ACK            ,_param->_nb_inst_decod,1);
+	DELETE1_SIGNAL( in_DECOD_IN_CONTEXT_ID     ,_param->_nb_inst_decod,_param->_size_context_id            );
+	DELETE1_SIGNAL( in_DECOD_IN_DEPTH          ,_param->_nb_inst_decod,_param->_size_depth                 );
+	DELETE1_SIGNAL( in_DECOD_IN_TYPE           ,_param->_nb_inst_decod,_param->_size_type                  );
+	DELETE1_SIGNAL( in_DECOD_IN_OPERATION      ,_param->_nb_inst_decod,_param->_size_operation             );
+	DELETE1_SIGNAL( in_DECOD_IN_IS_DELAY_SLOT  ,_param->_nb_inst_decod,1                                   );
+	DELETE1_SIGNAL( in_DECOD_IN_ADDRESS        ,_param->_nb_inst_decod,_param->_size_general_data          );
+	DELETE1_SIGNAL( in_DECOD_IN_HAS_IMMEDIAT   ,_param->_nb_inst_decod,1                                   );
+	DELETE1_SIGNAL( in_DECOD_IN_IMMEDIAT       ,_param->_nb_inst_decod,_param->_size_general_data          );
+	DELETE1_SIGNAL( in_DECOD_IN_READ_RA        ,_param->_nb_inst_decod,1                                   );
+	DELETE1_SIGNAL( in_DECOD_IN_NUM_REG_RA     ,_param->_nb_inst_decod,_param->_size_general_register_logic);
+	DELETE1_SIGNAL( in_DECOD_IN_READ_RB        ,_param->_nb_inst_decod,1                                   );
+	DELETE1_SIGNAL( in_DECOD_IN_NUM_REG_RB     ,_param->_nb_inst_decod,_param->_size_general_register_logic);
+	DELETE1_SIGNAL( in_DECOD_IN_READ_RC        ,_param->_nb_inst_decod,1                                   );
+	DELETE1_SIGNAL( in_DECOD_IN_NUM_REG_RC     ,_param->_nb_inst_decod,_param->_size_special_register_logic);
+	DELETE1_SIGNAL( in_DECOD_IN_WRITE_RD       ,_param->_nb_inst_decod,1                                   );
+	DELETE1_SIGNAL( in_DECOD_IN_NUM_REG_RD     ,_param->_nb_inst_decod,_param->_size_general_register_logic);
+	DELETE1_SIGNAL( in_DECOD_IN_WRITE_RE       ,_param->_nb_inst_decod,1                                   );
+	DELETE1_SIGNAL( in_DECOD_IN_NUM_REG_RE     ,_param->_nb_inst_decod,_param->_size_special_register_logic);
+	DELETE1_SIGNAL( in_DECOD_IN_EXCEPTION_USE  ,_param->_nb_inst_decod,_param->_size_exception_use         );
+	
+	DELETE1_SIGNAL(out_DECOD_OUT_VAL           ,_param->_nb_inst_decod,1);
+	DELETE1_SIGNAL( in_DECOD_OUT_ACK           ,_param->_nb_inst_decod,1);
+	DELETE1_SIGNAL(out_DECOD_OUT_CONTEXT_ID    ,_param->_nb_inst_decod,_param->_size_context_id            );
+	DELETE1_SIGNAL(out_DECOD_OUT_DEPTH         ,_param->_nb_inst_decod,_param->_size_depth                 );
+	DELETE1_SIGNAL(out_DECOD_OUT_TYPE          ,_param->_nb_inst_decod,_param->_size_type                  );
+	DELETE1_SIGNAL(out_DECOD_OUT_OPERATION     ,_param->_nb_inst_decod,_param->_size_operation             );
+	DELETE1_SIGNAL(out_DECOD_OUT_IS_DELAY_SLOT ,_param->_nb_inst_decod,1                                   );
+	DELETE1_SIGNAL(out_DECOD_OUT_ADDRESS       ,_param->_nb_inst_decod,_param->_size_general_data          );
+	DELETE1_SIGNAL(out_DECOD_OUT_HAS_IMMEDIAT  ,_param->_nb_inst_decod,1                                   );
+	DELETE1_SIGNAL(out_DECOD_OUT_IMMEDIAT      ,_param->_nb_inst_decod,_param->_size_general_data          );
+	DELETE1_SIGNAL(out_DECOD_OUT_READ_RA       ,_param->_nb_inst_decod,1                                   );
+	DELETE1_SIGNAL(out_DECOD_OUT_NUM_REG_RA    ,_param->_nb_inst_decod,_param->_size_general_register_logic);
+	DELETE1_SIGNAL(out_DECOD_OUT_READ_RB       ,_param->_nb_inst_decod,1                                   );
+	DELETE1_SIGNAL(out_DECOD_OUT_NUM_REG_RB    ,_param->_nb_inst_decod,_param->_size_general_register_logic);
+	DELETE1_SIGNAL(out_DECOD_OUT_READ_RC       ,_param->_nb_inst_decod,1                                   );
+	DELETE1_SIGNAL(out_DECOD_OUT_NUM_REG_RC    ,_param->_nb_inst_decod,_param->_size_special_register_logic);
+	DELETE1_SIGNAL(out_DECOD_OUT_WRITE_RD      ,_param->_nb_inst_decod,1                                   );
+	DELETE1_SIGNAL(out_DECOD_OUT_NUM_REG_RD    ,_param->_nb_inst_decod,_param->_size_general_register_logic);
+	DELETE1_SIGNAL(out_DECOD_OUT_WRITE_RE      ,_param->_nb_inst_decod,1                                   );
+	DELETE1_SIGNAL(out_DECOD_OUT_NUM_REG_RE    ,_param->_nb_inst_decod,_param->_size_special_register_logic);
+	DELETE1_SIGNAL(out_DECOD_OUT_EXCEPTION_USE ,_param->_nb_inst_decod,_param->_size_exception_use         );
+	
+	DELETE1_SIGNAL( in_DEPTH_TAIL     ,_param->_nb_context,_param->_size_depth  );
+	if (_param->_have_port_depth)
+	DELETE1_SIGNAL( in_DEPTH_NB_BRANCH,_param->_nb_context,_param->_size_depth+1);
+
+	DELETE1_SIGNAL(out_NB_INST_ALL    ,_param->_nb_context,_param->_size_nb_inst+1);
+      }
+    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+    delete    reg_QUEUE;
+    delete [] reg_NB_INST;
+    
+    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    delete [] internal_DECOD_IN_ACK ;
+    delete [] internal_DECOD_OUT_VAL;
+    delete [] internal_DECOD_OUT_ACK;
+
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    delete _component;
+
+    log_end(Decod_queue,FUNCTION);
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_end_cycle.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_end_cycle.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_end_cycle.cpp	(revision 82)
@@ -0,0 +1,49 @@
+#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::end_cycle"
+void Decod_queue::end_cycle ()
+  {
+    log_begin(Decod_queue,FUNCTION);
+
+#ifdef STATISTICS
+    if (usage_is_set(_usage,USE_STATISTICS))
+      _stat->end_cycle();
+#endif    
+
+#ifdef VHDL_TESTBENCH
+    // Evaluation before read the ouput signal
+//  sc_start(0);
+    if (usage_is_set(_usage,USE_VHDL_TESTBENCH))
+      _interfaces->testbench();
+#endif
+
+    log_end(Decod_queue,FUNCTION);
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_genMealy_decod_out.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_genMealy_decod_out.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_genMealy_decod_out.cpp	(revision 82)
@@ -0,0 +1,81 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::genMealy_decod_out"
+  void Decod_queue::genMealy_decod_out (void)
+  {
+    log_begin(Decod_queue,FUNCTION);
+
+    Tcontrol_t val [_param->_nb_inst_decod];
+    for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
+      {
+	val                    [i] = 0;
+	internal_DECOD_OUT_VAL [i] = 0;
+	internal_DECOD_OUT_ACK [i] = 0;
+      }
+
+    if (not reg_QUEUE->empty())
+      for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
+	if (reg_QUEUE->front()->_val [i])
+	  {
+	    log_printf(TRACE,Decod_queue,FUNCTION,_("Queue is not empty, slot [%d] is valid."),i);
+
+	    Tcontext_t context         = reg_QUEUE->front()->_context_id    [i];
+	    Tdepth_t   depth           = reg_QUEUE->front()->_depth         [i];
+	    Tdepth_t   depth_base      = (_param->_have_port_depth)?PORT_READ(in_DEPTH_TAIL      [context]):0;
+	    Tdepth_t   depth_offset    = (_param->_have_port_depth)?PORT_READ(in_DEPTH_NB_BRANCH [context]):0;
+	    Tdepth_t   depth_max       = depth_base + depth_offset;
+
+	    // is a valid instruction ?
+	    //  * depth must be lower that depth max
+	    Tcontrol_t is_valid        = depth <= ((depth>depth_base)?(depth_max):(depth_max%_param->_nb_branch_speculated [context]));
+
+	    log_printf(TRACE,Decod_queue,FUNCTION,_("  * is_valid : %d"),is_valid);
+
+	    internal_DECOD_OUT_VAL [i] = 1; // in all case, val is set (entry is not empty, and instruction is valid)
+	    if (is_valid)
+	      {
+		val                    [i] = 1;
+		internal_DECOD_OUT_ACK [i] = PORT_READ(in_DECOD_OUT_ACK [i]);
+	      }
+	    else
+	      {
+		// Cusume the instruction (to erase)
+		internal_DECOD_OUT_ACK [i] = 1;
+	      }
+	  }
+
+    for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
+      {
+	PORT_WRITE(out_DECOD_OUT_VAL [i],val [i]);
+      }
+
+    log_end(Decod_queue,FUNCTION);
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_genMoore.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_genMoore.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_genMoore.cpp	(revision 82)
@@ -0,0 +1,85 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::genMoore"
+  void Decod_queue::genMoore (void)
+  {
+    log_begin(Decod_queue,FUNCTION);
+
+    //--------------------------------------------------------------------
+    //-----[ DECOD_IN ]---------------------------------------------------
+    //--------------------------------------------------------------------
+    {
+      Tcontrol_t ack = reg_QUEUE->size() < _param->_size_bank;
+
+      for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
+	{
+	  internal_DECOD_IN_ACK [i] = ack;
+	  PORT_WRITE(out_DECOD_IN_ACK [i],ack);
+	}
+    }
+
+    //--------------------------------------------------------------------
+    //-----[ DECOD_OUT ]--------------------------------------------------
+    //--------------------------------------------------------------------
+    if (not reg_QUEUE->empty())
+      for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
+	{
+	  if (_param->_have_port_context_id)
+	  PORT_WRITE(out_DECOD_OUT_CONTEXT_ID    [i],reg_QUEUE->front()->_context_id    [i]);
+	  if (_param->_have_port_depth)
+	  PORT_WRITE(out_DECOD_OUT_DEPTH         [i],reg_QUEUE->front()->_depth         [i]);
+	  PORT_WRITE(out_DECOD_OUT_TYPE          [i],reg_QUEUE->front()->_type          [i]);
+	  PORT_WRITE(out_DECOD_OUT_OPERATION     [i],reg_QUEUE->front()->_operation     [i]);
+	  PORT_WRITE(out_DECOD_OUT_IS_DELAY_SLOT [i],reg_QUEUE->front()->_is_delay_slot [i]);
+	  PORT_WRITE(out_DECOD_OUT_ADDRESS       [i],reg_QUEUE->front()->_address       [i]);
+	  PORT_WRITE(out_DECOD_OUT_HAS_IMMEDIAT  [i],reg_QUEUE->front()->_has_immediat  [i]);
+	  PORT_WRITE(out_DECOD_OUT_IMMEDIAT      [i],reg_QUEUE->front()->_immediat      [i]);
+	  PORT_WRITE(out_DECOD_OUT_READ_RA       [i],reg_QUEUE->front()->_read_ra       [i]);
+	  PORT_WRITE(out_DECOD_OUT_NUM_REG_RA    [i],reg_QUEUE->front()->_num_reg_ra    [i]);
+	  PORT_WRITE(out_DECOD_OUT_READ_RB       [i],reg_QUEUE->front()->_read_rb       [i]);
+	  PORT_WRITE(out_DECOD_OUT_NUM_REG_RB    [i],reg_QUEUE->front()->_num_reg_rb    [i]);
+	  PORT_WRITE(out_DECOD_OUT_READ_RC       [i],reg_QUEUE->front()->_read_rc       [i]);
+	  PORT_WRITE(out_DECOD_OUT_NUM_REG_RC    [i],reg_QUEUE->front()->_num_reg_rc    [i]);
+	  PORT_WRITE(out_DECOD_OUT_WRITE_RD      [i],reg_QUEUE->front()->_write_rd      [i]);
+	  PORT_WRITE(out_DECOD_OUT_NUM_REG_RD    [i],reg_QUEUE->front()->_num_reg_rd    [i]);
+	  PORT_WRITE(out_DECOD_OUT_WRITE_RE      [i],reg_QUEUE->front()->_write_re      [i]);
+	  PORT_WRITE(out_DECOD_OUT_NUM_REG_RE    [i],reg_QUEUE->front()->_num_reg_re    [i]);
+	  PORT_WRITE(out_DECOD_OUT_EXCEPTION_USE [i],reg_QUEUE->front()->_exception_use [i]);
+	}
+
+    //--------------------------------------------------------------------
+    //-----[ NB_INST ]----------------------------------------------------
+    //--------------------------------------------------------------------
+    for (uint32_t i=0; i<_param->_nb_context; i++)
+      PORT_WRITE(out_NB_INST_ALL [i], reg_NB_INST [i]);
+
+    log_end(Decod_queue,FUNCTION);
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_statistics_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_statistics_allocation.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_statistics_allocation.cpp	(revision 82)
@@ -0,0 +1,62 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::statistics_allocation"
+  void Decod_queue::statistics_allocation (morpheo::behavioural::Parameters_Statistics * param_statistics)
+  {
+    log_begin(Decod_queue,FUNCTION);
+
+
+    _stat = new Stat (static_cast<std::string>(_name),
+		      "Decod_queue",
+		      param_statistics);
+
+    _stat_nb_inst = new counter_t * [_param->_nb_context];
+
+    std::string expr_average_inst = "";
+
+    for (uint32_t i=0; i<_param->_nb_context; i++)
+      {
+	_stat_nb_inst [i] = _stat->create_variable("nb_inst_"+toString(i));
+	
+	_stat->create_expr_average_by_cycle("average_inst_"+toString(i), "nb_inst_"+toString(i), "", toString(_("Average instruction by cycle (context %d)"),i));
+	_stat->create_expr_percent         ("percent_use_inst_"+toString(i) , "average_inst_"+toString(i), toString(_param->_size_queue), toString(_("Percent instruction by cycle (context %d)"),i));
+
+	if (i == 0)
+	  expr_average_inst = "nb_inst_"+toString(i);
+	else
+	  expr_average_inst = "+ nb_inst_"+toString(i) + " " +expr_average_inst;
+      }
+
+    _stat->create_expr_average_by_cycle("average_inst", expr_average_inst, "", _("Average instruction by cycle (all context)"));
+    _stat->create_expr_percent         ("percent_use_inst" , "average_inst", toString(_param->_size_queue), _("Percent instruction by cycle (all context)"));
+    
+    log_end(Decod_queue,FUNCTION);
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_statistics_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_statistics_deallocation.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_statistics_deallocation.cpp	(revision 82)
@@ -0,0 +1,42 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::statistics_deallocation"
+  void Decod_queue::statistics_deallocation (void)
+  {
+    log_begin(Decod_queue,FUNCTION);
+
+    log_printf(INFO,Decod_queue,FUNCTION,_("Generate Statistics file"));
+
+    delete    _stat;
+    delete [] _stat_nb_inst;
+    
+    log_end(Decod_queue,FUNCTION);
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_transition.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_transition.cpp	(revision 82)
@@ -0,0 +1,140 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::transition"
+  void Decod_queue::transition (void)
+  {
+    log_begin(Decod_queue,FUNCTION);
+
+    if (PORT_READ(in_NRESET) == 0)
+      {
+	reg_QUEUE->clear();
+
+	for (uint32_t i=0; i<_param->_nb_context; i++)
+	  reg_NB_INST [i]=0;
+      }
+    else
+      {
+	//--------------------------------------------------------------------
+	//-----[ DECOD_IN ]---------------------------------------------------
+	//--------------------------------------------------------------------
+	for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
+	  {
+	    decod_queue_entry_t * entry = NULL;
+	    if (PORT_READ(in_DECOD_IN_VAL [i]) and internal_DECOD_IN_ACK[i])
+	      {
+		log_printf(TRACE,Decod_queue,FUNCTION,_("DECOD_IN  [%d]"),i);
+
+		if (entry == NULL)
+		  entry = new decod_queue_entry_t (_param->_nb_inst_decod);
+
+		Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_IN_CONTEXT_ID [i]):0;
+
+		log_printf(TRACE,Decod_queue,FUNCTION,_("  * context : %d"),context);
+
+		entry->_val           [i] = 1;
+		entry->_context_id    [i] = context;
+		entry->_depth         [i] = (_param->_have_port_depth)?PORT_READ(in_DECOD_IN_DEPTH [i]):0;
+		entry->_type          [i] = PORT_READ(in_DECOD_IN_TYPE          [i]);
+		entry->_operation     [i] = PORT_READ(in_DECOD_IN_OPERATION     [i]);
+		entry->_is_delay_slot [i] = PORT_READ(in_DECOD_IN_IS_DELAY_SLOT [i]);
+		entry->_address       [i] = PORT_READ(in_DECOD_IN_ADDRESS       [i]);
+		entry->_has_immediat  [i] = PORT_READ(in_DECOD_IN_HAS_IMMEDIAT  [i]);
+		entry->_immediat      [i] = PORT_READ(in_DECOD_IN_IMMEDIAT      [i]);
+		entry->_read_ra       [i] = PORT_READ(in_DECOD_IN_READ_RA       [i]);
+		entry->_num_reg_ra    [i] = PORT_READ(in_DECOD_IN_NUM_REG_RA    [i]);
+		entry->_read_rb       [i] = PORT_READ(in_DECOD_IN_READ_RB       [i]);
+		entry->_num_reg_rb    [i] = PORT_READ(in_DECOD_IN_NUM_REG_RB    [i]);
+		entry->_read_rc       [i] = PORT_READ(in_DECOD_IN_READ_RC       [i]);
+		entry->_num_reg_rc    [i] = PORT_READ(in_DECOD_IN_NUM_REG_RC    [i]);
+		entry->_write_rd      [i] = PORT_READ(in_DECOD_IN_WRITE_RD      [i]);
+		entry->_num_reg_rd    [i] = PORT_READ(in_DECOD_IN_NUM_REG_RD    [i]);
+		entry->_write_re      [i] = PORT_READ(in_DECOD_IN_WRITE_RE      [i]);
+		entry->_num_reg_re    [i] = PORT_READ(in_DECOD_IN_NUM_REG_RE    [i]);
+		entry->_exception_use [i] = PORT_READ(in_DECOD_IN_EXCEPTION_USE [i]);
+
+		reg_NB_INST [context] ++;
+		reg_QUEUE->push_back(entry);
+
+		log_printf(TRACE,Decod_queue,FUNCTION,_("  * nb_inst : %d"),reg_NB_INST [context]);
+		log_printf(TRACE,Decod_queue,FUNCTION,_("  * PUSH queue"));
+
+	      }
+	  }
+
+	//--------------------------------------------------------------------
+	//-----[ DECOD_OUT ]--------------------------------------------------
+	//--------------------------------------------------------------------
+	if (not reg_QUEUE->empty())
+	  {
+	    bool find = false;
+	    
+	    for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
+	      {
+		// Test transaction : if ok then invalid slot
+		if (internal_DECOD_OUT_VAL [i] and internal_DECOD_OUT_ACK[i])
+		  {
+		    log_printf(TRACE,Decod_queue,FUNCTION,_("DECOD_OUT [%d]"),i);
+		
+		    reg_QUEUE->front()->_val [i] = 0;
+
+		    Tcontext_t context = reg_QUEUE->front()->_context_id [i];
+		    log_printf(TRACE,Decod_queue,FUNCTION,_("  * context : %d"),context);
+		    
+		    reg_NB_INST [context] --;
+		    log_printf(TRACE,Decod_queue,FUNCTION,_("  * nb_inst : %d"),reg_NB_INST [context]);
+		  }
+		// Test if slot is (again) valid, if yes, then have less one instruction in the entry
+		find |= reg_QUEUE->front()->_val [i];
+	      }
+	    
+	    // test if can free the entry
+	    if (not find) // no valid instruction in current slot
+	      {
+		log_printf(TRACE,Decod_queue,FUNCTION,_("  * POP  queue"));
+
+		// can pop the slot
+		delete reg_QUEUE->front();
+		reg_QUEUE->pop_front();
+	      }
+	  }
+      }
+    
+#ifdef STATISTICS
+    for (uint32_t i=0; i<_param->_nb_context; i++)
+      *(_stat_nb_inst [i]) += reg_NB_INST [i];
+#endif
+
+#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+    end_cycle ();
+#endif
+
+    log_end(Decod_queue,FUNCTION);
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_vhdl.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_vhdl.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_vhdl.cpp	(revision 82)
@@ -0,0 +1,50 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
+#include "Behavioural/include/Vhdl.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::vhdl"
+  void Decod_queue::vhdl (void)
+  {
+    log_begin(Decod_queue,FUNCTION);
+
+    Vhdl * vhdl = new Vhdl (_name);
+
+    _interfaces->set_port(vhdl);
+    _component->vhdl_instance(vhdl);
+
+    vhdl_declaration (vhdl);
+    vhdl_body        (vhdl);
+
+    vhdl->generate_file();
+
+    delete vhdl;
+
+    log_end(Decod_queue,FUNCTION);
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_vhdl_body.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_vhdl_body.cpp	(revision 82)
@@ -0,0 +1,37 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::vhdl_body"
+  void Decod_queue::vhdl_body (Vhdl * & vhdl)
+  {
+    log_begin(Decod_queue,FUNCTION);
+    vhdl->set_body ("");
+    log_end(Decod_queue,FUNCTION);
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_vhdl_declaration.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_vhdl_declaration.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Decod_queue_vhdl_declaration.cpp	(revision 82)
@@ -0,0 +1,36 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Decod_queue.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::vhdl_declaration"
+  void Decod_queue::vhdl_declaration (Vhdl * & vhdl)
+  {
+    log_begin(Decod_queue,FUNCTION);
+    log_end(Decod_queue,FUNCTION);
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Parameters.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Parameters.cpp	(revision 82)
@@ -0,0 +1,74 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Parameters.h"
+#include "Common/include/Max.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::Parameters"
+  Parameters::Parameters (uint32_t   nb_context          ,
+			  uint32_t   nb_inst_decod       ,
+			  uint32_t   size_queue          ,
+			  uint32_t   size_general_data   ,
+			  uint32_t * nb_branch_speculated)
+  {
+    log_begin(Decod_queue,FUNCTION);
+
+    _nb_context           = nb_context          ;
+    _nb_inst_decod        = nb_inst_decod       ;
+    _size_queue           = size_queue          ;
+    _size_general_data    = size_general_data   ;
+    _nb_branch_speculated = nb_branch_speculated;
+
+    _nb_bank              = _nb_inst_decod   ;
+    _size_bank            = _size_queue / _nb_bank;
+    
+    _size_context_id      = log2(nb_context);
+    _size_depth           = log2(max<uint32_t>(_nb_branch_speculated,_nb_context));
+    _size_nb_inst         = log2(_size_queue);
+
+    _have_port_context_id = (_size_context_id > 0);
+    _have_port_depth      = (_size_depth      > 0);
+    
+    test();
+    log_end(Decod_queue,FUNCTION);
+  };
+  
+// #undef  FUNCTION
+// #define FUNCTION "Decod_queue::Parameters (copy)"
+//   Parameters::Parameters (Parameters & param)
+//   {
+//     log_begin(Decod_queue,FUNCTION);
+//     test();
+//     log_end(Decod_queue,FUNCTION);
+//   };
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::~Parameters"
+  Parameters::~Parameters () 
+  {
+    log_begin(Decod_queue,FUNCTION);
+    log_end(Decod_queue,FUNCTION);
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Parameters_msg_error.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Parameters_msg_error.cpp	(revision 82)
@@ -0,0 +1,44 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Types.h"
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Parameters.h"
+#include <sstream>
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::msg_error"
+  Parameters_test Parameters::msg_error(void)
+  {
+    log_begin(Decod_queue,FUNCTION);
+
+    Parameters_test test ("Decod_queue");
+
+    if (not is_multiple(_size_queue, _nb_inst_decod))
+      test.error(_("size_queue must be a multiple of nb_inst_decod.\n"));
+
+    log_end(Decod_queue,FUNCTION);
+
+    return test;
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Parameters_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Parameters_print.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/src/Parameters_print.cpp	(revision 82)
@@ -0,0 +1,70 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue/include/Parameters.h"
+#include "Behavioural/include/XML.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace decod_unit {
+namespace decod_queue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::print"
+  std::string Parameters::print (uint32_t depth)
+  {
+    log_begin(Decod_queue,FUNCTION);
+
+    XML xml ("decod_queue");
+
+    xml.balise_open("decod_queue");
+    xml.singleton_begin("nb_context          "); xml.attribut("value",toString(_nb_context       )); xml.singleton_end();
+    xml.singleton_begin("nb_inst_decod       "); xml.attribut("value",toString(_nb_inst_decod    )); xml.singleton_end();
+    xml.singleton_begin("size_queue          "); xml.attribut("value",toString(_size_queue       )); xml.singleton_end();
+    xml.singleton_begin("size_general_data   "); xml.attribut("value",toString(_size_general_data)); xml.singleton_end();
+    for (uint32_t i=0;i<_nb_context; i++)
+      {
+        xml. balise_open_begin("component");
+        xml.  attribut("type","context");
+        xml.  attribut("id"  ,toString(i));
+        xml. balise_open_end();
+        xml.  singleton_begin("nb_branch_speculated"); xml.attribut("value",toString(_nb_branch_speculated [i])); xml.singleton_end();
+        xml. balise_close();
+      }
+    xml.balise_close();
+
+    log_end(Decod_queue,FUNCTION);
+    
+    return xml.get_body(depth);
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Decod_queue::operator<<"
+  std::ostream& operator<< (std::ostream& output_stream ,
+			    morpheo::behavioural::core::multi_front_end::front_end::decod_unit::decod_queue::Parameters & x)
+  {
+    log_begin(Decod_queue,FUNCTION);
+
+    output_stream << x.print(0);
+    
+    log_end(Decod_queue,FUNCTION);
+
+    return output_stream;
+  };
+
+}; // end namespace decod_queue
+}; // end namespace decod_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/SelfTest/src/test.cpp	(revision 82)
@@ -7,38 +7,11 @@
  */
 
+
+#define NB_ITERATION  1024
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  1024
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
 void test (string name,
@@ -51,9 +24,11 @@
 #endif
 
-  Address_management * _Address_management = new Address_management (name.c_str(),
+  Address_management * _Address_management = new Address_management 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/include/Address_management.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/include/Address_management.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/include/Address_management.h	(revision 82)
@@ -132,5 +132,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Address_management             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/src/Address_management_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/src/Address_management_transition.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management/src/Address_management_transition.cpp	(revision 82)
@@ -79,5 +79,5 @@
 	      reg_PC_CURRENT_BRANCH_UPDATE_PREDICTION_ID = PORT_READ(in_PREDICT_BRANCH_UPDATE_PREDICTION_ID);
 
-#error "INSTRUCTION_ENABLE : ERROR implémentation, remplacer PC_PREVIOUS par PC_NEXT_NEXT"
+// #error "INSTRUCTION_ENABLE : ERROR implémentation, remplacer PC_PREVIOUS par PC_NEXT_NEXT"
 
 	      for (uint32_t i=0; i<_param->_nb_instruction; i++)
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/SelfTest/src/test.cpp	(revision 82)
@@ -7,4 +7,7 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (2048*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/SelfTest/include/test.h"
 #include "Common/include/Test.h"
@@ -12,36 +15,4 @@
 #include <list>
 #include <set>
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (2048*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
-
 
 class entry_t
@@ -70,9 +41,11 @@
 #endif
 
-  Ifetch_queue * _Ifetch_queue = new Ifetch_queue (name.c_str(),
+  Ifetch_queue * _Ifetch_queue = new Ifetch_queue 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/include/Ifetch_queue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/include/Ifetch_queue.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue/include/Ifetch_queue.h	(revision 82)
@@ -131,5 +131,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Ifetch_queue             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_unit_Glue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_unit_Glue/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_unit_Glue/SelfTest/src/test.cpp	(revision 82)
@@ -7,38 +7,10 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_unit_Glue/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
 void test (string name,
@@ -51,9 +23,11 @@
 #endif
 
-  Ifetch_unit_Glue * _Ifetch_unit_Glue = new Ifetch_unit_Glue (name.c_str(),
+  Ifetch_unit_Glue * _Ifetch_unit_Glue = new Ifetch_unit_Glue 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_unit_Glue/include/Ifetch_unit_Glue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_unit_Glue/include/Ifetch_unit_Glue.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_unit_Glue/include/Ifetch_unit_Glue.h	(revision 82)
@@ -105,5 +105,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Ifetch_unit_Glue             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/SelfTest/config.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/SelfTest/config.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/SelfTest/config.cfg	(revision 82)
@@ -0,0 +1,5 @@
+Ifetch_unit
+1	8	*2	# _size_queue                   
+1	8	*2	# _nb_instruction               
+1	1	*2	# _size_branch_update_prediction
+32	32	*2	# _size_general_data            
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/SelfTest/config_min.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/SelfTest/config_min.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/SelfTest/config_min.cfg	(revision 82)
@@ -0,0 +1,5 @@
+Ifetch_unit
+1	1	*2	# size_queue                   
+1	1	*2	# nb_instruction               
+1	1	*2	# size_branch_update_prediction
+32	32	*2	# size_general_data            
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/SelfTest/configuration.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/SelfTest/configuration.cfg	(revision 81)
+++ 	(revision )
@@ -1,5 +1,0 @@
-Ifetch_unit
-1	8	*2	# _size_queue                   
-1	8	*2	# _nb_instruction               
-1	1	*2	# _size_branch_update_prediction
-32	32	*2	# _size_general_data            
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/SelfTest/src/test.cpp	(revision 82)
@@ -7,38 +7,10 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
 void test (string name,
@@ -51,9 +23,11 @@
 #endif
 
-  Ifetch_unit * _Ifetch_unit = new Ifetch_unit (name.c_str(),
+  Ifetch_unit * _Ifetch_unit = new Ifetch_unit 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
-#endif
-					     _param);
+     _parameters_statistics,
+#endif
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/include/Ifetch_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/include/Ifetch_unit.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/include/Ifetch_unit.h	(revision 82)
@@ -136,5 +136,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Ifetch_unit             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/src/Ifetch_unit_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/src/Ifetch_unit_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Ifetch_unit/src/Ifetch_unit_allocation.cpp	(revision 82)
@@ -144,5 +144,6 @@
 	 ,param_statistics
 #endif
-	 ,_param->_param_address_management);
+	 ,_param->_param_address_management
+	 ,_usage);
       
       _component->set_component (_component_address_management->_component
@@ -162,5 +163,6 @@
 	 ,param_statistics
 #endif
-	 ,_param->_param_ifetch_queue);
+	 ,_param->_param_ifetch_queue
+	 ,_usage);
       
       _component->set_component (_component_ifetch_queue->_component
@@ -180,5 +182,6 @@
 	 ,param_statistics
 #endif
-	 ,_param->_param_ifetch_unit_glue);
+	 ,_param->_param_ifetch_unit_glue
+	 ,_usage);
       
       _component->set_component (_component_ifetch_unit_glue->_component
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/config.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/config.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/config.cfg	(revision 82)
@@ -0,0 +1,8 @@
+Branch_Target_Buffer_Glue
+1	4	*4	# max_nb_instruction
+4	16	*4	# size_buffer       
+1	4	*4	# associativity     
+32	32	*4	# size_address      
+1	4	*4	# nb_inst_predict   
+1	4	*4	# nb_inst_decod     
+1	4	*4	# nb_inst_update    
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/config_example
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/config_example	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/config_example	(revision 82)
@@ -0,0 +1,8 @@
+Branch_Target_Buffer_Glue
+1	4	*4	# max_nb_instruction
+4	16	*4	# size_buffer       
+1	4	*4	# associativity     
+32	32	*4	# size_address      
+1	4	*4	# nb_inst_predict   
+1	4	*4	# nb_inst_decod     
+1	4	*4	# nb_inst_update    
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/config_min.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/config_min.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/config_min.cfg	(revision 82)
@@ -0,0 +1,8 @@
+Branch_Target_Buffer_Glue
+1	1	*4	# max_nb_instruction
+1	1 	*4	# size_buffer       
+1	1	*4	# associativity     
+32	32	*4	# size_address      
+1	1	*4	# nb_inst_predict   
+1	1	*4	# nb_inst_decod     
+1	1	*4	# nb_inst_update    
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/configuration.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/configuration.cfg	(revision 81)
+++ 	(revision )
@@ -1,8 +1,0 @@
-Branch_Target_Buffer_Glue
-1	4	*4	# max_nb_instruction
-4	16	*4	# size_buffer       
-1	4	*4	# associativity     
-32	32	*4	# size_address      
-1	4	*4	# nb_inst_predict   
-1	4	*4	# nb_inst_decod     
-1	4	*4	# nb_inst_update    
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/src/test.cpp	(revision 82)
@@ -7,38 +7,10 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
 void test (string name,
@@ -51,9 +23,11 @@
 #endif
 
-  Branch_Target_Buffer_Glue * _Branch_Target_Buffer_Glue = new Branch_Target_Buffer_Glue (name.c_str(),
+  Branch_Target_Buffer_Glue * _Branch_Target_Buffer_Glue = new Branch_Target_Buffer_Glue 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
-#endif
-					     _param);
+     _parameters_statistics,
+#endif
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/include/Branch_Target_Buffer_Glue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/include/Branch_Target_Buffer_Glue.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/include/Branch_Target_Buffer_Glue.h	(revision 82)
@@ -139,5 +139,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Branch_Target_Buffer_Glue             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/SelfTest/config_min.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/SelfTest/config_min.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/SelfTest/config_min.cfg	(revision 82)
@@ -0,0 +1,10 @@
+Branch_Target_Buffer_Register
+1	1	+1	# nb_context     
+1 	1  	*2	# nb_instruction [0] [nb_context]
+1 	1	*4	# size_buffer    
+1 	1	*4	# associativity  
+32	32	*2	# size_address   
+2	2	+1	# size_counter   
+1	1	*4	# nb_inst_predict
+1	1	*4	# nb_inst_decod  
+1	1  	*4	# nb_inst_commit 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/SelfTest/src/test.cpp	(revision 82)
@@ -7,40 +7,11 @@
  */
 
+#define NB_ITERATION  1024
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Common/include/BitManipulation.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  1024
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
-
 
   class entry_t
@@ -120,9 +91,11 @@
 #endif
 
-  Branch_Target_Buffer_Register * _Branch_Target_Buffer_Register = new Branch_Target_Buffer_Register (name.c_str(),
+  Branch_Target_Buffer_Register * _Branch_Target_Buffer_Register = new Branch_Target_Buffer_Register 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
@@ -156,4 +129,5 @@
   ALLOC1_SC_SIGNAL( in_DECOD_LAST_TAKE       ," in_DECOD_LAST_TAKE       ",Tcontrol_t         ,_param->_nb_inst_decod);
   ALLOC1_SC_SIGNAL( in_DECOD_MISS_PREDICTION ," in_DECOD_MISS_PREDICTION ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IS_ACCURATE     ," in_DECOD_IS_ACCURATE     ",Tcontrol_t         ,_param->_nb_inst_decod);
   ALLOC1_SC_SIGNAL( in_UPDATE_VAL            ," in_UPDATE_VAL            ",Tcontrol_t         ,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL(out_UPDATE_ACK            ,"out_UPDATE_ACK            ",Tcontrol_t         ,_param->_nb_inst_update);
@@ -191,9 +165,10 @@
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_VAL             ,_param->_nb_inst_decod);
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_DECOD_ACK             ,_param->_nb_inst_decod);
+  if (_param->_have_port_victim)
+    {
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_DECOD_HIT             ,_param->_nb_inst_decod);
-  if (_param->_have_port_victim)
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_DECOD_HIT_INDEX       ,_param->_nb_inst_decod);
-  if (_param->_have_port_victim)
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_VICTIM          ,_param->_nb_inst_decod);
+    }
   if (_param->_have_port_context_id)
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_CONTEXT_ID      ,_param->_nb_inst_decod);
@@ -203,12 +178,14 @@
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_LAST_TAKE       ,_param->_nb_inst_decod);
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_MISS_PREDICTION ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_DECOD_IS_ACCURATE     ,_param->_nb_inst_decod);
 
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_UPDATE_VAL            ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_UPDATE_ACK            ,_param->_nb_inst_update);
+  if (_param->_have_port_victim)
+    {
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_UPDATE_HIT            ,_param->_nb_inst_update);
-  if (_param->_have_port_victim)
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register,out_UPDATE_HIT_INDEX      ,_param->_nb_inst_update);
-  if (_param->_have_port_victim)
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_UPDATE_VICTIM         ,_param->_nb_inst_update);
+    }
   if (_param->_have_port_context_id)
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer_Register, in_UPDATE_CONTEXT_ID     ,_param->_nb_inst_update);
@@ -297,4 +274,5 @@
 	  in_DECOD_LAST_TAKE       [i]->write(rand()%2);
 	  in_DECOD_MISS_PREDICTION [i]->write(rand()%2);
+	  in_DECOD_IS_ACCURATE     [i]->write(rand()%2);
 	}
 
@@ -478,4 +456,5 @@
   delete []  in_DECOD_LAST_TAKE       ;
   delete []  in_DECOD_MISS_PREDICTION ;
+  delete []  in_DECOD_IS_ACCURATE     ;
   delete []  in_UPDATE_VAL            ;
   delete [] out_UPDATE_ACK            ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/include/Branch_Target_Buffer_Register.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/include/Branch_Target_Buffer_Register.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/include/Branch_Target_Buffer_Register.h	(revision 82)
@@ -87,4 +87,5 @@
   public    : SC_IN (Tcontrol_t         )  **  in_DECOD_LAST_TAKE       ; //[nb_inst_decod]
   public    : SC_IN (Tcontrol_t         )  **  in_DECOD_MISS_PREDICTION ; //[nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IS_ACCURATE     ; //[nb_inst_decod]
 
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -134,5 +135,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Branch_Target_Buffer_Register             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register.cpp	(revision 82)
@@ -139,4 +139,6 @@
 # endif
 
+	if (_param->_have_port_victim)
+	  {
 	log_printf(INFO,Branch_Target_Buffer_Register,FUNCTION,"Method - genMealy_decod");
 
@@ -161,14 +163,14 @@
 	    (*(out_DECOD_HIT [i])) (*(in_DECOD_CONTEXT_ID  [i]));
 
-	    if (_param->_have_port_victim)
-	      {
 	    (*(out_DECOD_HIT_INDEX [i])) (*(in_DECOD_VAL         [i]));
 	    (*(out_DECOD_HIT_INDEX [i])) (*(in_DECOD_ADDRESS_SRC [i]));
 	    if (_param->_have_port_context_id)
 	    (*(out_DECOD_HIT_INDEX [i])) (*(in_DECOD_CONTEXT_ID  [i]));
-	      }
-	  }
-#endif
-
+	  }
+	  }
+#endif
+
+	if (_param->_have_port_victim)
+	  {
 	log_printf(INFO,Branch_Target_Buffer_Register,FUNCTION,"Method - genMealy_update");
 
@@ -193,11 +195,9 @@
 	    (*(out_UPDATE_HIT [i])) (*(in_UPDATE_CONTEXT_ID  [i]));
 
-	    if (_param->_have_port_victim)
-	      {
 	    (*(out_UPDATE_HIT_INDEX [i])) (*(in_UPDATE_VAL         [i]));
 	    (*(out_UPDATE_HIT_INDEX [i])) (*(in_UPDATE_ADDRESS_SRC [i]));
 	    if (_param->_have_port_context_id)
 	    (*(out_UPDATE_HIT_INDEX [i])) (*(in_UPDATE_CONTEXT_ID  [i]));
-	      }
+	  }
 	  }
 # endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_allocation.cpp	(revision 82)
@@ -84,7 +84,10 @@
       ALLOC1_VALACK_IN ( in_DECOD_VAL            ,VAL);
       ALLOC1_VALACK_OUT(out_DECOD_ACK            ,ACK);
+      if (_param->_have_port_victim)
+	{
       ALLOC1_SIGNAL_OUT(out_DECOD_HIT            ,"hit"            ,Tcontrol_t         ,1);
       ALLOC1_SIGNAL_OUT(out_DECOD_HIT_INDEX      ,"hit_index"      ,Tptr_t             ,_param->_size_victim);
       ALLOC1_SIGNAL_IN ( in_DECOD_VICTIM         ,"victim"         ,Tptr_t             ,_param->_size_victim);
+	}
       ALLOC1_SIGNAL_IN ( in_DECOD_CONTEXT_ID     ,"context_id"     ,Tcontext_t         ,_param->_size_context_id);
       ALLOC1_SIGNAL_IN ( in_DECOD_ADDRESS_SRC    ,"address_src"    ,Tgeneral_data_t    ,_param->_size_address);
@@ -93,4 +96,5 @@
       ALLOC1_SIGNAL_IN ( in_DECOD_LAST_TAKE      ,"last_take"      ,Tcontrol_t         ,1);
       ALLOC1_SIGNAL_IN ( in_DECOD_MISS_PREDICTION,"miss_prediction",Tcontrol_t         ,1);
+      ALLOC1_SIGNAL_IN ( in_DECOD_IS_ACCURATE    ,"is_accurate"    ,Tcontrol_t         ,1);
     }
 
@@ -101,7 +105,10 @@
       ALLOC1_VALACK_IN ( in_UPDATE_VAL            ,VAL);
       ALLOC1_VALACK_OUT(out_UPDATE_ACK            ,ACK);
+      if (_param->_have_port_victim)
+	{
       ALLOC1_SIGNAL_OUT(out_UPDATE_HIT            ,"hit"            ,Tcontrol_t         ,1);
       ALLOC1_SIGNAL_OUT(out_UPDATE_HIT_INDEX      ,"hit_index"      ,Tptr_t             ,_param->_size_victim);
       ALLOC1_SIGNAL_IN ( in_UPDATE_VICTIM         ,"victim"         ,Tptr_t             ,_param->_size_victim);
+	}
       ALLOC1_SIGNAL_IN ( in_UPDATE_CONTEXT_ID     ,"context_id"     ,Tcontext_t         ,_param->_size_context_id);
       ALLOC1_SIGNAL_IN ( in_UPDATE_ADDRESS_SRC    ,"address_src"    ,Tgeneral_data_t    ,_param->_size_address);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_deallocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_deallocation.cpp	(revision 82)
@@ -54,4 +54,5 @@
 	delete []  in_DECOD_LAST_TAKE       ;
 	delete []  in_DECOD_MISS_PREDICTION ;
+	delete []  in_DECOD_IS_ACCURATE     ;
 	delete []  in_UPDATE_VAL            ;
 	delete [] out_UPDATE_ACK            ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_genMealy_decod.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_genMealy_decod.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_genMealy_decod.cpp	(revision 82)
@@ -48,7 +48,9 @@
 	internal_DECOD_NUM_ENTRY [i] = num_entry;
 
+	if (_param->_have_port_victim)
+	  {
 	PORT_WRITE(out_DECOD_HIT       [i], hit);
-	if (_param->_have_port_victim)
 	PORT_WRITE(out_DECOD_HIT_INDEX [i], num_entry);
+	  }
       }
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_genMealy_update.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_genMealy_update.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_genMealy_update.cpp	(revision 82)
@@ -48,7 +48,9 @@
 	internal_UPDATE_NUM_ENTRY [i] = num_entry;
 
+	if (_param->_have_port_victim)
+	  {
 	PORT_WRITE(out_UPDATE_HIT [i], hit);
-	if (_param->_have_port_victim)
 	PORT_WRITE(out_UPDATE_HIT_INDEX [i], num_entry);
+	  }
       }
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_transition.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/src/Branch_Target_Buffer_Register_transition.cpp	(revision 82)
@@ -32,4 +32,10 @@
     else
       {
+	if (not _param->_have_port_victim)
+	  {
+	    genMealy_decod  ();
+	    genMealy_update ();
+	  }
+
 	// =======================================================
 	// =====[ PREDICT ]=======================================
@@ -66,5 +72,5 @@
 		  reg_BTB[num_bank][num_entry]._condition        = cond;
 		  reg_BTB[num_bank][num_entry]._last_take        = PORT_READ(in_DECOD_LAST_TAKE    [i]);
-		  reg_BTB[num_bank][num_entry]._accurate         = _param->_first_accurate_if_hit;
+		  reg_BTB[num_bank][num_entry]._accurate         = (PORT_READ(in_DECOD_IS_ACCURATE [i]))?_param->_first_accurate_if_hit:_param->_first_accurate_if_miss;
 		}
 	      // else (hit) : no update -> it's not the last result of the branch
@@ -116,15 +122,18 @@
 
 		  accurate_new =  (miss_pred)?_param->_first_accurate_if_miss:_param->_first_accurate_if_hit;
+
+		  reg_BTB[num_bank][num_entry]._val              = 1;
+		  reg_BTB[num_bank][num_entry]._context          = (_param->_have_port_context_id)?PORT_READ(in_UPDATE_CONTEXT_ID [i]):0;
+		  reg_BTB[num_bank][num_entry]._address_src      = PORT_READ(in_UPDATE_ADDRESS_SRC  [i]);
+		  reg_BTB[num_bank][num_entry]._condition        = PORT_READ(in_UPDATE_CONDITION    [i]);
+		  reg_BTB[num_bank][num_entry]._last_take        = PORT_READ(in_UPDATE_LAST_TAKE    [i]);
 		}
 
 	      // =====[ All Case ]
-	      reg_BTB[num_bank][num_entry]._val              = 1;
-	      reg_BTB[num_bank][num_entry]._context          = (_param->_have_port_context_id)?PORT_READ(in_UPDATE_CONTEXT_ID [i]):0;
-	      reg_BTB[num_bank][num_entry]._address_src      = PORT_READ(in_UPDATE_ADDRESS_SRC  [i]);
-	      reg_BTB[num_bank][num_entry]._condition        = PORT_READ(in_UPDATE_CONDITION    [i]);
-
-	      reg_BTB[num_bank][num_entry]._address_dest_val = 1;
-	      reg_BTB[num_bank][num_entry]._address_dest     = PORT_READ(in_UPDATE_ADDRESS_DEST [i]);
-	      reg_BTB[num_bank][num_entry]._last_take        = PORT_READ(in_UPDATE_LAST_TAKE    [i]);
+	      if (reg_BTB[num_bank][num_entry]._address_dest_val == 0)
+		{
+		  reg_BTB[num_bank][num_entry]._address_dest_val = 1;
+		  reg_BTB[num_bank][num_entry]._address_dest     = PORT_READ(in_UPDATE_ADDRESS_DEST [i]);
+		}
 	      reg_BTB[num_bank][num_entry]._accurate         = accurate_new;
 	    }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/SelfTest/config_min.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/SelfTest/config_min.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/SelfTest/config_min.cfg	(revision 82)
@@ -0,0 +1,11 @@
+Branch_Target_Buffer
+1	1	+1	# nb_context     
+1 	1   	*2	# nb_instruction [0] [nb_context]
+1 	1 	*4	# size_buffer    
+1 	1 	*4	# associativity  
+32	32	*2	# size_address   
+2	2	+1	# size_counter   
+1	1	*4	# nb_inst_predict
+1	1	*4	# nb_inst_decod  
+1	1  	*4	# nb_inst_commit 
+3	3	+1	# victim_scheme
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/SelfTest/src/test.cpp	(revision 82)
@@ -7,38 +7,10 @@
  */
 
+#define NB_ITERATION  1024
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  1024
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
 void test (string name,
@@ -51,9 +23,11 @@
 #endif
 
-  Branch_Target_Buffer * _Branch_Target_Buffer = new Branch_Target_Buffer (name.c_str(),
+  Branch_Target_Buffer * _Branch_Target_Buffer = new Branch_Target_Buffer 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
@@ -84,4 +58,5 @@
   ALLOC1_SC_SIGNAL( in_DECOD_LAST_TAKE       ," in_DECOD_LAST_TAKE       ",Tcontrol_t         ,_param->_nb_inst_decod);
   ALLOC1_SC_SIGNAL( in_DECOD_MISS_PREDICTION ," in_DECOD_MISS_PREDICTION ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_IS_ACCURATE     ," in_DECOD_IS_ACCURATE     ",Tcontrol_t         ,_param->_nb_inst_decod);
   ALLOC1_SC_SIGNAL( in_UPDATE_VAL            ," in_UPDATE_VAL            ",Tcontrol_t         ,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL(out_UPDATE_ACK            ,"out_UPDATE_ACK            ",Tcontrol_t         ,_param->_nb_inst_update);
@@ -122,4 +97,5 @@
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_DECOD_LAST_TAKE       ,_param->_nb_inst_decod);
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_DECOD_MISS_PREDICTION ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_DECOD_IS_ACCURATE     ,_param->_nb_inst_decod);
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer, in_UPDATE_VAL            ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Branch_Target_Buffer,out_UPDATE_ACK            ,_param->_nb_inst_update);
@@ -195,4 +171,5 @@
   delete []  in_DECOD_LAST_TAKE       ;
   delete []  in_DECOD_MISS_PREDICTION ;
+  delete []  in_DECOD_IS_ACCURATE     ;
   
   delete []  in_UPDATE_VAL            ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/include/Branch_Target_Buffer.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/include/Branch_Target_Buffer.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/include/Branch_Target_Buffer.h	(revision 82)
@@ -90,4 +90,5 @@
   public    : SC_IN (Tcontrol_t         )  **  in_DECOD_LAST_TAKE       ; //[nb_inst_decod]
   public    : SC_IN (Tcontrol_t         )  **  in_DECOD_MISS_PREDICTION ; //[nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_IS_ACCURATE     ; //[nb_inst_decod]
 
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -130,5 +131,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Branch_Target_Buffer             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/src/Branch_Target_Buffer_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/src/Branch_Target_Buffer_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/src/Branch_Target_Buffer_allocation.cpp	(revision 82)
@@ -85,4 +85,5 @@
       ALLOC1_SIGNAL_IN ( in_DECOD_LAST_TAKE      ,"last_take"      ,Tcontrol_t         ,1);
       ALLOC1_SIGNAL_IN ( in_DECOD_MISS_PREDICTION,"miss_prediction",Tcontrol_t         ,1);
+      ALLOC1_SIGNAL_IN ( in_DECOD_IS_ACCURATE    ,"is_accurate"    ,Tcontrol_t         ,1);
     }
 
@@ -111,5 +112,5 @@
 	  {
 	    name = _name+"_sort_"+toString(i);
-	    std::cout << "Create   : " << name << std::endl;
+	    log_printf(INFO,Prediction_unit,FUNCTION,_("Create   : %s"),name.c_str());
 	    
 	    _component_sort [i] = new morpheo::behavioural::generic::sort::Sort
@@ -118,5 +119,6 @@
 	       ,param_statistics
 #endif
-	       ,_param->_param_sort);
+	       ,_param->_param_sort
+	       ,_usage);
 	    
 	    _component->set_component (_component_sort [i] ->_component
@@ -129,5 +131,5 @@
 	{
 	  name = _name+"_victim";
-	  std::cout << "Create   : " << name << std::endl;
+	  log_printf(INFO,Prediction_unit,FUNCTION,_("Create   : %s"),name.c_str());
 	  
 	  _component_victim = new morpheo::behavioural::generic::victim::Victim
@@ -136,5 +138,6 @@
 	     ,param_statistics
 #endif
-	     ,_param->_param_victim);
+	     ,_param->_param_victim
+	     ,_usage);
 	  
 	  _component->set_component (_component_victim->_component
@@ -148,5 +151,5 @@
     {
       name = _name+"_glue";
-      std::cout << "Create   : " << name << std::endl;
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Create   : %s"),name.c_str());
       
       _component_branch_target_buffer_glue = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer::branch_target_buffer_glue::Branch_Target_Buffer_Glue
@@ -155,5 +158,6 @@
 	 ,param_statistics
 #endif
-	 ,_param->_param_branch_target_buffer_glue);
+	 ,_param->_param_branch_target_buffer_glue
+	 ,_usage);
       
       _component->set_component (_component_branch_target_buffer_glue->_component
@@ -166,5 +170,5 @@
     {
       name = _name+"_register";
-      std::cout << "Create   : " << name << std::endl;
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Create   : %s"),name.c_str());
       
       _component_branch_target_buffer_register = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer::branch_target_buffer_register::Branch_Target_Buffer_Register
@@ -173,5 +177,6 @@
 	 ,param_statistics
 #endif
-	 ,_param->_param_branch_target_buffer_register);
+	 ,_param->_param_branch_target_buffer_register
+	 ,_usage);
       
       _component->set_component (_component_branch_target_buffer_register->_component
@@ -194,5 +199,5 @@
 	{
 	  src = _name+"_sort_"+toString(i);
-	  std::cout << "Instance : " << src << std::endl;
+	  log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str());
 	  
 	  {
@@ -230,5 +235,5 @@
 	{
 	  src = _name+"_victim";
-	  std::cout << "Instance : " << src << std::endl;
+	  log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str());
 	  
 	  {
@@ -256,5 +261,5 @@
     {
       src = _name+"_glue";
-      std::cout << "Instance : " << src << std::endl;
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str());
       
       {
@@ -312,15 +317,15 @@
 
 	    COMPONENT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_"+toString(j)+"_REGISTER_HIT"         ,
-			  dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_HIT"         );
+			             dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+         "_HIT"         );
 	    COMPONENT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_"+toString(j)+"_REGISTER_ADDRESS_SRC" ,
-			  dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_ADDRESS_SRC" );
+			             dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+         "_ADDRESS_SRC" );
 	    COMPONENT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_"+toString(j)+"_REGISTER_ADDRESS_DEST",
-			  dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_ADDRESS_DEST");
+			             dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+         "_ADDRESS_DEST");
 	    COMPONENT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_"+toString(j)+"_REGISTER_CONDITION"   ,
-			  dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_CONDITION"   );
+			             dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+         "_CONDITION"   );
 	    COMPONENT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_"+toString(j)+"_REGISTER_LAST_TAKE"   ,
-			  dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_LAST_TAKE"   );
+			             dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+         "_LAST_TAKE"   );
 	    COMPONENT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_"+toString(j)+"_REGISTER_IS_ACCURATE" ,
-		 dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_IS_ACCURATE" );
+			             dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+         "_IS_ACCURATE" );
 	  }
 
@@ -460,5 +465,5 @@
     {
       src = _name+"_register";
-      std::cout << "Instance : " << src << std::endl;
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str());
       
       {
@@ -519,4 +524,6 @@
 	PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_MISS_PREDICTION",
 		            dest, "in_DECOD_"+toString(i)+"_MISS_PREDICTION");
+	PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_IS_ACCURATE",
+		            dest, "in_DECOD_"+toString(i)+"_IS_ACCURATE");
 
 	if (_param->_have_component_victim)
@@ -583,5 +590,5 @@
     }
     // ~~~~~[ Others ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
-     _component->test_map();
+//      _component->test_map();
 
 #ifdef POSITION
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/src/Branch_Target_Buffer_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/src/Branch_Target_Buffer_deallocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/src/Branch_Target_Buffer_deallocation.cpp	(revision 82)
@@ -49,4 +49,5 @@
 	delete []  in_DECOD_LAST_TAKE       ;
 	delete []  in_DECOD_MISS_PREDICTION ;
+	delete []  in_DECOD_IS_ACCURATE     ;
 
 	delete []  in_UPDATE_VAL            ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/SelfTest/src/test.cpp	(revision 82)
@@ -7,4 +7,7 @@
  */
 
+#define NB_ITERATION  1024
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/SelfTest/include/test.h"
 #include "Common/include/Test.h"
@@ -12,35 +15,4 @@
 #include "Behavioural/include/Allocation.h"
 
-#define NB_ITERATION  1024
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
-
 void test (string name,
 	   morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction::direction_glue::Parameters * _param)
@@ -52,9 +24,11 @@
 #endif
 
-  Direction_Glue * _Direction_Glue = new Direction_Glue (name.c_str(),
+  Direction_Glue * _Direction_Glue = new Direction_Glue 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
-#endif
-					     _param);
+     _parameters_statistics,
+#endif
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/include/Direction_Glue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/include/Direction_Glue.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/include/Direction_Glue.h	(revision 82)
@@ -114,5 +114,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Direction_Glue             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/SelfTest/src/test.cpp	(revision 82)
@@ -7,4 +7,7 @@
  */
 
+#define NB_ITERATION  1024
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/SelfTest/include/test.h"
 #include "Common/include/Test.h"
@@ -12,35 +15,4 @@
 #include "Behavioural/include/Allocation.h"
 
-#define NB_ITERATION  1024
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
-
 void test (string name,
 	   morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction::Parameters * _param)
@@ -52,9 +24,11 @@
 #endif
 
-  Direction * _Direction = new Direction (name.c_str(),
+  Direction * _Direction = new Direction 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
-#endif
-					     _param);
+     _parameters_statistics,
+#endif
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/include/Direction.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/include/Direction.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/include/Direction.h	(revision 82)
@@ -102,5 +102,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Direction             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/src/Direction_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/src/Direction_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/src/Direction_allocation.cpp	(revision 82)
@@ -21,11 +21,12 @@
 #undef  FUNCTION
 #define FUNCTION "Direction::allocation"
-  void Direction::allocation (
+  void Direction::allocation 
+  (
 #ifdef STATISTICS
-			       morpheo::behavioural::Parameters_Statistics * param_statistics
+   morpheo::behavioural::Parameters_Statistics * param_statistics
 #else
-			       void
+   void
 #endif
-			       )
+   )
   {
     log_printf(FUNC,Direction,FUNCTION,"Begin");
@@ -85,5 +86,5 @@
     {
       name = _name+"_glue";
-      std::cout << "Create   : " << name << std::endl;
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Create   : %s"),name.c_str());
       
       _component_glue = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction::direction_glue::Direction_Glue
@@ -92,5 +93,6 @@
 	 ,param_statistics
 #endif
-	 ,_param->_param_glue);
+	 ,_param->_param_glue
+	 ,_usage);
       
       _component->set_component (_component_glue->_component
@@ -106,5 +108,5 @@
     {
       src = _name+"_glue";
-      std::cout << "Instance : " << src << std::endl;
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str());
       
       {
@@ -177,5 +179,5 @@
     }
     // ~~~~~[ Others ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
-     _component->test_map();
+//      _component->test_map();
 
 #ifdef POSITION
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Makefile.deps
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Makefile.deps	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Makefile.deps	(revision 82)
@@ -25,4 +25,7 @@
 include 			$(DIR_MORPHEO)/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/Makefile.deps
 endif
+ifndef Prediction_unit_Glue
+include 			$(DIR_MORPHEO)/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/Makefile.deps
+endif
 
 #-----[ Directory ]----------------------------------------
@@ -37,6 +40,6 @@
 						$(Direction_LIBRARY)			\
 						$(Return_Address_Stack_LIBRARY)		\
-						$(Update_Prediction_Table_LIBRARY)	
-
+						$(Update_Prediction_Table_LIBRARY)	\
+						$(Prediction_unit_Glue_LIBRARY)
 
 Prediction_unit_DIR_LIBRARY		=	-L$(Prediction_unit_DIR)/lib		\
@@ -45,5 +48,6 @@
 						$(Direction_DIR_LIBRARY)		\
 						$(Return_Address_Stack_DIR_LIBRARY)	\
-						$(Update_Prediction_Table_DIR_LIBRARY)	
+						$(Update_Prediction_Table_DIR_LIBRARY)	\
+						$(Prediction_unit_Glue_DIR_LIBRARY)
 
 
@@ -57,4 +61,5 @@
 				$(MAKE) Return_Address_Stack_library;		\
 				$(MAKE) Update_Prediction_Table_library;	\
+				$(MAKE) Prediction_unit_Glue_library;		\
 				$(MAKE) --directory=$(Prediction_unit_DIR) --makefile=Makefile;
 
@@ -66,3 +71,4 @@
 				$(MAKE) Return_Address_Stack_library_clean;	\
 				$(MAKE) Update_Prediction_Table_library_clean;	\
+				$(MAKE) Prediction_unit_Glue_library_clean;	\
 				$(MAKE) --directory=$(Prediction_unit_DIR) --makefile=Makefile clean;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/config_mono_context.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/config_mono_context.cfg	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/config_mono_context.cfg	(revision 82)
@@ -1,8 +1,10 @@
 Prediction_unit_Glue
-1	1	+1	# nb_context     
-30	30	+32	# size_address   
-1	4	*4	# nb_instruction  [0] [nb_context]
-1	4	*4	# size_depth      [0] [nb_context]
-1	1	*4	# nb_inst_predict
-4	4	*4	# nb_inst_decod  
-4	4	*4	# nb_inst_update 
+1	1	*4	# nb_context         
+1	1	*4	# nb_decod_unit      
+30	30	+32	# size_address       
+1	1	*4	# nb_instruction  [0] [nb_context]
+1	1	*4	# size_depth      [0] [nb_context]
+4	4	*4	# nb_inst_decod   [0] [nb_decod_unit]
+1	1	*4	# nb_inst_branch_predict     
+4	4	*4	# nb_inst_branch_decod 
+4	4	*4	# nb_inst_branch_update
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/config_multi_context.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/config_multi_context.cfg	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/config_multi_context.cfg	(revision 82)
@@ -1,5 +1,6 @@
 Prediction_unit_Glue
-4	4	+1	# nb_context     
-30	30	+32	# size_address   
+4	4	*4	# nb_context         
+1	1	*4	# nb_decod_unit      
+30	30	+32	# size_address       
 1	1	*4	# nb_instruction  [0] [nb_context]
 2	2	*4	# nb_instruction  [1] [nb_context]
@@ -8,7 +9,8 @@
 2	2	*4	# size_depth      [0] [nb_context]
 1	1	*4	# size_depth      [1] [nb_context]
-8	8	*4	# size_depth      [2] [nb_context]
+7	7	*4	# size_depth      [2] [nb_context]
 4	4	*4	# size_depth      [3] [nb_context]
-1	4	*4	# nb_inst_predict
-4	4	*4	# nb_inst_decod  
-4	4	*4	# nb_inst_update 
+4	4	*4	# nb_inst_decod   [0] [nb_decod_unit]
+1	4	*4	# nb_inst_branch_predict     
+4	4	*4	# nb_inst_branch_decod 
+4	4	*4	# nb_inst_branch_update
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/src/main.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/src/main.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/src/main.cpp	(revision 82)
@@ -8,5 +8,5 @@
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/include/test.h"
 
-#define NB_PARAMS 5
+#define NB_PARAMS 6
 
 void usage (int argc, char * argv[])
@@ -14,11 +14,15 @@
   err (_("<Usage> %s name_instance list_params.\n"),argv[0]);
   err (_("list_params is :\n"));
-  err (_(" * nb_context                   (uint32_t)\n"));
-  err (_(" * size_address                 (uint32_t)\n"));
-  err (_(" * nb_instruction  [nb_context] (uint32_t)\n"));
-  err (_(" * size_depth      [nb_context] (uint32_t)\n"));
-  err (_(" * nb_inst_predict              (uint32_t)\n"));
-  err (_(" * nb_inst_decod                (uint32_t)\n"));
-  err (_(" * nb_inst_update               (uint32_t)\n"));
+  err (_(" * nb_context                             (uint32_t)\n"));
+  err (_(" * nb_decod_unit                          (uint32_t)\n"));
+//   err (_(" * nb_ooo_engine                          (uint32_t)\n"));
+  err (_(" * size_address                           (uint32_t)\n"));
+  err (_(" * nb_instruction         [nb_context]    (uint32_t)\n"));
+  err (_(" * size_depth             [nb_context]    (uint32_t)\n"));
+  err (_(" * nb_inst_decod          [nb_decod_unit] (uint32_t)\n"));
+//   err (_(" * nb_inst_update         [nb_ooo_engine] (uint32_t)\n"));
+  err (_(" * nb_inst_branch_predict                 (uint32_t)\n"));
+  err (_(" * nb_inst_branch_decod                   (uint32_t)\n"));
+  err (_(" * nb_inst_branch_update                  (uint32_t)\n"));
 
   exit (1);
@@ -39,7 +43,10 @@
 
   uint32_t   _nb_context      = fromString<uint32_t>(argv[x++]);
+  uint32_t   _nb_decod_unit   = fromString<uint32_t>(argv[x++]);
+//   uint32_t   _nb_ooo_engine   = fromString<uint32_t>(argv[x++]);
   uint32_t   _size_address    = fromString<uint32_t>(argv[x++]);
   
-  if (argc != static_cast<int>(2+NB_PARAMS+2*_nb_context))
+  if (argc != static_cast<int>(2+NB_PARAMS+2*_nb_context+_nb_decod_unit// +_nb_ooo_engine
+			       ))
     usage (argc, argv);
 
@@ -50,7 +57,13 @@
   for (uint32_t i=0; i<_nb_context; i++)
     _size_depth     [i] = fromString<uint32_t>(argv[x++]);
-  uint32_t   _nb_inst_predict = fromString<uint32_t>(argv[x++]);
-  uint32_t   _nb_inst_decod   = fromString<uint32_t>(argv[x++]);
-  uint32_t   _nb_inst_update  = fromString<uint32_t>(argv[x++]);
+  uint32_t * _nb_inst_decod   = new uint32_t [_nb_decod_unit];
+  for (uint32_t i=0; i<_nb_decod_unit; i++)
+    _nb_inst_decod  [i] = fromString<uint32_t>(argv[x++]);
+//   uint32_t * _nb_inst_update  = new uint32_t [_nb_ooo_engine];
+//   for (uint32_t i=0; i<_nb_ooo_engine; i++)
+//     _nb_inst_update [i] = fromString<uint32_t>(argv[x++]);
+  uint32_t   _nb_inst_branch_predict = fromString<uint32_t>(argv[x++]);
+  uint32_t   _nb_inst_branch_update  = fromString<uint32_t>(argv[x++]);
+  uint32_t   _nb_inst_branch_decod   = fromString<uint32_t>(argv[x++]);
 
   int _return = EXIT_SUCCESS;
@@ -58,11 +71,15 @@
     {
       morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::prediction_unit_glue::Parameters * param = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::prediction_unit_glue::Parameters
-	(_nb_context     ,
-	 _size_address   ,
-	 _nb_instruction ,
-	 _size_depth     ,
-	 _nb_inst_predict,
-	 _nb_inst_decod  ,
-	 _nb_inst_update );
+	(_nb_context            ,
+	 _nb_decod_unit         ,
+// 	 _nb_ooo_engine         ,
+	 _size_address          ,
+	 _nb_instruction        ,
+	 _size_depth            ,
+	 _nb_inst_decod         ,
+// 	 _nb_inst_update        ,
+	 _nb_inst_branch_predict,
+	 _nb_inst_branch_decod  ,
+	 _nb_inst_branch_update );
       
       msg(_("%s"),param->print(1).c_str());
@@ -83,4 +100,6 @@
   delete [] _nb_instruction;
   delete [] _size_depth    ;
+  delete [] _nb_inst_decod ;
+//   delete [] _nb_inst_update;
 
   return (_return);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/src/test.cpp	(revision 82)
@@ -63,43 +63,124 @@
   ALLOC1_SC_SIGNAL(out_PREDICT_BRANCH_STATE                ,"out_PREDICT_BRANCH_STATE               ",Tbranch_state_t    ,_param->_nb_context);
   ALLOC1_SC_SIGNAL(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID ,"out_PREDICT_BRANCH_UPDATE_PREDICTION_ID",Tprediction_ptr_t  ,_param->_nb_context);
-  ALLOC1_SC_SIGNAL(out_PREDICT_BTB_VAL                     ,"out_PREDICT_BTB_VAL                    ",Tcontrol_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_ACK                     ," in_PREDICT_BTB_ACK                    ",Tcontrol_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_BTB_CONTEXT_ID              ,"out_PREDICT_BTB_CONTEXT_ID             ",Tcontext_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_BTB_ADDRESS                 ,"out_PREDICT_BTB_ADDRESS                ",Taddress_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_HIT                     ," in_PREDICT_BTB_HIT                    ",Tcontrol_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_SRC             ," in_PREDICT_BTB_ADDRESS_SRC            ",Taddress_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_DEST            ," in_PREDICT_BTB_ADDRESS_DEST           ",Taddress_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_CONDITION               ," in_PREDICT_BTB_CONDITION              ",Tbranch_condition_t,_param->_nb_inst_predict);
-//ALLOC1_SC_SIGNAL( in_PREDICT_BTB_LAST_TAKE               ," in_PREDICT_BTB_LAST_TAKE              ",Tcontrol_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_IS_ACCURATE             ," in_PREDICT_BTB_IS_ACCURATE            ",Tcontrol_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_DIR_VAL                     ,"out_PREDICT_DIR_VAL                    ",Tcontrol_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_DIR_ACK                     ," in_PREDICT_DIR_ACK                    ",Tcontrol_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_DIR_ADDRESS_SRC             ,"out_PREDICT_DIR_ADDRESS_SRC            ",Taddress_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_DIR_STATIC                  ,"out_PREDICT_DIR_STATIC                 ",Tcontrol_t         ,_param->_nb_inst_predict);
-//ALLOC1_SC_SIGNAL(out_PREDICT_DIR_LAST_TAKE               ,"out_PREDICT_DIR_LAST_TAKE              ",Tcontrol_t         ,_param->_nb_inst_predict);
-//ALLOC1_SC_SIGNAL( in_PREDICT_DIR_HISTORY                 ," in_PREDICT_DIR_HISTORY                ",Thistory_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_DIR_DIRECTION               ," in_PREDICT_DIR_DIRECTION              ",Tcontrol_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_RAS_VAL                     ,"out_PREDICT_RAS_VAL                    ",Tcontrol_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_RAS_ACK                     ," in_PREDICT_RAS_ACK                    ",Tcontrol_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_RAS_CONTEXT_ID              ,"out_PREDICT_RAS_CONTEXT_ID             ",Tcontext_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_RAS_HIT                     ," in_PREDICT_RAS_HIT                    ",Tcontrol_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_RAS_PUSH                    ,"out_PREDICT_RAS_PUSH                   ",Tcontrol_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_RAS_ADDRESS_PUSH            ,"out_PREDICT_RAS_ADDRESS_PUSH           ",Taddress_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_RAS_ADDRESS_POP             ," in_PREDICT_RAS_ADDRESS_POP            ",Taddress_t         ,_param->_nb_inst_predict);
-//ALLOC1_SC_SIGNAL( in_PREDICT_RAS_INDEX                   ," in_PREDICT_RAS_INDEX                  ",Tptr_t             ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_VAL                     ,"out_PREDICT_UPT_VAL                    ",Tcontrol_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_UPT_ACK                     ," in_PREDICT_UPT_ACK                    ",Tcontrol_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_CONTEXT_ID              ,"out_PREDICT_UPT_CONTEXT_ID             ",Tcontext_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_SRC         ,"out_PREDICT_UPT_BTB_ADDRESS_SRC        ",Taddress_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_DEST        ,"out_PREDICT_UPT_BTB_ADDRESS_DEST       ",Taddress_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_CONDITION           ,"out_PREDICT_UPT_BTB_CONDITION          ",Tbranch_condition_t,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_LAST_TAKE           ,"out_PREDICT_UPT_BTB_LAST_TAKE          ",Tcontrol_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_IS_ACCURATE         ,"out_PREDICT_UPT_BTB_IS_ACCURATE        ",Tcontrol_t         ,_param->_nb_inst_predict);
-//ALLOC1_SC_SIGNAL(out_PREDICT_UPT_DIR_HISTORY             ,"out_PREDICT_UPT_DIR_HISTORY            ",Thistory_t         ,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_RAS_ADDRESS             ,"out_PREDICT_UPT_RAS_ADDRESS            ",Taddress_t         ,_param->_nb_inst_predict);
-//ALLOC1_SC_SIGNAL(out_PREDICT_UPT_RAS_INDEX               ,"out_PREDICT_UPT_RAS_INDEX              ",Tptr_t             ,_param->_nb_inst_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_BTB_VAL                     ,"out_PREDICT_BTB_VAL                    ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_ACK                     ," in_PREDICT_BTB_ACK                    ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_BTB_CONTEXT_ID              ,"out_PREDICT_BTB_CONTEXT_ID             ",Tcontext_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_BTB_ADDRESS                 ,"out_PREDICT_BTB_ADDRESS                ",Taddress_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_HIT                     ," in_PREDICT_BTB_HIT                    ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_SRC             ," in_PREDICT_BTB_ADDRESS_SRC            ",Taddress_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_DEST            ," in_PREDICT_BTB_ADDRESS_DEST           ",Taddress_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_CONDITION               ," in_PREDICT_BTB_CONDITION              ",Tbranch_condition_t,_param->_nb_inst_branch_predict);
+//ALLOC1_SC_SIGNAL( in_PREDICT_BTB_LAST_TAKE               ," in_PREDICT_BTB_LAST_TAKE              ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_BTB_IS_ACCURATE             ," in_PREDICT_BTB_IS_ACCURATE            ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_DIR_VAL                     ,"out_PREDICT_DIR_VAL                    ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_DIR_ACK                     ," in_PREDICT_DIR_ACK                    ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_DIR_ADDRESS_SRC             ,"out_PREDICT_DIR_ADDRESS_SRC            ",Taddress_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_DIR_STATIC                  ,"out_PREDICT_DIR_STATIC                 ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+//ALLOC1_SC_SIGNAL(out_PREDICT_DIR_LAST_TAKE               ,"out_PREDICT_DIR_LAST_TAKE              ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+//ALLOC1_SC_SIGNAL( in_PREDICT_DIR_HISTORY                 ," in_PREDICT_DIR_HISTORY                ",Thistory_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_DIR_DIRECTION               ," in_PREDICT_DIR_DIRECTION              ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_RAS_VAL                     ,"out_PREDICT_RAS_VAL                    ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_RAS_ACK                     ," in_PREDICT_RAS_ACK                    ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_RAS_CONTEXT_ID              ,"out_PREDICT_RAS_CONTEXT_ID             ",Tcontext_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_RAS_HIT                     ," in_PREDICT_RAS_HIT                    ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_RAS_PUSH                    ,"out_PREDICT_RAS_PUSH                   ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_RAS_ADDRESS_PUSH            ,"out_PREDICT_RAS_ADDRESS_PUSH           ",Taddress_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_RAS_ADDRESS_POP             ," in_PREDICT_RAS_ADDRESS_POP            ",Taddress_t         ,_param->_nb_inst_branch_predict);
+//ALLOC1_SC_SIGNAL( in_PREDICT_RAS_INDEX                   ," in_PREDICT_RAS_INDEX                  ",Tptr_t             ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_VAL                     ,"out_PREDICT_UPT_VAL                    ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_UPT_ACK                     ," in_PREDICT_UPT_ACK                    ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_CONTEXT_ID              ,"out_PREDICT_UPT_CONTEXT_ID             ",Tcontext_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_SRC         ,"out_PREDICT_UPT_BTB_ADDRESS_SRC        ",Taddress_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_DEST        ,"out_PREDICT_UPT_BTB_ADDRESS_DEST       ",Taddress_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_CONDITION           ,"out_PREDICT_UPT_BTB_CONDITION          ",Tbranch_condition_t,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_LAST_TAKE           ,"out_PREDICT_UPT_BTB_LAST_TAKE          ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_BTB_IS_ACCURATE         ,"out_PREDICT_UPT_BTB_IS_ACCURATE        ",Tcontrol_t         ,_param->_nb_inst_branch_predict);
+//ALLOC1_SC_SIGNAL(out_PREDICT_UPT_DIR_HISTORY             ,"out_PREDICT_UPT_DIR_HISTORY            ",Thistory_t         ,_param->_nb_inst_branch_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_UPT_RAS_ADDRESS             ,"out_PREDICT_UPT_RAS_ADDRESS            ",Taddress_t         ,_param->_nb_inst_branch_predict);
+//ALLOC1_SC_SIGNAL(out_PREDICT_UPT_RAS_INDEX               ,"out_PREDICT_UPT_RAS_INDEX              ",Tptr_t             ,_param->_nb_inst_branch_predict);
   ALLOC1_SC_SIGNAL( in_DEPTH_UPT_NB_BRANCH                 ," in_DEPTH_UPT_NB_BRANCH                ",Tdepth_t           ,_param->_nb_context);
   ALLOC1_SC_SIGNAL( in_DEPTH_UPT_TAIL                      ," in_DEPTH_UPT_TAIL                     ",Tdepth_t           ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL(out_DEPTH_NB_BRANCH                     ,"out_DEPTH_NB_BRANCH                    ",Tdepth_t           ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL(out_DEPTH_TAIL                          ,"out_DEPTH_TAIL                         ",Tdepth_t           ,_param->_nb_context);
+
+  ALLOC2_SC_SIGNAL( in_DECOD_VAL                        ," in_DECOD_VAL                        ",Tcontrol_t         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL(out_DECOD_ACK                        ,"out_DECOD_ACK                        ",Tcontrol_t         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_CONTEXT_ID                 ," in_DECOD_CONTEXT_ID                 ",Tcontext_t         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_MATCH_INST_IFETCH_PTR      ," in_DECOD_MATCH_INST_IFETCH_PTR      ",Tcontrol_t         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_STATE               ," in_DECOD_BRANCH_STATE               ",Tbranch_state_t    ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_UPDATE_PREDICTION_ID," in_DECOD_BRANCH_UPDATE_PREDICTION_ID",Tprediction_ptr_t  ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_CONDITION           ," in_DECOD_BRANCH_CONDITION           ",Tbranch_condition_t,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_DIRECTION           ," in_DECOD_BRANCH_DIRECTION           ",Tcontrol_t         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_ADDRESS_SRC                ," in_DECOD_ADDRESS_SRC                ",Taddress_t         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_ADDRESS_DEST               ," in_DECOD_ADDRESS_DEST               ",Taddress_t         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC1_SC_SIGNAL(out_DECOD_BTB_VAL                    ,"out_DECOD_BTB_VAL                    ",Tcontrol_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_BTB_ACK                    ," in_DECOD_BTB_ACK                    ",Tcontrol_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_BTB_CONTEXT_ID             ,"out_DECOD_BTB_CONTEXT_ID             ",Tcontext_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_BTB_ADDRESS_SRC            ,"out_DECOD_BTB_ADDRESS_SRC            ",Taddress_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_BTB_ADDRESS_DEST           ,"out_DECOD_BTB_ADDRESS_DEST           ",Taddress_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_BTB_CONDITION              ,"out_DECOD_BTB_CONDITION              ",Tbranch_condition_t,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_BTB_LAST_TAKE              ,"out_DECOD_BTB_LAST_TAKE              ",Tcontrol_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_BTB_MISS_PREDICTION        ,"out_DECOD_BTB_MISS_PREDICTION        ",Tcontrol_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_BTB_IS_ACCURATE            ,"out_DECOD_BTB_IS_ACCURATE            ",Tcontrol_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_RAS_VAL                    ,"out_DECOD_RAS_VAL                    ",Tcontrol_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_RAS_ACK                    ," in_DECOD_RAS_ACK                    ",Tcontrol_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_RAS_CONTEXT_ID             ,"out_DECOD_RAS_CONTEXT_ID             ",Tcontext_t         ,_param->_nb_inst_branch_decod); 
+  ALLOC1_SC_SIGNAL( in_DECOD_RAS_HIT                    ," in_DECOD_RAS_HIT                    ",Tcontrol_t         ,_param->_nb_inst_branch_decod); 
+  ALLOC1_SC_SIGNAL(out_DECOD_RAS_PUSH                   ,"out_DECOD_RAS_PUSH                   ",Tcontrol_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_RAS_ADDRESS_PUSH           ,"out_DECOD_RAS_ADDRESS_PUSH           ",Taddress_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_RAS_ADDRESS_POP            ," in_DECOD_RAS_ADDRESS_POP            ",Taddress_t         ,_param->_nb_inst_branch_decod);
+//ALLOC1_SC_SIGNAL( in_DECOD_RAS_INDEX                  ," in_DECOD_RAS_INDEX                  ",Tptr_t             ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_RAS_MISS_PREDICTION        ,"out_DECOD_RAS_MISS_PREDICTION        ",Tcontrol_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_UPT_VAL                    ,"out_DECOD_UPT_VAL                    ",Tcontrol_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_UPT_ACK                    ," in_DECOD_UPT_ACK                    ",Tcontrol_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_UPT_CONTEXT_ID             ,"out_DECOD_UPT_CONTEXT_ID             ",Tcontext_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_UPT_BTB_ADDRESS_SRC        ,"out_DECOD_UPT_BTB_ADDRESS_SRC        ",Taddress_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_UPT_BTB_ADDRESS_DEST       ,"out_DECOD_UPT_BTB_ADDRESS_DEST       ",Taddress_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_UPT_BTB_CONDITION          ,"out_DECOD_UPT_BTB_CONDITION          ",Tbranch_condition_t,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_UPT_BTB_LAST_TAKE          ,"out_DECOD_UPT_BTB_LAST_TAKE          ",Tcontrol_t         ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_UPT_RAS_ADDRESS            ,"out_DECOD_UPT_RAS_ADDRESS            ",Taddress_t         ,_param->_nb_inst_branch_decod);
+//ALLOC1_SC_SIGNAL(out_DECOD_UPT_RAS_INDEX              ,"out_DECOD_UPT_RAS_INDEX              ",Tptr_t             ,_param->_nb_inst_branch_decod);
+  ALLOC1_SC_SIGNAL(out_DECOD_UPT_MISS_IFETCH            ,"out_DECOD_UPT_MISS_IFETCH            ",Tcontrol_t         ,_param->_nb_inst_branch_decod); 
+  ALLOC1_SC_SIGNAL(out_DECOD_UPT_MISS_DECOD             ,"out_DECOD_UPT_MISS_DECOD             ",Tcontrol_t         ,_param->_nb_inst_branch_decod); 
+  ALLOC1_SC_SIGNAL(out_DECOD_UPT_UPDATE_PREDICTION_ID   ,"out_DECOD_UPT_UPDATE_PREDICTION_ID   ",Tprediction_ptr_t  ,_param->_nb_inst_branch_decod);
   
+  ALLOC1_SC_SIGNAL(out_UPDATE_BTB_VAL                  ,"out_UPDATE_BTB_VAL                  ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+  ALLOC1_SC_SIGNAL( in_UPDATE_BTB_ACK                  ," in_UPDATE_BTB_ACK                  ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL(out_UPDATE_BTB_CONTEXT_ID           ,"out_UPDATE_BTB_CONTEXT_ID           ",Tcontext_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL(out_UPDATE_BTB_ADDRESS_SRC          ,"out_UPDATE_BTB_ADDRESS_SRC          ",Taddress_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL(out_UPDATE_BTB_ADDRESS_DEST         ,"out_UPDATE_BTB_ADDRESS_DEST         ",Taddress_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL(out_UPDATE_BTB_CONDITION            ,"out_UPDATE_BTB_CONDITION            ",Tbranch_condition_t,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL(out_UPDATE_BTB_LAST_TAKE            ,"out_UPDATE_BTB_LAST_TAKE            ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL(out_UPDATE_BTB_MISS_PREDICTION      ,"out_UPDATE_BTB_MISS_PREDICTION      ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+  ALLOC1_SC_SIGNAL(out_UPDATE_DIR_VAL                  ,"out_UPDATE_DIR_VAL                  ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+  ALLOC1_SC_SIGNAL( in_UPDATE_DIR_ACK                  ," in_UPDATE_DIR_ACK                  ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL(out_UPDATE_DIR_ADDRESS              ,"out_UPDATE_DIR_ADDRESS              ",Taddress_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL(out_UPDATE_DIR_HISTORY              ,"out_UPDATE_DIR_HISTORY              ",Thistory_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL(out_UPDATE_DIR_DIRECTION            ,"out_UPDATE_DIR_DIRECTION            ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+  ALLOC1_SC_SIGNAL(out_UPDATE_RAS_VAL                  ,"out_UPDATE_RAS_VAL                  ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+  ALLOC1_SC_SIGNAL( in_UPDATE_RAS_ACK                  ," in_UPDATE_RAS_ACK                  ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL(out_UPDATE_RAS_CONTEXT_ID           ,"out_UPDATE_RAS_CONTEXT_ID           ",Tcontext_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL(out_UPDATE_RAS_PUSH                 ,"out_UPDATE_RAS_PUSH                 ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL(out_UPDATE_RAS_ADDRESS              ,"out_UPDATE_RAS_ADDRESS              ",Taddress_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL(out_UPDATE_RAS_INDEX                ,"out_UPDATE_RAS_INDEX                ",Tptr_t             ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL(out_UPDATE_RAS_MISS_PREDICTION      ,"out_UPDATE_RAS_MISS_PREDICTION      ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL(out_UPDATE_RAS_PREDICTION_IFETCH    ,"out_UPDATE_RAS_PREDICTION_IFETCH    ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+  ALLOC1_SC_SIGNAL( in_UPDATE_UPT_VAL                  ," in_UPDATE_UPT_VAL                  ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+  ALLOC1_SC_SIGNAL(out_UPDATE_UPT_ACK                  ,"out_UPDATE_UPT_ACK                  ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL( in_UPDATE_UPT_CONTEXT_ID           ," in_UPDATE_UPT_CONTEXT_ID           ",Tcontext_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL( in_UPDATE_UPT_MISS_PREDICTION      ," in_UPDATE_UPT_MISS_PREDICTION      ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL( in_UPDATE_UPT_DIRECTION_GOOD       ," in_UPDATE_UPT_DIRECTION_GOOD       ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+  ALLOC1_SC_SIGNAL( in_UPDATE_UPT_BTB_VAL              ," in_UPDATE_UPT_BTB_VAL              ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL( in_UPDATE_UPT_BTB_ADDRESS_SRC      ," in_UPDATE_UPT_BTB_ADDRESS_SRC      ",Taddress_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL( in_UPDATE_UPT_BTB_ADDRESS_DEST     ," in_UPDATE_UPT_BTB_ADDRESS_DEST     ",Taddress_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL( in_UPDATE_UPT_BTB_CONDITION        ," in_UPDATE_UPT_BTB_CONDITION        ",Tbranch_condition_t,_param->_nb_inst_branch_update);
+  ALLOC1_SC_SIGNAL( in_UPDATE_UPT_DIR_VAL              ," in_UPDATE_UPT_DIR_VAL              ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL( in_UPDATE_UPT_DIR_HISTORY          ," in_UPDATE_UPT_DIR_HISTORY          ",Thistory_t         ,_param->_nb_inst_branch_update);
+  ALLOC1_SC_SIGNAL( in_UPDATE_UPT_RAS_VAL              ," in_UPDATE_UPT_RAS_VAL              ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL( in_UPDATE_UPT_RAS_PUSH             ," in_UPDATE_UPT_RAS_PUSH             ",Tcontrol_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL( in_UPDATE_UPT_RAS_ADDRESS          ," in_UPDATE_UPT_RAS_ADDRESS          ",Taddress_t         ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL( in_UPDATE_UPT_RAS_INDEX            ," in_UPDATE_UPT_RAS_INDEX            ",Tptr_t             ,_param->_nb_inst_branch_update);
+//ALLOC1_SC_SIGNAL( in_UPDATE_UPT_RAS_PREDICTION_IFETCH," in_UPDATE_UPT_RAS_PREDICTION_IFETCH",Tcontrol_t         ,_param->_nb_inst_branch_update);
+
   /********************************************************
    * Instanciation
@@ -119,4 +200,5 @@
   INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_PC_NEXT_IS_DS_TAKE          ,_param->_nb_context);
   INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_INSTRUCTION_ENABLE          ,_param->_nb_context,_param->_nb_instruction[alloc_signal_it1]);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BRANCH_STATE                ,_param->_nb_context);
   for (uint32_t i=0; i<_param->_nb_context; i++)
     {
@@ -126,51 +208,142 @@
 	INSTANCE_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [i]);
     }
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BRANCH_STATE                ,_param->_nb_context);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BTB_VAL                     ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_ACK                     ,_param->_nb_inst_predict);
+
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BTB_VAL                     ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_ACK                     ,_param->_nb_inst_branch_predict);
   if (_param->_have_port_context_id)
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BTB_CONTEXT_ID              ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BTB_ADDRESS                 ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_HIT                     ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_ADDRESS_SRC             ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_ADDRESS_DEST            ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_CONDITION               ,_param->_nb_inst_predict);
-//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_LAST_TAKE               ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_IS_ACCURATE             ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_VAL                     ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_DIR_ACK                     ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_ADDRESS_SRC             ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_STATIC                  ,_param->_nb_inst_predict);
-//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_LAST_TAKE               ,_param->_nb_inst_predict);
-//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_DIR_HISTORY                 ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_DIR_DIRECTION               ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_VAL                     ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_ACK                     ,_param->_nb_inst_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BTB_CONTEXT_ID              ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BTB_ADDRESS                 ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_HIT                     ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_ADDRESS_SRC             ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_ADDRESS_DEST            ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_CONDITION               ,_param->_nb_inst_branch_predict);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_LAST_TAKE               ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_BTB_IS_ACCURATE             ,_param->_nb_inst_branch_predict);
+
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_VAL                     ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_DIR_ACK                     ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_ADDRESS_SRC             ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_STATIC                  ,_param->_nb_inst_branch_predict);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_DIR_LAST_TAKE               ,_param->_nb_inst_branch_predict);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_DIR_HISTORY                 ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_DIR_DIRECTION               ,_param->_nb_inst_branch_predict);
+
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_VAL                     ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_ACK                     ,_param->_nb_inst_branch_predict);
+
   if (_param->_have_port_context_id)
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_CONTEXT_ID              ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_HIT                     ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_PUSH                    ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_ADDRESS_PUSH            ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_ADDRESS_POP             ,_param->_nb_inst_predict);
-//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_INDEX                   ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_VAL                     ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_UPT_ACK                     ,_param->_nb_inst_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_CONTEXT_ID              ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_HIT                     ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_PUSH                    ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_RAS_ADDRESS_PUSH            ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_ADDRESS_POP             ,_param->_nb_inst_branch_predict);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_RAS_INDEX                   ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_VAL                     ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_PREDICT_UPT_ACK                     ,_param->_nb_inst_branch_predict);
   if (_param->_have_port_context_id)
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_CONTEXT_ID              ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_ADDRESS_SRC         ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_ADDRESS_DEST        ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_CONDITION           ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_LAST_TAKE           ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_IS_ACCURATE         ,_param->_nb_inst_predict);
-//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_DIR_HISTORY             ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_RAS_ADDRESS             ,_param->_nb_inst_predict);
-//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_RAS_INDEX               ,_param->_nb_inst_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_CONTEXT_ID              ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_ADDRESS_SRC         ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_ADDRESS_DEST        ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_CONDITION           ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_LAST_TAKE           ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_BTB_IS_ACCURATE         ,_param->_nb_inst_branch_predict);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_DIR_HISTORY             ,_param->_nb_inst_branch_predict);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_RAS_ADDRESS             ,_param->_nb_inst_branch_predict);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_UPT_RAS_INDEX               ,_param->_nb_inst_branch_predict);
+
+  INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_VAL                        ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_ACK                        ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  if (_param->_have_port_context_id)
+  INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_CONTEXT_ID                 ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_MATCH_INST_IFETCH_PTR      ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_BRANCH_STATE               ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  if (_param->_have_port_max_depth)
+  INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_BRANCH_CONDITION           ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_BRANCH_DIRECTION           ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_ADDRESS_SRC                ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  INSTANCE2_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_ADDRESS_DEST               ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_VAL                    ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_BTB_ACK                    ,_param->_nb_inst_branch_decod);
+  if (_param->_have_port_context_id)
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_CONTEXT_ID             ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_ADDRESS_SRC            ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_ADDRESS_DEST           ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_CONDITION              ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_LAST_TAKE              ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_MISS_PREDICTION        ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_BTB_IS_ACCURATE            ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_RAS_VAL                    ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_RAS_ACK                    ,_param->_nb_inst_branch_decod);
+  if (_param->_have_port_context_id)
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_RAS_CONTEXT_ID             ,_param->_nb_inst_branch_decod); 
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_RAS_HIT                    ,_param->_nb_inst_branch_decod); 
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_RAS_PUSH                   ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_RAS_ADDRESS_PUSH           ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_RAS_ADDRESS_POP            ,_param->_nb_inst_branch_decod);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_RAS_INDEX                  ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_RAS_MISS_PREDICTION        ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_VAL                    ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_DECOD_UPT_ACK                    ,_param->_nb_inst_branch_decod);
+  if (_param->_have_port_context_id)
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_CONTEXT_ID             ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_BTB_ADDRESS_SRC        ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_BTB_ADDRESS_DEST       ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_BTB_CONDITION          ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_BTB_LAST_TAKE          ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_RAS_ADDRESS            ,_param->_nb_inst_branch_decod);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_RAS_INDEX              ,_param->_nb_inst_branch_decod);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_MISS_IFETCH            ,_param->_nb_inst_branch_decod); 
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_MISS_DECOD             ,_param->_nb_inst_branch_decod); 
+  if (_param->_have_port_max_depth)
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_DECOD_UPT_UPDATE_PREDICTION_ID   ,_param->_nb_inst_branch_decod);
+
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_BTB_VAL                  ,_param->_nb_inst_branch_update);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_BTB_ACK                  ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_BTB_CONTEXT_ID           ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_BTB_ADDRESS_SRC          ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_BTB_ADDRESS_DEST         ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_BTB_CONDITION            ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_BTB_LAST_TAKE            ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_BTB_MISS_PREDICTION      ,_param->_nb_inst_branch_update);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_DIR_VAL                  ,_param->_nb_inst_branch_update);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_DIR_ACK                  ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_DIR_ADDRESS              ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_DIR_HISTORY              ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_DIR_DIRECTION            ,_param->_nb_inst_branch_update);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_RAS_VAL                  ,_param->_nb_inst_branch_update);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_RAS_ACK                  ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_RAS_CONTEXT_ID           ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_RAS_PUSH                 ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_RAS_ADDRESS              ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_RAS_INDEX                ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_RAS_MISS_PREDICTION      ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_RAS_PREDICTION_IFETCH    ,_param->_nb_inst_branch_update);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_VAL                  ,_param->_nb_inst_branch_update);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue,out_UPDATE_UPT_ACK                  ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_CONTEXT_ID           ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_MISS_PREDICTION      ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_DIRECTION_GOOD       ,_param->_nb_inst_branch_update);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_BTB_VAL              ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_BTB_ADDRESS_SRC      ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_BTB_ADDRESS_DEST     ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_BTB_CONDITION        ,_param->_nb_inst_branch_update);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_DIR_VAL              ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_DIR_HISTORY          ,_param->_nb_inst_branch_update);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_RAS_VAL              ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_RAS_PUSH             ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_RAS_ADDRESS          ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_RAS_INDEX            ,_param->_nb_inst_branch_update);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit_Glue, in_UPDATE_UPT_RAS_PREDICTION_IFETCH,_param->_nb_inst_branch_update);
+
   for (uint32_t i=0; i<_param->_nb_context; i++)
     {
       if (_param->_have_port_depth [i])
 	{
+	  INSTANCE_SC_SIGNAL(_Prediction_unit_Glue, in_DEPTH_UPT_TAIL      [i]);
+	  INSTANCE_SC_SIGNAL(_Prediction_unit_Glue,out_DEPTH_TAIL          [i]);
+	}
 	  INSTANCE_SC_SIGNAL(_Prediction_unit_Glue, in_DEPTH_UPT_NB_BRANCH [i]);
-	  INSTANCE_SC_SIGNAL(_Prediction_unit_Glue, in_DEPTH_UPT_TAIL      [i]);
-	}
+	  INSTANCE_SC_SIGNAL(_Prediction_unit_Glue,out_DEPTH_NB_BRANCH     [i]);
     }
 
@@ -191,4 +364,5 @@
 
   int32_t percent_transaction_predict =  75;
+  int32_t percent_transaction_decod   =  75;
 
   SC_START(0);
@@ -199,5 +373,5 @@
   for (uint32_t i=0; i<_param->_nb_context; i++)
     in_PREDICT_VAL [i]->write(0);
-  for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+  for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
     {
       in_PREDICT_BTB_ACK         [i]->write(0);
@@ -208,4 +382,7 @@
       in_PREDICT_BTB_IS_ACCURATE [i]->write(1);
     }
+  for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+    for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+      in_DECOD_VAL [i][j]->write(0);
 
   in_NRESET->write(0);
@@ -237,5 +414,5 @@
 	    do
 	      {
-		for (uint32_t j=0; j<_param->_nb_inst_predict; j++)
+		for (uint32_t j=0; j<_param->_nb_inst_branch_predict; j++)
 		  in_PREDICT_BTB_ACK [j]->write(0);
 
@@ -245,5 +422,5 @@
 
 		uint32_t port;
-		for (port=0; port<_param->_nb_inst_predict; port++)
+		for (port=0; port<_param->_nb_inst_branch_predict; port++)
 		  {
 		    if (_param->_have_port_context_id)
@@ -289,5 +466,5 @@
 	    for (uint32_t i=0; i<_param->_nb_context; i++)
 	      in_PREDICT_VAL [i]->write(0);
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		in_PREDICT_BTB_ACK [i]->write(0);
@@ -319,5 +496,5 @@
 	    do
 	      {
-		for (uint32_t j=0; j<_param->_nb_inst_predict; j++)
+		for (uint32_t j=0; j<_param->_nb_inst_branch_predict; j++)
 		  in_PREDICT_BTB_ACK [j]->write(0);
 
@@ -327,5 +504,5 @@
 
 		uint32_t port;
-		for (port=0; port<_param->_nb_inst_predict; port++)
+		for (port=0; port<_param->_nb_inst_branch_predict; port++)
 		  {
 		    if (_param->_have_port_context_id)
@@ -355,19 +532,23 @@
 
 		    TEST(Taddress_t        ,out_PREDICT_PC_NEXT                     [context]->read(),addr_dest);
-// 		    TEST(Tcontrol_t        ,out_PREDICT_PC_NEXT_IS_DS_TAKE          [context]->read(),0);
+		    TEST(Tcontrol_t        ,out_PREDICT_PC_NEXT_IS_DS_TAKE          [context]->read(),i==(_param->_nb_instruction [context]-1));
 		    TEST(Tinst_ifetch_ptr_t,out_PREDICT_INST_IFETCH_PTR             [context]->read(),i);
 		    TEST(Tbranch_state_t   ,out_PREDICT_BRANCH_STATE                [context]->read(),BRANCH_STATE_NSPEC_TAKE);
 // 		    TEST(Tprediction_ptr_t ,out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [context]->read(),0);
-		    
-// 		    for (uint32_t j=0; j<i; j++)
-// 		      TEST(Tcontrol_t        ,out_PREDICT_INSTRUCTION_ENABLE [context][j]->read(),0);
-// 		    for (uint32_t j=i; j<_param->_nb_instruction[context]; j++)
-// 		      TEST(Tcontrol_t        ,out_PREDICT_INSTRUCTION_ENABLE [context][j]->read(),1);
-		    
+
+		    uint32_t k=((addr_src%_param->_nb_instruction[context])==_param->_nb_instruction[context]-1)?_param->_nb_instruction[context]:((addr_src%_param->_nb_instruction[context])+2);
+		    LABEL("instruction enable : ");
+		    LABEL("  [0:%d[ = 1",k);
+		    LABEL("  [%d:%d[ = 1",k,_param->_nb_instruction[context]);
+		    for (uint32_t j=0; j<k; j++)
+		      TEST(Tcontrol_t        ,out_PREDICT_INSTRUCTION_ENABLE [context][j]->read(),1);
+		    for (uint32_t j=k; j<_param->_nb_instruction[context]; j++)
+		      TEST(Tcontrol_t        ,out_PREDICT_INSTRUCTION_ENABLE [context][j]->read(),0);
+
 		    TEST(Tcontrol_t        ,out_PREDICT_BTB_VAL        [port]->read(),1); 
 		    TEST(Tcontext_t        ,out_PREDICT_BTB_CONTEXT_ID [port]->read(),context);
 		    TEST(Taddress_t        ,out_PREDICT_BTB_ADDRESS    [port]->read(),addr);
 		  }
-
+		
 		SC_START(1);
 
@@ -376,5 +557,5 @@
 	    for (uint32_t i=0; i<_param->_nb_context; i++)
 	      in_PREDICT_VAL [i]->write(0);
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		in_PREDICT_BTB_ACK [i]->write(0);
@@ -386,4 +567,126 @@
       }
 
+      {
+	LABEL("Decod - Ok");
+	uint32_t decod_unit = rand()%_param->_nb_decod_unit;
+	LABEL("decod_unit : %d",decod_unit);
+
+	for (uint32_t i=0; i<_param->_nb_inst_decod[i];i++)
+	  {
+	    Tcontext_t context = i%_param->_nb_context;
+	    in_DECOD_CONTEXT_ID                  [decod_unit][i]->write(context);
+	    in_DECOD_MATCH_INST_IFETCH_PTR       [decod_unit][i]->write(1);
+	    in_DECOD_BRANCH_STATE                [decod_unit][i]->write(BRANCH_STATE_NSPEC_TAKE);
+
+	    bool find = false;
+	    do
+	      {
+		in_DECOD_VAL                         [decod_unit][i]->write((rand()%100)<percent_transaction_decod);
+		in_DECOD_BRANCH_UPDATE_PREDICTION_ID [decod_unit][i]->write(rand()%_param->_size_depth[context]);
+		
+		in_DECOD_BTB_ACK[0]->write((rand()%100)<percent_transaction_decod);
+		in_DECOD_RAS_ACK[0]->write((rand()%100)<percent_transaction_decod);
+		in_DECOD_UPT_ACK[0]->write((rand()%100)<percent_transaction_decod);
+		
+		SC_START(0);
+	    
+		LABEL("DECOD[%d][%d] - %d %d",decod_unit,i,in_DECOD_VAL[decod_unit][i]->read(),out_DECOD_ACK[decod_unit][i]->read());
+		if (in_DECOD_VAL[decod_unit][i]->read() and out_DECOD_ACK[decod_unit][i]->read())
+		  {
+		    LABEL("DECOD[%d][%d] - Transaction Accepted",decod_unit,i);
+		    TEST(Tcontrol_t, in_DECOD_UPT_ACK[0]->read(),1);
+		    TEST(Tcontrol_t,out_DECOD_BTB_VAL[0]->read(),0);
+		    TEST(Tcontrol_t,out_DECOD_RAS_VAL[0]->read(),0);
+		    TEST(Tcontrol_t,out_DECOD_UPT_VAL[0]->read(),1);
+		    find = true;
+		  }
+
+		SC_START(1);
+
+	      } while (not find);
+
+	    in_DECOD_VAL    [decod_unit][i]->write(0);
+	    in_DECOD_BTB_ACK[0]->write(0);
+	    in_DECOD_RAS_ACK[0]->write(0);
+	    in_DECOD_UPT_ACK[0]->write(0);
+	  }
+      }
+
+      {
+	LABEL("Decod - Ko");
+	uint32_t decod_unit = rand()%_param->_nb_decod_unit;
+	LABEL("decod_unit : %d",decod_unit);
+
+	for (uint32_t i=0; i<_param->_nb_inst_decod[i];i++)
+	  {
+	    Tcontext_t context = i%_param->_nb_context;
+	    in_DECOD_CONTEXT_ID                  [decod_unit][i]->write(context);
+	    in_DECOD_MATCH_INST_IFETCH_PTR       [decod_unit][i]->write(0);
+	    in_DECOD_BRANCH_STATE                [decod_unit][i]->write(BRANCH_STATE_SPEC_TAKE);
+	    in_DECOD_BRANCH_UPDATE_PREDICTION_ID [decod_unit][i]->write(i%_param->_max_size_depth);
+	    in_DECOD_BRANCH_CONDITION            [decod_unit][i]->write(BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK);
+	    in_DECOD_BRANCH_DIRECTION            [decod_unit][i]->write(1);
+	    in_DECOD_ADDRESS_SRC                 [decod_unit][i]->write(0xdeadbeef+i);
+	    in_DECOD_ADDRESS_DEST                [decod_unit][i]->write(0x11061979+i);
+
+                                                                                      
+	    bool find = false;
+	    do
+	      {
+		in_DECOD_VAL                         [decod_unit][i]->write((rand()%100)<percent_transaction_decod);
+		
+		in_DECOD_BTB_ACK[0]->write((rand()%100)<percent_transaction_decod);
+		in_DECOD_RAS_ACK[0]->write((rand()%100)<percent_transaction_decod);
+		in_DECOD_UPT_ACK[0]->write((rand()%100)<percent_transaction_decod);
+
+		in_DECOD_RAS_HIT[0]->write(1);
+		in_DECOD_RAS_ADDRESS_POP[0]->write(0xdadedead+i);
+
+		
+		SC_START(0);
+	    
+		LABEL("DECOD[%d][%d] - %d %d",decod_unit,i,in_DECOD_VAL[decod_unit][i]->read(),out_DECOD_ACK[decod_unit][i]->read());
+		if (in_DECOD_VAL[decod_unit][i]->read() and out_DECOD_ACK[decod_unit][i]->read())
+		  {
+		    LABEL("DECOD[%d][%d] - Transaction Accepted",decod_unit,i);
+		    TEST(Tcontrol_t         , in_DECOD_UPT_ACK                  [0]->read(),1);
+		    TEST(Tcontrol_t         ,out_DECOD_BTB_VAL                  [0]->read(),1);
+		    TEST(Tcontrol_t         ,out_DECOD_RAS_VAL                  [0]->read(),1);
+		    TEST(Tcontrol_t         ,out_DECOD_UPT_VAL                  [0]->read(),1);
+
+		    TEST(Tcontext_t         ,out_DECOD_BTB_CONTEXT_ID           [0]->read(),context);
+		    TEST(Taddress_t         ,out_DECOD_BTB_ADDRESS_SRC          [0]->read(),0xdeadbeef+i);
+		    TEST(Taddress_t         ,out_DECOD_BTB_ADDRESS_DEST         [0]->read(),0x11061979+i);
+		    TEST(Tbranch_condition_t,out_DECOD_BTB_CONDITION            [0]->read(),BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK);
+		    TEST(Tcontrol_t         ,out_DECOD_BTB_LAST_TAKE            [0]->read(),1);
+		    TEST(Tcontrol_t         ,out_DECOD_BTB_MISS_PREDICTION      [0]->read(),1);
+		    TEST(Tcontrol_t         ,out_DECOD_BTB_IS_ACCURATE          [0]->read(),0);
+		    TEST(Tcontext_t         ,out_DECOD_RAS_CONTEXT_ID           [0]->read(),context); 
+		    TEST(Tcontrol_t         ,out_DECOD_RAS_PUSH                 [0]->read(),1);
+		    TEST(Taddress_t         ,out_DECOD_RAS_ADDRESS_PUSH         [0]->read(),0x11061979+i);
+		    TEST(Tcontrol_t         ,out_DECOD_RAS_MISS_PREDICTION      [0]->read(),1);
+		    TEST(Tcontext_t         ,out_DECOD_UPT_CONTEXT_ID           [0]->read(),context);
+		    TEST(Taddress_t         ,out_DECOD_UPT_BTB_ADDRESS_SRC      [0]->read(),0xdeadbeef+i);
+		    TEST(Taddress_t         ,out_DECOD_UPT_BTB_ADDRESS_DEST     [0]->read(),0x11061979+i);
+		    TEST(Tbranch_condition_t,out_DECOD_UPT_BTB_CONDITION        [0]->read(),BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK);
+		    TEST(Tcontrol_t         ,out_DECOD_UPT_BTB_LAST_TAKE        [0]->read(),1);
+		    TEST(Taddress_t         ,out_DECOD_UPT_RAS_ADDRESS          [0]->read(),0xdadedead+i);
+		    TEST(Tcontrol_t         ,out_DECOD_UPT_MISS_IFETCH          [0]->read(),1); 
+		    TEST(Tcontrol_t         ,out_DECOD_UPT_MISS_DECOD           [0]->read(),0); 
+		    TEST(Tprediction_ptr_t  ,out_DECOD_UPT_UPDATE_PREDICTION_ID [0]->read(),i%_param->_max_size_depth);
+
+		    find = true;
+		  }
+
+		SC_START(1);
+
+	      } while (not find);
+
+	    in_DECOD_VAL    [decod_unit][i]->write(0);
+	    in_DECOD_BTB_ACK[0]->write(0);
+	    in_DECOD_RAS_ACK[0]->write(0);
+	    in_DECOD_UPT_ACK[0]->write(0);
+	  }
+      }
 
       SC_START(1);
@@ -413,46 +716,129 @@
   DELETE1_SC_SIGNAL(out_PREDICT_BRANCH_STATE                ,_param->_nb_context);
   DELETE1_SC_SIGNAL(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID ,_param->_nb_context);
-  DELETE1_SC_SIGNAL(out_PREDICT_BTB_VAL                     ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL( in_PREDICT_BTB_ACK                     ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_BTB_CONTEXT_ID              ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_BTB_ADDRESS                 ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL( in_PREDICT_BTB_HIT                     ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_SRC             ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_DEST            ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL( in_PREDICT_BTB_CONDITION               ,_param->_nb_inst_predict);
-//DELETE1_SC_SIGNAL( in_PREDICT_BTB_LAST_TAKE               ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL( in_PREDICT_BTB_IS_ACCURATE             ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_DIR_VAL                     ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL( in_PREDICT_DIR_ACK                     ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_DIR_ADDRESS_SRC             ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_DIR_STATIC                  ,_param->_nb_inst_predict);
-//DELETE1_SC_SIGNAL(out_PREDICT_DIR_LAST_TAKE               ,_param->_nb_inst_predict);
-//DELETE1_SC_SIGNAL( in_PREDICT_DIR_HISTORY                 ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL( in_PREDICT_DIR_DIRECTION               ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_RAS_VAL                     ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL( in_PREDICT_RAS_ACK                     ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_RAS_CONTEXT_ID              ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL( in_PREDICT_RAS_HIT                     ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_RAS_PUSH                    ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_RAS_ADDRESS_PUSH            ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL( in_PREDICT_RAS_ADDRESS_POP             ,_param->_nb_inst_predict);
-//DELETE1_SC_SIGNAL( in_PREDICT_RAS_INDEX                   ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_UPT_VAL                     ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL( in_PREDICT_UPT_ACK                     ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_UPT_CONTEXT_ID              ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_SRC         ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_DEST        ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_CONDITION           ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_LAST_TAKE           ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_IS_ACCURATE         ,_param->_nb_inst_predict);
-//DELETE1_SC_SIGNAL(out_PREDICT_UPT_DIR_HISTORY             ,_param->_nb_inst_predict);
-  DELETE1_SC_SIGNAL(out_PREDICT_UPT_RAS_ADDRESS             ,_param->_nb_inst_predict);
-//DELETE1_SC_SIGNAL(out_PREDICT_UPT_RAS_INDEX               ,_param->_nb_inst_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_BTB_VAL                     ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL( in_PREDICT_BTB_ACK                     ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_BTB_CONTEXT_ID              ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_BTB_ADDRESS                 ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL( in_PREDICT_BTB_HIT                     ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_SRC             ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL( in_PREDICT_BTB_ADDRESS_DEST            ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL( in_PREDICT_BTB_CONDITION               ,_param->_nb_inst_branch_predict);
+//DELETE1_SC_SIGNAL( in_PREDICT_BTB_LAST_TAKE               ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL( in_PREDICT_BTB_IS_ACCURATE             ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_DIR_VAL                     ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL( in_PREDICT_DIR_ACK                     ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_DIR_ADDRESS_SRC             ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_DIR_STATIC                  ,_param->_nb_inst_branch_predict);
+//DELETE1_SC_SIGNAL(out_PREDICT_DIR_LAST_TAKE               ,_param->_nb_inst_branch_predict);
+//DELETE1_SC_SIGNAL( in_PREDICT_DIR_HISTORY                 ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL( in_PREDICT_DIR_DIRECTION               ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_RAS_VAL                     ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL( in_PREDICT_RAS_ACK                     ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_RAS_CONTEXT_ID              ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL( in_PREDICT_RAS_HIT                     ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_RAS_PUSH                    ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_RAS_ADDRESS_PUSH            ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL( in_PREDICT_RAS_ADDRESS_POP             ,_param->_nb_inst_branch_predict);
+//DELETE1_SC_SIGNAL( in_PREDICT_RAS_INDEX                   ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_UPT_VAL                     ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL( in_PREDICT_UPT_ACK                     ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_UPT_CONTEXT_ID              ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_SRC         ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_DEST        ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_CONDITION           ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_LAST_TAKE           ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_UPT_BTB_IS_ACCURATE         ,_param->_nb_inst_branch_predict);
+//DELETE1_SC_SIGNAL(out_PREDICT_UPT_DIR_HISTORY             ,_param->_nb_inst_branch_predict);
+  DELETE1_SC_SIGNAL(out_PREDICT_UPT_RAS_ADDRESS             ,_param->_nb_inst_branch_predict);
+//DELETE1_SC_SIGNAL(out_PREDICT_UPT_RAS_INDEX               ,_param->_nb_inst_branch_predict);
   DELETE1_SC_SIGNAL( in_DEPTH_UPT_NB_BRANCH                 ,_param->_nb_context);
   DELETE1_SC_SIGNAL( in_DEPTH_UPT_TAIL                      ,_param->_nb_context);
+  DELETE1_SC_SIGNAL(out_DEPTH_NB_BRANCH                     ,_param->_nb_context);
+  DELETE1_SC_SIGNAL(out_DEPTH_TAIL                          ,_param->_nb_context);
+
+  DELETE2_SC_SIGNAL( in_DECOD_VAL                        ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL(out_DECOD_ACK                        ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_CONTEXT_ID                 ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_MATCH_INST_IFETCH_PTR      ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_BRANCH_STATE               ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_BRANCH_CONDITION           ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_BRANCH_DIRECTION           ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_ADDRESS_SRC                ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_ADDRESS_DEST               ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE1_SC_SIGNAL(out_DECOD_BTB_VAL                    ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_BTB_ACK                    ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_BTB_CONTEXT_ID             ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_BTB_ADDRESS_SRC            ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_BTB_ADDRESS_DEST           ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_BTB_CONDITION              ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_BTB_LAST_TAKE              ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_BTB_MISS_PREDICTION        ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_BTB_IS_ACCURATE            ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_RAS_VAL                    ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_RAS_ACK                    ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_RAS_CONTEXT_ID             ,_param->_nb_inst_branch_decod); 
+  DELETE1_SC_SIGNAL( in_DECOD_RAS_HIT                    ,_param->_nb_inst_branch_decod); 
+  DELETE1_SC_SIGNAL(out_DECOD_RAS_PUSH                   ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_RAS_ADDRESS_PUSH           ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_RAS_ADDRESS_POP            ,_param->_nb_inst_branch_decod);
+//DELETE1_SC_SIGNAL( in_DECOD_RAS_INDEX                  ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_RAS_MISS_PREDICTION        ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_UPT_VAL                    ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL( in_DECOD_UPT_ACK                    ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_UPT_CONTEXT_ID             ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_UPT_BTB_ADDRESS_SRC        ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_UPT_BTB_ADDRESS_DEST       ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_UPT_BTB_CONDITION          ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_UPT_BTB_LAST_TAKE          ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_UPT_RAS_ADDRESS            ,_param->_nb_inst_branch_decod);
+//DELETE1_SC_SIGNAL(out_DECOD_UPT_RAS_INDEX              ,_param->_nb_inst_branch_decod);
+  DELETE1_SC_SIGNAL(out_DECOD_UPT_MISS_IFETCH            ,_param->_nb_inst_branch_decod); 
+  DELETE1_SC_SIGNAL(out_DECOD_UPT_MISS_DECOD             ,_param->_nb_inst_branch_decod); 
+  DELETE1_SC_SIGNAL(out_DECOD_UPT_UPDATE_PREDICTION_ID   ,_param->_nb_inst_branch_decod);
+
+  DELETE1_SC_SIGNAL(out_UPDATE_BTB_VAL                  ,_param->_nb_inst_branch_update);
+  DELETE1_SC_SIGNAL( in_UPDATE_BTB_ACK                  ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL(out_UPDATE_BTB_CONTEXT_ID           ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL(out_UPDATE_BTB_ADDRESS_SRC          ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL(out_UPDATE_BTB_ADDRESS_DEST         ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL(out_UPDATE_BTB_CONDITION            ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL(out_UPDATE_BTB_LAST_TAKE            ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL(out_UPDATE_BTB_MISS_PREDICTION      ,_param->_nb_inst_branch_update);
+  DELETE1_SC_SIGNAL(out_UPDATE_DIR_VAL                  ,_param->_nb_inst_branch_update);
+  DELETE1_SC_SIGNAL( in_UPDATE_DIR_ACK                  ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL(out_UPDATE_DIR_ADDRESS              ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL(out_UPDATE_DIR_HISTORY              ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL(out_UPDATE_DIR_DIRECTION            ,_param->_nb_inst_branch_update);
+  DELETE1_SC_SIGNAL(out_UPDATE_RAS_VAL                  ,_param->_nb_inst_branch_update);
+  DELETE1_SC_SIGNAL( in_UPDATE_RAS_ACK                  ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL(out_UPDATE_RAS_CONTEXT_ID           ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL(out_UPDATE_RAS_PUSH                 ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL(out_UPDATE_RAS_ADDRESS              ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL(out_UPDATE_RAS_INDEX                ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL(out_UPDATE_RAS_MISS_PREDICTION      ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL(out_UPDATE_RAS_PREDICTION_IFETCH    ,_param->_nb_inst_branch_update);
+  DELETE1_SC_SIGNAL( in_UPDATE_UPT_VAL                  ,_param->_nb_inst_branch_update);
+  DELETE1_SC_SIGNAL(out_UPDATE_UPT_ACK                  ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL( in_UPDATE_UPT_CONTEXT_ID           ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL( in_UPDATE_UPT_MISS_PREDICTION      ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL( in_UPDATE_UPT_DIRECTION_GOOD       ,_param->_nb_inst_branch_update);
+  DELETE1_SC_SIGNAL( in_UPDATE_UPT_BTB_VAL              ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL( in_UPDATE_UPT_BTB_ADDRESS_SRC      ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL( in_UPDATE_UPT_BTB_ADDRESS_DEST     ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL( in_UPDATE_UPT_BTB_CONDITION        ,_param->_nb_inst_branch_update);
+  DELETE1_SC_SIGNAL( in_UPDATE_UPT_DIR_VAL              ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL( in_UPDATE_UPT_DIR_HISTORY          ,_param->_nb_inst_branch_update);
+  DELETE1_SC_SIGNAL( in_UPDATE_UPT_RAS_VAL              ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL( in_UPDATE_UPT_RAS_PUSH             ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL( in_UPDATE_UPT_RAS_ADDRESS          ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL( in_UPDATE_UPT_RAS_INDEX            ,_param->_nb_inst_branch_update);
+//DELETE1_SC_SIGNAL( in_UPDATE_UPT_RAS_PREDICTION_IFETCH,_param->_nb_inst_branch_update);
+
     }
 #endif
 
   delete _Prediction_unit_Glue;
+
 #ifdef STATISTICS
   delete _parameters_statistics;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Parameters.h	(revision 82)
@@ -24,28 +24,38 @@
   {
     //-----[ fields ]------------------------------------------------------------
-  public : uint32_t   _nb_context               ;
+  public : uint32_t   _nb_context               ;// == nb_ifetch_unit
+  public : uint32_t   _nb_decod_unit            ;
+//public : uint32_t   _nb_ooo_engine            ;
   public : uint32_t   _size_address             ;
-  public : uint32_t * _nb_instruction           ;
-  public : uint32_t * _size_depth               ;
-  public : uint32_t   _nb_inst_predict          ;
-  public : uint32_t   _nb_inst_decod            ;
-  public : uint32_t   _nb_inst_update           ;
+  public : uint32_t * _nb_instruction           ;//[nb_context]
+  public : uint32_t * _size_depth               ;//[nb_context]
+  public : uint32_t * _nb_inst_decod            ;//[nb_decod_unit]
+//public : uint32_t * _nb_inst_update           ;//[nb_ooo_engine]
+  public : uint32_t   _nb_inst_branch_predict   ;
+  public : uint32_t   _nb_inst_branch_decod     ;
+  public : uint32_t   _nb_inst_branch_update    ;
 //public : uint32_t   _nb_inst_branch_complete  ;
 
   public : uint32_t   _size_context_id          ;
-  public : uint32_t * _size_inst_ifetch_ptr     ;
+  public : uint32_t * _size_inst_ifetch_ptr     ;//[nb_context]
+  public : uint32_t   _max_size_depth           ;
 
   public : bool       _have_port_context_id     ;
-  public : bool     * _have_port_depth          ;    
-  public : bool     * _have_port_inst_ifetch_ptr;
+  public : bool       _have_port_max_depth      ;
+  public : bool     * _have_port_depth          ;//[nb_context]
+  public : bool     * _have_port_inst_ifetch_ptr;//[nb_context]
 
     //-----[ methods ]-----------------------------------------------------------
-  public : Parameters  (uint32_t   nb_context     ,
-			uint32_t   size_address   ,
-			uint32_t * nb_instruction ,
-			uint32_t * size_depth     ,
-			uint32_t   nb_inst_predict,
-			uint32_t   nb_inst_decod  ,
-			uint32_t   nb_inst_update );
+  public : Parameters  (uint32_t   nb_context            ,
+			uint32_t   nb_decod_unit         ,
+// 			uint32_t   nb_ooo_engine         ,
+			uint32_t   size_address          ,
+			uint32_t * nb_instruction        ,
+			uint32_t * size_depth            ,
+			uint32_t * nb_inst_decod         ,
+// 			uint32_t * nb_inst_update        ,
+			uint32_t   nb_inst_branch_predict,
+			uint32_t   nb_inst_branch_decod  ,
+			uint32_t   nb_inst_branch_update );
 //   public : Parameters  (Parameters & param) ;
   public : ~Parameters () ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Prediction_unit_Glue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Prediction_unit_Glue.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Prediction_unit_Glue.h	(revision 82)
@@ -75,120 +75,136 @@
   public    : SC_OUT(Tprediction_ptr_t  )  ** out_PREDICT_BRANCH_UPDATE_PREDICTION_ID ; //[nb_context]
 
-  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_BTB_VAL                     ; //[nb_inst_predict] 
-  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_BTB_ACK                     ; //[nb_inst_predict] 
-  public    : SC_OUT(Tcontext_t         )  ** out_PREDICT_BTB_CONTEXT_ID              ; //[nb_inst_predict]
-  public    : SC_OUT(Taddress_t         )  ** out_PREDICT_BTB_ADDRESS                 ; //[nb_inst_predict]
-  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_BTB_HIT                     ; //[nb_inst_predict] 
-  public    : SC_IN (Taddress_t         )  **  in_PREDICT_BTB_ADDRESS_SRC             ; //[nb_inst_predict] 
-  public    : SC_IN (Taddress_t         )  **  in_PREDICT_BTB_ADDRESS_DEST            ; //[nb_inst_predict] 
-  public    : SC_IN (Tbranch_condition_t)  **  in_PREDICT_BTB_CONDITION               ; //[nb_inst_predict] 
-//public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_BTB_LAST_TAKE               ; //[nb_inst_predict]  DIR.LAST_TAKE
-  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_BTB_IS_ACCURATE             ; //[nb_inst_predict]
+  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_BTB_VAL                     ; //[nb_inst_branch_predict] 
+  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_BTB_ACK                     ; //[nb_inst_branch_predict] 
+  public    : SC_OUT(Tcontext_t         )  ** out_PREDICT_BTB_CONTEXT_ID              ; //[nb_inst_branch_predict]
+  public    : SC_OUT(Taddress_t         )  ** out_PREDICT_BTB_ADDRESS                 ; //[nb_inst_branch_predict]
+  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_BTB_HIT                     ; //[nb_inst_branch_predict] 
+  public    : SC_IN (Taddress_t         )  **  in_PREDICT_BTB_ADDRESS_SRC             ; //[nb_inst_branch_predict] 
+  public    : SC_IN (Taddress_t         )  **  in_PREDICT_BTB_ADDRESS_DEST            ; //[nb_inst_branch_predict] 
+  public    : SC_IN (Tbranch_condition_t)  **  in_PREDICT_BTB_CONDITION               ; //[nb_inst_branch_predict] 
+//public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_BTB_LAST_TAKE               ; //[nb_inst_branch_predict]  DIR.LAST_TAKE
+  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_BTB_IS_ACCURATE             ; //[nb_inst_branch_predict]
 										      		        
-  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_DIR_VAL                     ; //[nb_inst_predict] 
-  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_DIR_ACK                     ; //[nb_inst_predict] 
-  public    : SC_OUT(Taddress_t         )  ** out_PREDICT_DIR_ADDRESS_SRC             ; //[nb_inst_predict] 
-  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_DIR_STATIC                  ; //[nb_inst_predict] 
-//public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_DIR_LAST_TAKE               ; //[nb_inst_predict]  BTB.LAST_TAKE
-//public    : SC_IN (Thistory_t         )  **  in_PREDICT_DIR_HISTORY                 ; //[nb_inst_predict]  UPT.DIR_HISTORY
-  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_DIR_DIRECTION               ; //[nb_inst_predict] 
-
-  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_RAS_VAL                     ; //[nb_inst_predict] 
-  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_RAS_ACK                     ; //[nb_inst_predict] 
-  public    : SC_OUT(Tcontext_t         )  ** out_PREDICT_RAS_CONTEXT_ID              ; //[nb_inst_predict]
-  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_RAS_HIT                     ; //[nb_inst_predict]  
-  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_RAS_PUSH                    ; //[nb_inst_predict] 
-  public    : SC_OUT(Taddress_t         )  ** out_PREDICT_RAS_ADDRESS_PUSH            ; //[nb_inst_predict] 
-  public    : SC_IN (Taddress_t         )  **  in_PREDICT_RAS_ADDRESS_POP             ; //[nb_inst_predict] 
-//public    : SC_IN (Tptr_t             )  **  in_PREDICT_RAS_INDEX                   ; //[nb_inst_predict]  UPT.RAS_INDEX
+  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_DIR_VAL                     ; //[nb_inst_branch_predict] 
+  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_DIR_ACK                     ; //[nb_inst_branch_predict] 
+  public    : SC_OUT(Taddress_t         )  ** out_PREDICT_DIR_ADDRESS_SRC             ; //[nb_inst_branch_predict] 
+  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_DIR_STATIC                  ; //[nb_inst_branch_predict] 
+//public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_DIR_LAST_TAKE               ; //[nb_inst_branch_predict]  BTB.LAST_TAKE
+//public    : SC_IN (Thistory_t         )  **  in_PREDICT_DIR_HISTORY                 ; //[nb_inst_branch_predict]  UPT.DIR_HISTORY
+  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_DIR_DIRECTION               ; //[nb_inst_branch_predict] 
+
+  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_RAS_VAL                     ; //[nb_inst_branch_predict] 
+  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_RAS_ACK                     ; //[nb_inst_branch_predict] 
+  public    : SC_OUT(Tcontext_t         )  ** out_PREDICT_RAS_CONTEXT_ID              ; //[nb_inst_branch_predict]
+  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_RAS_HIT                     ; //[nb_inst_branch_predict]  
+  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_RAS_PUSH                    ; //[nb_inst_branch_predict] 
+  public    : SC_OUT(Taddress_t         )  ** out_PREDICT_RAS_ADDRESS_PUSH            ; //[nb_inst_branch_predict] 
+  public    : SC_IN (Taddress_t         )  **  in_PREDICT_RAS_ADDRESS_POP             ; //[nb_inst_branch_predict] 
+//public    : SC_IN (Tptr_t             )  **  in_PREDICT_RAS_INDEX                   ; //[nb_inst_branch_predict]  UPT.RAS_INDEX
 										      		        
-  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_UPT_VAL                     ; //[nb_inst_predict] 
-  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_UPT_ACK                     ; //[nb_inst_predict] 
-  public    : SC_OUT(Tcontext_t         )  ** out_PREDICT_UPT_CONTEXT_ID              ; //[nb_inst_predict]
-  public    : SC_OUT(Taddress_t         )  ** out_PREDICT_UPT_BTB_ADDRESS_SRC         ; //[nb_inst_predict]* BTB.ADDRESS_SRC
-  public    : SC_OUT(Taddress_t         )  ** out_PREDICT_UPT_BTB_ADDRESS_DEST        ; //[nb_inst_predict] 
-  public    : SC_OUT(Tbranch_condition_t)  ** out_PREDICT_UPT_BTB_CONDITION           ; //[nb_inst_predict]* BTB.CONDITION
-  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_UPT_BTB_LAST_TAKE           ; //[nb_inst_predict] 
-  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_UPT_BTB_IS_ACCURATE         ; //[nb_inst_predict]
-//public    : SC_OUT(Thistory_t         )  ** out_PREDICT_UPT_DIR_HISTORY             ; //[nb_inst_predict]  DIR.HISTORY
-  public    : SC_OUT(Taddress_t         )  ** out_PREDICT_UPT_RAS_ADDRESS             ; //[nb_inst_predict]* RAS.ADDRESS_POP
-//public    : SC_OUT(Tptr_t             )  ** out_PREDICT_UPT_RAS_INDEX               ; //[nb_inst_predict]  RAS.INDEX
+  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_UPT_VAL                     ; //[nb_inst_branch_predict] 
+  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_UPT_ACK                     ; //[nb_inst_branch_predict] 
+  public    : SC_OUT(Tcontext_t         )  ** out_PREDICT_UPT_CONTEXT_ID              ; //[nb_inst_branch_predict]
+  public    : SC_OUT(Taddress_t         )  ** out_PREDICT_UPT_BTB_ADDRESS_SRC         ; //[nb_inst_branch_predict]* BTB.ADDRESS_SRC
+  public    : SC_OUT(Taddress_t         )  ** out_PREDICT_UPT_BTB_ADDRESS_DEST        ; //[nb_inst_branch_predict] 
+  public    : SC_OUT(Tbranch_condition_t)  ** out_PREDICT_UPT_BTB_CONDITION           ; //[nb_inst_branch_predict]* BTB.CONDITION
+  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_UPT_BTB_LAST_TAKE           ; //[nb_inst_branch_predict] 
+  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_UPT_BTB_IS_ACCURATE         ; //[nb_inst_branch_predict]
+//public    : SC_OUT(Thistory_t         )  ** out_PREDICT_UPT_DIR_HISTORY             ; //[nb_inst_branch_predict]  DIR.HISTORY
+  public    : SC_OUT(Taddress_t         )  ** out_PREDICT_UPT_RAS_ADDRESS             ; //[nb_inst_branch_predict]* RAS.ADDRESS_POP
+//public    : SC_OUT(Tptr_t             )  ** out_PREDICT_UPT_RAS_INDEX               ; //[nb_inst_branch_predict]  RAS.INDEX
 										      
     // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	      
-  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_BTB_VAL                       ; //[nb_inst_decod]
-  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_BTB_ACK                       ; //[nb_inst_decod]
-  public    : SC_OUT(Tcontext_t         )  ** out_DECOD_BTB_CONTEXT_ID                ; //[nb_inst_decod]
-  public    : SC_OUT(Taddress_t         )  ** out_DECOD_BTB_ADDRESS_SRC               ; //[nb_inst_decod]
-  public    : SC_OUT(Taddress_t         )  ** out_DECOD_BTB_ADDRESS_DEST              ; //[nb_inst_decod]
-  public    : SC_OUT(Tbranch_condition_t)  ** out_DECOD_BTB_CONDITION                 ; //[nb_inst_decod]
-  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_BTB_LAST_TAKE                 ; //[nb_inst_decod]
-  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_BTB_MISS_PREDICTION           ; //[nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         ) ***  in_DECOD_VAL                           ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_OUT(Tcontrol_t         ) *** out_DECOD_ACK                           ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Tcontext_t         ) ***  in_DECOD_CONTEXT_ID                    ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         ) ***  in_DECOD_MATCH_INST_IFETCH_PTR         ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Tbranch_state_t    ) ***  in_DECOD_BRANCH_STATE                  ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Tprediction_ptr_t  ) ***  in_DECOD_BRANCH_UPDATE_PREDICTION_ID   ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Tbranch_condition_t) ***  in_DECOD_BRANCH_CONDITION              ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         ) ***  in_DECOD_BRANCH_DIRECTION              ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Taddress_t         ) ***  in_DECOD_ADDRESS_SRC                   ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Taddress_t         ) ***  in_DECOD_ADDRESS_DEST                  ; //[nb_decod_unit][nb_inst_decod]
+
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_BTB_VAL                       ; //[nb_inst_branch_decod]
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_BTB_ACK                       ; //[nb_inst_branch_decod]
+  public    : SC_OUT(Tcontext_t         )  ** out_DECOD_BTB_CONTEXT_ID                ; //[nb_inst_branch_decod]
+  public    : SC_OUT(Taddress_t         )  ** out_DECOD_BTB_ADDRESS_SRC               ; //[nb_inst_branch_decod]
+  public    : SC_OUT(Taddress_t         )  ** out_DECOD_BTB_ADDRESS_DEST              ; //[nb_inst_branch_decod]
+  public    : SC_OUT(Tbranch_condition_t)  ** out_DECOD_BTB_CONDITION                 ; //[nb_inst_branch_decod]
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_BTB_LAST_TAKE                 ; //[nb_inst_branch_decod]
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_BTB_MISS_PREDICTION           ; //[nb_inst_branch_decod]
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_BTB_IS_ACCURATE               ; //[nb_inst_branch_decod]
 									              
-  public    : SC_OUT(Tcontrol_t)           ** out_DECOD_RAS_VAL                       ; //[nb_inst_decod]
-  public    : SC_IN (Tcontrol_t)           **  in_DECOD_RAS_ACK                       ; //[nb_inst_decod]
-  public    : SC_OUT(Tcontext_t)           ** out_DECOD_RAS_CONTEXT_ID                ; //[nb_inst_decod] 
-  public    : SC_IN (Tcontrol_t)           **  in_DECOD_RAS_HIT                       ; //[nb_inst_decod] 
-  public    : SC_OUT(Tcontrol_t)           ** out_DECOD_RAS_PUSH                      ; //[nb_inst_decod]
-  public    : SC_OUT(Taddress_t)           ** out_DECOD_RAS_ADDRESS_PUSH              ; //[nb_inst_decod]
-  public    : SC_IN (Taddress_t)           **  in_DECOD_RAS_ADDRESS_POP               ; //[nb_inst_decod]
-  public    : SC_IN (Tptr_t    )           **  in_DECOD_RAS_INDEX                     ; //[nb_inst_decod]
-  public    : SC_OUT(Tcontrol_t)           ** out_DECOD_RAS_MISS_PREDICTION           ; //[nb_inst_decod]
-										      
-  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_UPT_VAL                       ; //[nb_inst_decod]
-  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_UPT_ACK                       ; //[nb_inst_decod]
-  public    : SC_OUT(Tcontext_t         )  ** out_DECOD_UPT_CONTEXT_ID                ; //[nb_inst_decod]
-  public    : SC_OUT(Taddress_t         )  ** out_DECOD_UPT_BTB_ADDRESS_SRC           ; //[nb_inst_decod]
-  public    : SC_OUT(Taddress_t         )  ** out_DECOD_UPT_BTB_ADDRESS_DEST          ; //[nb_inst_decod]
-  public    : SC_OUT(Tbranch_condition_t)  ** out_DECOD_UPT_BTB_CONDITION             ; //[nb_inst_decod]
-  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_UPT_BTB_LAST_TAKE             ; //[nb_inst_decod]
-  public    : SC_OUT(Taddress_t         )  ** out_DECOD_UPT_RAS_ADDRESS               ; //[nb_inst_decod]
-  public    : SC_OUT(Tptr_t             )  ** out_DECOD_UPT_RAS_INDEX                 ; //[nb_inst_decod]
-  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_UPT_MISS_PREDICTION           ; //[nb_inst_decod] 
-  public    : SC_OUT(Tprediction_ptr_t  )  ** out_DECOD_UPT_UPDATE_PREDICTION_ID      ; //[nb_inst_decod]
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_RAS_VAL                       ; //[nb_inst_branch_decod]
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_RAS_ACK                       ; //[nb_inst_branch_decod]
+  public    : SC_OUT(Tcontext_t         )  ** out_DECOD_RAS_CONTEXT_ID                ; //[nb_inst_branch_decod] 
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_RAS_HIT                       ; //[nb_inst_branch_decod] 
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_RAS_PUSH                      ; //[nb_inst_branch_decod]
+  public    : SC_OUT(Taddress_t         )  ** out_DECOD_RAS_ADDRESS_PUSH              ; //[nb_inst_branch_decod]
+  public    : SC_IN (Taddress_t         )  **  in_DECOD_RAS_ADDRESS_POP               ; //[nb_inst_branch_decod]
+//public    : SC_IN (Tptr_t             )  **  in_DECOD_RAS_INDEX                     ; //[nb_inst_branch_decod] UPT.RAS_INDEX
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_RAS_MISS_PREDICTION           ; //[nb_inst_branch_decod]
+										      
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_UPT_VAL                       ; //[nb_inst_branch_decod]
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_UPT_ACK                       ; //[nb_inst_branch_decod]
+  public    : SC_OUT(Tcontext_t         )  ** out_DECOD_UPT_CONTEXT_ID                ; //[nb_inst_branch_decod]
+  public    : SC_OUT(Taddress_t         )  ** out_DECOD_UPT_BTB_ADDRESS_SRC           ; //[nb_inst_branch_decod]
+  public    : SC_OUT(Taddress_t         )  ** out_DECOD_UPT_BTB_ADDRESS_DEST          ; //[nb_inst_branch_decod]
+  public    : SC_OUT(Tbranch_condition_t)  ** out_DECOD_UPT_BTB_CONDITION             ; //[nb_inst_branch_decod]
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_UPT_BTB_LAST_TAKE             ; //[nb_inst_branch_decod]
+  public    : SC_OUT(Taddress_t         )  ** out_DECOD_UPT_RAS_ADDRESS               ; //[nb_inst_branch_decod]
+//public    : SC_OUT(Tptr_t             )  ** out_DECOD_UPT_RAS_INDEX                 ; //[nb_inst_branch_decod] RAS.INDEX
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_UPT_MISS_IFETCH               ; //[nb_inst_branch_decod] 
+  public    : SC_OUT(Tcontrol_t         )  ** out_DECOD_UPT_MISS_DECOD                ; //[nb_inst_branch_decod] 
+  public    : SC_OUT(Tprediction_ptr_t  )  ** out_DECOD_UPT_UPDATE_PREDICTION_ID      ; //[nb_inst_branch_decod]
 										      
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	      
-  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_BTB_VAL                      ; //[nb_inst_update]
-  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_BTB_ACK                      ; //[nb_inst_update]
-  public    : SC_OUT(Tcontext_t         )  ** out_UPDATE_BTB_CONTEXT_ID               ; //[nb_inst_update]
-  public    : SC_OUT(Taddress_t         )  ** out_UPDATE_BTB_ADDRESS_SRC              ; //[nb_inst_update]
-  public    : SC_OUT(Taddress_t         )  ** out_UPDATE_BTB_ADDRESS_DEST             ; //[nb_inst_update]
-  public    : SC_OUT(Tbranch_condition_t)  ** out_UPDATE_BTB_CONDITION                ; //[nb_inst_update]
-  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_BTB_LAST_TAKE                ; //[nb_inst_update]
-  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_BTB_MISS_PREDICTION          ; //[nb_inst_update]
-										      
-  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_DIR_VAL                      ; //[nb_inst_update]
-  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_DIR_ACK                      ; //[nb_inst_update]
-  public    : SC_OUT(Taddress_t)           ** out_UPDATE_DIR_ADDRESS                  ; //[nb_inst_update]
-  public    : SC_OUT(Thistory_t)           ** out_UPDATE_DIR_HISTORY                  ; //[nb_inst_update]
-  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_DIR_DIRECTION                ; //[nb_inst_update]
-										      
-  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_RAS_VAL                      ; //[nb_inst_update]
-  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_RAS_ACK                      ; //[nb_inst_update]
-  public    : SC_OUT(Tcontext_t)           ** out_UPDATE_RAS_CONTEXT_ID               ; //[nb_inst_update] 
-  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_RAS_PUSH                     ; //[nb_inst_update]
-  public    : SC_OUT(Taddress_t)           ** out_UPDATE_RAS_ADDRESS                  ; //[nb_inst_update]
-  public    : SC_OUT(Tptr_t    )           ** out_UPDATE_RAS_INDEX                    ; //[nb_inst_update]
-  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_RAS_MISS_PREDICTION          ; //[nb_inst_update]
-  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_RAS_PREDICTION_IFETCH        ; //[nb_inst_update]
-										      
-  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_UPT_VAL                      ; //[nb_inst_update]
-  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_UPT_ACK                      ; //[nb_inst_update]
-  public    : SC_IN (Tcontext_t         )  **  in_UPDATE_UPT_CONTEXT_ID               ; //[nb_inst_update]
-  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_UPT_MISS_PREDICTION          ; //[nb_inst_update]
-  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_UPT_DIRECTION_GOOD           ; //[nb_inst_update]
-  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_UPT_BTB_VAL                  ; //[nb_inst_update]
-  public    : SC_IN (Taddress_t         )  **  in_UPDATE_UPT_BTB_ADDRESS_SRC          ; //[nb_inst_update]
-  public    : SC_IN (Taddress_t         )  **  in_UPDATE_UPT_BTB_ADDRESS_DEST         ; //[nb_inst_update]
-  public    : SC_IN (Tbranch_condition_t)  **  in_UPDATE_UPT_BTB_CONDITION            ; //[nb_inst_update]
-  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_UPT_DIR_VAL                  ; //[nb_inst_update]
-  public    : SC_IN (Thistory_t         )  **  in_UPDATE_UPT_DIR_HISTORY              ; //[nb_inst_update]
-  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_UPT_RAS_VAL                  ; //[nb_inst_update]
-  public    : SC_IN (Taddress_t         )  **  in_UPDATE_UPT_RAS_ADDRESS              ; //[nb_inst_update]
-  public    : SC_IN (Tptr_t             )  **  in_UPDATE_UPT_RAS_INDEX                ; //[nb_inst_update]
-  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_UPT_RAS_PREDICTION_IFETCH    ; //[nb_inst_update]
+  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_BTB_VAL                      ; //[nb_inst_branch_update]
+  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_BTB_ACK                      ; //[nb_inst_branch_update]
+//public    : SC_OUT(Tcontext_t         )  ** out_UPDATE_BTB_CONTEXT_ID               ; //[nb_inst_branch_update] UPT.CONTEXT_ID
+//public    : SC_OUT(Taddress_t         )  ** out_UPDATE_BTB_ADDRESS_SRC              ; //[nb_inst_branch_update] UPT.BTB_ADDRESS_SRC
+//public    : SC_OUT(Taddress_t         )  ** out_UPDATE_BTB_ADDRESS_DEST             ; //[nb_inst_branch_update] UPT.BTB_ADDRESS_DEST
+//public    : SC_OUT(Tbranch_condition_t)  ** out_UPDATE_BTB_CONDITION                ; //[nb_inst_branch_update]*UPT.BTB_CONDITION
+//public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_BTB_LAST_TAKE                ; //[nb_inst_branch_update] UPT.DIRECTION_GOOD
+//public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_BTB_MISS_PREDICTION          ; //[nb_inst_branch_update] UPT.MISS_PREDICTION
+										      
+  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_DIR_VAL                      ; //[nb_inst_branch_update]
+  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_DIR_ACK                      ; //[nb_inst_branch_update]
+//public    : SC_OUT(Taddress_t         )  ** out_UPDATE_DIR_ADDRESS                  ; //[nb_inst_branch_update] UPT.BTB_ADDRESS_SRC
+//public    : SC_OUT(Thistory_t         )  ** out_UPDATE_DIR_HISTORY                  ; //[nb_inst_branch_update] UPT.DIR_HISTORY
+//public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_DIR_DIRECTION                ; //[nb_inst_branch_update] UPT.DIRECTION_GOOD
+										      
+  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_RAS_VAL                      ; //[nb_inst_branch_update]
+  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_RAS_ACK                      ; //[nb_inst_branch_update]
+//public    : SC_OUT(Tcontext_t         )  ** out_UPDATE_RAS_CONTEXT_ID               ; //[nb_inst_branch_update] UPT.CONTEXT_ID
+//public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_RAS_PUSH                     ; //[nb_inst_branch_update] UPT.RAS_PUSH
+//public    : SC_OUT(Taddress_t         )  ** out_UPDATE_RAS_ADDRESS                  ; //[nb_inst_branch_update] UPT.RAS_ADDRESS
+//public    : SC_OUT(Tptr_t             )  ** out_UPDATE_RAS_INDEX                    ; //[nb_inst_branch_update] UPT.RAS_INDEX
+//public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_RAS_MISS_PREDICTION          ; //[nb_inst_branch_update] UPT.MISS_PREDICTION
+//public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_RAS_PREDICTION_IFETCH        ; //[nb_inst_branch_update] UPT.RAS_PREDICTION_IFETCH
+										      
+  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_UPT_VAL                      ; //[nb_inst_branch_update]
+  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_UPT_ACK                      ; //[nb_inst_branch_update]
+//public    : SC_IN (Tcontext_t         )  **  in_UPDATE_UPT_CONTEXT_ID               ; //[nb_inst_branch_update] BTB.CONTEXT_ID, RAS.CONTEXT_ID
+//public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_UPT_MISS_PREDICTION          ; //[nb_inst_branch_update] BTB.MISS_PREDICTION, RAS.MISS_PREDICTION
+//public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_UPT_DIRECTION_GOOD           ; //[nb_inst_branch_update] BTB.LAST_TAKE, DIR.DIRECTION
+  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_UPT_BTB_VAL                  ; //[nb_inst_branch_update]
+//public    : SC_IN (Taddress_t         )  **  in_UPDATE_UPT_BTB_ADDRESS_SRC          ; //[nb_inst_branch_update] DIR.ADDRESS, BTB.ADDRESS_SRC
+//public    : SC_IN (Taddress_t         )  **  in_UPDATE_UPT_BTB_ADDRESS_DEST         ; //[nb_inst_branch_update] BTB.ADDRESS_DEST
+//public    : SC_IN (Tbranch_condition_t)  **  in_UPDATE_UPT_BTB_CONDITION            ; //[nb_inst_branch_update]*BTB.CONDITION
+  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_UPT_DIR_VAL                  ; //[nb_inst_branch_update]
+//public    : SC_IN (Thistory_t         )  **  in_UPDATE_UPT_DIR_HISTORY              ; //[nb_inst_branch_update] DIR.HISTORY
+  public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_UPT_RAS_VAL                  ; //[nb_inst_branch_update]
+//public    : SC_IN (Taddress_t         )  **  in_UPDATE_UPT_RAS_ADDRESS              ; //[nb_inst_branch_update] RAS.ADDRESS
+//public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_UPT_RAS_PUSH                 ; //[nb_inst_branch_update] RAS.PUSH
+//public    : SC_IN (Tptr_t             )  **  in_UPDATE_UPT_RAS_INDEX                ; //[nb_inst_branch_update] RAS.INDEX
+//public    : SC_IN (Tcontrol_t         )  **  in_UPDATE_UPT_RAS_PREDICTION_IFETCH    ; //[nb_inst_branch_update] RAS.PREDICTION_IFETCH
 										      
     // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	      
   public    : SC_IN (Tdepth_t           )  **  in_DEPTH_UPT_NB_BRANCH                 ; //[nb_context]
   public    : SC_IN (Tdepth_t           )  **  in_DEPTH_UPT_TAIL                      ; //[nb_context]
+  public    : SC_OUT(Tdepth_t           )  ** out_DEPTH_NB_BRANCH                     ; //[nb_context]
+  public    : SC_OUT(Tdepth_t           )  ** out_DEPTH_TAIL                          ; //[nb_context]
 
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
@@ -196,4 +212,5 @@
     // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
   private   : uint32_t                         reg_PREDICT_PRIORITY;
+  private   : uint32_t                         reg_DECOD_PRIORITY;
 
     // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -233,6 +250,6 @@
 //public  : void        genMoore                  (void);
   public  : void        genMealy_predict          (void);
-//   public  : void        genMealy_decod            (void);
-//   public  : void        genMealy_update           (void);
+  public  : void        genMealy_decod            (void);
+  public  : void        genMealy_update           (void);
 #endif					       
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Parameters.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Parameters.cpp	(revision 82)
@@ -7,4 +7,5 @@
 
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Parameters.h"
+#include "Common/include/Max.h"
 
 namespace morpheo {
@@ -19,26 +20,36 @@
 #undef  FUNCTION
 #define FUNCTION "Prediction_unit_Glue::Parameters"
-  Parameters::Parameters (uint32_t   nb_context     ,
-			  uint32_t   size_address   ,
-			  uint32_t * nb_instruction ,
-			  uint32_t * size_depth     ,
-			  uint32_t   nb_inst_predict,
-			  uint32_t   nb_inst_decod  ,
-			  uint32_t   nb_inst_update )
+  Parameters::Parameters (uint32_t   nb_context            ,
+			  uint32_t   nb_decod_unit         ,
+// 			  uint32_t   nb_ooo_engine         ,
+			  uint32_t   size_address          ,
+			  uint32_t * nb_instruction        ,
+			  uint32_t * size_depth            ,
+			  uint32_t * nb_inst_decod         ,
+// 			  uint32_t * nb_inst_update        ,
+			  uint32_t   nb_inst_branch_predict,
+			  uint32_t   nb_inst_branch_decod  ,
+			  uint32_t   nb_inst_branch_update )
   {
     log_printf(FUNC,Prediction_unit_Glue,FUNCTION,"Begin");
 
-    _nb_context                = nb_context             ;
-    _size_address              = size_address           ;
-    _nb_instruction            = nb_instruction         ;
-    _size_depth                = size_depth             ;
-    _nb_inst_predict           = nb_inst_predict        ;
-    _nb_inst_decod             = nb_inst_decod          ;
-    _nb_inst_update            = nb_inst_update         ;
-
+    _nb_context                = nb_context     ;
+    _size_address              = size_address   ;
+    _nb_instruction            = nb_instruction ;
+    _size_depth                = size_depth     ;
+    _nb_decod_unit             = nb_decod_unit  ;
+    _nb_inst_decod             = nb_inst_decod  ;
+//     _nb_ooo_engine             = nb_ooo_engine  ;
+//     _nb_inst_update            = nb_inst_update ;
+    _nb_inst_branch_predict    = nb_inst_branch_predict;
+    _nb_inst_branch_decod      = nb_inst_branch_decod  ;
+    _nb_inst_branch_update     = nb_inst_branch_update ;
+      
     _size_context_id           = log2(_nb_context);
     _size_inst_ifetch_ptr      = new uint32_t [_nb_context];
+    _max_size_depth            = max<uint32_t>(_size_depth,_nb_context);
 
     _have_port_context_id      = (_size_context_id>0);
+    _have_port_max_depth       = (_max_size_depth>0);
     _have_port_depth           = new bool [_nb_context];
     _have_port_inst_ifetch_ptr = new bool [_nb_context];
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Parameters_msg_error.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Parameters_msg_error.cpp	(revision 82)
@@ -27,5 +27,5 @@
     Parameters_test test ("Prediction_unit_Glue");
 
-    if (_nb_inst_predict > _nb_context)
+    if (_nb_inst_branch_predict > _nb_context)
       test.error("nb_inst_predict must be <= nb_context\n");
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Parameters_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Parameters_print.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Parameters_print.cpp	(revision 82)
@@ -27,9 +27,14 @@
 
     xml.balise_open("prediction_unit_glue");
-    xml.singleton_begin("nb_context     "); xml.attribut("value",toString(_nb_context     )); xml.singleton_end();
-    xml.singleton_begin("size_address   "); xml.attribut("value",toString(_size_address   )); xml.singleton_end();
-    xml.singleton_begin("nb_inst_predict"); xml.attribut("value",toString(_nb_inst_predict)); xml.singleton_end();
-    xml.singleton_begin("nb_inst_decod  "); xml.attribut("value",toString(_nb_inst_decod  )); xml.singleton_end();
-    xml.singleton_begin("nb_inst_update "); xml.attribut("value",toString(_nb_inst_update )); xml.singleton_end();
+    xml.singleton_begin("nb_context            "); xml.attribut("value",toString(_nb_context            )); xml.singleton_end();
+    xml.singleton_begin("nb_decod_unit         "); xml.attribut("value",toString(_nb_decod_unit         )); xml.singleton_end();
+//     xml.singleton_begin("nb_ooo_engine         "); xml.attribut("value",toString(_nb_ooo_engine         )); xml.singleton_end();
+    xml.singleton_begin("size_address          "); xml.attribut("value",toString(_size_address          )); xml.singleton_end();
+    xml.singleton_begin("nb_inst_branch_predict"); xml.attribut("value",toString(_nb_inst_branch_predict)); xml.singleton_end();
+    xml.singleton_begin("nb_inst_branch_decod  "); xml.attribut("value",toString(_nb_inst_branch_decod  )); xml.singleton_end();
+    xml.singleton_begin("nb_inst_branch_update "); xml.attribut("value",toString(_nb_inst_branch_update )); xml.singleton_end();
+
+//     xml.singleton_begin("nb_inst_decod  "); xml.attribut("value",toString(_nb_inst_decod  )); xml.singleton_end();
+//     xml.singleton_begin("nb_inst_update "); xml.attribut("value",toString(_nb_inst_update )); xml.singleton_end();
     for (uint32_t i=0;i<_nb_context; i++)
       {
@@ -38,8 +43,27 @@
         xml.  attribut("id"  ,toString(i));
         xml. balise_open_end();
-	xml.  singleton_begin("nb_instruction "); xml.attribut("value",toString(_nb_instruction [i])); xml.singleton_end();
-	xml.  singleton_begin("size_depth     "); xml.attribut("value",toString(_size_depth     [i])); xml.singleton_end();
+	xml.  singleton_begin("nb_instruction        "); xml.attribut("value",toString(_nb_instruction        [i])); xml.singleton_end();
+	xml.  singleton_begin("size_depth            "); xml.attribut("value",toString(_size_depth            [i])); xml.singleton_end();
         xml. balise_close();
       }
+    for (uint32_t i=0;i<_nb_decod_unit; i++)
+      {
+        xml. balise_open_begin("component");
+        xml.  attribut("type","decod_unit");
+        xml.  attribut("id"  ,toString(i));
+        xml. balise_open_end();
+	xml.  singleton_begin("nb_inst_decod         "); xml.attribut("value",toString(_nb_inst_decod         [i])); xml.singleton_end();
+        xml. balise_close();
+      }
+//     for (uint32_t i=0;i<_nb_ooo_engine; i++)
+//       {
+//         xml. balise_open_begin("component");
+//         xml.  attribut("type","ooo_engine");
+//         xml.  attribut("id"  ,toString(i));
+//         xml. balise_open_end();
+// 	xml.  singleton_begin("nb_inst_update        "); xml.attribut("value",toString(_nb_inst_update        [i])); xml.singleton_end();
+//         xml. balise_close();
+//       }
+
     xml.balise_close();
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue.cpp	(revision 82)
@@ -92,5 +92,5 @@
 		      << (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
 	  }
-	for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+	for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	  {
 	    sensitive << (*( in_PREDICT_BTB_ACK              [i]))
@@ -110,4 +110,10 @@
 		      << (*( in_PREDICT_UPT_ACK              [i]));
 	  }
+	for (uint32_t i=0; i<_param->_nb_context; i++)
+	  {
+	    sensitive << (*(in_DEPTH_UPT_NB_BRANCH [i]));
+	    if (_param->_have_port_depth[i])
+	      sensitive << (*(in_DEPTH_UPT_TAIL      [i]));
+	  }
 
 # ifdef SYSTEMCASS_SPECIFIC
@@ -115,4 +121,10 @@
 	for (uint32_t x=0; x<_param->_nb_context; x++)
 	  {
+	    if (_param->_have_port_depth[x])
+	      {
+		(*(out_DEPTH_TAIL                          [x])) (*( in_DEPTH_UPT_TAIL                      [x]));
+	      }
+		(*(out_DEPTH_NB_BRANCH                     [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [x]));
+
 	    for (uint32_t i=0; i<_param->_nb_context; i++)
 	      {
@@ -121,6 +133,11 @@
 		(*(out_PREDICT_ACK                         [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_ACK                         [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_ACK                         [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_ACK                         [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_ACK                         [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -147,6 +164,11 @@
 		(*(out_PREDICT_PC_NEXT                     [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_PC_NEXT                     [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_PC_NEXT                     [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_PC_NEXT                     [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_PC_NEXT                     [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -173,6 +195,11 @@
 		(*(out_PREDICT_PC_NEXT_IS_DS_TAKE          [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_PC_NEXT_IS_DS_TAKE          [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_PC_NEXT_IS_DS_TAKE          [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_PC_NEXT_IS_DS_TAKE          [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_PC_NEXT_IS_DS_TAKE          [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -201,6 +228,11 @@
 		(*(out_PREDICT_INST_IFETCH_PTR             [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_INST_IFETCH_PTR             [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_INST_IFETCH_PTR             [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_INST_IFETCH_PTR             [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_INST_IFETCH_PTR             [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -228,6 +260,11 @@
 		(*(out_PREDICT_BRANCH_STATE                [x]))(*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_BRANCH_STATE                [x]))(*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_BRANCH_STATE                [x]))(*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_BRANCH_STATE                [x]))(*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_BRANCH_STATE                [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -256,6 +293,11 @@
 		(*(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth [i])
+		  {
+		(*(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -285,6 +327,11 @@
 		    (*(out_PREDICT_INSTRUCTION_ENABLE          [x][y])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		    (*(out_PREDICT_INSTRUCTION_ENABLE          [x][y])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-		  }
-		for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		    if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		      {
+		    (*(out_PREDICT_INSTRUCTION_ENABLE          [x][y])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		      }
+		    (*(out_PREDICT_INSTRUCTION_ENABLE          [x][y])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+		  }
+		for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 		  {
 		    (*(out_PREDICT_INSTRUCTION_ENABLE          [x][y])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -307,5 +354,5 @@
 	  }
 
-	for (uint32_t x=0; x<_param->_nb_inst_predict; x++)
+	for (uint32_t x=0; x<_param->_nb_inst_branch_predict; x++)
 	  {
 	    for (uint32_t i=0; i<_param->_nb_context; i++)
@@ -315,6 +362,11 @@
 		(*(out_PREDICT_BTB_VAL              [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_BTB_VAL              [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_BTB_VAL              [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_BTB_VAL              [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_BTB_VAL              [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -343,6 +395,11 @@
 		(*(out_PREDICT_BTB_CONTEXT_ID       [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_BTB_CONTEXT_ID       [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_BTB_CONTEXT_ID       [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_BTB_CONTEXT_ID       [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_BTB_CONTEXT_ID       [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -370,6 +427,11 @@
 		(*(out_PREDICT_BTB_ADDRESS          [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_BTB_ADDRESS          [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_BTB_ADDRESS          [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_BTB_ADDRESS          [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_BTB_ADDRESS          [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -396,6 +458,11 @@
 		(*(out_PREDICT_DIR_VAL              [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_DIR_VAL              [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_DIR_VAL              [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_DIR_VAL              [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_DIR_VAL              [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -422,6 +489,11 @@
 		(*(out_PREDICT_DIR_ADDRESS_SRC      [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_DIR_ADDRESS_SRC      [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_DIR_ADDRESS_SRC      [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_DIR_ADDRESS_SRC      [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_DIR_ADDRESS_SRC      [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -448,6 +520,11 @@
 		(*(out_PREDICT_DIR_STATIC           [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_DIR_STATIC           [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_DIR_STATIC           [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_DIR_STATIC           [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_DIR_STATIC           [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -474,6 +551,11 @@
 // 		(*(out_PREDICT_DIR_LAST_TAKE        [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 // 		(*(out_PREDICT_DIR_LAST_TAKE        [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
+// 		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+// 		  {
+// 		(*(out_PREDICT_DIR_LAST_TAKE        [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+// 		  }
+// 		(*(out_PREDICT_DIR_LAST_TAKE        [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
 // 	      }
-// 	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+// 	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 // 	      {
 // 		(*(out_PREDICT_DIR_LAST_TAKE        [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -500,6 +582,11 @@
 		(*(out_PREDICT_RAS_VAL              [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_RAS_VAL              [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_RAS_VAL              [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_RAS_VAL              [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_RAS_VAL              [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -528,6 +615,11 @@
 		(*(out_PREDICT_RAS_CONTEXT_ID       [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_RAS_CONTEXT_ID       [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_RAS_CONTEXT_ID       [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_RAS_CONTEXT_ID       [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_RAS_CONTEXT_ID       [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -555,6 +647,11 @@
 		(*(out_PREDICT_RAS_PUSH             [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_RAS_PUSH             [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_RAS_PUSH             [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_RAS_PUSH             [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_RAS_PUSH             [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -581,6 +678,11 @@
 		(*(out_PREDICT_RAS_ADDRESS_PUSH     [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_RAS_ADDRESS_PUSH     [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_RAS_ADDRESS_PUSH     [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_RAS_ADDRESS_PUSH     [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_RAS_ADDRESS_PUSH     [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -607,6 +709,11 @@
 		(*(out_PREDICT_UPT_VAL              [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_UPT_VAL              [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_UPT_VAL              [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_UPT_VAL              [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_UPT_VAL              [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -635,6 +742,11 @@
 		(*(out_PREDICT_UPT_CONTEXT_ID       [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_UPT_CONTEXT_ID       [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_UPT_CONTEXT_ID       [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_UPT_CONTEXT_ID       [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_UPT_CONTEXT_ID       [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -662,6 +774,11 @@
 		(*(out_PREDICT_UPT_BTB_ADDRESS_SRC  [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_UPT_BTB_ADDRESS_SRC  [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_UPT_BTB_ADDRESS_SRC  [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_UPT_BTB_ADDRESS_SRC  [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_UPT_BTB_ADDRESS_SRC  [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -688,6 +805,11 @@
 		(*(out_PREDICT_UPT_BTB_ADDRESS_DEST [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_UPT_BTB_ADDRESS_DEST [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_UPT_BTB_ADDRESS_DEST [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_UPT_BTB_ADDRESS_DEST [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_UPT_BTB_ADDRESS_DEST [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -714,6 +836,11 @@
 		(*(out_PREDICT_UPT_BTB_CONDITION    [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_UPT_BTB_CONDITION    [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_UPT_BTB_CONDITION    [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_UPT_BTB_CONDITION    [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_UPT_BTB_CONDITION    [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -740,6 +867,11 @@
 		(*(out_PREDICT_UPT_BTB_LAST_TAKE    [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_UPT_BTB_LAST_TAKE    [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_UPT_BTB_LAST_TAKE    [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_UPT_BTB_LAST_TAKE    [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_UPT_BTB_LAST_TAKE    [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -766,6 +898,11 @@
 		(*(out_PREDICT_UPT_BTB_IS_ACCURATE  [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_UPT_BTB_IS_ACCURATE  [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_UPT_BTB_IS_ACCURATE  [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_UPT_BTB_IS_ACCURATE  [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_UPT_BTB_IS_ACCURATE  [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -792,6 +929,11 @@
 // 		(*(out_PREDICT_UPT_DIR_HISTORY      [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 // 		(*(out_PREDICT_UPT_DIR_HISTORY      [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
+// 		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+// 		  {
+// 		(*(out_PREDICT_UPT_DIR_HISTORY      [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+// 		  }
+// 		(*(out_PREDICT_UPT_DIR_HISTORY      [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
 // 	      }
-// 	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+// 	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 // 	      {
 // 		(*(out_PREDICT_UPT_DIR_HISTORY      [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -818,6 +960,11 @@
 		(*(out_PREDICT_UPT_RAS_ADDRESS      [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 		(*(out_PREDICT_UPT_RAS_ADDRESS      [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
-	      }
-	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+		  {
+		(*(out_PREDICT_UPT_RAS_ADDRESS      [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+		  }
+		(*(out_PREDICT_UPT_RAS_ADDRESS      [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
+	      }
+	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 	      {
 		(*(out_PREDICT_UPT_RAS_ADDRESS      [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -844,6 +991,11 @@
 // 		(*(out_PREDICT_UPT_RAS_INDEX        [x])) (*( in_PREDICT_PC_CURRENT                  [i]));
 // 		(*(out_PREDICT_UPT_RAS_INDEX        [x])) (*( in_PREDICT_PC_CURRENT_IS_DS_TAKE       [i]));
+// 		if (_param->_have_port_depth[x] and _param->_have_port_depth[i])
+// 		  {
+// 		(*(out_PREDICT_UPT_RAS_INDEX        [x])) (*( in_DEPTH_UPT_TAIL                      [i]));
+// 		  }
+// 		(*(out_PREDICT_UPT_RAS_INDEX        [x])) (*( in_DEPTH_UPT_NB_BRANCH                 [i]));
 // 	      }
-// 	    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+// 	    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
 // 	      {
 // 		(*(out_PREDICT_UPT_RAS_INDEX        [x])) (*( in_PREDICT_BTB_ACK              [i]));
@@ -865,5 +1017,734 @@
 	  }
 # endif    
+
+	log_printf(INFO,Prediction_unit_Glue,FUNCTION,"Method - genMealy_decod");
+
+	SC_METHOD (genMealy_decod);
+	dont_initialize ();
+	sensitive << (*(in_CLOCK)).neg(); // use internal register
+	for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+	  for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+	    {
+	      sensitive << (*(in_DECOD_VAL                         [i][j])) 
+			<< (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j])) 
+			<< (*(in_DECOD_BRANCH_STATE                [i][j])) 
+			<< (*(in_DECOD_BRANCH_CONDITION            [i][j])) 
+			<< (*(in_DECOD_BRANCH_DIRECTION            [i][j])) 
+			<< (*(in_DECOD_ADDRESS_SRC                 [i][j])) 
+			<< (*(in_DECOD_ADDRESS_DEST                [i][j]));
+
+	      if (_param->_have_port_context_id)
+		sensitive << (*(in_DECOD_CONTEXT_ID                  [i][j]));
+	      if (_param->_have_port_max_depth)
+		sensitive << (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+	    }
+	for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+	  {
+	    sensitive << (*(in_DECOD_BTB_ACK                     [i]   )) 
+		      << (*(in_DECOD_RAS_ACK                     [i]   )) 
+		      << (*(in_DECOD_RAS_HIT                     [i]   ))  
+		      << (*(in_DECOD_RAS_ADDRESS_POP             [i]   )) 
+// 		      << (*(in_DECOD_RAS_INDEX                   [i]   )) 
+		      << (*(in_DECOD_UPT_ACK                     [i]   )) ;
+	  }
+
+# ifdef SYSTEMCASS_SPECIFIC
+	// List dependency information
 	
+	for (uint32_t x=0; x<_param->_nb_decod_unit; x++)
+	  for (uint32_t y=0; y<_param->_nb_inst_decod[x]; y++)
+	    {
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_ACK                      [x][y])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_ACK                      [x][y])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_ACK                      [x][y])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_ACK                      [x][y])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+  		    (*(out_DECOD_ACK                      [x][y])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_ACK                      [x][y])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_ACK                      [x][y])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_ACK                      [x][y])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_ACK                      [x][y])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_ACK                      [x][y])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_ACK                      [x][y])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_ACK                      [x][y])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_ACK                      [x][y])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_ACK                      [x][y])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_ACK                      [x][y])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		}
+	    }
+
+	for (uint32_t x=0; x<_param->_nb_inst_branch_decod; x++)
+	  {
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_BTB_VAL                  [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_BTB_VAL                  [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_BTB_VAL                  [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_BTB_VAL                  [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_BTB_VAL                  [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_BTB_VAL                  [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_BTB_VAL                  [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_BTB_VAL                  [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_BTB_VAL                  [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_BTB_VAL                  [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_VAL                  [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_VAL                  [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_BTB_VAL                  [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_BTB_VAL                  [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_BTB_VAL                  [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      if (_param->_have_port_context_id)
+		{
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_BTB_CONTEXT_ID           [x])) (*(in_DECOD_VAL                         [i][j]));
+		    (*(out_DECOD_BTB_CONTEXT_ID           [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_BTB_CONTEXT_ID           [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_BTB_CONTEXT_ID           [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_BTB_CONTEXT_ID           [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_BTB_CONTEXT_ID           [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_BTB_CONTEXT_ID           [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_BTB_CONTEXT_ID           [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_BTB_CONTEXT_ID           [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_BTB_CONTEXT_ID           [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_CONTEXT_ID           [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_CONTEXT_ID           [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_BTB_CONTEXT_ID           [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_BTB_CONTEXT_ID           [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_BTB_CONTEXT_ID           [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		}
+		}
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_BTB_ADDRESS_SRC          [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_BTB_ADDRESS_SRC          [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_BTB_ADDRESS_SRC          [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_BTB_ADDRESS_SRC          [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_BTB_ADDRESS_SRC          [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_BTB_ADDRESS_SRC          [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_BTB_ADDRESS_SRC          [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_BTB_ADDRESS_SRC          [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_BTB_ADDRESS_SRC          [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_BTB_ADDRESS_SRC          [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_ADDRESS_SRC          [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_ADDRESS_SRC          [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_BTB_ADDRESS_SRC          [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_BTB_ADDRESS_SRC          [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_BTB_ADDRESS_SRC          [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_BTB_ADDRESS_DEST         [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_BTB_ADDRESS_DEST         [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_BTB_ADDRESS_DEST         [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_BTB_ADDRESS_DEST         [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_BTB_ADDRESS_DEST         [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_BTB_ADDRESS_DEST         [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_BTB_ADDRESS_DEST         [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_BTB_ADDRESS_DEST         [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_BTB_ADDRESS_DEST         [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_BTB_ADDRESS_DEST         [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_ADDRESS_DEST         [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_ADDRESS_DEST         [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_BTB_ADDRESS_DEST         [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_BTB_ADDRESS_DEST         [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_BTB_ADDRESS_DEST         [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_BTB_CONDITION            [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_BTB_CONDITION            [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_BTB_CONDITION            [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_BTB_CONDITION            [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_BTB_CONDITION            [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_BTB_CONDITION            [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_BTB_CONDITION            [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_BTB_CONDITION            [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_BTB_CONDITION            [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_BTB_CONDITION            [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_CONDITION            [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_CONDITION            [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_BTB_CONDITION            [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_BTB_CONDITION            [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_BTB_CONDITION            [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_BTB_LAST_TAKE            [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_BTB_LAST_TAKE            [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_BTB_LAST_TAKE            [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_BTB_LAST_TAKE            [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_BTB_LAST_TAKE            [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_BTB_LAST_TAKE            [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_BTB_LAST_TAKE            [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_BTB_LAST_TAKE            [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_BTB_LAST_TAKE            [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_BTB_LAST_TAKE            [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_LAST_TAKE            [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_LAST_TAKE            [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_BTB_LAST_TAKE            [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_BTB_LAST_TAKE            [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_BTB_LAST_TAKE            [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_BTB_MISS_PREDICTION      [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_BTB_MISS_PREDICTION      [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_BTB_MISS_PREDICTION      [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_BTB_MISS_PREDICTION      [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_BTB_MISS_PREDICTION      [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_BTB_MISS_PREDICTION      [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_BTB_MISS_PREDICTION      [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_BTB_MISS_PREDICTION      [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_BTB_MISS_PREDICTION      [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_BTB_MISS_PREDICTION      [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_MISS_PREDICTION      [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_MISS_PREDICTION      [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_BTB_MISS_PREDICTION      [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_BTB_MISS_PREDICTION      [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_BTB_MISS_PREDICTION      [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_BTB_IS_ACCURATE          [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_BTB_IS_ACCURATE          [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_BTB_IS_ACCURATE          [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_BTB_IS_ACCURATE          [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_BTB_IS_ACCURATE          [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_BTB_IS_ACCURATE          [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_BTB_IS_ACCURATE          [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_BTB_IS_ACCURATE          [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_BTB_IS_ACCURATE          [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_BTB_IS_ACCURATE          [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_IS_ACCURATE          [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_BTB_IS_ACCURATE          [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_BTB_IS_ACCURATE          [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_BTB_IS_ACCURATE          [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_BTB_IS_ACCURATE          [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_RAS_VAL                  [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_RAS_VAL                  [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_RAS_VAL                  [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_RAS_VAL                  [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_RAS_VAL                  [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_RAS_VAL                  [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_RAS_VAL                  [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_RAS_VAL                  [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_RAS_VAL                  [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_RAS_VAL                  [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_RAS_VAL                  [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_RAS_VAL                  [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_RAS_VAL                  [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_RAS_VAL                  [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_RAS_VAL                  [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      if (_param->_have_port_context_id)
+		{   
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_RAS_CONTEXT_ID           [x])) (*(in_DECOD_VAL                         [i][j])); 
+		    (*(out_DECOD_RAS_CONTEXT_ID           [x])) (*(in_DECOD_CONTEXT_ID                  [i][j])); 
+		    (*(out_DECOD_RAS_CONTEXT_ID           [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j])); 
+		    (*(out_DECOD_RAS_CONTEXT_ID           [x])) (*(in_DECOD_BRANCH_STATE                [i][j])); 
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_RAS_CONTEXT_ID           [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 
+		    (*(out_DECOD_RAS_CONTEXT_ID           [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j])); 
+		    (*(out_DECOD_RAS_CONTEXT_ID           [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j])); 
+		    (*(out_DECOD_RAS_CONTEXT_ID           [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j])); 
+		    (*(out_DECOD_RAS_CONTEXT_ID           [x])) (*(in_DECOD_ADDRESS_DEST                [i][j])); 
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_RAS_CONTEXT_ID           [x])) (*(in_DECOD_BTB_ACK                     [i]   )); 
+		    (*(out_DECOD_RAS_CONTEXT_ID           [x])) (*(in_DECOD_RAS_ACK                     [i]   )); 
+		    (*(out_DECOD_RAS_CONTEXT_ID           [x])) (*(in_DECOD_RAS_HIT                     [i]   )); 
+		    (*(out_DECOD_RAS_CONTEXT_ID           [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   )); 
+// 		    (*(out_DECOD_RAS_CONTEXT_ID           [x])) (*(in_DECOD_RAS_INDEX                   [i]   )); 
+		    (*(out_DECOD_RAS_CONTEXT_ID           [x])) (*(in_DECOD_UPT_ACK                     [i]   )); 
+		  }
+		}
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_RAS_PUSH                 [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_RAS_PUSH                 [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_RAS_PUSH                 [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_RAS_PUSH                 [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_RAS_PUSH                 [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_RAS_PUSH                 [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_RAS_PUSH                 [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_RAS_PUSH                 [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_RAS_PUSH                 [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_RAS_PUSH                 [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_RAS_PUSH                 [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_RAS_PUSH                 [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_RAS_PUSH                 [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_RAS_PUSH                 [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_RAS_PUSH                 [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_RAS_ADDRESS_PUSH         [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_RAS_ADDRESS_PUSH         [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_RAS_ADDRESS_PUSH         [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_RAS_ADDRESS_PUSH         [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_RAS_ADDRESS_PUSH         [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_RAS_ADDRESS_PUSH         [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_RAS_ADDRESS_PUSH         [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_RAS_ADDRESS_PUSH         [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_RAS_ADDRESS_PUSH         [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_RAS_ADDRESS_PUSH         [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_RAS_ADDRESS_PUSH         [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_RAS_ADDRESS_PUSH         [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_RAS_ADDRESS_PUSH         [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_RAS_ADDRESS_PUSH         [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_RAS_ADDRESS_PUSH         [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_RAS_MISS_PREDICTION      [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_RAS_MISS_PREDICTION      [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_RAS_MISS_PREDICTION      [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_RAS_MISS_PREDICTION      [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_RAS_MISS_PREDICTION      [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_RAS_MISS_PREDICTION      [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_RAS_MISS_PREDICTION      [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_RAS_MISS_PREDICTION      [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_RAS_MISS_PREDICTION      [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_RAS_MISS_PREDICTION      [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_RAS_MISS_PREDICTION      [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_RAS_MISS_PREDICTION      [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_RAS_MISS_PREDICTION      [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_RAS_MISS_PREDICTION      [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_RAS_MISS_PREDICTION      [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_UPT_VAL                  [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_UPT_VAL                  [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_UPT_VAL                  [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_UPT_VAL                  [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_UPT_VAL                  [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_UPT_VAL                  [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_UPT_VAL                  [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_UPT_VAL                  [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_UPT_VAL                  [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_UPT_VAL                  [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_VAL                  [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_VAL                  [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_UPT_VAL                  [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_UPT_VAL                  [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_UPT_VAL                  [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      if (_param->_have_port_context_id)
+		{
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_UPT_CONTEXT_ID           [x])) (*(in_DECOD_VAL                         [i][j]));
+		    (*(out_DECOD_UPT_CONTEXT_ID           [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_UPT_CONTEXT_ID           [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_UPT_CONTEXT_ID           [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_UPT_CONTEXT_ID           [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_UPT_CONTEXT_ID           [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_UPT_CONTEXT_ID           [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_UPT_CONTEXT_ID           [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_UPT_CONTEXT_ID           [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_UPT_CONTEXT_ID           [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_CONTEXT_ID           [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_CONTEXT_ID           [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_UPT_CONTEXT_ID           [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_UPT_CONTEXT_ID           [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_UPT_CONTEXT_ID           [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+		}
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_UPT_BTB_ADDRESS_SRC      [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_UPT_BTB_ADDRESS_SRC      [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_SRC      [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_SRC      [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_UPT_BTB_ADDRESS_SRC      [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_SRC      [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_SRC      [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_SRC      [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_SRC      [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_UPT_BTB_ADDRESS_SRC      [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_SRC      [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_SRC      [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_SRC      [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_UPT_BTB_ADDRESS_SRC      [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_SRC      [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_UPT_BTB_ADDRESS_DEST     [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_UPT_BTB_ADDRESS_DEST     [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_DEST     [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_DEST     [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_UPT_BTB_ADDRESS_DEST     [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_DEST     [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_DEST     [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_DEST     [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_DEST     [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_UPT_BTB_ADDRESS_DEST     [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_DEST     [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_DEST     [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_DEST     [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_UPT_BTB_ADDRESS_DEST     [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_UPT_BTB_ADDRESS_DEST     [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_UPT_BTB_CONDITION        [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_UPT_BTB_CONDITION        [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_UPT_BTB_CONDITION        [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_UPT_BTB_CONDITION        [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_UPT_BTB_CONDITION        [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_UPT_BTB_CONDITION        [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_UPT_BTB_CONDITION        [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_UPT_BTB_CONDITION        [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_UPT_BTB_CONDITION        [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_UPT_BTB_CONDITION        [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_BTB_CONDITION        [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_BTB_CONDITION        [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_UPT_BTB_CONDITION        [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_UPT_BTB_CONDITION        [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_UPT_BTB_CONDITION        [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_UPT_BTB_LAST_TAKE        [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_UPT_BTB_LAST_TAKE        [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_UPT_BTB_LAST_TAKE        [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_UPT_BTB_LAST_TAKE        [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_UPT_BTB_LAST_TAKE        [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_UPT_BTB_LAST_TAKE        [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_UPT_BTB_LAST_TAKE        [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_UPT_BTB_LAST_TAKE        [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_UPT_BTB_LAST_TAKE        [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_UPT_BTB_LAST_TAKE        [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_BTB_LAST_TAKE        [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_BTB_LAST_TAKE        [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_UPT_BTB_LAST_TAKE        [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_UPT_BTB_LAST_TAKE        [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_UPT_BTB_LAST_TAKE        [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_UPT_RAS_ADDRESS          [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_UPT_RAS_ADDRESS          [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_UPT_RAS_ADDRESS          [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_UPT_RAS_ADDRESS          [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_UPT_RAS_ADDRESS          [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_UPT_RAS_ADDRESS          [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_UPT_RAS_ADDRESS          [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_UPT_RAS_ADDRESS          [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_UPT_RAS_ADDRESS          [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_UPT_RAS_ADDRESS          [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_RAS_ADDRESS          [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_RAS_ADDRESS          [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_UPT_RAS_ADDRESS          [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_UPT_RAS_ADDRESS          [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_UPT_RAS_ADDRESS          [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		  }
+
+// 	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+// 		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+// 		  {
+// 		    (*(out_DECOD_UPT_RAS_INDEX            [x])) (*(in_DECOD_VAL                         [i][j]));
+//                  if (_param->_have_port_context_id)
+// 		    (*(out_DECOD_UPT_RAS_INDEX            [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+// 		    (*(out_DECOD_UPT_RAS_INDEX            [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+// 		    (*(out_DECOD_UPT_RAS_INDEX            [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+// 		    if (_param->_have_port_max_depth)
+// 		    (*(out_DECOD_UPT_RAS_INDEX            [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+// 		    (*(out_DECOD_UPT_RAS_INDEX            [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+// 		    (*(out_DECOD_UPT_RAS_INDEX            [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+// 		    (*(out_DECOD_UPT_RAS_INDEX            [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+// 		    (*(out_DECOD_UPT_RAS_INDEX            [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+// 		  }
+// 	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+// 		{
+// 		    (*(out_DECOD_UPT_RAS_INDEX            [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+// 		    (*(out_DECOD_UPT_RAS_INDEX            [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+// 		    (*(out_DECOD_UPT_RAS_INDEX            [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+// 		    (*(out_DECOD_UPT_RAS_INDEX            [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_UPT_RAS_INDEX            [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+// 		    (*(out_DECOD_UPT_RAS_INDEX            [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+// 		  }
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_UPT_MISS_IFETCH          [x])) (*(in_DECOD_VAL                         [i][j])); 
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_UPT_MISS_IFETCH          [x])) (*(in_DECOD_CONTEXT_ID                  [i][j])); 
+		    (*(out_DECOD_UPT_MISS_IFETCH          [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j])); 
+		    (*(out_DECOD_UPT_MISS_IFETCH          [x])) (*(in_DECOD_BRANCH_STATE                [i][j])); 
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_UPT_MISS_IFETCH          [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 
+		    (*(out_DECOD_UPT_MISS_IFETCH          [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j])); 
+		    (*(out_DECOD_UPT_MISS_IFETCH          [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j])); 
+		    (*(out_DECOD_UPT_MISS_IFETCH          [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j])); 
+		    (*(out_DECOD_UPT_MISS_IFETCH          [x])) (*(in_DECOD_ADDRESS_DEST                [i][j])); 
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_UPT_MISS_IFETCH          [x])) (*(in_DECOD_BTB_ACK                     [i]   )); 
+		    (*(out_DECOD_UPT_MISS_IFETCH          [x])) (*(in_DECOD_RAS_ACK                     [i]   )); 
+		    (*(out_DECOD_UPT_MISS_IFETCH          [x])) (*(in_DECOD_RAS_HIT                     [i]   )); 
+		    (*(out_DECOD_UPT_MISS_IFETCH          [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   )); 
+// 		    (*(out_DECOD_UPT_MISS_IFETCH          [x])) (*(in_DECOD_RAS_INDEX                   [i]   )); 
+		    (*(out_DECOD_UPT_MISS_IFETCH          [x])) (*(in_DECOD_UPT_ACK                     [i]   )); 
+		  }
+
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_UPT_MISS_DECOD           [x])) (*(in_DECOD_VAL                         [i][j])); 
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_UPT_MISS_DECOD           [x])) (*(in_DECOD_CONTEXT_ID                  [i][j])); 
+		    (*(out_DECOD_UPT_MISS_DECOD           [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j])); 
+		    (*(out_DECOD_UPT_MISS_DECOD           [x])) (*(in_DECOD_BRANCH_STATE                [i][j])); 
+		    if (_param->_have_port_max_depth)
+		    (*(out_DECOD_UPT_MISS_DECOD           [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j])); 
+		    (*(out_DECOD_UPT_MISS_DECOD           [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j])); 
+		    (*(out_DECOD_UPT_MISS_DECOD           [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j])); 
+		    (*(out_DECOD_UPT_MISS_DECOD           [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j])); 
+		    (*(out_DECOD_UPT_MISS_DECOD           [x])) (*(in_DECOD_ADDRESS_DEST                [i][j])); 
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_UPT_MISS_DECOD           [x])) (*(in_DECOD_BTB_ACK                     [i]   )); 
+		    (*(out_DECOD_UPT_MISS_DECOD           [x])) (*(in_DECOD_RAS_ACK                     [i]   )); 
+		    (*(out_DECOD_UPT_MISS_DECOD           [x])) (*(in_DECOD_RAS_HIT                     [i]   )); 
+		    (*(out_DECOD_UPT_MISS_DECOD           [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   )); 
+// 		    (*(out_DECOD_UPT_MISS_DECOD           [x])) (*(in_DECOD_RAS_INDEX                   [i]   )); 
+		    (*(out_DECOD_UPT_MISS_DECOD           [x])) (*(in_DECOD_UPT_ACK                     [i]   )); 
+		  }
+
+	      if (_param->_have_port_max_depth)
+		{
+	      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+		for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+		  {
+		    (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_VAL                         [i][j]));
+		    if (_param->_have_port_context_id)
+		    (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_CONTEXT_ID                  [i][j]));
+		    (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_MATCH_INST_IFETCH_PTR       [i][j]));
+		    (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_BRANCH_STATE                [i][j]));
+		    (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [i][j]));
+		    (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_BRANCH_CONDITION            [i][j]));
+		    (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_BRANCH_DIRECTION            [i][j]));
+		    (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_ADDRESS_SRC                 [i][j]));
+		    (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_ADDRESS_DEST                [i][j]));
+		  }
+	      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+		{
+		    (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_BTB_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_RAS_ACK                     [i]   ));
+		    (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_RAS_HIT                     [i]   ));
+		    (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_RAS_ADDRESS_POP             [i]   ));
+// 		    (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_RAS_INDEX                   [i]   ));
+		    (*(out_DECOD_UPT_UPDATE_PREDICTION_ID [x])) (*(in_DECOD_UPT_ACK                     [i]   ));
+		}
+		}
+	  }
+# endif
+
+	log_printf(INFO,Prediction_unit_Glue,FUNCTION,"Method - genMealy_update");
+
+	SC_METHOD (genMealy_update);
+	dont_initialize ();
+// 	sensitive << (*(in_CLOCK)).neg(); // don't use internal register
+	for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++)
+	  sensitive << (*(in_UPDATE_BTB_ACK           [i]))
+		    << (*(in_UPDATE_DIR_ACK           [i]))
+		    << (*(in_UPDATE_RAS_ACK           [i]))
+		    << (*(in_UPDATE_UPT_VAL           [i]))
+		    << (*(in_UPDATE_UPT_BTB_VAL       [i]))
+		    << (*(in_UPDATE_UPT_DIR_VAL       [i]))
+		    << (*(in_UPDATE_UPT_RAS_VAL       [i]));
+
+# ifdef SYSTEMCASS_SPECIFIC
+	// List dependency information
+	for (uint32_t x=0; x<_param->_nb_inst_branch_update; x++)
+// 	  for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++)
+	    {
+	      uint32_t i=x;
+
+	      (*(out_UPDATE_BTB_VAL           [x])) (*(in_UPDATE_BTB_ACK           [i]));
+	      (*(out_UPDATE_BTB_VAL           [x])) (*(in_UPDATE_DIR_ACK           [i]));
+	      (*(out_UPDATE_BTB_VAL           [x])) (*(in_UPDATE_RAS_ACK           [i]));
+	      (*(out_UPDATE_BTB_VAL           [x])) (*(in_UPDATE_UPT_VAL           [i]));
+	      (*(out_UPDATE_BTB_VAL           [x])) (*(in_UPDATE_UPT_BTB_VAL       [i]));
+	      (*(out_UPDATE_BTB_VAL           [x])) (*(in_UPDATE_UPT_DIR_VAL       [i]));
+	      (*(out_UPDATE_BTB_VAL           [x])) (*(in_UPDATE_UPT_RAS_VAL       [i]));
+
+	      (*(out_UPDATE_DIR_VAL           [x])) (*(in_UPDATE_BTB_ACK           [i]));
+	      (*(out_UPDATE_DIR_VAL           [x])) (*(in_UPDATE_DIR_ACK           [i]));
+	      (*(out_UPDATE_DIR_VAL           [x])) (*(in_UPDATE_RAS_ACK           [i]));
+	      (*(out_UPDATE_DIR_VAL           [x])) (*(in_UPDATE_UPT_VAL           [i]));
+	      (*(out_UPDATE_DIR_VAL           [x])) (*(in_UPDATE_UPT_BTB_VAL       [i]));
+	      (*(out_UPDATE_DIR_VAL           [x])) (*(in_UPDATE_UPT_DIR_VAL       [i]));
+	      (*(out_UPDATE_DIR_VAL           [x])) (*(in_UPDATE_UPT_RAS_VAL       [i]));
+
+	      (*(out_UPDATE_RAS_VAL           [x])) (*(in_UPDATE_BTB_ACK           [i]));
+	      (*(out_UPDATE_RAS_VAL           [x])) (*(in_UPDATE_DIR_ACK           [i]));
+	      (*(out_UPDATE_RAS_VAL           [x])) (*(in_UPDATE_RAS_ACK           [i]));
+	      (*(out_UPDATE_RAS_VAL           [x])) (*(in_UPDATE_UPT_VAL           [i]));
+	      (*(out_UPDATE_RAS_VAL           [x])) (*(in_UPDATE_UPT_BTB_VAL       [i]));
+	      (*(out_UPDATE_RAS_VAL           [x])) (*(in_UPDATE_UPT_DIR_VAL       [i]));
+	      (*(out_UPDATE_RAS_VAL           [x])) (*(in_UPDATE_UPT_RAS_VAL       [i]));
+
+	      (*(out_UPDATE_UPT_ACK           [x])) (*(in_UPDATE_BTB_ACK           [i]));
+	      (*(out_UPDATE_UPT_ACK           [x])) (*(in_UPDATE_DIR_ACK           [i]));
+	      (*(out_UPDATE_UPT_ACK           [x])) (*(in_UPDATE_RAS_ACK           [i]));
+	      (*(out_UPDATE_UPT_ACK           [x])) (*(in_UPDATE_UPT_VAL           [i]));
+	      (*(out_UPDATE_UPT_ACK           [x])) (*(in_UPDATE_UPT_BTB_VAL       [i]));
+	      (*(out_UPDATE_UPT_ACK           [x])) (*(in_UPDATE_UPT_DIR_VAL       [i]));
+	      (*(out_UPDATE_UPT_ACK           [x])) (*(in_UPDATE_UPT_RAS_VAL       [i]));
+	    }
+# endif
 #endif
       }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_allocation.cpp	(revision 82)
@@ -16,6 +16,4 @@
 namespace prediction_unit {
 namespace prediction_unit_glue {
-
-
 
 #undef  FUNCTION
@@ -79,5 +77,5 @@
       
       {
-	ALLOC1_INTERFACE("predict_btb",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_predict);
+	ALLOC1_INTERFACE("predict_btb",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_branch_predict);
 	
 	ALLOC1_VALACK_OUT(out_PREDICT_BTB_VAL         ,VAL);
@@ -94,5 +92,5 @@
       
       {
-	ALLOC1_INTERFACE("predict_dir",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_predict);
+	ALLOC1_INTERFACE("predict_dir",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_branch_predict);
 	
 	ALLOC1_VALACK_OUT(out_PREDICT_DIR_VAL        ,VAL);
@@ -106,5 +104,5 @@
       
       {
-	ALLOC1_INTERFACE("predict_ras",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_predict);
+	ALLOC1_INTERFACE("predict_ras",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_branch_predict);
 	
 	ALLOC1_VALACK_OUT(out_PREDICT_RAS_VAL         ,VAL);
@@ -119,5 +117,5 @@
       
       {
-	ALLOC1_INTERFACE("predict_upt",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_predict);
+	ALLOC1_INTERFACE("predict_upt",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_branch_predict);
 	
 	ALLOC1_VALACK_OUT(out_PREDICT_UPT_VAL             ,VAL);
@@ -135,11 +133,143 @@
     }
     
+    // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	      
+    {
+      {
+	ALLOC2_INTERFACE("decod",IN,SOUTH,"Interface with decod unit",_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_interface_it1]);
+	
+	_ALLOC2_VALACK_IN ( in_DECOD_VAL                        ,VAL,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_VALACK_OUT(out_DECOD_ACK                        ,ACK,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_CONTEXT_ID                 ,"context_id"                 ,Tcontext_t         ,_param->_size_context_id      ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_MATCH_INST_IFETCH_PTR      ,"match_inst_ifetch_ptr"      ,Tcontrol_t         ,1                             ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_STATE               ,"branch_state"               ,Tbranch_state_t    ,_param->_size_branch_state    ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_UPDATE_PREDICTION_ID,"branch_update_prediction_id",Tprediction_ptr_t  ,_param->_max_size_depth       ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_CONDITION           ,"branch_condition"           ,Tbranch_condition_t,_param->_size_branch_condition,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_DIRECTION           ,"branch_direction"           ,Tcontrol_t         ,1                             ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_ADDRESS_SRC                ,"address_src"                ,Taddress_t         ,_param->_size_address         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_ADDRESS_DEST               ,"address_dest"               ,Taddress_t         ,_param->_size_address         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+      }
+
+      {
+	ALLOC1_INTERFACE("decod_btb",OUT,NORTH,"Interface with decod unit",_param->_nb_inst_branch_decod);
+
+	ALLOC1_VALACK_OUT(out_DECOD_BTB_VAL            ,VAL);
+	ALLOC1_VALACK_IN ( in_DECOD_BTB_ACK            ,ACK);
+	ALLOC1_SIGNAL_OUT(out_DECOD_BTB_CONTEXT_ID     ,"context_id"     ,Tcontext_t         ,_param->_size_context_id);
+	ALLOC1_SIGNAL_OUT(out_DECOD_BTB_ADDRESS_SRC    ,"address_src"    ,Taddress_t         ,_param->_size_address);
+	ALLOC1_SIGNAL_OUT(out_DECOD_BTB_ADDRESS_DEST   ,"address_dest"   ,Taddress_t         ,_param->_size_address);
+	ALLOC1_SIGNAL_OUT(out_DECOD_BTB_CONDITION      ,"condition"      ,Tbranch_condition_t,_param->_size_branch_condition);
+	ALLOC1_SIGNAL_OUT(out_DECOD_BTB_LAST_TAKE      ,"last_take"      ,Tcontrol_t         ,1);
+	ALLOC1_SIGNAL_OUT(out_DECOD_BTB_MISS_PREDICTION,"miss_prediction",Tcontrol_t         ,1);
+	ALLOC1_SIGNAL_OUT(out_DECOD_BTB_IS_ACCURATE    ,"is_accurate"    ,Tcontrol_t         ,1);
+      }
+
+      {
+	ALLOC1_INTERFACE("decod_ras",OUT,NORTH,"Interface with decod unit",_param->_nb_inst_branch_decod);
+									              
+	ALLOC1_VALACK_OUT(out_DECOD_RAS_VAL            ,VAL);
+	ALLOC1_VALACK_IN ( in_DECOD_RAS_ACK            ,ACK);
+	ALLOC1_SIGNAL_OUT(out_DECOD_RAS_CONTEXT_ID     ,"context_id"     ,Tcontext_t,_param->_size_context_id); 
+	ALLOC1_SIGNAL_IN ( in_DECOD_RAS_HIT            ,"hit"            ,Tcontrol_t,1); 
+	ALLOC1_SIGNAL_OUT(out_DECOD_RAS_PUSH           ,"push"           ,Tcontrol_t,1);
+	ALLOC1_SIGNAL_OUT(out_DECOD_RAS_ADDRESS_PUSH   ,"address_push"   ,Taddress_t,_param->_size_address);
+	ALLOC1_SIGNAL_IN ( in_DECOD_RAS_ADDRESS_POP    ,"address_pop"    ,Taddress_t,_param->_size_address);
+// 	ALLOC1_SIGNAL_IN ( in_DECOD_RAS_INDEX          ,"index"          ,Tptr_t    ,_param->_size_ras_index);
+	ALLOC1_SIGNAL_OUT(out_DECOD_RAS_MISS_PREDICTION,"miss_prediction",Tcontrol_t,1);
+      }
+
+      {
+	ALLOC1_INTERFACE("decod_upt",OUT,NORTH,"Interface with decod unit",_param->_nb_inst_branch_decod);
+										      
+	ALLOC1_VALACK_OUT(out_DECOD_UPT_VAL                 ,VAL);
+	ALLOC1_VALACK_IN ( in_DECOD_UPT_ACK                 ,ACK);
+	ALLOC1_SIGNAL_OUT(out_DECOD_UPT_CONTEXT_ID          ,"context_id"          ,Tcontext_t         ,_param->_size_context_id);
+	ALLOC1_SIGNAL_OUT(out_DECOD_UPT_BTB_ADDRESS_SRC     ,"btb_address_src"     ,Taddress_t         ,_param->_size_address);
+	ALLOC1_SIGNAL_OUT(out_DECOD_UPT_BTB_ADDRESS_DEST    ,"btb_address_dest"    ,Taddress_t         ,_param->_size_address);
+	ALLOC1_SIGNAL_OUT(out_DECOD_UPT_BTB_CONDITION       ,"btb_condition"       ,Tbranch_condition_t,_param->_size_branch_condition);
+	ALLOC1_SIGNAL_OUT(out_DECOD_UPT_BTB_LAST_TAKE       ,"btb_last_take"       ,Tcontrol_t         ,1);
+	ALLOC1_SIGNAL_OUT(out_DECOD_UPT_RAS_ADDRESS         ,"ras_address"         ,Taddress_t         ,_param->_size_address);
+// 	ALLOC1_SIGNAL_OUT(out_DECOD_UPT_RAS_INDEX           ,"ras_index"           ,Tptr_t             ,_param->_size_ras_index);
+	ALLOC1_SIGNAL_OUT(out_DECOD_UPT_MISS_IFETCH         ,"miss_ifetch"         ,Tcontrol_t         ,1); 
+	ALLOC1_SIGNAL_OUT(out_DECOD_UPT_MISS_DECOD          ,"miss_decod"          ,Tcontrol_t         ,1); 
+	ALLOC1_SIGNAL_OUT(out_DECOD_UPT_UPDATE_PREDICTION_ID,"update_prediction_id",Tprediction_ptr_t  ,_param->_max_size_depth);
+      }
+    }
+
+    // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	      
+    {
+      {
+	ALLOC1_INTERFACE("update_btb",OUT,SOUTH,"Interface with update unit",_param->_nb_inst_branch_update);
+
+        ALLOC1_VALACK_OUT(out_UPDATE_BTB_VAL                  ,VAL);
+        ALLOC1_VALACK_IN ( in_UPDATE_BTB_ACK                  ,ACK);
+//      ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_CONTEXT_ID           ,"context_id"           ,Tcontext_t         ,_param->_size_context_id);
+//      ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_ADDRESS_SRC          ,"address_src"          ,Taddress_t         ,_param->_size_address);
+//      ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_ADDRESS_DEST         ,"address_dest"         ,Taddress_t         ,_param->_size_address);
+//      ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_CONDITION            ,"condition"            ,Tbranch_condition_t,_param->_size_branch_condition);
+//      ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_LAST_TAKE            ,"last_take"            ,Tcontrol_t         ,1);
+//      ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_MISS_PREDICTION      ,"miss_prediction"      ,Tcontrol_t         ,1);
+      }
+
+      {
+	ALLOC1_INTERFACE("update_dir",OUT,NORTH,"Interface with update unit",_param->_nb_inst_branch_update);
+
+        ALLOC1_VALACK_OUT(out_UPDATE_DIR_VAL                  ,VAL);
+        ALLOC1_VALACK_IN ( in_UPDATE_DIR_ACK                  ,ACK);
+//      ALLOC1_SIGNAL_OUT(out_UPDATE_DIR_ADDRESS              ,"address"              ,Taddress_t         ,_param->_size_address);
+//      ALLOC1_SIGNAL_OUT(out_UPDATE_DIR_HISTORY              ,"history"              ,Thistory_t         ,_param->_size_history);
+//      ALLOC1_SIGNAL_OUT(out_UPDATE_DIR_DIRECTION            ,"direction"            ,Tcontrol_t         ,1);
+      }
+
+      {
+	ALLOC1_INTERFACE("update_ras",OUT,NORTH,"Interface with update unit",_param->_nb_inst_branch_update);
+
+        ALLOC1_VALACK_OUT(out_UPDATE_RAS_VAL                  ,VAL);
+        ALLOC1_VALACK_IN ( in_UPDATE_RAS_ACK                  ,ACK);
+//      ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_CONTEXT_ID           ,"context_id"           ,Tcontext_t         ,_param->_size_context_id);
+//      ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_PUSH                 ,"push"                 ,Tcontrol_t         ,1);
+//      ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_ADDRESS              ,"address"              ,Taddress_t         ,_param->_size_address);
+//      ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_INDEX                ,"index"                ,Tptr_t             ,_param->_size_ras_index);
+//      ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_MISS_PREDICTION      ,"miss_prediction"      ,Tcontrol_t         ,1);
+//      ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_PREDICTION_IFETCH    ,"prediction_ifetch"    ,Tcontrol_t         ,1);
+      }
+
+      {
+	ALLOC1_INTERFACE("update_upt",IN ,NORTH,"Interface with update unit",_param->_nb_inst_branch_update);
+
+        ALLOC1_VALACK_IN ( in_UPDATE_UPT_VAL                  ,VAL);
+        ALLOC1_VALACK_OUT(out_UPDATE_UPT_ACK                  ,ACK);
+//      ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_CONTEXT_ID           ,"context_id"           ,Tcontext_t         ,_param->_size_context_id);
+//      ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_MISS_PREDICTION      ,"miss_prediction"      ,Tcontrol_t         ,1);
+//      ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_DIRECTION_GOOD       ,"direction_good"       ,Tcontrol_t         ,1);
+	ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_BTB_VAL              ,"btb_val"              ,Tcontrol_t         ,1);
+//      ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_BTB_ADDRESS_SRC      ,"btb_address_src"      ,Taddress_t         ,_param->_size_address);
+//      ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_BTB_ADDRESS_DEST     ,"btb_address_dest"     ,Taddress_t         ,_param->_size_address);
+//      ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_BTB_CONDITION        ,"btb_condition"        ,Tbranch_condition_t,_param->_size_branch_condition);
+        ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_DIR_VAL              ,"dir_val"              ,Tcontrol_t         ,1);
+//      ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_DIR_HISTORY          ,"dir_history"          ,Thistory_t         ,_param->_size_history);
+        ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_RAS_VAL              ,"ras_val"              ,Tcontrol_t         ,1);
+//      ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_RAS_PUSH             ,"ras_push"             ,Tcontrol_t         ,1);
+//      ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_RAS_ADDRESS          ,"ras_address"          ,Taddress_t         ,_param->_size_address);
+//      ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_RAS_INDEX            ,"ras_index"            ,Tptr_t             ,_param->_size_ras_index);
+//      ALLOC1_SIGNAL_IN ( in_UPDATE_UPT_RAS_PREDICTION_IFETCH,"ras_prediction_ifetch",Tcontrol_t         ,1);
+      }
+    }
+
     // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	      
     {
       ALLOC1_INTERFACE("depth",IN,NORTH,"Interface with depth",_param->_nb_context);
-      
-      ALLOC1_SIGNAL_IN (in_DEPTH_UPT_NB_BRANCH,"upt_nb_branch",Tdepth_t,_param->_size_depth[alloc_signal_it1]);
-      ALLOC1_SIGNAL_IN (in_DEPTH_UPT_TAIL     ,"upt_tail"     ,Tdepth_t,_param->_size_depth[alloc_signal_it1]);
-    }
+
+      ALLOC1_SIGNAL_IN ( in_DEPTH_UPT_NB_BRANCH,"upt_nb_branch",Tdepth_t,_param->_size_depth[alloc_signal_it1]+1);
+      ALLOC1_SIGNAL_IN ( in_DEPTH_UPT_TAIL     ,"upt_tail"     ,Tdepth_t,_param->_size_depth[alloc_signal_it1]);
+      ALLOC1_SIGNAL_OUT(out_DEPTH_NB_BRANCH    ,"nb_branch"    ,Tdepth_t,_param->_size_depth[alloc_signal_it1]+1);
+      ALLOC1_SIGNAL_OUT(out_DEPTH_TAIL         ,"tail"         ,Tdepth_t,_param->_size_depth[alloc_signal_it1]);
+    }
+
+    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+#ifndef NO_INIT
+    reg_PREDICT_PRIORITY = 0;
+    reg_DECOD_PRIORITY   = 0;
+#endif
 
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_deallocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_deallocation.cpp	(revision 82)
@@ -29,4 +29,5 @@
 	delete    in_NRESET;
 
+
 	// ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         DELETE1_SIGNAL( in_PREDICT_VAL                        ,_param->_nb_context     ,1);
@@ -41,44 +42,132 @@
         DELETE1_SIGNAL(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_context     ,_param->_size_depth [alloc_signal_it1]);
         DELETE2_SIGNAL(out_PREDICT_INSTRUCTION_ENABLE         ,_param->_nb_context     ,_param->_nb_instruction[alloc_signal_it1],1);
-        DELETE1_SIGNAL(out_PREDICT_BTB_VAL                    ,_param->_nb_inst_predict,1);
-        DELETE1_SIGNAL( in_PREDICT_BTB_ACK                    ,_param->_nb_inst_predict,1);
-        DELETE1_SIGNAL(out_PREDICT_BTB_CONTEXT_ID             ,_param->_nb_inst_predict,_param->_size_context_id);
-        DELETE1_SIGNAL(out_PREDICT_BTB_ADDRESS                ,_param->_nb_inst_predict,_param->_size_address);
-        DELETE1_SIGNAL( in_PREDICT_BTB_HIT                    ,_param->_nb_inst_predict,1);
-        DELETE1_SIGNAL( in_PREDICT_BTB_ADDRESS_SRC            ,_param->_nb_inst_predict,_param->_size_address);
-        DELETE1_SIGNAL( in_PREDICT_BTB_ADDRESS_DEST           ,_param->_nb_inst_predict,_param->_size_address);
-        DELETE1_SIGNAL( in_PREDICT_BTB_CONDITION              ,_param->_nb_inst_predict,_param->_size_branch_condition);
-//      DELETE1_SIGNAL( in_PREDICT_BTB_LAST_TAKE              ,_param->_nb_inst_predict,1);
-	DELETE1_SIGNAL( in_PREDICT_BTB_IS_ACCURATE            ,_param->_nb_inst_predict,1);
-        DELETE1_SIGNAL(out_PREDICT_DIR_VAL                    ,_param->_nb_inst_predict,1);
-        DELETE1_SIGNAL( in_PREDICT_DIR_ACK                    ,_param->_nb_inst_predict,1);
-        DELETE1_SIGNAL(out_PREDICT_DIR_ADDRESS_SRC            ,_param->_nb_inst_predict,_param->_size_address);
-        DELETE1_SIGNAL(out_PREDICT_DIR_STATIC                 ,_param->_nb_inst_predict,1);
-//      DELETE1_SIGNAL(out_PREDICT_DIR_LAST_TAKE              ,_param->_nb_inst_predict,1);
-//      DELETE1_SIGNAL( in_PREDICT_DIR_HISTORY                ,_param->_nb_inst_predict,_param->_size_history);
-        DELETE1_SIGNAL( in_PREDICT_DIR_DIRECTION              ,_param->_nb_inst_predict,1);
-        DELETE1_SIGNAL(out_PREDICT_RAS_VAL                    ,_param->_nb_inst_predict,1);
-        DELETE1_SIGNAL( in_PREDICT_RAS_ACK                    ,_param->_nb_inst_predict,1);
-        DELETE1_SIGNAL(out_PREDICT_RAS_CONTEXT_ID             ,_param->_nb_inst_predict,_param->_size_context_id);
-        DELETE1_SIGNAL( in_PREDICT_RAS_HIT                    ,_param->_nb_inst_predict,1);
-        DELETE1_SIGNAL(out_PREDICT_RAS_PUSH                   ,_param->_nb_inst_predict,1);
-        DELETE1_SIGNAL(out_PREDICT_RAS_ADDRESS_PUSH           ,_param->_nb_inst_predict,_param->_size_address);
-        DELETE1_SIGNAL( in_PREDICT_RAS_ADDRESS_POP            ,_param->_nb_inst_predict,_param->_size_address);
-//      DELETE1_SIGNAL( in_PREDICT_RAS_INDEX                  ,_param->_nb_inst_predict,_param->_size_ras_index);
-        DELETE1_SIGNAL(out_PREDICT_UPT_VAL                    ,_param->_nb_inst_predict,1);
-        DELETE1_SIGNAL( in_PREDICT_UPT_ACK                    ,_param->_nb_inst_predict,1);
-        DELETE1_SIGNAL(out_PREDICT_UPT_CONTEXT_ID             ,_param->_nb_inst_predict,_param->_size_context_id);
-        DELETE1_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_SRC        ,_param->_nb_inst_predict,_param->_size_address);
-        DELETE1_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_DEST       ,_param->_nb_inst_predict,_param->_size_address);
-        DELETE1_SIGNAL(out_PREDICT_UPT_BTB_CONDITION          ,_param->_nb_inst_predict,_param->_size_branch_condition);
-        DELETE1_SIGNAL(out_PREDICT_UPT_BTB_LAST_TAKE          ,_param->_nb_inst_predict,1);
-	DELETE1_SIGNAL(out_PREDICT_UPT_BTB_IS_ACCURATE        ,_param->_nb_inst_predict,1);
-//      DELETE1_SIGNAL(out_PREDICT_UPT_DIR_HISTORY            ,_param->_nb_inst_predict,_param->_size_history);
-        DELETE1_SIGNAL(out_PREDICT_UPT_RAS_ADDRESS            ,_param->_nb_inst_predict,_param->_size_address);
-//      DELETE1_SIGNAL(out_PREDICT_UPT_RAS_INDEX              ,_param->_nb_inst_predict,_param->_size_ras_index);
+        DELETE1_SIGNAL(out_PREDICT_BTB_VAL                    ,_param->_nb_inst_branch_predict,1);
+        DELETE1_SIGNAL( in_PREDICT_BTB_ACK                    ,_param->_nb_inst_branch_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_BTB_CONTEXT_ID             ,_param->_nb_inst_branch_predict,_param->_size_context_id);
+        DELETE1_SIGNAL(out_PREDICT_BTB_ADDRESS                ,_param->_nb_inst_branch_predict,_param->_size_address);
+        DELETE1_SIGNAL( in_PREDICT_BTB_HIT                    ,_param->_nb_inst_branch_predict,1);
+        DELETE1_SIGNAL( in_PREDICT_BTB_ADDRESS_SRC            ,_param->_nb_inst_branch_predict,_param->_size_address);
+        DELETE1_SIGNAL( in_PREDICT_BTB_ADDRESS_DEST           ,_param->_nb_inst_branch_predict,_param->_size_address);
+        DELETE1_SIGNAL( in_PREDICT_BTB_CONDITION              ,_param->_nb_inst_branch_predict,_param->_size_branch_condition);
+//      DELETE1_SIGNAL( in_PREDICT_BTB_LAST_TAKE              ,_param->_nb_inst_branch_predict,1);
+	DELETE1_SIGNAL( in_PREDICT_BTB_IS_ACCURATE            ,_param->_nb_inst_branch_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_DIR_VAL                    ,_param->_nb_inst_branch_predict,1);
+        DELETE1_SIGNAL( in_PREDICT_DIR_ACK                    ,_param->_nb_inst_branch_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_DIR_ADDRESS_SRC            ,_param->_nb_inst_branch_predict,_param->_size_address);
+        DELETE1_SIGNAL(out_PREDICT_DIR_STATIC                 ,_param->_nb_inst_branch_predict,1);
+//      DELETE1_SIGNAL(out_PREDICT_DIR_LAST_TAKE              ,_param->_nb_inst_branch_predict,1);
+//      DELETE1_SIGNAL( in_PREDICT_DIR_HISTORY                ,_param->_nb_inst_branch_predict,_param->_size_history);
+        DELETE1_SIGNAL( in_PREDICT_DIR_DIRECTION              ,_param->_nb_inst_branch_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_RAS_VAL                    ,_param->_nb_inst_branch_predict,1);
+        DELETE1_SIGNAL( in_PREDICT_RAS_ACK                    ,_param->_nb_inst_branch_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_RAS_CONTEXT_ID             ,_param->_nb_inst_branch_predict,_param->_size_context_id);
+        DELETE1_SIGNAL( in_PREDICT_RAS_HIT                    ,_param->_nb_inst_branch_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_RAS_PUSH                   ,_param->_nb_inst_branch_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_RAS_ADDRESS_PUSH           ,_param->_nb_inst_branch_predict,_param->_size_address);
+        DELETE1_SIGNAL( in_PREDICT_RAS_ADDRESS_POP            ,_param->_nb_inst_branch_predict,_param->_size_address);
+//      DELETE1_SIGNAL( in_PREDICT_RAS_INDEX                  ,_param->_nb_inst_branch_predict,_param->_size_ras_index);
+        DELETE1_SIGNAL(out_PREDICT_UPT_VAL                    ,_param->_nb_inst_branch_predict,1);
+        DELETE1_SIGNAL( in_PREDICT_UPT_ACK                    ,_param->_nb_inst_branch_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_UPT_CONTEXT_ID             ,_param->_nb_inst_branch_predict,_param->_size_context_id);
+        DELETE1_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_SRC        ,_param->_nb_inst_branch_predict,_param->_size_address);
+        DELETE1_SIGNAL(out_PREDICT_UPT_BTB_ADDRESS_DEST       ,_param->_nb_inst_branch_predict,_param->_size_address);
+        DELETE1_SIGNAL(out_PREDICT_UPT_BTB_CONDITION          ,_param->_nb_inst_branch_predict,_param->_size_branch_condition);
+        DELETE1_SIGNAL(out_PREDICT_UPT_BTB_LAST_TAKE          ,_param->_nb_inst_branch_predict,1);
+	DELETE1_SIGNAL(out_PREDICT_UPT_BTB_IS_ACCURATE        ,_param->_nb_inst_branch_predict,1);
+//      DELETE1_SIGNAL(out_PREDICT_UPT_DIR_HISTORY            ,_param->_nb_inst_branch_predict,_param->_size_history);
+        DELETE1_SIGNAL(out_PREDICT_UPT_RAS_ADDRESS            ,_param->_nb_inst_branch_predict,_param->_size_address);
+//      DELETE1_SIGNAL(out_PREDICT_UPT_RAS_INDEX              ,_param->_nb_inst_branch_predict,_param->_size_ras_index);
+
+	// ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	DELETE2_SIGNAL( in_DECOD_VAL                        ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1);
+	DELETE2_SIGNAL(out_DECOD_ACK                        ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1);
+	DELETE2_SIGNAL( in_DECOD_CONTEXT_ID                 ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_context_id      );
+	DELETE2_SIGNAL( in_DECOD_MATCH_INST_IFETCH_PTR      ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1                             );
+	DELETE2_SIGNAL( in_DECOD_BRANCH_STATE               ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_branch_state    );
+	DELETE2_SIGNAL( in_DECOD_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_max_size_depth       );
+	DELETE2_SIGNAL( in_DECOD_BRANCH_CONDITION           ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_branch_condition);
+	DELETE2_SIGNAL( in_DECOD_BRANCH_DIRECTION           ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1                             );
+	DELETE2_SIGNAL( in_DECOD_ADDRESS_SRC                ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_address         );
+	DELETE2_SIGNAL( in_DECOD_ADDRESS_DEST               ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_address         );
+	DELETE1_SIGNAL(out_DECOD_BTB_VAL            ,_param->_nb_inst_branch_decod,1);
+	DELETE1_SIGNAL( in_DECOD_BTB_ACK            ,_param->_nb_inst_branch_decod,1);
+	DELETE1_SIGNAL(out_DECOD_BTB_CONTEXT_ID     ,_param->_nb_inst_branch_decod,_param->_size_context_id);
+	DELETE1_SIGNAL(out_DECOD_BTB_ADDRESS_SRC    ,_param->_nb_inst_branch_decod,_param->_size_address);
+	DELETE1_SIGNAL(out_DECOD_BTB_ADDRESS_DEST   ,_param->_nb_inst_branch_decod,_param->_size_address);
+	DELETE1_SIGNAL(out_DECOD_BTB_CONDITION      ,_param->_nb_inst_branch_decod,_param->_size_branch_condition);
+	DELETE1_SIGNAL(out_DECOD_BTB_LAST_TAKE      ,_param->_nb_inst_branch_decod,1);
+	DELETE1_SIGNAL(out_DECOD_BTB_MISS_PREDICTION,_param->_nb_inst_branch_decod,1);
+	DELETE1_SIGNAL(out_DECOD_BTB_IS_ACCURATE    ,_param->_nb_inst_branch_decod,1);
+
+	DELETE1_SIGNAL(out_DECOD_RAS_VAL            ,_param->_nb_inst_branch_decod,1);
+	DELETE1_SIGNAL( in_DECOD_RAS_ACK            ,_param->_nb_inst_branch_decod,1);
+	DELETE1_SIGNAL(out_DECOD_RAS_CONTEXT_ID     ,_param->_nb_inst_branch_decod,_param->_size_context_id); 
+	DELETE1_SIGNAL( in_DECOD_RAS_HIT            ,_param->_nb_inst_branch_decod,1); 
+	DELETE1_SIGNAL(out_DECOD_RAS_PUSH           ,_param->_nb_inst_branch_decod,1);
+	DELETE1_SIGNAL(out_DECOD_RAS_ADDRESS_PUSH   ,_param->_nb_inst_branch_decod,_param->_size_address);
+	DELETE1_SIGNAL( in_DECOD_RAS_ADDRESS_POP    ,_param->_nb_inst_branch_decod,_param->_size_address);
+// 	DELETE1_SIGNAL( in_DECOD_RAS_INDEX          ,_param->_nb_inst_branch_decod,_param->_size_ras_index);
+	DELETE1_SIGNAL(out_DECOD_RAS_MISS_PREDICTION,_param->_nb_inst_branch_decod,1);
+
+	DELETE1_SIGNAL(out_DECOD_UPT_VAL                 ,_param->_nb_inst_branch_decod,1);
+	DELETE1_SIGNAL( in_DECOD_UPT_ACK                 ,_param->_nb_inst_branch_decod,1);
+ 	DELETE1_SIGNAL(out_DECOD_UPT_CONTEXT_ID          ,_param->_nb_inst_branch_decod,_param->_size_context_id);
+	DELETE1_SIGNAL(out_DECOD_UPT_BTB_ADDRESS_SRC     ,_param->_nb_inst_branch_decod,_param->_size_address);
+	DELETE1_SIGNAL(out_DECOD_UPT_BTB_ADDRESS_DEST    ,_param->_nb_inst_branch_decod,_param->_size_address);
+	DELETE1_SIGNAL(out_DECOD_UPT_BTB_CONDITION       ,_param->_nb_inst_branch_decod,_param->_size_branch_condition);
+	DELETE1_SIGNAL(out_DECOD_UPT_BTB_LAST_TAKE       ,_param->_nb_inst_branch_decod,1);
+	DELETE1_SIGNAL(out_DECOD_UPT_RAS_ADDRESS         ,_param->_nb_inst_branch_decod,_param->_size_address);
+// 	DELETE1_SIGNAL(out_DECOD_UPT_RAS_INDEX           ,_param->_nb_inst_branch_decod,_param->_size_ras_index);
+	DELETE1_SIGNAL(out_DECOD_UPT_MISS_IFETCH         ,_param->_nb_inst_branch_decod,1); 
+	DELETE1_SIGNAL(out_DECOD_UPT_MISS_DECOD          ,_param->_nb_inst_branch_decod,1); 
+	DELETE1_SIGNAL(out_DECOD_UPT_UPDATE_PREDICTION_ID,_param->_nb_inst_branch_decod,_param->_max_size_depth);
+
+	// ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	      
+        DELETE1_SIGNAL(out_UPDATE_BTB_VAL                  ,_param->_nb_inst_branch_update,1);
+        DELETE1_SIGNAL( in_UPDATE_BTB_ACK                  ,_param->_nb_inst_branch_update,1);
+//      DELETE1_SIGNAL(out_UPDATE_BTB_CONTEXT_ID           ,_param->_nb_inst_branch_update,_param->_size_context_id);
+//      DELETE1_SIGNAL(out_UPDATE_BTB_ADDRESS_SRC          ,_param->_nb_inst_branch_update,_param->_size_address);
+//      DELETE1_SIGNAL(out_UPDATE_BTB_ADDRESS_DEST         ,_param->_nb_inst_branch_update,_param->_size_address);
+//      DELETE1_SIGNAL(out_UPDATE_BTB_CONDITION            ,_param->_nb_inst_branch_update,_param->_size_branch_condition);
+//      DELETE1_SIGNAL(out_UPDATE_BTB_LAST_TAKE            ,_param->_nb_inst_branch_update,1);
+//      DELETE1_SIGNAL(out_UPDATE_BTB_MISS_PREDICTION      ,_param->_nb_inst_branch_update,1);
+
+        DELETE1_SIGNAL(out_UPDATE_DIR_VAL                  ,_param->_nb_inst_branch_update,1);
+        DELETE1_SIGNAL( in_UPDATE_DIR_ACK                  ,_param->_nb_inst_branch_update,1);
+//      DELETE1_SIGNAL(out_UPDATE_DIR_ADDRESS              ,_param->_nb_inst_branch_update,_param->_size_address);
+//      DELETE1_SIGNAL(out_UPDATE_DIR_HISTORY              ,_param->_nb_inst_branch_update,_param->_size_history);
+//      DELETE1_SIGNAL(out_UPDATE_DIR_DIRECTION            ,_param->_nb_inst_branch_update,1);
+
+        DELETE1_SIGNAL(out_UPDATE_RAS_VAL                  ,_param->_nb_inst_branch_update,1);
+        DELETE1_SIGNAL( in_UPDATE_RAS_ACK                  ,_param->_nb_inst_branch_update,1);
+//      DELETE1_SIGNAL(out_UPDATE_RAS_CONTEXT_ID           ,_param->_nb_inst_branch_update,_param->_size_context_id);
+//      DELETE1_SIGNAL(out_UPDATE_RAS_PUSH                 ,_param->_nb_inst_branch_update,1);
+//      DELETE1_SIGNAL(out_UPDATE_RAS_ADDRESS              ,_param->_nb_inst_branch_update,_param->_size_address);
+//      DELETE1_SIGNAL(out_UPDATE_RAS_INDEX                ,_param->_nb_inst_branch_update,_param->_size_ras_index);
+//      DELETE1_SIGNAL(out_UPDATE_RAS_MISS_PREDICTION      ,_param->_nb_inst_branch_update,1);
+//      DELETE1_SIGNAL(out_UPDATE_RAS_PREDICTION_IFETCH    ,_param->_nb_inst_branch_update,1);
+
+        DELETE1_SIGNAL( in_UPDATE_UPT_VAL                  ,_param->_nb_inst_branch_update,1);
+        DELETE1_SIGNAL(out_UPDATE_UPT_ACK                  ,_param->_nb_inst_branch_update,1);
+//      DELETE1_SIGNAL( in_UPDATE_UPT_CONTEXT_ID           ,_param->_nb_inst_branch_update,_param->_size_context_id);
+//      DELETE1_SIGNAL( in_UPDATE_UPT_MISS_PREDICTION      ,_param->_nb_inst_branch_update,1);
+//      DELETE1_SIGNAL( in_UPDATE_UPT_DIRECTION_GOOD       ,_param->_nb_inst_branch_update,1);
+        DELETE1_SIGNAL( in_UPDATE_UPT_BTB_VAL              ,_param->_nb_inst_branch_update,1);
+//      DELETE1_SIGNAL( in_UPDATE_UPT_BTB_ADDRESS_SRC      ,_param->_nb_inst_branch_update,_param->_size_address);
+//      DELETE1_SIGNAL( in_UPDATE_UPT_BTB_ADDRESS_DEST     ,_param->_nb_inst_branch_update,_param->_size_address);
+//      DELETE1_SIGNAL( in_UPDATE_UPT_BTB_CONDITION        ,_param->_nb_inst_branch_update,_param->_size_branch_condition);
+        DELETE1_SIGNAL( in_UPDATE_UPT_DIR_VAL              ,_param->_nb_inst_branch_update,1);
+//      DELETE1_SIGNAL( in_UPDATE_UPT_DIR_HISTORY          ,_param->_nb_inst_branch_update,_param->_size_history);
+        DELETE1_SIGNAL( in_UPDATE_UPT_RAS_VAL              ,_param->_nb_inst_branch_update,1);
+//      DELETE1_SIGNAL( in_UPDATE_UPT_RAS_PUSH             ,_param->_nb_inst_branch_update,1);
+//      DELETE1_SIGNAL( in_UPDATE_UPT_RAS_ADDRESS          ,_param->_nb_inst_branch_update,_param->_size_address);
+//      DELETE1_SIGNAL( in_UPDATE_UPT_RAS_INDEX            ,_param->_nb_inst_branch_update,_param->_size_ras_index);
+//      DELETE1_SIGNAL( in_UPDATE_UPT_RAS_PREDICTION_IFETCH,_param->_nb_inst_branch_update,1);
 
 	// ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	      
-	DELETE1_SIGNAL( in_DEPTH_UPT_NB_BRANCH,_param->_nb_context,_param->_size_depth[alloc_signal_it1]);
+	DELETE1_SIGNAL( in_DEPTH_UPT_NB_BRANCH,_param->_nb_context,_param->_size_depth[alloc_signal_it1]+1);
 	DELETE1_SIGNAL( in_DEPTH_UPT_TAIL     ,_param->_nb_context,_param->_size_depth[alloc_signal_it1]);
+	DELETE1_SIGNAL(out_DEPTH_NB_BRANCH    ,_param->_nb_context,_param->_size_depth[alloc_signal_it1]+1);
+	DELETE1_SIGNAL(out_DEPTH_TAIL         ,_param->_nb_context,_param->_size_depth[alloc_signal_it1]);
       }
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_genMealy_decod.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_genMealy_decod.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_genMealy_decod.cpp	(revision 82)
@@ -0,0 +1,264 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Prediction_unit_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace prediction_unit {
+namespace prediction_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Prediction_unit_Glue::genMealy_decod"
+  void Prediction_unit_Glue::genMealy_decod (void)
+  {
+    log_printf(FUNC,Prediction_unit_Glue,FUNCTION,"Begin");
+
+    uint32_t   decod_unit = reg_DECOD_PRIORITY;
+
+    log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"  * decod_unit : %d",decod_unit);
+
+    Tcontrol_t ack [_param->_nb_inst_decod[decod_unit]];
+    
+    for (uint32_t i=0;i<_param->_nb_inst_decod[decod_unit]; i++)
+      ack [i] = true;
+
+    Tcontrol_t btb_val [_param->_nb_inst_branch_decod];
+    Tcontrol_t ras_val [_param->_nb_inst_branch_decod];
+    Tcontrol_t upt_val [_param->_nb_inst_branch_decod];
+
+    for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+      {
+	btb_val [i] = false;
+	ras_val [i] = false;
+	upt_val [i] = false;
+      }
+
+    uint32_t port = 0;
+    for (uint32_t i=0; i<_param->_nb_inst_decod[decod_unit]; i++)
+      // Test if decod_unit have detected a branch
+      if ((port>=_param->_nb_inst_branch_decod) or
+	  (PORT_READ(in_DECOD_VAL [decod_unit][i]) == 0))
+	{
+	  log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"  * DECOD[%d][%d] : not valid",decod_unit,i);
+	  ack [i] = false;
+	}
+      else
+	{
+	  Tcontext_t          context               = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [decod_unit][i]):0;
+	  Tbranch_state_t     branch_state          = PORT_READ(in_DECOD_BRANCH_STATE          [decod_unit][i]);
+	  Tcontrol_t          match_inst_ifetch_ptr = PORT_READ(in_DECOD_MATCH_INST_IFETCH_PTR [decod_unit][i]);
+	  Tprediction_ptr_t   depth   = (_param->_have_port_max_depth)?PORT_READ(in_DECOD_BRANCH_UPDATE_PREDICTION_ID [decod_unit][i]):0;
+	  Tcontrol_t          use_btb = false;
+	  Tcontrol_t          use_ras = false;
+	  Tcontrol_t          use_upt = true ;
+	  Tcontrol_t          miss_ifetch    = ( (branch_state == BRANCH_STATE_NONE) or // branch not detected
+						 ((branch_state != BRANCH_STATE_NONE) and (match_inst_ifetch_ptr == 0))); // branch detected, but it's not the good
+	  Tcontrol_t          miss_decod;
+
+	  log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"  * DECOD[%d][%d] :     valid",decod_unit,i);
+	  log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * depth   [%d] : %d",i   ,depth);
+
+	  // Test if ifetch have detecte a branch is the packet
+	  if (miss_ifetch)
+	    {
+	      log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * miss_ifetch");
+	      log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"      * state : %d",branch_state);
+	      log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"      * match : %d",match_inst_ifetch_ptr);
+	      Tbranch_condition_t condition             = PORT_READ(in_DECOD_BRANCH_CONDITION            [decod_unit][i]);
+	      Tcontrol_t          direction             = PORT_READ(in_DECOD_BRANCH_DIRECTION            [decod_unit][i]);
+	      Taddress_t          address_src           = PORT_READ(in_DECOD_ADDRESS_SRC                 [decod_unit][i]);
+	      Taddress_t          address_dest          = PORT_READ(in_DECOD_ADDRESS_DEST                [decod_unit][i]);
+	      Tcontrol_t          is_accurate;
+
+	      // Miss speculation
+	      use_btb = true;
+	      
+	      switch (condition)
+		{
+		case BRANCH_CONDITION_NONE_WITH_WRITE_STACK             :
+		  {
+		    // Write stack
+		    is_accurate = PORT_READ(in_DECOD_RAS_HIT [port]);
+		    miss_decod  = false;
+		    use_ras     = true;
+
+		    PORT_WRITE(out_DECOD_RAS_PUSH         [port],1);
+		    PORT_WRITE(out_DECOD_RAS_ADDRESS_PUSH [port],address_dest);
+		    
+		    break;
+		  }
+
+		case BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK    :
+		  {
+		    // Write stack
+		    is_accurate = false;
+		    miss_decod  = false;
+		    use_ras     = true;
+
+		    PORT_WRITE(out_DECOD_RAS_PUSH         [port],1);
+		    PORT_WRITE(out_DECOD_RAS_ADDRESS_PUSH [port],address_dest);
+		    
+		    break;
+		  }
+		case BRANCH_CONDITION_READ_STACK                        :
+		  {
+		    // Read stack
+		    is_accurate = PORT_READ(in_DECOD_RAS_HIT [port]);
+		    miss_decod  = false;
+		    use_ras     = true;
+
+		    PORT_WRITE(out_DECOD_RAS_PUSH         [port],0);
+		    address_dest = PORT_READ(in_DECOD_RAS_ADDRESS_POP [port]);
+		    
+		    break;
+		  }
+		case BRANCH_CONDITION_READ_REGISTER_WITHOUT_WRITE_STACK :
+		  {
+		    //   * READ_REGISTER_WITHOUT_WRITE_STACK : Take but destination is unknow - don't continue
+		    is_accurate = PORT_READ(in_DECOD_RAS_HIT [port]);
+		    miss_decod  = true;
+
+		    break;
+		  }
+
+		case BRANCH_CONDITION_FLAG_UNSET                        :
+		case BRANCH_CONDITION_FLAG_SET                          :
+		  {
+		    // No access at the flag
+		    //   * FLAG                              : static direction and destination is know
+		    is_accurate = PORT_READ(in_DECOD_RAS_HIT [port]);
+		    miss_decod  = false;
+
+		    break;
+		  }
+
+		case BRANCH_CONDITION_NONE_WITHOUT_WRITE_STACK          :
+		  {
+		    // No access at the flag
+		    //   * NONE_WITHOUT_WRITE_STACK          : take and destination is know
+		    is_accurate = false;
+		    miss_decod  = false;
+		    use_ras     = true;
+
+		    PORT_WRITE(out_DECOD_RAS_PUSH         [port],1);
+		    PORT_WRITE(out_DECOD_RAS_ADDRESS_PUSH [port],address_dest);
+
+		    break;
+		  }
+
+		}
+
+	      if (use_btb)
+		{
+		  if (_param->_have_port_context_id)
+	          PORT_WRITE(out_DECOD_BTB_CONTEXT_ID      [port],context);
+		  PORT_WRITE(out_DECOD_BTB_ADDRESS_SRC     [port],address_src);
+		  PORT_WRITE(out_DECOD_BTB_ADDRESS_DEST    [port],address_dest);
+		  PORT_WRITE(out_DECOD_BTB_CONDITION       [port],condition);
+		  PORT_WRITE(out_DECOD_BTB_LAST_TAKE       [port],direction);
+		  PORT_WRITE(out_DECOD_BTB_MISS_PREDICTION [port],1);
+		  PORT_WRITE(out_DECOD_BTB_IS_ACCURATE     [port],is_accurate);
+		}
+	      if (use_ras)
+		{
+		  miss_decod |= not PORT_READ(in_DECOD_RAS_HIT [port]);
+
+		  if (_param->_have_port_context_id)
+		  PORT_WRITE(out_DECOD_RAS_CONTEXT_ID      [port],context);
+		  PORT_WRITE(out_DECOD_RAS_MISS_PREDICTION [port],1);
+		}
+	      if (use_upt)
+		{
+		  PORT_WRITE(out_DECOD_UPT_BTB_ADDRESS_SRC      [port],address_src);
+		  PORT_WRITE(out_DECOD_UPT_BTB_ADDRESS_DEST     [port],address_dest);
+		  PORT_WRITE(out_DECOD_UPT_BTB_CONDITION        [port],condition);
+		  PORT_WRITE(out_DECOD_UPT_BTB_LAST_TAKE        [port],direction);
+		  PORT_WRITE(out_DECOD_UPT_RAS_ADDRESS          [port],PORT_READ(in_DECOD_RAS_ADDRESS_POP [port]));
+		}
+	    }
+	  else
+	    {
+	      log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * hit");
+
+	      miss_decod = false;
+	      // Hit speculation
+	    }
+	  
+	  // in all case
+	  log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * use_btb : %d",use_btb);
+	  log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * use_ras : %d",use_ras);
+	  log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * use_upt : %d",use_upt);
+	  log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * btb_ack [%d] : %d",port,PORT_READ(in_DECOD_BTB_ACK [port]));
+	  log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * ras_ack [%d] : %d",port,PORT_READ(in_DECOD_RAS_ACK [port]));
+	  log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * upt_ack [%d] : %d",port,PORT_READ(in_DECOD_UPT_ACK [port]));
+  
+	  btb_val [port] = (use_btb and
+			    (not use_ras or (use_ras and PORT_READ(in_DECOD_RAS_ACK [port]))) and 
+			    (not use_upt or (use_upt and PORT_READ(in_DECOD_UPT_ACK [port]))));
+	  
+	  ras_val [port] = (use_ras and
+			    (not use_btb or (use_btb and PORT_READ(in_DECOD_BTB_ACK [port]))) and 
+			    (not use_upt or (use_upt and PORT_READ(in_DECOD_UPT_ACK [port]))));
+	  
+	  upt_val [port] = (use_upt and
+			    (not use_btb or (use_btb and PORT_READ(in_DECOD_BTB_ACK [port]))) and 
+			    (not use_ras or (use_ras and PORT_READ(in_DECOD_RAS_ACK [port]))));
+
+	  if (use_btb)
+	    ack [i] &= btb_val [port] and PORT_READ(in_DECOD_BTB_ACK [port]);
+	  if (use_ras)
+	    ack [i] &= ras_val [port] and PORT_READ(in_DECOD_RAS_ACK [port]);
+	  if (use_upt)
+	    ack [i] &= upt_val [port] and PORT_READ(in_DECOD_UPT_ACK [port]);
+	  
+	  log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * btb_val [%d] : %d",port,btb_val [port]);
+	  log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * ras_val [%d] : %d",port,ras_val [port]);
+	  log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * upt_val [%d] : %d",port,upt_val [port]);
+	  log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * ack     [%d] : %d",i   ,ack     [i   ]);
+
+	  if (_param->_have_port_context_id)
+	  PORT_WRITE(out_DECOD_UPT_CONTEXT_ID           [port],context);
+	  PORT_WRITE(out_DECOD_UPT_MISS_IFETCH          [port],miss_ifetch); 
+	  PORT_WRITE(out_DECOD_UPT_MISS_DECOD           [port],miss_decod ); 
+	  if (_param->_have_port_max_depth)
+	  PORT_WRITE(out_DECOD_UPT_UPDATE_PREDICTION_ID [port],depth);
+	  
+	  port ++;
+	}
+    
+    for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+      {
+	PORT_WRITE(out_DECOD_BTB_VAL [i], btb_val [i]);
+	PORT_WRITE(out_DECOD_RAS_VAL [i], ras_val [i]);
+	PORT_WRITE(out_DECOD_UPT_VAL [i], upt_val [i]);
+      }
+
+    for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+      for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+	if (i!= decod_unit)
+	  PORT_WRITE(out_DECOD_ACK [i][j], 0);
+	else
+	  PORT_WRITE(out_DECOD_ACK [i][j], ack[j]);
+
+    log_printf(FUNC,Prediction_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace prediction_unit_glue
+}; // end namespace prediction_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_genMealy_predict.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_genMealy_predict.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_genMealy_predict.cpp	(revision 82)
@@ -26,7 +26,15 @@
     Tcontrol_t ack [_param->_nb_context];
     for (uint32_t i=0; i<_param->_nb_context; i++)
-      ack [i] = 0;
-    
-    for (uint32_t i=0; i<_param->_nb_inst_predict; i++)
+      {
+	ack [i] = 0;
+
+	if (_param->_have_port_depth[i])
+	  {
+	    PORT_WRITE(out_DEPTH_TAIL      [i],PORT_READ(in_DEPTH_UPT_TAIL      [i]));
+	  }
+	    PORT_WRITE(out_DEPTH_NB_BRANCH [i],PORT_READ(in_DEPTH_UPT_NB_BRANCH [i]));
+      }
+
+    for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
       {
 	log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"PREDICT [%d]",i);
@@ -136,5 +144,5 @@
 			{
 			  branch_state = BRANCH_STATE_SPEC_NTAKE;
-			  pc_next      = address_src+8; // +4 = delay slot
+			  pc_next      = address_src+2; // +1 = delay slot
 			}
 		      break;
@@ -191,5 +199,5 @@
 		    PORT_WRITE(out_PREDICT_RAS_CONTEXT_ID   [i], context);
 		    PORT_WRITE(out_PREDICT_RAS_PUSH         [i], push); 
-		    PORT_WRITE(out_PREDICT_RAS_ADDRESS_PUSH [i], address_src+8); 
+		    PORT_WRITE(out_PREDICT_RAS_ADDRESS_PUSH [i], address_src+2); 
 
 		    is_accurate &= PORT_READ(in_PREDICT_RAS_HIT [i]); // if miss - prediction is not accurate
@@ -221,15 +229,18 @@
 // 				 (use_upt and PORT_READ(in_PREDICT_UPT_ACK [i])));
 
-		dir_val = (PORT_READ(in_PREDICT_BTB_ACK [i]) and 
-			   (use_ras and PORT_READ(in_PREDICT_RAS_ACK [i])) and 
-			   (use_upt and PORT_READ(in_PREDICT_UPT_ACK [i])));
-
-		ras_val = (PORT_READ(in_PREDICT_BTB_ACK [i]) and 
-			   (use_dir and PORT_READ(in_PREDICT_DIR_ACK [i])) and 
-			   (use_upt and PORT_READ(in_PREDICT_UPT_ACK [i])));
-
-		upt_val = (PORT_READ(in_PREDICT_BTB_ACK [i]) and 
-			   (use_dir and PORT_READ(in_PREDICT_DIR_ACK [i])) and 
-			   (use_ras and PORT_READ(in_PREDICT_RAS_ACK [i])));
+		dir_val = (use_dir and
+			   PORT_READ(in_PREDICT_BTB_ACK [i]) and 
+			   (not use_ras or (use_ras and PORT_READ(in_PREDICT_RAS_ACK [i]))) and 
+			   (not use_upt or (use_upt and PORT_READ(in_PREDICT_UPT_ACK [i]))));
+
+		ras_val = (use_ras and
+			   PORT_READ(in_PREDICT_BTB_ACK [i]) and 
+			   (not use_dir or (use_dir and PORT_READ(in_PREDICT_DIR_ACK [i]))) and 
+			   (not use_upt or (use_upt and PORT_READ(in_PREDICT_UPT_ACK [i]))));
+
+		upt_val = (use_upt and
+			   PORT_READ(in_PREDICT_BTB_ACK [i]) and 
+			   (not use_dir or (use_dir and PORT_READ(in_PREDICT_DIR_ACK [i]))) and 
+			   (not use_ras or (use_ras and PORT_READ(in_PREDICT_RAS_ACK [i]))));
 
 // 		pc_next      - is previously computed
@@ -238,7 +249,11 @@
 		Taddress_t address_src_lsb  = address_src%_param->_nb_instruction [context];
 
+		log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * address_src     : 0x%x",address_src);
+		log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * address_src_lsb : %d",address_src_lsb);
 		if (address_src_lsb == (_param->_nb_instruction [context]-1))
 		  {
 		    // branch is in the last slot of the packet
+		    log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * branch is in the last slot of the packet");
+		
 		    address_msb        = _param->_nb_instruction [context]; // == (address_src_lsb+1)
 		    pc_next_is_ds_take = 1;
@@ -250,7 +265,8 @@
 		    pc_next_is_ds_take = 0;
 		  }
+		log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * address_msb     : %d",address_msb);
 
 		inst_ifetch_ptr             = address_src_lsb;
-		branch_update_prediction_id = (PORT_READ(in_DEPTH_UPT_TAIL[context])+PORT_READ(in_DEPTH_UPT_NB_BRANCH [context]))%_param->_size_depth[context];
+		branch_update_prediction_id = (_param->_have_port_depth[context])?((PORT_READ(in_DEPTH_UPT_TAIL[context])+PORT_READ(in_DEPTH_UPT_NB_BRANCH [context]))%_param->_size_depth[context]):0;
 	      }
 	    else
@@ -270,4 +286,11 @@
 	      PORT_WRITE(out_PREDICT_PC_NEXT                     [context]   , pc_next                    );
 	      PORT_WRITE(out_PREDICT_PC_NEXT_IS_DS_TAKE          [context]   , pc_next_is_ds_take         );
+
+	      log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"  * instruction enable :");
+	      log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * nb_inst : %d",_param->_nb_instruction [context]);
+	      log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * [0:%d[ = 0",address_lsb);
+	      log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * [%d:%d[ = 1",address_lsb,((pc_current_is_ds_take)?1:address_msb));
+	      log_printf(TRACE,Prediction_unit_Glue,FUNCTION,"    * [%d:%d[ = 0",((pc_current_is_ds_take)?1:address_msb),_param->_nb_instruction [context]);
+
 	      for (uint32_t j=0; j<address_lsb; j++)
 	      PORT_WRITE(out_PREDICT_INSTRUCTION_ENABLE          [context][j], 0); // Before the address : not valid
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_genMealy_update.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_genMealy_update.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_genMealy_update.cpp	(revision 82)
@@ -0,0 +1,65 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Prediction_unit_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_front_end {
+namespace front_end {
+namespace prediction_unit {
+namespace prediction_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Prediction_unit_Glue::genMealy_update"
+  void Prediction_unit_Glue::genMealy_update (void)
+  {
+    log_printf(FUNC,Prediction_unit_Glue,FUNCTION,"Begin");
+
+//     for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++)
+//       {
+// 	Tcontrol_t btb_ack     = PORT_READ(in_UPDATE_BTB_ACK [i]);
+// 	Tcontrol_t dir_ack     = PORT_READ(in_UPDATE_DIR_ACK [i]);
+// 	Tcontrol_t ras_ack     = PORT_READ(in_UPDATE_RAS_ACK [i]);
+// 	Tcontrol_t upt_val     = PORT_READ(in_UPDATE_UPT_VAL [i]);
+
+// 	Tcontrol_t need_btb = PORT_READ(in_UPDATE_UPT_BTB_VAL [i]);
+// 	Tcontrol_t need_dir = PORT_READ(in_UPDATE_UPT_DIR_VAL [i]);
+// 	Tcontrol_t need_ras = PORT_READ(in_UPDATE_UPT_RAS_VAL [i]);
+	
+// 	PORT_WRITE(out_UPDATE_BTB_VAL [i], (upt_val and need_btb and
+// 					    (not need_dir or (need_dir and dir_ack)) and
+// 					    (not need_ras or (need_ras and ras_ack))));
+
+// 	PORT_WRITE(out_UPDATE_DIR_VAL [i], (upt_val and need_dir and
+// 					    (not need_btb or (need_btb and btb_ack)) and
+// 					    (not need_ras or (need_ras and ras_ack))));
+
+// 	PORT_WRITE(out_UPDATE_RAS_VAL [i], (upt_val and need_ras and
+// 					    (not need_btb or (need_btb and btb_ack)) and
+// 					    (not need_dir or (need_dir and dir_ack))));
+
+// 	PORT_WRITE(out_UPDATE_UPT_ACK [i], ((not need_btb or (need_btb and btb_ack)) and
+// 					    (not need_dir or (need_dir and dir_ack)) and
+// 					    (not need_ras or (need_ras and ras_ack))));
+//       }
+
+    log_printf(FUNC,Prediction_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace prediction_unit_glue
+}; // end namespace prediction_unit
+}; // end namespace front_end
+}; // end namespace multi_front_end
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_transition.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_transition.cpp	(revision 82)
@@ -27,9 +27,11 @@
       {
 	reg_PREDICT_PRIORITY = 0;
+	reg_DECOD_PRIORITY   = 0;
       }
     else
       {
 	// Round robin priority
-	reg_PREDICT_PRIORITY = (reg_PREDICT_PRIORITY+_param->_nb_inst_predict)%_param->_nb_context;
+	reg_PREDICT_PRIORITY = (reg_PREDICT_PRIORITY+_param->_nb_inst_branch_predict)%_param->_nb_context; 
+	reg_DECOD_PRIORITY   = (reg_DECOD_PRIORITY  +1)%_param->_nb_decod_unit;
       }
 #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/SelfTest/src/test.cpp	(revision 82)
@@ -7,36 +7,10 @@
  */
 
+#define NB_ITERATION  16
+#define CYCLE_MAX     (1024*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  16
-#define CYCLE_MAX     (1024*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)						\
-  do									\
-    {									\
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \
-      if (cycle_offset != 0)						\
-	{								\
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]"; \
-	  cout << " (" << __LINE__ << ")" << endl;			\
-	}								\
-      									\
-      if (cycle_current > CYCLE_MAX)					\
-	{								\
-	  TEST_KO("Maximal cycles Reached");				\
-	}								\
-      									\
-      sc_start(cycle_offset);						\
-      									\
-    } while(0)
 
 void test (string name,
@@ -49,9 +23,11 @@
 #endif
 
-  Return_Address_Stack * _Return_Address_Stack = new Return_Address_Stack (name.c_str(),
+  Return_Address_Stack * _Return_Address_Stack = new Return_Address_Stack 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/include/Return_Address_Stack.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/include/Return_Address_Stack.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/include/Return_Address_Stack.h	(revision 82)
@@ -128,5 +128,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Return_Address_Stack             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/config_min.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/config_min.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/config_min.cfg	(revision 82)
@@ -0,0 +1,38 @@
+Prediction_unit
+1	1	+1 # nb_context                 
+1	1	+1 # nb_decod_unit              
+30	30	+1 # size_address               
+1	1	+1 # nb_instruction             [0] [nb_context]
+1	1	+1 # nb_inst_decod              [0] [nb_decod_unit]
+1	1	+1 # nb_inst_branch_predict     
+1	1	+1 # nb_inst_branch_decod       
+1	1	+1 # nb_inst_branch_update      
+1	1	+1 # nb_inst_branch_complete    
+1	1	+1 # btb_size_queue             
+1	1	+1 # btb_associativity          
+2	2	+1 # btb_size_counter           
+3	3	+1 # btb_victim_scheme          
+1	1	+1 # dir_predictor_scheme       
+1	1	+1 # dir_have_bht               [0] [3]
+1	1	+1 # dir_have_bht               [1] [3]
+1	1	+1 # dir_have_bht               [2] [3]
+1	1	+1 # dir_bht_size_shifter       [0] [3]
+1	1	+1 # dir_bht_size_shifter       [1] [3]
+1	1	+1 # dir_bht_size_shifter       [2] [3]
+1	1	+1 # dir_bht_nb_shifter         [0] [3]
+1	1	+1 # dir_bht_nb_shifter         [1] [3]
+1	1	+1 # dir_bht_nb_shifter         [2] [3]
+1	1	+1 # dir_have_pht               [0] [3]
+1	1	+1 # dir_have_pht               [1] [3]
+1	1	+1 # dir_have_pht               [2] [3]
+1	1	+1 # dir_pht_size_counter       [0] [3]
+1	1	+1 # dir_pht_size_counter       [1] [3]
+1	1	+1 # dir_pht_size_counter       [2] [3]
+1	1	+1 # dir_pht_nb_counter         [0] [3]
+1	1	+1 # dir_pht_nb_counter         [1] [3]
+1	1	+1 # dir_pht_nb_counter         [2] [3]
+1	1	+1 # dir_pht_size_address_share [0] [3]
+1	1	+1 # dir_pht_size_address_share [1] [3]
+1	1	+1 # dir_pht_size_address_share [2] [3]
+2	2	+1 # ras_size_queue             [0] [nb_context]
+1	1	+1 # upt_size_queue             [0] [nb_context]
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/config_mono_context.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/config_mono_context.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/config_mono_context.cfg	(revision 82)
@@ -0,0 +1,38 @@
+Prediction_unit
+1	1	+1 # nb_context                 
+1	1	+1 # nb_decod_unit              
+30	30	+1 # size_address               
+1	4	*4 # nb_instruction             [0] [nb_context]
+1	1	+1 # nb_inst_decod              [0] [nb_decod_unit]
+1	1	+1 # nb_inst_branch_predict     
+1	1	+1 # nb_inst_branch_decod       
+1	1	+1 # nb_inst_branch_update      
+1	1	+1 # nb_inst_branch_complete    
+2	8	*4 # btb_size_queue             
+2	2	+1 # btb_associativity          
+2	2	+1 # btb_size_counter           
+3	3	+1 # btb_victim_scheme          
+1	1	+1 # dir_predictor_scheme       
+1	1	+1 # dir_have_bht               [0] [3]
+1	1	+1 # dir_have_bht               [1] [3]
+1	1	+1 # dir_have_bht               [2] [3]
+1	1	+1 # dir_bht_size_shifter       [0] [3]
+1	1	+1 # dir_bht_size_shifter       [1] [3]
+1	1	+1 # dir_bht_size_shifter       [2] [3]
+1	1	+1 # dir_bht_nb_shifter         [0] [3]
+1	1	+1 # dir_bht_nb_shifter         [1] [3]
+1	1	+1 # dir_bht_nb_shifter         [2] [3]
+1	1	+1 # dir_have_pht               [0] [3]
+1	1	+1 # dir_have_pht               [1] [3]
+1	1	+1 # dir_have_pht               [2] [3]
+1	1	+1 # dir_pht_size_counter       [0] [3]
+1	1	+1 # dir_pht_size_counter       [1] [3]
+1	1	+1 # dir_pht_size_counter       [2] [3]
+1	1	+1 # dir_pht_nb_counter         [0] [3]
+1	1	+1 # dir_pht_nb_counter         [1] [3]
+1	1	+1 # dir_pht_nb_counter         [2] [3]
+1	1	+1 # dir_pht_size_address_share [0] [3]
+1	1	+1 # dir_pht_size_address_share [1] [3]
+1	1	+1 # dir_pht_size_address_share [2] [3]
+2	4	*2 # ras_size_queue             [0] [nb_context]
+1	4	*4 # upt_size_queue             [0] [nb_context]
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/config_mono_context_multi_decod.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/config_mono_context_multi_decod.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/config_mono_context_multi_decod.cfg	(revision 82)
@@ -0,0 +1,41 @@
+Prediction_unit
+1	1	+1 # nb_context                 
+4	4	+1 # nb_decod_unit              
+30	30	+1 # size_address               
+4	4	*4 # nb_instruction             [0] [nb_context]
+4	4	+1 # nb_inst_decod              [0] [nb_decod_unit]
+1	1	+1 # nb_inst_decod              [1] [nb_decod_unit]
+2	2	+1 # nb_inst_decod              [2] [nb_decod_unit]
+8	8	+1 # nb_inst_decod              [3] [nb_decod_unit]
+1	1	+1 # nb_inst_branch_predict     
+1	1	+1 # nb_inst_branch_decod       
+1	1	+1 # nb_inst_branch_update      
+1	1	+1 # nb_inst_branch_complete    
+8	8	*4 # btb_size_queue             
+2	2	+1 # btb_associativity          
+2	2	+1 # btb_size_counter           
+3	3	+1 # btb_victim_scheme          
+1	1	+1 # dir_predictor_scheme       
+1	1	+1 # dir_have_bht               [0] [3]
+1	1	+1 # dir_have_bht               [1] [3]
+1	1	+1 # dir_have_bht               [2] [3]
+1	1	+1 # dir_bht_size_shifter       [0] [3]
+1	1	+1 # dir_bht_size_shifter       [1] [3]
+1	1	+1 # dir_bht_size_shifter       [2] [3]
+1	1	+1 # dir_bht_nb_shifter         [0] [3]
+1	1	+1 # dir_bht_nb_shifter         [1] [3]
+1	1	+1 # dir_bht_nb_shifter         [2] [3]
+1	1	+1 # dir_have_pht               [0] [3]
+1	1	+1 # dir_have_pht               [1] [3]
+1	1	+1 # dir_have_pht               [2] [3]
+1	1	+1 # dir_pht_size_counter       [0] [3]
+1	1	+1 # dir_pht_size_counter       [1] [3]
+1	1	+1 # dir_pht_size_counter       [2] [3]
+1	1	+1 # dir_pht_nb_counter         [0] [3]
+1	1	+1 # dir_pht_nb_counter         [1] [3]
+1	1	+1 # dir_pht_nb_counter         [2] [3]
+1	1	+1 # dir_pht_size_address_share [0] [3]
+1	1	+1 # dir_pht_size_address_share [1] [3]
+1	1	+1 # dir_pht_size_address_share [2] [3]
+4	4	*2 # ras_size_queue             [0] [nb_context]
+4	4	*4 # upt_size_queue             [0] [nb_context]
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/config_multi_context.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/config_multi_context.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/config_multi_context.cfg	(revision 82)
@@ -0,0 +1,47 @@
+Prediction_unit
+4	4	+1 # nb_context                 
+1	1	+1 # nb_decod_unit              
+30	30	+1 # size_address               
+1	1	*4 # nb_instruction             [0] [nb_context]
+2	2	*4 # nb_instruction             [1] [nb_context]
+4	4	*4 # nb_instruction             [2] [nb_context]
+8	8	*4 # nb_instruction             [3] [nb_context]
+1	1	+1 # nb_inst_decod              [0] [nb_decod_unit]
+1	1	+1 # nb_inst_branch_predict     
+1	1	+1 # nb_inst_branch_decod       
+1	1	+1 # nb_inst_branch_update      
+1	1	+1 # nb_inst_branch_complete    
+16	16	*4 # btb_size_queue             
+8	8	+1 # btb_associativity          
+2	2	+1 # btb_size_counter           
+3	3	+1 # btb_victim_scheme          
+1	1	+1 # dir_predictor_scheme       
+1	1	+1 # dir_have_bht               [0] [3]
+1	1	+1 # dir_have_bht               [1] [3]
+1	1	+1 # dir_have_bht               [2] [3]
+1	1	+1 # dir_bht_size_shifter       [0] [3]
+1	1	+1 # dir_bht_size_shifter       [1] [3]
+1	1	+1 # dir_bht_size_shifter       [2] [3]
+1	1	+1 # dir_bht_nb_shifter         [0] [3]
+1	1	+1 # dir_bht_nb_shifter         [1] [3]
+1	1	+1 # dir_bht_nb_shifter         [2] [3]
+1	1	+1 # dir_have_pht               [0] [3]
+1	1	+1 # dir_have_pht               [1] [3]
+1	1	+1 # dir_have_pht               [2] [3]
+1	1	+1 # dir_pht_size_counter       [0] [3]
+1	1	+1 # dir_pht_size_counter       [1] [3]
+1	1	+1 # dir_pht_size_counter       [2] [3]
+1	1	+1 # dir_pht_nb_counter         [0] [3]
+1	1	+1 # dir_pht_nb_counter         [1] [3]
+1	1	+1 # dir_pht_nb_counter         [2] [3]
+1	1	+1 # dir_pht_size_address_share [0] [3]
+1	1	+1 # dir_pht_size_address_share [1] [3]
+1	1	+1 # dir_pht_size_address_share [2] [3]
+2	2	*2 # ras_size_queue             [0] [nb_context]
+8	8	*2 # ras_size_queue             [1] [nb_context]
+4	4	*2 # ras_size_queue             [2] [nb_context]
+2	2	*2 # ras_size_queue             [3] [nb_context]
+2	2	*4 # upt_size_queue             [0] [nb_context]
+4	4	*4 # upt_size_queue             [1] [nb_context]
+4	4	*4 # upt_size_queue             [2] [nb_context]
+1	1	*4 # upt_size_queue             [3] [nb_context]
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/configuration.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/configuration.cfg	(revision 81)
+++ 	(revision )
@@ -1,1 +1,0 @@
-Prediction_unit
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/src/main.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/src/main.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/src/main.cpp	(revision 82)
@@ -8,5 +8,5 @@
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/include/test.h"
 
-#define NB_PARAMS 0
+#define NB_PARAMS (12+3*7)
 
 void usage (int argc, char * argv[])
@@ -14,5 +14,27 @@
   err (_("<Usage> %s name_instance list_params.\n"),argv[0]);
   err (_("list_params is :\n"));
-  err (_(" * ()\n"));
+  err (_(" * nb_context                                (uint32_t    )\n"));
+  err (_(" * nb_decod_unit                             (uint32_t    )\n"));
+  err (_(" * size_address                              (uint32_t    )\n"));
+  err (_(" * nb_instruction             [nb_context]   (uint32_t    )\n"));
+  err (_(" * nb_inst_decod              [nb_decod_unit](uint32_t    )\n"));
+  err (_(" * nb_inst_branch_predict                    (uint32_t    )\n"));
+  err (_(" * nb_inst_branch_decod                      (uint32_t    )\n"));
+  err (_(" * nb_inst_branch_update                     (uint32_t    )\n"));
+  err (_(" * nb_inst_branch_complete                   (uint32_t    )\n"));
+  err (_(" * btb_size_queue                            (uint32_t    )\n"));
+  err (_(" * btb_associativity                         (uint32_t    )\n"));
+  err (_(" * btb_size_counter                          (uint32_t    )\n"));
+  err (_(" * btb_victim_scheme                         (Tvictim_t   )\n"));
+  err (_(" * dir_predictor_scheme                      (Tpredictor_t)\n"));
+  err (_(" * dir_have_bht               [3]            (bool        )\n"));
+  err (_(" * dir_bht_size_shifter       [3]            (uint32_t    )\n"));
+  err (_(" * dir_bht_nb_shifter         [3]            (uint32_t    )\n"));
+  err (_(" * dir_have_pht               [3]            (bool        )\n"));
+  err (_(" * dir_pht_size_counter       [3]            (uint32_t    )\n"));
+  err (_(" * dir_pht_nb_counter         [3]            (uint32_t    )\n"));
+  err (_(" * dir_pht_size_address_share [3]            (uint32_t    )\n"));
+  err (_(" * ras_size_queue             [nb_context]   (uint32_t    )\n"));
+  err (_(" * upt_size_queue             [nb_context]   (uint32_t    )\n"));
 
   exit (1);
@@ -25,5 +47,5 @@
 #endif
 {
-  if (argc != static_cast<int>(2+NB_PARAMS))
+  if (argc < static_cast<int>(2+NB_PARAMS))
     usage (argc, argv);
 
@@ -31,6 +53,53 @@
 
   string name = argv[x++];
-//const uint32_t size_data = atoi(argv[x++]);
-//const uint32_t nb_port   = atoi(argv[x++]);
+  uint32_t     _nb_context                     = fromString<uint32_t>(argv[x++]);
+  uint32_t     _nb_decod_unit                  = fromString<uint32_t>(argv[x++]);
+  uint32_t     _size_address                   = fromString<uint32_t>(argv[x++]);
+
+  if (argc != static_cast<int>(2+NB_PARAMS+3*_nb_context+_nb_decod_unit))
+    usage (argc, argv);
+
+  uint32_t *   _nb_instruction                 = new uint32_t [_nb_context];
+  for (uint32_t i=0; i<_nb_context; i++)
+    _nb_instruction [i]                        = fromString<uint32_t    >(argv[x++]);
+  uint32_t *   _nb_inst_decod                  = new uint32_t [_nb_decod_unit];
+  for (uint32_t i=0; i<_nb_decod_unit; i++)
+    _nb_inst_decod [i]                         = fromString<uint32_t    >(argv[x++]);
+  uint32_t     _nb_inst_branch_predict         = fromString<uint32_t    >(argv[x++]);
+  uint32_t     _nb_inst_branch_decod           = fromString<uint32_t    >(argv[x++]);
+  uint32_t     _nb_inst_branch_update          = fromString<uint32_t    >(argv[x++]);
+  uint32_t     _nb_inst_branch_complete        = fromString<uint32_t    >(argv[x++]);
+  uint32_t     _btb_size_queue                 = fromString<uint32_t    >(argv[x++]);
+  uint32_t     _btb_associativity              = fromString<uint32_t    >(argv[x++]);
+  uint32_t     _btb_size_counter               = fromString<uint32_t    >(argv[x++]);
+  Tvictim_t    _btb_victim_scheme              = fromString<Tvictim_t   >(argv[x++]);
+  Tpredictor_t _dir_predictor_scheme           = fromString<Tpredictor_t>(argv[x++]);
+  bool         _dir_have_bht               [3];
+  for (uint32_t i=0; i<3; i++)
+    _dir_have_bht [i]                          = fromString<bool        >(argv[x++]);
+  uint32_t     _dir_bht_size_shifter       [3];
+  for (uint32_t i=0; i<3; i++)
+    _dir_bht_size_shifter [i]                  = fromString<uint32_t    >(argv[x++]);
+  uint32_t     _dir_bht_nb_shifter         [3];
+  for (uint32_t i=0; i<3; i++)
+    _dir_bht_nb_shifter [i]                    = fromString<uint32_t    >(argv[x++]);
+  bool         _dir_have_pht               [3];
+  for (uint32_t i=0; i<3; i++)
+    _dir_have_pht [i]                          = fromString<bool        >(argv[x++]);
+  uint32_t     _dir_pht_size_counter       [3];
+  for (uint32_t i=0; i<3; i++)
+    _dir_pht_size_counter [i]                  = fromString<uint32_t    >(argv[x++]);
+  uint32_t     _dir_pht_nb_counter         [3];
+  for (uint32_t i=0; i<3; i++)
+    _dir_pht_nb_counter [i]                    = fromString<uint32_t    >(argv[x++]);
+  uint32_t     _dir_pht_size_address_share [3];
+  for (uint32_t i=0; i<3; i++)
+    _dir_pht_size_address_share [i]            = fromString<uint32_t    >(argv[x++]);
+  uint32_t *   _ras_size_queue                 = new uint32_t    [_nb_context];
+  for (uint32_t i=0; i<_nb_context; i++)
+    _ras_size_queue [i]                        = fromString<uint32_t    >(argv[x++]);
+  uint32_t *   _upt_size_queue                 = new uint32_t    [_nb_context];
+  for (uint32_t i=0; i<_nb_context; i++)
+    _upt_size_queue [i]                        = fromString<uint32_t    >(argv[x++]);
 
   int _return = EXIT_SUCCESS;
@@ -38,7 +107,28 @@
     {
       morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::Parameters * param = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::Parameters
-	(//size_data,
-	 //nb_port  
-        );
+	(_nb_context                ,
+	 _nb_decod_unit             ,
+	 _size_address              ,
+	 _nb_instruction            ,
+	 _nb_inst_decod             ,
+	 _nb_inst_branch_predict    ,
+	 _nb_inst_branch_decod      ,
+	 _nb_inst_branch_update     ,
+	 _nb_inst_branch_complete   ,
+	 _btb_size_queue            ,
+	 _btb_associativity         ,
+	 _btb_size_counter          ,
+	 _btb_victim_scheme         ,
+	 _dir_predictor_scheme      ,
+	 _dir_have_bht              ,
+	 _dir_bht_size_shifter      ,
+	 _dir_bht_nb_shifter        ,
+	 _dir_have_pht              ,
+	 _dir_pht_size_counter      ,
+	 _dir_pht_nb_counter        ,
+	 _dir_pht_size_address_share,
+	 _ras_size_queue            ,
+	 _upt_size_queue            
+	 );
       
       msg(_("%s"),param->print(1).c_str());
@@ -57,4 +147,9 @@
     }
 
+  delete [] _nb_instruction            ;
+  delete [] _nb_inst_decod             ;
+  delete [] _ras_size_queue            ;
+  delete [] _upt_size_queue            ;
+
   return (_return);
 }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/src/test.cpp	(revision 82)
@@ -23,9 +23,11 @@
 #endif
 
-  Prediction_unit * _Prediction_unit = new Prediction_unit (name.c_str(),
+  Prediction_unit * _Prediction_unit = new Prediction_unit 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
-#endif
-					     _param);
+     _parameters_statistics,
+#endif
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
@@ -37,4 +39,50 @@
   sc_clock              *  in_CLOCK  = new sc_clock ("clock", 1.0, 0.5);	 
   sc_signal<Tcontrol_t> *  in_NRESET = new sc_signal<Tcontrol_t> ("NRESET");
+
+
+  ALLOC1_SC_SIGNAL( in_PREDICT_VAL                        ," in_PREDICT_VAL                        ",Tcontrol_t         ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL(out_PREDICT_ACK                        ,"out_PREDICT_ACK                        ",Tcontrol_t         ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL( in_PREDICT_PC_PREVIOUS                ," in_PREDICT_PC_PREVIOUS                ",Taddress_t         ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL( in_PREDICT_PC_CURRENT                 ," in_PREDICT_PC_CURRENT                 ",Taddress_t         ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL( in_PREDICT_PC_CURRENT_IS_DS_TAKE      ," in_PREDICT_PC_CURRENT_IS_DS_TAKE      ",Tcontrol_t         ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL(out_PREDICT_PC_NEXT                    ,"out_PREDICT_PC_NEXT                    ",Taddress_t         ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL(out_PREDICT_PC_NEXT_IS_DS_TAKE         ,"out_PREDICT_PC_NEXT_IS_DS_TAKE         ",Tcontrol_t         ,_param->_nb_context);
+  ALLOC2_SC_SIGNAL(out_PREDICT_INSTRUCTION_ENABLE         ,"out_PREDICT_INSTRUCTION_ENABLE         ",Tcontrol_t         ,_param->_nb_context,_param->_nb_instruction[alloc_signal_it1]);
+  ALLOC1_SC_SIGNAL(out_PREDICT_INST_IFETCH_PTR            ,"out_PREDICT_INST_IFETCH_PTR            ",Tinst_ifetch_ptr_t ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL(out_PREDICT_BRANCH_STATE               ,"out_PREDICT_BRANCH_STATE               ",Tbranch_state_t    ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID,"out_PREDICT_BRANCH_UPDATE_PREDICTION_ID",Tprediction_ptr_t  ,_param->_nb_context);
+												                         
+  ALLOC2_SC_SIGNAL( in_DECOD_VAL                          ," in_DECOD_VAL                          ",Tcontrol_t         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL(out_DECOD_ACK                          ,"out_DECOD_ACK                          ",Tcontrol_t         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_CONTEXT_ID                   ," in_DECOD_CONTEXT_ID                   ",Tcontext_t         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_MATCH_INST_IFETCH_PTR        ," in_DECOD_MATCH_INST_IFETCH_PTR        ",Tcontrol_t         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_STATE                 ," in_DECOD_BRANCH_STATE                 ",Tbranch_state_t    ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_UPDATE_PREDICTION_ID  ," in_DECOD_BRANCH_UPDATE_PREDICTION_ID  ",Tprediction_ptr_t  ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_CONDITION             ," in_DECOD_BRANCH_CONDITION             ",Tbranch_condition_t,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_BRANCH_DIRECTION             ," in_DECOD_BRANCH_DIRECTION             ",Tcontrol_t         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_ADDRESS_SRC                  ," in_DECOD_ADDRESS_SRC                  ",Taddress_t         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  ALLOC2_SC_SIGNAL( in_DECOD_ADDRESS_DEST                 ," in_DECOD_ADDRESS_DEST                 ",Taddress_t         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+												                         
+  ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_VAL                ," in_BRANCH_COMPLETE_VAL                ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
+  ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ACK                ,"out_BRANCH_COMPLETE_ACK                ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
+  ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_CONTEXT_ID         ," in_BRANCH_COMPLETE_CONTEXT_ID         ",Tcontext_t         ,_param->_nb_inst_branch_complete);
+  ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_DEPTH              ," in_BRANCH_COMPLETE_DEPTH              ",Tdepth_t           ,_param->_nb_inst_branch_complete);
+  ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_ADDRESS            ," in_BRANCH_COMPLETE_ADDRESS            ",Taddress_t         ,_param->_nb_inst_branch_complete);
+  ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_FLAG               ," in_BRANCH_COMPLETE_FLAG               ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
+  ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_MISS_PREDICTION    ,"out_BRANCH_COMPLETE_MISS_PREDICTION    ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
+  ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_TAKE               ,"out_BRANCH_COMPLETE_TAKE               ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
+  ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_SRC        ,"out_BRANCH_COMPLETE_ADDRESS_SRC        ",Taddress_t         ,_param->_nb_inst_branch_complete);
+  ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_DEST       ,"out_BRANCH_COMPLETE_ADDRESS_DEST       ",Taddress_t         ,_param->_nb_inst_branch_complete);
+												                         
+  ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_VAL                   ,"out_BRANCH_EVENT_VAL                   ",Tcontrol_t         ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_ACK                   ," in_BRANCH_EVENT_ACK                   ",Tcontrol_t         ,_param->_nb_context);
+//ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_CONTEXT_ID            ,"out_BRANCH_EVENT_CONTEXT_ID            ",Tcontext_t         ,_param->_nb_context);
+//ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_DEPTH                 ,"out_BRANCH_EVENT_DEPTH                 ",Tdepth_t           ,_param->_nb_context);
+//ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_MISS_PREDICTION       ,"out_BRANCH_EVENT_MISS_PREDICTION       ",Tcontrol_t         ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_SRC           ,"out_BRANCH_EVENT_ADDRESS_SRC           ",Taddress_t         ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_DEST          ,"out_BRANCH_EVENT_ADDRESS_DEST          ",Taddress_t         ,_param->_nb_context);
+												                         
+  ALLOC1_SC_SIGNAL(out_DEPTH_NB_BRANCH                    ,"out_DEPTH_NB_BRANCH                    ",Tdepth_t           ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL(out_DEPTH_TAIL                         ,"out_DEPTH_TAIL                         ",Tdepth_t           ,_param->_nb_context);
   
   /********************************************************
@@ -47,4 +95,61 @@
   (*(_Prediction_unit->in_NRESET))       (*(in_NRESET));
 
+  INSTANCE1_SC_SIGNAL(_Prediction_unit, in_PREDICT_VAL                        ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit,out_PREDICT_ACK                        ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit, in_PREDICT_PC_PREVIOUS                ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit, in_PREDICT_PC_CURRENT                 ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit, in_PREDICT_PC_CURRENT_IS_DS_TAKE      ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit,out_PREDICT_PC_NEXT                    ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit,out_PREDICT_PC_NEXT_IS_DS_TAKE         ,_param->_nb_context);
+  INSTANCE2_SC_SIGNAL(_Prediction_unit,out_PREDICT_INSTRUCTION_ENABLE         ,_param->_nb_context,_param->_nb_instruction[alloc_signal_it1]);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit,out_PREDICT_BRANCH_STATE               ,_param->_nb_context);
+
+  for (uint32_t i=0; i<_param->_nb_context; i++)
+    {
+      if (_param->_have_port_inst_ifetch_ptr [i])
+	INSTANCE_SC_SIGNAL(_Prediction_unit,out_PREDICT_INST_IFETCH_PTR [i]);
+      if (_param->_have_port_depth [i])
+	INSTANCE_SC_SIGNAL(_Prediction_unit,out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [i]);
+    }
+
+  INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_VAL                          ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  INSTANCE2_SC_SIGNAL(_Prediction_unit,out_DECOD_ACK                          ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  if (_param->_have_port_context_id)
+  INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_CONTEXT_ID                   ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_MATCH_INST_IFETCH_PTR        ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_BRANCH_STATE                 ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  if (_param->_have_port_max_depth)
+  INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_BRANCH_UPDATE_PREDICTION_ID  ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_BRANCH_CONDITION             ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_BRANCH_DIRECTION             ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_ADDRESS_SRC                  ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  INSTANCE2_SC_SIGNAL(_Prediction_unit, in_DECOD_ADDRESS_DEST                 ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+
+  INSTANCE1_SC_SIGNAL(_Prediction_unit, in_BRANCH_COMPLETE_VAL                ,_param->_nb_inst_branch_complete);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_COMPLETE_ACK                ,_param->_nb_inst_branch_complete);
+  if (_param->_have_port_context_id)
+  INSTANCE1_SC_SIGNAL(_Prediction_unit, in_BRANCH_COMPLETE_CONTEXT_ID         ,_param->_nb_inst_branch_complete);
+  if (_param->_have_port_max_depth)
+  INSTANCE1_SC_SIGNAL(_Prediction_unit, in_BRANCH_COMPLETE_DEPTH              ,_param->_nb_inst_branch_complete);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit, in_BRANCH_COMPLETE_ADDRESS            ,_param->_nb_inst_branch_complete);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit, in_BRANCH_COMPLETE_FLAG               ,_param->_nb_inst_branch_complete);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_COMPLETE_MISS_PREDICTION    ,_param->_nb_inst_branch_complete);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_COMPLETE_TAKE               ,_param->_nb_inst_branch_complete);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_COMPLETE_ADDRESS_SRC        ,_param->_nb_inst_branch_complete);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_COMPLETE_ADDRESS_DEST       ,_param->_nb_inst_branch_complete);
+
+  INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_EVENT_VAL                   ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit, in_BRANCH_EVENT_ACK                   ,_param->_nb_context);
+//if (_param->_have_port_context_id)
+//INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_EVENT_CONTEXT_ID            ,_param->_nb_context);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_EVENT_DEPTH                 ,_param->_nb_context);
+//INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_EVENT_MISS_PREDICTION       ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_EVENT_ADDRESS_SRC           ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_EVENT_ADDRESS_DEST          ,_param->_nb_context);
+
+  INSTANCE1_SC_SIGNAL(_Prediction_unit,out_DEPTH_NB_BRANCH                    ,_param->_nb_context);
+  for (uint32_t i=0; i<_param->_nb_context; i++)
+    if (_param->_have_port_depth[i])
+      INSTANCE_SC_SIGNAL(_Prediction_unit,out_DEPTH_TAIL [i]);
 
   msg(_("<%s> : Start Simulation ............\n"),name.c_str());
@@ -91,4 +196,49 @@
   delete in_CLOCK;
   delete in_NRESET;
+
+  DELETE1_SC_SIGNAL( in_PREDICT_VAL                        ,_param->_nb_context);
+  DELETE1_SC_SIGNAL(out_PREDICT_ACK                        ,_param->_nb_context);
+  DELETE1_SC_SIGNAL( in_PREDICT_PC_PREVIOUS                ,_param->_nb_context);
+  DELETE1_SC_SIGNAL( in_PREDICT_PC_CURRENT                 ,_param->_nb_context);
+  DELETE1_SC_SIGNAL( in_PREDICT_PC_CURRENT_IS_DS_TAKE      ,_param->_nb_context);
+  DELETE1_SC_SIGNAL(out_PREDICT_PC_NEXT                    ,_param->_nb_context);
+  DELETE1_SC_SIGNAL(out_PREDICT_PC_NEXT_IS_DS_TAKE         ,_param->_nb_context);
+  DELETE1_SC_SIGNAL(out_PREDICT_INST_IFETCH_PTR            ,_param->_nb_context);
+  DELETE1_SC_SIGNAL(out_PREDICT_BRANCH_STATE               ,_param->_nb_context);
+  DELETE1_SC_SIGNAL(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_context);
+
+  DELETE2_SC_SIGNAL(out_PREDICT_INSTRUCTION_ENABLE       ,_param->_nb_context,_param->_nb_instruction[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_VAL                        ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL(out_DECOD_ACK                        ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_CONTEXT_ID                 ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_MATCH_INST_IFETCH_PTR      ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_BRANCH_STATE               ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_BRANCH_CONDITION           ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_BRANCH_DIRECTION           ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_ADDRESS_SRC                ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+  DELETE2_SC_SIGNAL( in_DECOD_ADDRESS_DEST               ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+
+  DELETE1_SC_SIGNAL( in_BRANCH_COMPLETE_VAL            ,_param->_nb_inst_branch_complete);
+  DELETE1_SC_SIGNAL(out_BRANCH_COMPLETE_ACK            ,_param->_nb_inst_branch_complete);
+  DELETE1_SC_SIGNAL( in_BRANCH_COMPLETE_CONTEXT_ID     ,_param->_nb_inst_branch_complete);
+  DELETE1_SC_SIGNAL( in_BRANCH_COMPLETE_DEPTH          ,_param->_nb_inst_branch_complete);
+  DELETE1_SC_SIGNAL( in_BRANCH_COMPLETE_ADDRESS        ,_param->_nb_inst_branch_complete);
+  DELETE1_SC_SIGNAL( in_BRANCH_COMPLETE_FLAG           ,_param->_nb_inst_branch_complete);
+  DELETE1_SC_SIGNAL(out_BRANCH_COMPLETE_MISS_PREDICTION,_param->_nb_inst_branch_complete);
+  DELETE1_SC_SIGNAL(out_BRANCH_COMPLETE_TAKE           ,_param->_nb_inst_branch_complete);
+  DELETE1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_SRC    ,_param->_nb_inst_branch_complete);
+  DELETE1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_DEST   ,_param->_nb_inst_branch_complete);
+
+  DELETE1_SC_SIGNAL(out_BRANCH_EVENT_VAL            ,_param->_nb_context);
+  DELETE1_SC_SIGNAL( in_BRANCH_EVENT_ACK            ,_param->_nb_context);
+//DELETE1_SC_SIGNAL(out_BRANCH_EVENT_CONTEXT_ID     ,_param->_nb_context);
+//DELETE1_SC_SIGNAL(out_BRANCH_EVENT_DEPTH          ,_param->_nb_context);
+//DELETE1_SC_SIGNAL(out_BRANCH_EVENT_MISS_PREDICTION,_param->_nb_context);
+  DELETE1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_SRC    ,_param->_nb_context);
+  DELETE1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_DEST   ,_param->_nb_context);
+
+  DELETE1_SC_SIGNAL(out_DEPTH_NB_BRANCH    ,_param->_nb_context);
+  DELETE1_SC_SIGNAL(out_DEPTH_TAIL         ,_param->_nb_context);
 #endif
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/config_min.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/config_min.cfg	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/config_min.cfg	(revision 82)
@@ -0,0 +1,10 @@
+Update_Prediction_Table
+1	1	+1	# nb_context             
+1	4	*4	# size_queue             [0] [nb_context]
+32	32	*2	# size_address           
+1	1	*4	# nb_inst_predict        
+1	1	*4	# nb_inst_decod          
+1	1	*4	# nb_inst_branch_complete
+1	1	*4	# nb_inst_update         
+0	0	+1	# size_history           
+1	1	*2	# size_ras_index         [0] [nb_context]
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/src/test.cpp	(revision 82)
@@ -71,7 +71,9 @@
   ALLOC1_SC_SIGNAL( in_DECOD_RAS_ADDRESS              ," in_DECOD_RAS_ADDRESS              ",Taddress_t         ,_param->_nb_inst_decod);
   ALLOC1_SC_SIGNAL( in_DECOD_RAS_INDEX                ," in_DECOD_RAS_INDEX                ",Tptr_t             ,_param->_nb_inst_decod);
-  ALLOC1_SC_SIGNAL( in_DECOD_MISS_PREDICTION          ," in_DECOD_MISS_PREDICTION          ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_MISS_IFETCH              ," in_DECOD_MISS_IFETCH              ",Tcontrol_t         ,_param->_nb_inst_decod);
+  ALLOC1_SC_SIGNAL( in_DECOD_MISS_DECOD               ," in_DECOD_MISS_DECOD               ",Tcontrol_t         ,_param->_nb_inst_decod);
   ALLOC1_SC_SIGNAL( in_DECOD_UPDATE_PREDICTION_ID     ," in_DECOD_UPDATE_PREDICTION_ID     ",Tprediction_ptr_t  ,_param->_nb_inst_decod);
 //ALLOC1_SC_SIGNAL(out_DECOD_DEPTH                    ,"out_DECOD_DEPTH                    ",Tdepth_t           ,_param->_nb_inst_decod);
+
   ALLOC1_SC_SIGNAL( in_BRANCH_COMPLETE_VAL            ," in_BRANCH_COMPLETE_VAL            ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
   ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ACK            ,"out_BRANCH_COMPLETE_ACK            ",Tcontrol_t         ,_param->_nb_inst_branch_complete);
@@ -84,4 +86,13 @@
   ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_SRC    ,"out_BRANCH_COMPLETE_ADDRESS_SRC    ",Taddress_t         ,_param->_nb_inst_branch_complete);
   ALLOC1_SC_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_DEST   ,"out_BRANCH_COMPLETE_ADDRESS_DEST   ",Taddress_t         ,_param->_nb_inst_branch_complete);
+
+  ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_VAL            ,"out_BRANCH_EVENT_VAL            ",Tcontrol_t         ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_ACK            ," in_BRANCH_EVENT_ACK            ",Tcontrol_t         ,_param->_nb_context);
+//   ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_CONTEXT_ID     ," in_BRANCH_EVENT_CONTEXT_ID     ",Tcontext_t         ,_param->_nb_context);
+//   ALLOC1_SC_SIGNAL( in_BRANCH_EVENT_DEPTH          ," in_BRANCH_EVENT_DEPTH          ",Tdepth_t           ,_param->_nb_context);
+//   ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_MISS_PREDICTION,"out_BRANCH_EVENT_MISS_PREDICTION",Tcontrol_t         ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_SRC    ,"out_BRANCH_EVENT_ADDRESS_SRC    ",Taddress_t         ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_DEST   ,"out_BRANCH_EVENT_ADDRESS_DEST   ",Taddress_t         ,_param->_nb_context);
+
   ALLOC1_SC_SIGNAL(out_UPDATE_VAL                     ,"out_UPDATE_VAL                     ",Tcontrol_t         ,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL( in_UPDATE_ACK                     ," in_UPDATE_ACK                     ",Tcontrol_t         ,_param->_nb_inst_update);
@@ -96,4 +107,5 @@
   ALLOC1_SC_SIGNAL(out_UPDATE_DIR_HISTORY             ,"out_UPDATE_DIR_HISTORY             ",Thistory_t         ,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL(out_UPDATE_RAS_VAL                 ,"out_UPDATE_RAS_VAL                 ",Tcontrol_t         ,_param->_nb_inst_update);
+  ALLOC1_SC_SIGNAL(out_UPDATE_RAS_PUSH                ,"out_UPDATE_RAS_PUSH                ",Tcontrol_t         ,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL(out_UPDATE_RAS_ADDRESS             ,"out_UPDATE_RAS_ADDRESS             ",Taddress_t         ,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL(out_UPDATE_RAS_INDEX               ,"out_UPDATE_RAS_INDEX               ",Tptr_t             ,_param->_nb_inst_update);
@@ -136,6 +148,7 @@
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_RAS_ADDRESS              ,_param->_nb_inst_decod);
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_RAS_INDEX                ,_param->_nb_inst_decod);
-  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_MISS_PREDICTION          ,_param->_nb_inst_decod);
-  if (_param->_have_port_depth)
+  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_MISS_IFETCH              ,_param->_nb_inst_decod);
+  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_MISS_DECOD               ,_param->_nb_inst_decod);
+  if (_param->_have_port_max_depth)
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_DECOD_UPDATE_PREDICTION_ID     ,_param->_nb_inst_decod);
 //if (_param->_have_port_depth)
@@ -145,5 +158,5 @@
   if (_param->_have_port_context_id)
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_CONTEXT_ID     ,_param->_nb_inst_branch_complete);
-  if (_param->_have_port_depth)
+  if (_param->_have_port_max_depth)
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_DEPTH          ,_param->_nb_inst_branch_complete);
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_COMPLETE_ADDRESS        ,_param->_nb_inst_branch_complete);
@@ -153,4 +166,16 @@
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_COMPLETE_ADDRESS_SRC    ,_param->_nb_inst_branch_complete);
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_COMPLETE_ADDRESS_DEST   ,_param->_nb_inst_branch_complete);
+
+  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_VAL            ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_ACK            ,_param->_nb_context);
+//   if (_param->_have_port_context_id)
+//   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_CONTEXT_ID     ,_param->_nb_context);
+//   if (_param->_have_port_max_depth)
+//   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_DEPTH          ,_param->_nb_context);
+//   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_BRANCH_EVENT_ADDRESS        ,_param->_nb_context);
+//   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_MISS_PREDICTION,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_ADDRESS_SRC    ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_BRANCH_EVENT_ADDRESS_DEST   ,_param->_nb_context);
+
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_VAL                     ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_UPDATE_ACK                     ,_param->_nb_inst_update);
@@ -167,11 +192,16 @@
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_DIR_HISTORY             ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_VAL                 ,_param->_nb_inst_update);
+  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_PUSH                ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_ADDRESS             ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_INDEX               ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_RAS_PREDICTION_IFETCH   ,_param->_nb_inst_update);
-  if (_param->_have_port_depth)
-  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_NB_BRANCH                ,_param->_nb_context);
-  if (_param->_have_port_depth)
-  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_TAIL                     ,_param->_nb_context);
+  for (uint32_t i=0; i<_param->_nb_context; i++)
+    {
+      if (_param->_have_port_depth[i])
+	{
+	  INSTANCE_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_TAIL      [i]);
+	}
+      INSTANCE_SC_SIGNAL(_Update_Prediction_Table,out_DEPTH_NB_BRANCH [i]);
+    }
 
   msg(_("<%s> : Start Simulation ............\n"),name.c_str());
@@ -202,4 +232,9 @@
   SC_START(5);
   in_NRESET->write(1);  
+
+  for (uint32_t i=0; i<_param->_nb_context; i++)
+    {
+      PORT_WRITE(in_BRANCH_EVENT_ACK [i],1);
+    }
 
   LABEL("Loop of Test");
@@ -236,9 +271,10 @@
 		  in_PREDICT_RAS_INDEX        [port]->write((0x12345678+i)%_param->_size_ras_index[context]);
 		  
-		  if (_param->_have_port_depth)
+		  if (_param->_have_port_depth[context])
 		    {
 		      TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
+		    }
 		      TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i);
-		    }
+		      
 		  SC_START(0);
 		  
@@ -256,9 +292,10 @@
 	      in_PREDICT_VAL              [port]->write(0);
 	      
-	      if (_param->_have_port_depth)
+	      if (_param->_have_port_depth[context])
 		{
 		  TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
+		}
 		  TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i+1);
-		}
+
 	    }
 	}
@@ -283,12 +320,13 @@
 		  in_DECOD_RAS_ADDRESS          [port]->write(0xdeaddead+i);
 		  in_DECOD_RAS_INDEX            [port]->write((0x12345678+i)%_param->_size_ras_index[context]);
-		  in_DECOD_MISS_PREDICTION      [port]->write(false);
+		  in_DECOD_MISS_IFETCH          [port]->write(false);
+		  in_DECOD_MISS_DECOD           [port]->write(false);
 		  in_DECOD_UPDATE_PREDICTION_ID [port]->write(i);
 		  
-		  if (_param->_have_port_depth)
+		  if (_param->_have_port_depth[context])
 		    {
 		      TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
+		    }
 		      TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]);
-		    }
 		  
 		  SC_START(0);
@@ -307,9 +345,9 @@
 	      in_DECOD_VAL              [port]->write(0);
 	      
-	      if (_param->_have_port_depth)
+	      if (_param->_have_port_depth[context])
 		{
 		  TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
+		}
 		  TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]);
-		}
 	    }
 	}
@@ -331,9 +369,9 @@
 		  in_BRANCH_COMPLETE_FLAG                 [port]->write(1);
 		  
-		  if (_param->_have_port_depth)
+		  if (_param->_have_port_depth[context])
 		    {
 		      TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
+		    }
 		      TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]);
-		    }
 		  
 		  SC_START(0);
@@ -357,9 +395,9 @@
 	      in_BRANCH_COMPLETE_VAL              [port]->write(0);
 	      
-	      if (_param->_have_port_depth)
+	      if (_param->_have_port_depth[context])
 		{
 		  TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
+		}
 		  TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]);
-		}
 	    }
 	}
@@ -396,4 +434,5 @@
 			TEST(Thistory_t         ,out_UPDATE_DIR_HISTORY           [port]->read(), i);
 		      TEST(Tcontrol_t         ,out_UPDATE_RAS_VAL               [port]->read(), 0);
+		      TEST(Tcontrol_t         ,out_UPDATE_RAS_PUSH              [port]->read(), 0);
 		      TEST(Taddress_t         ,out_UPDATE_RAS_ADDRESS           [port]->read(), 0xdeaddead+i);
 		      TEST(Tptr_t             ,out_UPDATE_RAS_INDEX             [port]->read(), (0x12345678+i)%_param->_size_ras_index[context]);
@@ -411,11 +450,10 @@
   
 	  // wait the garbage collector
-	  if (_param->_have_port_depth)
-	    while ((out_DEPTH_TAIL     [context]->read() != 0) and
-		   (out_DEPTH_NB_BRANCH[context]->read() != 0))
-	      {
-		LABEL("DEPTH [%d] nb_branch : %d - tail : %d",context,out_DEPTH_NB_BRANCH[context]->read(), out_DEPTH_TAIL [context]->read());
-		SC_START(1);
-	      }
+	  while ((not (_param->_have_port_depth[context]) or (out_DEPTH_TAIL     [context]->read() != 0)) and
+		 (out_DEPTH_NB_BRANCH[context]->read() != 0))
+	    {
+	      LABEL("DEPTH [%d] nb_branch : %d - tail : %d",context,out_DEPTH_NB_BRANCH[context]->read(), out_DEPTH_TAIL [context]->read());
+	      SC_START(1);
+	    }
 	}
       }
@@ -448,9 +486,10 @@
 		  in_PREDICT_RAS_INDEX        [port]->write((0x12345678+i)%_param->_size_ras_index[context]);
 		  
-		  if (_param->_have_port_depth)
+		  if (_param->_have_port_depth[context])
 		    {
 		      TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
+		    }
 		      TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i);
-		    }
+
 		  SC_START(0);
 		  
@@ -468,9 +507,9 @@
 	      in_PREDICT_VAL              [port]->write(0);
 	      
-	      if (_param->_have_port_depth)
+	      if (_param->_have_port_depth[context])
 		{
 		  TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
+		}
 		  TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), i+1);
-		}
 	    }
 	}
@@ -495,12 +534,13 @@
 		  in_DECOD_RAS_ADDRESS          [port]->write(0xdeaddead+i);
 		  in_DECOD_RAS_INDEX            [port]->write((0x12345678+i)%_param->_size_ras_index[context]);
-		  in_DECOD_MISS_PREDICTION      [port]->write(false);
+		  in_DECOD_MISS_IFETCH          [port]->write(false);
+		  in_DECOD_MISS_DECOD           [port]->write(false);
 		  in_DECOD_UPDATE_PREDICTION_ID [port]->write(i);
 		  
-		  if (_param->_have_port_depth)
+		  if (_param->_have_port_depth[context])
 		    {
 		      TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
+		    }
 		      TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]);
-		    }
 		  
 		  SC_START(0);
@@ -519,9 +559,9 @@
 	      in_DECOD_VAL              [port]->write(0);
 	      
-	      if (_param->_have_port_depth)
+	      if (_param->_have_port_depth[context])
 		{
 		  TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
+		}
 		  TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]);
-		}
 	    }
 	}
@@ -543,9 +583,9 @@
 		  in_BRANCH_COMPLETE_FLAG                 [port]->write(0);
 		  
-		  if (_param->_have_port_depth)
+		  if (_param->_have_port_depth[context])
 		    {
 		      TEST(Tdepth_t,out_DEPTH_TAIL     [context]->read(), 0);
+		    }
 		      TEST(Tdepth_t,out_DEPTH_NB_BRANCH[context]->read(), _param->_size_queue[context]);
-		    }
 		  
 		  SC_START(0);
@@ -604,4 +644,5 @@
 			TEST(Thistory_t         ,out_UPDATE_DIR_HISTORY           [port]->read(), i);
 		      TEST(Tcontrol_t         ,out_UPDATE_RAS_VAL               [port]->read(), 0);
+		      TEST(Tcontrol_t         ,out_UPDATE_RAS_PUSH              [port]->read(), 0);
 		      TEST(Taddress_t         ,out_UPDATE_RAS_ADDRESS           [port]->read(), 0xdeaddead+i);
 		      TEST(Tptr_t             ,out_UPDATE_RAS_INDEX             [port]->read(), (0x12345678+i)%_param->_size_ras_index[context]);
@@ -619,7 +660,6 @@
 	    
 	    // wait the garbage collector
-	    if (_param->_have_port_depth)
-	      while ((out_DEPTH_TAIL     [context]->read() != 0) and
-		     (out_DEPTH_NB_BRANCH[context]->read() != 0))
+	    while (((not (_param->_have_port_depth[context])) or (out_DEPTH_TAIL     [context]->read() != 0)) and
+		   (out_DEPTH_NB_BRANCH[context]->read() != 0))
 		{
 		  LABEL("DEPTH [%d] nb_branch : %d - tail : %d",context,out_DEPTH_NB_BRANCH[context]->read(), out_DEPTH_TAIL [context]->read());
@@ -671,5 +711,6 @@
   delete []  in_DECOD_RAS_ADDRESS           ;
   delete []  in_DECOD_RAS_INDEX             ;
-  delete []  in_DECOD_MISS_PREDICTION       ;
+  delete []  in_DECOD_MISS_IFETCH           ;
+  delete []  in_DECOD_MISS_DECOD            ;
   delete []  in_DECOD_UPDATE_PREDICTION_ID  ;
 //delete [] out_DECOD_DEPTH                 ;
@@ -686,4 +727,13 @@
   delete [] out_BRANCH_COMPLETE_ADDRESS_SRC    ;
   delete [] out_BRANCH_COMPLETE_ADDRESS_DEST   ;
+
+  // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  delete [] out_BRANCH_EVENT_VAL            ;
+  delete []  in_BRANCH_EVENT_ACK            ;
+//   delete []  in_BRANCH_EVENT_CONTEXT_ID     ;
+//   delete []  in_BRANCH_EVENT_DEPTH          ;
+//   delete [] out_BRANCH_EVENT_MISS_PREDICTION;
+  delete [] out_BRANCH_EVENT_ADDRESS_SRC    ;
+  delete [] out_BRANCH_EVENT_ADDRESS_DEST   ;
   
   // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -700,4 +750,5 @@
   delete [] out_UPDATE_DIR_HISTORY          ;
   delete [] out_UPDATE_RAS_VAL              ;
+  delete [] out_UPDATE_RAS_PUSH             ;
   delete [] out_UPDATE_RAS_ADDRESS          ;
   delete [] out_UPDATE_RAS_INDEX            ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Parameters.h	(revision 82)
@@ -35,9 +35,11 @@
 
   public : uint32_t   _size_context_id        ;
-  public : uint32_t   _size_depth             ;
+  public : uint32_t * _size_depth             ; // [nb_context]
+  public : uint32_t   _max_size_depth         ;
   public : uint32_t   _max_size_ras_index     ;
 		      
   public : bool       _have_port_context_id   ;
-  public : bool       _have_port_depth        ;
+  public : bool     * _have_port_depth        ; // [nb_context]
+  public : bool       _have_port_max_depth    ;
   public : bool       _have_port_history      ;
     
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Types.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Types.h	(revision 82)
@@ -24,4 +24,5 @@
       UPDATE_PREDICTION_STATE_WAIT_DECOD , // Fetch have access at the predictor
       UPDATE_PREDICTION_STATE_WAITEND    , // Have make a prediction, wait branch_complete
+      UPDATE_PREDICTION_STATE_EVENT      , // have a event - must signal at the context_unit
       UPDATE_PREDICTION_STATE_OK         , // branch is complete and can update predictor
       UPDATE_PREDICTION_STATE_KO         , // have a event - must update predictor unit
@@ -58,4 +59,5 @@
       case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_WAIT_DECOD : return "wait_decod"; break;
       case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_WAITEND    : return "waitend"   ; break;
+      case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_EVENT      : return "event"     ; break;
       case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_OK         : return "ok"        ; break;
       case morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::UPDATE_PREDICTION_STATE_KO         : return "ko"        ; break;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h	(revision 82)
@@ -88,5 +88,6 @@
   public    : SC_IN (Taddress_t         )  **  in_DECOD_RAS_ADDRESS           ; //[nb_inst_decod]
   public    : SC_IN (Tptr_t             )  **  in_DECOD_RAS_INDEX             ; //[nb_inst_decod]
-  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_MISS_PREDICTION       ; //[nb_inst_decod] // ifetch is a miss pred
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_MISS_IFETCH           ; //[nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         )  **  in_DECOD_MISS_DECOD            ; //[nb_inst_decod]
   public    : SC_IN (Tprediction_ptr_t  )  **  in_DECOD_UPDATE_PREDICTION_ID  ; //[nb_inst_decod]
 //public    : SC_OUT(Tdepth_t           )  ** out_DECOD_DEPTH                 ; //[nb_inst_decod]
@@ -103,4 +104,13 @@
   public    : SC_OUT(Taddress_t         )  ** out_BRANCH_COMPLETE_ADDRESS_SRC    ; //[nb_inst_branch_complete]
   public    : SC_OUT(Taddress_t         )  ** out_BRANCH_COMPLETE_ADDRESS_DEST   ; //[nb_inst_branch_complete]
+
+    // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_EVENT_VAL            ; //[nb_context]
+  public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_EVENT_ACK            ; //[nb_context]
+//public    : SC_OUT(Tcontext_t         )  ** out_BRANCH_EVENT_CONTEXT_ID     ; //[nb_context]
+//public    : SC_OUT(Tdepth_t           )  ** out_BRANCH_EVENT_DEPTH          ; //[nb_context]
+//public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_EVENT_MISS_PREDICTION; //[nb_context] is always miss prediction
+  public    : SC_OUT(Taddress_t         )  ** out_BRANCH_EVENT_ADDRESS_SRC    ; //[nb_context]
+  public    : SC_OUT(Taddress_t         )  ** out_BRANCH_EVENT_ADDRESS_DEST   ; //[nb_context]
 
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -117,4 +127,5 @@
   public    : SC_OUT(Thistory_t         )  ** out_UPDATE_DIR_HISTORY          ; //[nb_inst_update]
   public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_RAS_VAL              ; //[nb_inst_update]
+  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_RAS_PUSH             ; //[nb_inst_update]
   public    : SC_OUT(Taddress_t         )  ** out_UPDATE_RAS_ADDRESS          ; //[nb_inst_update]
   public    : SC_OUT(Tptr_t             )  ** out_UPDATE_RAS_INDEX            ; //[nb_inst_update]
@@ -131,4 +142,5 @@
   private   : uint32_t                      * reg_BOTTOM                 ; //[nb_context]
   private   : uint32_t                      * reg_NB_ELT                 ; //[nb_context]
+  private   : uint32_t                      * reg_NB_ELT_UPDATE          ; //[nb_context]
   private   : uint32_t                      * reg_NB_ELT_NEED_UPDATE     ; //[nb_context]
   private   : entry_t                      ** reg_UPDATE_PREDICTION_TABLE; //[nb_context][size_queue]
@@ -142,4 +154,6 @@
   private   : Tcontrol_t                    * internal_BRANCH_COMPLETE_TAKE           ; //[nb_inst_branch_complete]
   private   : Taddress_t                    * internal_BRANCH_COMPLETE_ADDRESS_DEST   ; //[nb_inst_branch_complete]
+  private   : Tcontrol_t                    * internal_BRANCH_EVENT_VAL               ; //[nb_context]
+  private   : Tdepth_t                      * internal_BRANCH_EVENT_DEPTH             ; //[nb_context]
   private   : Tcontrol_t                    * internal_UPDATE_VAL                     ; //[nb_inst_update]
   private   : Tcontext_t                    * internal_UPDATE_CONTEXT_ID              ; //[nb_inst_update]
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters.cpp	(revision 82)
@@ -43,9 +43,16 @@
     
     _size_context_id         = log2(nb_context);
-    _size_depth              = log2(max<uint32_t>(size_queue,nb_context));
+    _size_depth              = new uint32_t[_nb_context];
+    _have_port_depth         = new bool    [_nb_context];
+    for (uint32_t i=0; i<_nb_context; i++)
+      {
+	_size_depth      [i] = log2(_size_queue[i]);
+	_have_port_depth [i] = (_size_depth [i] > 0);
+      }
+    _max_size_depth          = max<uint32_t>(_size_depth,_nb_context);
     _max_size_ras_index      = max<uint32_t>(_size_ras_index,nb_context);
 
     _have_port_context_id    = _size_context_id> 0;
-    _have_port_depth         = _size_depth     > 0;
+    _have_port_max_depth     = _max_size_depth > 0;
     _have_port_history       = _size_history   > 0;
     
@@ -68,4 +75,6 @@
   {
     log_printf(FUNC,Update_Prediction_Table,FUNCTION,"Begin");
+    delete [] _size_depth     ;
+    delete [] _have_port_depth;
     log_printf(FUNC,Update_Prediction_Table,FUNCTION,"End");
   };
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters_msg_error.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Parameters_msg_error.cpp	(revision 82)
@@ -27,5 +27,5 @@
     Parameters_test test ("Update_Prediction_Table");
 
-    if (morpheo::behavioural::test<Tdepth_t>(_size_depth) == false)
+    if (morpheo::behavioural::test<Tdepth_t>(_max_size_depth) == false)
       test.error("type \"Tdepth_t\" is too small.");
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table.cpp	(revision 82)
@@ -128,5 +128,6 @@
 	    if (_param->_have_port_context_id)
 	      sensitive << (*(in_DECOD_CONTEXT_ID [i]));
-	    sensitive << (*(in_DECOD_MISS_PREDICTION [i]));
+	    sensitive << (*(in_DECOD_MISS_IFETCH [i]))
+		      << (*(in_DECOD_MISS_DECOD  [i]));
 	  }
 	
@@ -135,7 +136,8 @@
 	for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
 	  {
-	    (*(out_DECOD_ACK                  [i])) (*(in_DECOD_MISS_PREDICTION [i]));
-	    if (_param->_have_port_context_id)
-	    (*(out_DECOD_ACK                  [i])) (*(in_DECOD_CONTEXT_ID      [i]));
+	    (*(out_DECOD_ACK                  [i])) (*(in_DECOD_MISS_IFETCH [i]));
+	    (*(out_DECOD_ACK                  [i])) (*(in_DECOD_MISS_DECOD  [i]));
+	    if (_param->_have_port_context_id)
+	    (*(out_DECOD_ACK                  [i])) (*(in_DECOD_CONTEXT_ID  [i]));
 	  }
 # endif    
@@ -150,5 +152,5 @@
 	    if (_param->_have_port_context_id)
 	    sensitive << (*(in_BRANCH_COMPLETE_CONTEXT_ID [i]));
-	    if (_param->_have_port_depth)
+	    if (_param->_have_port_max_depth)
 	    sensitive << (*(in_BRANCH_COMPLETE_DEPTH [i]));
 	    sensitive << (*(in_BRANCH_COMPLETE_FLAG    [i]))
@@ -162,5 +164,5 @@
 	    if (_param->_have_port_context_id)
 	    (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i]));
-	    if (_param->_have_port_depth)
+	    if (_param->_have_port_max_depth)
 	    (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_DEPTH      [i]));
 	    (*(out_BRANCH_COMPLETE_MISS_PREDICTION [i])) (*(in_BRANCH_COMPLETE_FLAG       [i]));
@@ -169,5 +171,5 @@
 	    if (_param->_have_port_context_id)
 	    (*(out_BRANCH_COMPLETE_TAKE            [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i]));
-	    if (_param->_have_port_depth)
+	    if (_param->_have_port_max_depth)
 	    (*(out_BRANCH_COMPLETE_TAKE            [i])) (*(in_BRANCH_COMPLETE_DEPTH      [i]));
 	    (*(out_BRANCH_COMPLETE_TAKE            [i])) (*(in_BRANCH_COMPLETE_FLAG       [i]));
@@ -175,10 +177,10 @@
 	    if (_param->_have_port_context_id)
 	    (*(out_BRANCH_COMPLETE_ADDRESS_SRC     [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i]));
-	    if (_param->_have_port_depth)
+	    if (_param->_have_port_max_depth)
 	    (*(out_BRANCH_COMPLETE_ADDRESS_SRC     [i])) (*(in_BRANCH_COMPLETE_DEPTH      [i]));
 
 	    if (_param->_have_port_context_id)
 	    (*(out_BRANCH_COMPLETE_ADDRESS_DEST    [i])) (*(in_BRANCH_COMPLETE_CONTEXT_ID [i]));
-	    if (_param->_have_port_depth)
+	    if (_param->_have_port_max_depth)
 	    (*(out_BRANCH_COMPLETE_ADDRESS_DEST    [i])) (*(in_BRANCH_COMPLETE_DEPTH      [i]));
 	    (*(out_BRANCH_COMPLETE_ADDRESS_DEST    [i])) (*(in_BRANCH_COMPLETE_ADDRESS    [i]));
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp	(revision 82)
@@ -76,5 +76,5 @@
     // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("predict", IN,SOUTH, "predict", _param->_nb_inst_predict);
+      ALLOC1_INTERFACE("decod", IN,SOUTH, "decod", _param->_nb_inst_predict);
 
       ALLOC1_VALACK_IN ( in_DECOD_VAL                 ,VAL);
@@ -87,6 +87,7 @@
       ALLOC1_SIGNAL_IN ( in_DECOD_RAS_ADDRESS         ,"ras_address"         ,Taddress_t         ,_param->_size_address);
       ALLOC1_SIGNAL_IN ( in_DECOD_RAS_INDEX           ,"ras_index"           ,Tptr_t             ,_param->_max_size_ras_index);
-      ALLOC1_SIGNAL_IN ( in_DECOD_MISS_PREDICTION     ,"miss_prediction"     ,Tcontrol_t         ,1);
-      ALLOC1_SIGNAL_IN ( in_DECOD_UPDATE_PREDICTION_ID,"update_prediction_id",Tprediction_ptr_t  ,_param->_size_depth);
+      ALLOC1_SIGNAL_IN ( in_DECOD_MISS_IFETCH         ,"miss_ifetch"         ,Tcontrol_t         ,1);
+      ALLOC1_SIGNAL_IN ( in_DECOD_MISS_DECOD          ,"miss_decod"          ,Tcontrol_t         ,1);
+      ALLOC1_SIGNAL_IN ( in_DECOD_UPDATE_PREDICTION_ID,"update_prediction_id",Tprediction_ptr_t  ,_param->_max_size_depth);
 //    ALLOC1_SIGNAL_OUT(out_DECOD_DEPTH               ,"depth"               ,Tdepth_t           ,_param->_size_depth);
     }
@@ -95,10 +96,9 @@
     {
       ALLOC1_INTERFACE("branch_complete", IN,SOUTH, "branch_complete", _param->_nb_inst_branch_complete);
-
       
       ALLOC1_VALACK_IN ( in_BRANCH_COMPLETE_VAL            ,VAL);
       ALLOC1_VALACK_OUT(out_BRANCH_COMPLETE_ACK            ,ACK);
       ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_CONTEXT_ID     ,"context_id"     ,Tcontext_t,_param->_size_context_id);
-      ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_DEPTH          ,"depth"          ,Tdepth_t  ,_param->_size_depth);
+      ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_DEPTH          ,"depth"          ,Tdepth_t  ,_param->_max_size_depth);
       ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_ADDRESS        ,"address"        ,Taddress_t,_param->_size_address);
       ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_FLAG           ,"flag"           ,Tcontrol_t,1);
@@ -107,4 +107,17 @@
       ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_SRC    ,"address_src"    ,Taddress_t,_param->_size_address);
       ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_DEST   ,"address_dest"   ,Taddress_t,_param->_size_address);
+    }
+
+    // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    {
+      ALLOC1_INTERFACE("branch_event", IN,SOUTH, "branch_event", _param->_nb_context);
+      
+      ALLOC1_VALACK_OUT(out_BRANCH_EVENT_VAL            ,VAL);
+      ALLOC1_VALACK_IN ( in_BRANCH_EVENT_ACK            ,ACK);
+//    ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_CONTEXT_ID     ,"context_id"     ,Tcontext_t,_param->_size_context_id);
+//    ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_DEPTH          ,"depth"          ,Tdepth_t  ,_param->_max_size_depth);
+//    ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_MISS_PREDICTION,"miss_prediction",Tcontrol_t,1);
+      ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_SRC    ,"address_src"    ,Taddress_t,_param->_size_address);
+      ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_DEST   ,"address_dest"   ,Taddress_t,_param->_size_address);
     }
 
@@ -125,4 +138,5 @@
       ALLOC1_SIGNAL_OUT(out_UPDATE_DIR_HISTORY          ,"dir_history"          ,Thistory_t         ,_param->_size_history);
       ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_VAL              ,"ras_val"              ,Tcontrol_t         ,1);
+      ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_PUSH             ,"ras_push"             ,Tcontrol_t         ,1);
       ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_ADDRESS          ,"ras_address"          ,Taddress_t         ,_param->_size_address);
       ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_INDEX            ,"ras_index"            ,Tptr_t             ,_param->_max_size_ras_index);
@@ -134,6 +148,6 @@
       ALLOC1_INTERFACE("depth",OUT,SOUTH, "depth", _param->_nb_context);
 
-      ALLOC1_SIGNAL_OUT(out_DEPTH_NB_BRANCH,"NB_BRANCH",Tdepth_t,_param->_size_depth);
-      ALLOC1_SIGNAL_OUT(out_DEPTH_TAIL,"TAIL",Tdepth_t,_param->_size_depth);
+      ALLOC1_SIGNAL_OUT(out_DEPTH_TAIL     ,"TAIL"     ,Tdepth_t,_param->_size_depth[alloc_signal_it1]);
+      ALLOC1_SIGNAL_OUT(out_DEPTH_NB_BRANCH,"NB_BRANCH",Tdepth_t,_param->_size_depth[alloc_signal_it1]+1);
     }
 
@@ -145,4 +159,6 @@
     internal_BRANCH_COMPLETE_TAKE            = new Tcontrol_t [_param->_nb_inst_branch_complete];
     internal_BRANCH_COMPLETE_ADDRESS_DEST    = new Taddress_t [_param->_nb_inst_branch_complete];
+    internal_BRANCH_EVENT_VAL                = new Tcontrol_t [_param->_nb_context];
+    internal_BRANCH_EVENT_DEPTH              = new Tdepth_t   [_param->_nb_context];
     internal_UPDATE_VAL                      = new Tcontrol_t [_param->_nb_inst_update];
     internal_UPDATE_CONTEXT_ID               = new Tcontext_t [_param->_nb_inst_update];
@@ -153,4 +169,5 @@
     reg_BOTTOM                  = new uint32_t  [_param->_nb_context];
     reg_NB_ELT                  = new uint32_t  [_param->_nb_context];
+    reg_NB_ELT_UPDATE           = new uint32_t  [_param->_nb_context];
     reg_NB_ELT_NEED_UPDATE      = new uint32_t  [_param->_nb_context];
     reg_UPDATE_PREDICTION_TABLE = new entry_t * [_param->_nb_context];
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_deallocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_deallocation.cpp	(revision 82)
@@ -56,6 +56,7 @@
 	delete []  in_DECOD_RAS_ADDRESS           ;
 	delete []  in_DECOD_RAS_INDEX             ;
-	delete []  in_DECOD_MISS_PREDICTION       ;
-	if (_param->_have_port_depth)
+	delete []  in_DECOD_MISS_IFETCH           ;
+	delete []  in_DECOD_MISS_DECOD            ;
+	if (_param->_have_port_max_depth)
 	delete []  in_DECOD_UPDATE_PREDICTION_ID  ;
 // 	if (_param->_have_port_depth)
@@ -67,5 +68,5 @@
 	if (_param->_have_port_context_id)
 	delete []  in_BRANCH_COMPLETE_CONTEXT_ID     ;
-	if (_param->_have_port_depth)
+	if (_param->_have_port_max_depth)
 	delete []  in_BRANCH_COMPLETE_DEPTH          ;
 	delete []  in_BRANCH_COMPLETE_ADDRESS        ;
@@ -75,4 +76,15 @@
 	delete [] out_BRANCH_COMPLETE_ADDRESS_SRC    ;
 	delete [] out_BRANCH_COMPLETE_ADDRESS_DEST   ;
+
+	// ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+	delete [] out_BRANCH_EVENT_VAL            ;
+	delete []  in_BRANCH_EVENT_ACK            ;
+// 	if (_param->_have_port_context_id)
+// 	delete []  in_BRANCH_EVENT_CONTEXT_ID     ;
+// 	if (_param->_have_port_max_depth)
+// 	delete []  in_BRANCH_EVENT_DEPTH          ;
+// 	delete [] out_BRANCH_EVENT_MISS_PREDICTION;
+	delete [] out_BRANCH_EVENT_ADDRESS_SRC    ;
+	delete [] out_BRANCH_EVENT_ADDRESS_DEST   ;
 	
 	// ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -91,4 +103,5 @@
 	delete [] out_UPDATE_DIR_HISTORY          ;
 	delete [] out_UPDATE_RAS_VAL              ;
+	delete [] out_UPDATE_RAS_PUSH             ;
 	delete [] out_UPDATE_RAS_ADDRESS          ;
 	delete [] out_UPDATE_RAS_INDEX            ;
@@ -96,5 +109,5 @@
 
 	// ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	if (_param->_have_port_depth)
+	if (_param->_have_port_max_depth)
 	  {
 	delete [] out_DEPTH_NB_BRANCH;
@@ -110,4 +123,6 @@
     delete [] internal_BRANCH_COMPLETE_TAKE            ;
     delete [] internal_BRANCH_COMPLETE_ADDRESS_DEST    ;
+    delete [] internal_BRANCH_EVENT_VAL                ;
+    delete [] internal_BRANCH_EVENT_DEPTH              ;
     delete [] internal_UPDATE_VAL                      ;
     delete [] internal_UPDATE_CONTEXT_ID               ;
@@ -118,4 +133,5 @@
     delete [] reg_BOTTOM;
     delete [] reg_NB_ELT;
+    delete [] reg_NB_ELT_UPDATE;
     delete [] reg_NB_ELT_NEED_UPDATE;
     for (uint32_t i=0; i<_param->_nb_context; i++)
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_branch_complete.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_branch_complete.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_branch_complete.cpp	(revision 82)
@@ -27,5 +27,5 @@
       {
 	Tcontext_t          context   = (_param->_have_port_context_id)?PORT_READ(in_BRANCH_COMPLETE_CONTEXT_ID [i]):0;
-	Tdepth_t            depth     = (_param->_have_port_depth     )?PORT_READ(in_BRANCH_COMPLETE_DEPTH      [i]):0;
+	Tdepth_t            depth     = (_param->_have_port_max_depth )?PORT_READ(in_BRANCH_COMPLETE_DEPTH      [i]):0;
 	Tcontrol_t          miss      = false;
 	Tcontrol_t          take      = reg_UPDATE_PREDICTION_TABLE [context][depth]._last_take   ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_decod.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_decod.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_decod.cpp	(revision 82)
@@ -26,5 +26,5 @@
     for (uint32_t i=0; i<_param->_nb_inst_decod; i++)
       {
-	Tcontrol_t miss = PORT_READ(in_DECOD_MISS_PREDICTION [i]);
+	Tcontrol_t miss = PORT_READ(in_DECOD_MISS_DECOD [i]);
 
 	if (miss)
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMoore.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMoore.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMoore.cpp	(revision 82)
@@ -28,11 +28,12 @@
     // ===================================================================
 
-    if (_param->_have_port_depth)
-      for (uint32_t i=0; i<_param->_nb_context; i++)
-	{
-	  PORT_WRITE(out_DEPTH_NB_BRANCH [i], reg_NB_ELT [i]);
-	  PORT_WRITE(out_DEPTH_TAIL      [i], reg_BOTTOM [i]);
-	}
-
+    for (uint32_t i=0; i<_param->_nb_context; i++)
+      {
+	if (_param->_have_port_depth [i])
+	  {
+	    PORT_WRITE(out_DEPTH_TAIL      [i], reg_BOTTOM [i]);
+	  }
+	PORT_WRITE(out_DEPTH_NB_BRANCH [i], reg_NB_ELT [i]);
+      }
     // ===================================================================
     // =====[ UPDATE ]====================================================
@@ -72,5 +73,8 @@
 					   (cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK) or
 					   (cond == BRANCH_CONDITION_READ_STACK));
-	      
+	    
+	    Tcontrol_t          push = ((cond == BRANCH_CONDITION_NONE_WITH_WRITE_STACK) or
+					(cond == BRANCH_CONDITION_READ_REGISTER_WITH_WRITE_STACK));
+
 	    if (_param->_have_port_context_id)
 	    PORT_WRITE(out_UPDATE_CONTEXT_ID            [i],context);
@@ -85,4 +89,5 @@
 	    PORT_WRITE(out_UPDATE_DIR_HISTORY           [i],reg_UPDATE_PREDICTION_TABLE [context][depth]._history     );
 	    PORT_WRITE(out_UPDATE_RAS_VAL               [i],ras_val);
+	    PORT_WRITE(out_UPDATE_RAS_PUSH              [i],push);
 	    PORT_WRITE(out_UPDATE_RAS_ADDRESS           [i],reg_UPDATE_PREDICTION_TABLE [context][depth]._address_ras );
 	    PORT_WRITE(out_UPDATE_RAS_INDEX             [i],reg_UPDATE_PREDICTION_TABLE [context][depth]._index_ras   );
@@ -99,4 +104,24 @@
       }
 
+    // ===================================================================
+    // =====[ BRANCH_EVENT ]==============================================
+    // ===================================================================
+    for (uint32_t i=0; i<_param->_nb_context; i++)
+      {
+	Tdepth_t   depth   = (reg_BOTTOM [i] + reg_NB_ELT_UPDATE [i])%_param->_size_queue [i];
+	state_t    state   = reg_UPDATE_PREDICTION_TABLE [i][depth]._state;
+	
+	Tcontrol_t val     = (state == UPDATE_PREDICTION_STATE_EVENT);
+
+	if (val)
+	  {
+	    PORT_WRITE(out_BRANCH_EVENT_ADDRESS_SRC  [i], reg_UPDATE_PREDICTION_TABLE [i][depth]._address_src );
+	    PORT_WRITE(out_BRANCH_EVENT_ADDRESS_DEST [i], reg_UPDATE_PREDICTION_TABLE [i][depth]._address_dest);
+	    internal_BRANCH_EVENT_DEPTH [i] = depth;
+	  }
+
+	internal_BRANCH_EVENT_VAL   [i] = val;
+	PORT_WRITE(out_BRANCH_EVENT_VAL [i], internal_BRANCH_EVENT_VAL [i]);
+      }
     log_printf(FUNC,Update_Prediction_Table,FUNCTION,"End");
   };
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp	(revision 82)
@@ -31,4 +31,5 @@
 	    reg_BOTTOM             [i] = 0;
 	    reg_NB_ELT             [i] = 0;
+	    reg_NB_ELT_UPDATE      [i] = 0;
 	    reg_NB_ELT_NEED_UPDATE [i] = 0;
 	    for (uint32_t j=0; j<_param->_size_queue[i]; j++)
@@ -74,17 +75,19 @@
 	  if (PORT_READ(in_DECOD_VAL[i]) and internal_DECOD_ACK [i])
 	    {
-	      Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0;
-	      Tcontrol_t miss    = PORT_READ(in_DECOD_MISS_PREDICTION [i]);
+	      Tcontext_t context     = (_param->_have_port_context_id)?PORT_READ(in_DECOD_CONTEXT_ID [i]):0;
+	      Tcontrol_t miss_ifetch = PORT_READ(in_DECOD_MISS_IFETCH [i]);
+	      Tcontrol_t miss_decod  = PORT_READ(in_DECOD_MISS_DECOD  [i]);
 
 	      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"DECOD[%d] - Accepted",i);
-	      log_printf(TRACE,Update_Prediction_Table,FUNCTION," * context : %d",context);
-	      log_printf(TRACE,Update_Prediction_Table,FUNCTION," * miss    : %d",miss);
-	      log_printf(TRACE,Update_Prediction_Table,FUNCTION," * nb_elt  : %d",reg_NB_ELT[context]);
+	      log_printf(TRACE,Update_Prediction_Table,FUNCTION," * context     : %d",context);
+	      log_printf(TRACE,Update_Prediction_Table,FUNCTION," * miss_ifetch : %d",miss_ifetch);
+	      log_printf(TRACE,Update_Prediction_Table,FUNCTION," * miss_decod  : %d",miss_decod);
+	      log_printf(TRACE,Update_Prediction_Table,FUNCTION," * nb_elt      : %d",reg_NB_ELT[context]);
 	      
 	      // Test if miss ifetch
 	      //   miss ifetch = decod a branch and the predict unit have not predict this branch ... gloup :P
-	      if (miss)
+	      if (miss_ifetch or miss_decod)
 		{
-		  Tdepth_t depth = (_param->_have_port_depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0;
+		  Tdepth_t depth = (_param->_have_port_max_depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0;
 		  Tdepth_t top   = reg_TOP [context];
 
@@ -127,4 +130,5 @@
 			}
 		    }
+		  reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_EVENT; // rewrite
 
 		  reg_TOP                [context] = (depth+1)%_param->_size_queue [context];
@@ -135,5 +139,5 @@
 		{
 		  // Normal case : branch is previous predicated, change state of branch
-		  Tdepth_t depth = (_param->_have_port_depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0;
+		  Tdepth_t depth = (_param->_have_port_max_depth)?PORT_READ(in_DECOD_UPDATE_PREDICTION_ID [i]):0;
 
 		  reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_WAITEND;
@@ -148,5 +152,5 @@
 	    {
 	      Tcontext_t context = (_param->_have_port_context_id)?PORT_READ(in_BRANCH_COMPLETE_CONTEXT_ID [i]):0;
-	      Tdepth_t   depth   = (_param->_have_port_depth     )?PORT_READ(in_BRANCH_COMPLETE_DEPTH      [i]):0;
+	      Tdepth_t   depth   = (_param->_have_port_max_depth     )?PORT_READ(in_BRANCH_COMPLETE_DEPTH      [i]):0;
 
 	      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"BRANCH_COMPLETE[%d] - Accepted",i);
@@ -158,5 +162,5 @@
 		{
 		  // Miss case
-		  reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_KO;
+		  reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_EVENT;
 
 		  // Another prediction (prediction with depth higer)
@@ -231,4 +235,15 @@
 
 	// ===================================================================
+	// =====[ BRANCH_EVENT ]==============================================
+	// ===================================================================
+	for (uint32_t i=0; i<_param->_nb_context; i++)
+	  if (internal_BRANCH_EVENT_VAL [i] and PORT_READ(in_BRANCH_EVENT_ACK [i]))
+	  {
+	    Tdepth_t depth = internal_BRANCH_EVENT_DEPTH [i];
+	    
+	    reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_KO;
+	  }
+
+	// ===================================================================
 	// =====[ GARBAGE COLLECTOR ]=========================================
 	// ===================================================================
@@ -253,10 +268,10 @@
       }
 
-// #if (DEBUG >= DEBUG_TRACE)
+#if (DEBUG >= DEBUG_TRACE)
     log_printf(TRACE,Update_Prediction_Table,FUNCTION,"Dump Update_Prediction_Table");
     log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * reg_UPDATE_PRIORITY      : %d",reg_UPDATE_PRIORITY);
     for (uint32_t i=0; i<_param->_nb_context; i++)
       {
-	log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * Update_Prediction_Table [%d]",i);
+	log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * Update_Prediction_Table   [%d]",i);
 	log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_TOP                : %d",reg_TOP                [i]);
 	log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_BOTTOM             : %d",reg_BOTTOM             [i]);
@@ -266,5 +281,5 @@
 	  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      [%d] %s %x",j,toString(reg_UPDATE_PREDICTION_TABLE [i][j]._state).c_str(),reg_UPDATE_PREDICTION_TABLE [i][j]._address_src);
       }
-// #endif
+#endif
 
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Parameters.h	(revision 82)
@@ -11,4 +11,9 @@
 #include "Common/include/Debug.h"
 #include "Behavioural/include/Parameters.h"
+#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/include/Parameters.h"
+#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/include/Parameters.h"
+#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/include/Parameters.h"
+#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Parameters.h"
+#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Parameters.h"
 
 namespace morpheo {
@@ -23,7 +28,73 @@
   {
     //-----[ fields ]------------------------------------------------------------
+  public : uint32_t     _nb_context                    ;
+  public : uint32_t     _nb_decod_unit                 ;
+  public : uint32_t     _size_address                  ;
+  public : uint32_t *   _nb_instruction                ;//[nb_context]
+  public : uint32_t *   _nb_inst_decod                 ;//[nb_decod_unit]
+  public : uint32_t     _nb_inst_branch_predict        ;
+  public : uint32_t     _nb_inst_branch_decod          ;
+  public : uint32_t     _nb_inst_branch_update         ;
+  public : uint32_t     _nb_inst_branch_complete       ;
+  public : uint32_t     _btb_size_queue                ;
+  public : uint32_t     _btb_associativity             ;
+  public : uint32_t     _btb_size_counter              ;
+  public : Tvictim_t    _btb_victim_scheme             ;
+  public : Tpredictor_t _dir_predictor_scheme          ;
+  public : bool         _dir_have_bht               [3];
+  public : uint32_t     _dir_bht_size_shifter       [3];
+  public : uint32_t     _dir_bht_nb_shifter         [3];
+  public : bool         _dir_have_pht               [3];
+  public : uint32_t     _dir_pht_size_counter       [3];
+  public : uint32_t     _dir_pht_nb_counter         [3];
+  public : uint32_t     _dir_pht_size_address_share [3];
+  public : uint32_t *   _ras_size_queue                ;//[nb_context]
+  public : uint32_t *   _upt_size_queue                ;//[nb_context]
+
+  public : uint32_t     _size_context_id               ;
+  public : uint32_t *   _size_depth                    ;//[nb_context]
+  public : uint32_t     _max_size_depth                ;
+  public : uint32_t *   _size_inst_ifetch_ptr          ;//[nb_context]
+  public : uint32_t     _size_history                  ;
+  public : uint32_t *   _size_ras_index                ;//[nb_context]
+						       
+  public : bool         _have_port_context_id          ;
+  public : bool         _have_port_max_depth           ;
+  public : bool     *   _have_port_depth               ;//[nb_context]
+  public : bool     *   _have_port_inst_ifetch_ptr     ;//[nb_context]
+  public : bool         _have_port_history             ;
+  public : bool     *   _have_port_ras_index           ;//[nb_context]
+
+  public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer   ::Parameters * _param_btb;
+  public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction              ::Parameters * _param_dir;
+  public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::return_address_stack   ::Parameters * _param_ras;
+  public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::Parameters * _param_upt;
+  public : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::prediction_unit_glue   ::Parameters * _param_glue;
 
     //-----[ methods ]-----------------------------------------------------------
-  public : Parameters  ();
+  public : Parameters  (uint32_t     nb_context                    ,
+			uint32_t     nb_decod_unit                 ,
+			uint32_t     size_address                  ,
+			uint32_t *   nb_instruction                ,//[nb_context]
+			uint32_t *   nb_inst_decod                 ,//[nb_decod_unit]
+			uint32_t     nb_inst_branch_predict        ,
+			uint32_t     nb_inst_branch_decod          ,
+			uint32_t     nb_inst_branch_update         ,
+			uint32_t     nb_inst_branch_complete       ,
+			uint32_t     btb_size_queue                ,
+			uint32_t     btb_associativity             ,
+			uint32_t     btb_size_counter              ,
+			Tvictim_t    btb_victim_scheme             ,
+			Tpredictor_t dir_predictor_scheme          ,
+			bool         dir_have_bht               [3],
+			uint32_t     dir_bht_size_shifter       [3],
+			uint32_t     dir_bht_nb_shifter         [3],
+			bool         dir_have_pht               [3],
+			uint32_t     dir_pht_size_counter       [3],
+			uint32_t     dir_pht_nb_counter         [3],
+			uint32_t     dir_pht_size_address_share [3],
+			uint32_t *   ras_size_queue                ,//[nb_context]
+			uint32_t *   upt_size_queue                 //[nb_context]
+			);
 //   public : Parameters  (Parameters & param) ;
   public : ~Parameters () ;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Prediction_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Prediction_unit.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Prediction_unit.h	(revision 82)
@@ -27,4 +27,10 @@
 #endif
 #include "Behavioural/include/Usage.h"
+
+#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/include/Branch_Target_Buffer.h"
+#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/include/Direction.h"
+#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/include/Return_Address_Stack.h"
+#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h"
+#include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/include/Prediction_unit_Glue.h"
 
 namespace morpheo {
@@ -61,5 +67,60 @@
   public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
 
+    // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_VAL                         ; //[nb_context]
+  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_ACK                         ; //[nb_context]
+  public    : SC_IN (Taddress_t         )  **  in_PREDICT_PC_PREVIOUS                 ; //[nb_context]
+  public    : SC_IN (Taddress_t         )  **  in_PREDICT_PC_CURRENT                  ; //[nb_context]
+  public    : SC_IN (Tcontrol_t         )  **  in_PREDICT_PC_CURRENT_IS_DS_TAKE       ; //[nb_context]
+  public    : SC_OUT(Taddress_t         )  ** out_PREDICT_PC_NEXT                     ; //[nb_context]
+  public    : SC_OUT(Tcontrol_t         )  ** out_PREDICT_PC_NEXT_IS_DS_TAKE          ; //[nb_context]
+  public    : SC_OUT(Tcontrol_t         ) *** out_PREDICT_INSTRUCTION_ENABLE          ; //[nb_context][nb_instruction]
+  public    : SC_OUT(Tinst_ifetch_ptr_t )  ** out_PREDICT_INST_IFETCH_PTR             ; //[nb_context]
+  public    : SC_OUT(Tbranch_state_t    )  ** out_PREDICT_BRANCH_STATE                ; //[nb_context]
+  public    : SC_OUT(Tprediction_ptr_t  )  ** out_PREDICT_BRANCH_UPDATE_PREDICTION_ID ; //[nb_context]
+
+    // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	      
+  public    : SC_IN (Tcontrol_t         ) ***  in_DECOD_VAL                           ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_OUT(Tcontrol_t         ) *** out_DECOD_ACK                           ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Tcontext_t         ) ***  in_DECOD_CONTEXT_ID                    ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         ) ***  in_DECOD_MATCH_INST_IFETCH_PTR         ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Tbranch_state_t    ) ***  in_DECOD_BRANCH_STATE                  ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Tprediction_ptr_t  ) ***  in_DECOD_BRANCH_UPDATE_PREDICTION_ID   ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Tbranch_condition_t) ***  in_DECOD_BRANCH_CONDITION              ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Tcontrol_t         ) ***  in_DECOD_BRANCH_DIRECTION              ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Taddress_t         ) ***  in_DECOD_ADDRESS_SRC                   ; //[nb_decod_unit][nb_inst_decod]
+  public    : SC_IN (Taddress_t         ) ***  in_DECOD_ADDRESS_DEST                  ; //[nb_decod_unit][nb_inst_decod]
+
+    // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_COMPLETE_VAL                 ; //[nb_inst_branch_complete]
+  public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_COMPLETE_ACK                 ; //[nb_inst_branch_complete]
+  public    : SC_IN (Tcontext_t         )  **  in_BRANCH_COMPLETE_CONTEXT_ID          ; //[nb_inst_branch_complete]
+  public    : SC_IN (Tdepth_t           )  **  in_BRANCH_COMPLETE_DEPTH               ; //[nb_inst_branch_complete]
+  public    : SC_IN (Taddress_t         )  **  in_BRANCH_COMPLETE_ADDRESS             ; //[nb_inst_branch_complete]
+  public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_COMPLETE_FLAG                ; //[nb_inst_branch_complete]
+  public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_COMPLETE_MISS_PREDICTION     ; //[nb_inst_branch_complete]
+  public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_COMPLETE_TAKE                ; //[nb_inst_branch_complete]
+  public    : SC_OUT(Taddress_t         )  ** out_BRANCH_COMPLETE_ADDRESS_SRC         ; //[nb_inst_branch_complete]
+  public    : SC_OUT(Taddress_t         )  ** out_BRANCH_COMPLETE_ADDRESS_DEST        ; //[nb_inst_branch_complete]
+
+    // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_EVENT_VAL                    ; //[nb_context]
+  public    : SC_IN (Tcontrol_t         )  **  in_BRANCH_EVENT_ACK                    ; //[nb_context]
+//public    : SC_OUT(Tcontext_t         )  ** out_BRANCH_EVENT_CONTEXT_ID             ; //[nb_context]
+//public    : SC_OUT(Tdepth_t           )  ** out_BRANCH_EVENT_DEPTH                  ; //[nb_context]
+//public    : SC_OUT(Tcontrol_t         )  ** out_BRANCH_EVENT_MISS_PREDICTION        ; //[nb_context]
+  public    : SC_OUT(Taddress_t         )  ** out_BRANCH_EVENT_ADDRESS_SRC            ; //[nb_context]
+  public    : SC_OUT(Taddress_t         )  ** out_BRANCH_EVENT_ADDRESS_DEST           ; //[nb_context]
+
+    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	      
+  public    : SC_OUT(Tdepth_t           )  ** out_DEPTH_NB_BRANCH                     ; //[nb_context]
+  public    : SC_OUT(Tdepth_t           )  ** out_DEPTH_TAIL                          ; //[nb_context]
+
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+  public    : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer   ::Branch_Target_Buffer    * _component_btb;
+  public    : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction              ::Direction	        * _component_dir;
+  public    : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::return_address_stack   ::Return_Address_Stack    * _component_ras;
+  public    : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::Update_Prediction_Table * _component_upt;
+  public    : morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::prediction_unit_glue   ::Prediction_unit_Glue    * _component_glue;
 
     // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
@@ -84,5 +145,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Prediction_unit             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Parameters.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Parameters.cpp	(revision 82)
@@ -7,4 +7,5 @@
 
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Parameters.h"
+#include "Common/include/Max.h"
 
 namespace morpheo {
@@ -18,7 +19,136 @@
 #undef  FUNCTION
 #define FUNCTION "Prediction_unit::Parameters"
-  Parameters::Parameters ()
+  Parameters::Parameters (uint32_t     nb_context                    ,
+			  uint32_t     nb_decod_unit                 ,
+			  uint32_t     size_address                  ,
+			  uint32_t *   nb_instruction                ,//[nb_context]
+			  uint32_t *   nb_inst_decod                 ,//[nb_decod_unit]
+			  uint32_t     nb_inst_branch_predict        ,
+			  uint32_t     nb_inst_branch_decod          ,
+			  uint32_t     nb_inst_branch_update         ,
+			  uint32_t     nb_inst_branch_complete       ,
+			  uint32_t     btb_size_queue                ,
+			  uint32_t     btb_associativity             ,
+			  uint32_t     btb_size_counter              ,
+			  Tvictim_t    btb_victim_scheme             ,
+			  Tpredictor_t dir_predictor_scheme          ,
+			  bool         dir_have_bht               [3],
+			  uint32_t     dir_bht_size_shifter       [3],
+			  uint32_t     dir_bht_nb_shifter         [3],
+			  bool         dir_have_pht               [3],
+			  uint32_t     dir_pht_size_counter       [3],
+			  uint32_t     dir_pht_nb_counter         [3],
+			  uint32_t     dir_pht_size_address_share [3],
+			  uint32_t *   ras_size_queue                ,//[nb_context]
+			  uint32_t *   upt_size_queue                 //[nb_context]
+			  )
   {
     log_printf(FUNC,Prediction_unit,FUNCTION,"Begin");
+    
+    _nb_context                 = nb_context                ;
+    _nb_decod_unit              = nb_decod_unit             ;
+    _size_address               = size_address              ;
+    _nb_instruction             = nb_instruction            ;
+    _nb_inst_decod              = nb_inst_decod             ;
+    _nb_inst_branch_predict     = nb_inst_branch_predict    ;
+    _nb_inst_branch_decod       = nb_inst_branch_decod      ;
+    _nb_inst_branch_update      = nb_inst_branch_update     ;
+    _nb_inst_branch_complete    = nb_inst_branch_complete   ;
+    _btb_size_queue             = btb_size_queue            ;
+    _btb_associativity          = btb_associativity         ;
+    _btb_size_counter           = btb_size_counter          ;
+    _btb_victim_scheme          = btb_victim_scheme         ;
+    _dir_predictor_scheme       = dir_predictor_scheme      ;
+    for (uint32_t i=0; i<3; i++)
+      {
+	_dir_have_bht               [i] = dir_have_bht               [i];
+	_dir_bht_size_shifter       [i] = dir_bht_size_shifter       [i];
+	_dir_bht_nb_shifter         [i] = dir_bht_nb_shifter         [i];
+	_dir_have_pht               [i] = dir_have_pht               [i];
+	_dir_pht_size_counter       [i] = dir_pht_size_counter       [i];
+	_dir_pht_nb_counter         [i] = dir_pht_nb_counter         [i];
+	_dir_pht_size_address_share [i] = dir_pht_size_address_share [i];
+      }
+    _ras_size_queue             = ras_size_queue            ;
+    _upt_size_queue             = upt_size_queue            ;
+
+    _size_context_id            = log2(_nb_context);
+//   public : uint32_t *   _size_inst_ifetch_ptr          ;//[nb_context]
+
+    _size_depth                 = new uint32_t [_nb_context];
+    _size_ras_index             = new uint32_t [_nb_context];
+    for (uint32_t i=0; i<_nb_context; i++)
+      {
+	_size_depth     [i] = log2(_upt_size_queue [i]);
+	_size_ras_index [i] = log2(_ras_size_queue [i]);
+      }
+
+    _max_size_depth             = max<uint32_t>(_size_depth,_nb_context);
+    _have_port_context_id       = (_size_context_id > 0);
+    _have_port_max_depth        = (_max_size_depth  > 0);
+//   public : bool     *   _have_port_inst_ifetch_ptr     ;//[nb_context]
+
+    _param_glue = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::prediction_unit_glue   ::Parameters 
+      (_nb_context            ,
+       _nb_decod_unit         ,
+       _size_address          ,
+       _nb_instruction        ,
+       _size_depth            ,
+       _nb_inst_decod         ,
+       _nb_inst_branch_predict,
+       _nb_inst_branch_decod  ,
+       _nb_inst_branch_update );
+
+    _size_inst_ifetch_ptr      = _param_glue->_size_inst_ifetch_ptr     ;
+    _have_port_depth           = _param_glue->_have_port_depth;
+    _have_port_inst_ifetch_ptr = _param_glue->_have_port_inst_ifetch_ptr;
+    _have_port_history         = (_size_history > 0);
+    
+    _param_btb  = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer   ::Parameters 
+      (_nb_context            ,
+       _nb_instruction        ,
+       _btb_size_queue        ,
+       _btb_associativity     ,
+       _size_address          ,
+       _btb_size_counter      ,
+       _nb_inst_branch_predict,
+       _nb_inst_branch_decod  ,
+       _nb_inst_branch_update ,
+       _btb_victim_scheme     );
+
+    _param_dir  = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction              ::Parameters 
+      (_dir_predictor_scheme      ,
+       _nb_inst_branch_predict    ,
+       _nb_inst_branch_update     ,
+       _size_address              ,
+       _dir_have_bht              ,
+       _dir_bht_size_shifter      ,
+       _dir_bht_nb_shifter        ,
+       _dir_have_pht              ,
+       _dir_pht_size_counter      ,
+       _dir_pht_nb_counter        ,
+       _dir_pht_size_address_share);
+
+    _size_history = _param_dir->_size_history;
+
+    _param_ras  = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::return_address_stack   ::Parameters 
+      (_nb_context            ,
+       _ras_size_queue        ,
+       _size_address          ,
+       _nb_inst_branch_predict,
+       _nb_inst_branch_decod  ,
+       _nb_inst_branch_update );
+
+    _param_upt  = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::Parameters 
+      (_nb_context             ,
+       _upt_size_queue         ,
+       _size_address           ,
+       _nb_inst_branch_predict ,
+       _nb_inst_branch_decod   ,
+       _nb_inst_branch_complete,
+       _nb_inst_branch_update  ,
+       _size_history           ,
+       _size_ras_index         );
+
     test();
     log_printf(FUNC,Prediction_unit,FUNCTION,"End");
@@ -39,4 +169,14 @@
   {
     log_printf(FUNC,Prediction_unit,FUNCTION,"Begin");
+  
+    delete _param_btb;
+    delete _param_dir;
+    delete _param_ras;
+    delete _param_upt;
+    delete _param_glue;
+
+    delete [] _size_depth    ;
+    delete [] _size_ras_index;
+
     log_printf(FUNC,Prediction_unit,FUNCTION,"End");
   };
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Parameters_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Parameters_print.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Parameters_print.cpp	(revision 82)
@@ -26,5 +26,60 @@
 
     xml.balise_open("prediction_unit");
-//  xml.singleton_begin(""); xml.attribut("value",toString(_)); xml.singleton_end();
+    xml.singleton_begin("nb_context                            "); xml.attribut("value",toString(_nb_context                            )); xml.singleton_end();
+    xml.singleton_begin("nb_decod_unit                         "); xml.attribut("value",toString(_nb_decod_unit                         )); xml.singleton_end();
+    xml.singleton_begin("size_address                          "); xml.attribut("value",toString(_size_address                          )); xml.singleton_end();
+    xml.singleton_begin("nb_inst_branch_predict                "); xml.attribut("value",toString(_nb_inst_branch_predict                )); xml.singleton_end();
+    xml.singleton_begin("nb_inst_branch_decod                  "); xml.attribut("value",toString(_nb_inst_branch_decod                  )); xml.singleton_end();
+    xml.singleton_begin("nb_inst_branch_update                 "); xml.attribut("value",toString(_nb_inst_branch_update                 )); xml.singleton_end();
+    xml.singleton_begin("nb_inst_branch_complete               "); xml.attribut("value",toString(_nb_inst_branch_complete               )); xml.singleton_end();
+    xml.singleton_begin("btb_size_queue                        "); xml.attribut("value",toString(_btb_size_queue                        )); xml.singleton_end();
+    xml.singleton_begin("btb_associativity                     "); xml.attribut("value",toString(_btb_associativity                     )); xml.singleton_end();
+    xml.singleton_begin("btb_size_counter                      "); xml.attribut("value",toString(_btb_size_counter                      )); xml.singleton_end();
+    xml.singleton_begin("btb_victim_scheme                     "); xml.attribut("value",toString(_btb_victim_scheme                     )); xml.singleton_end();
+    xml.singleton_begin("dir_predictor_scheme                  "); xml.attribut("value",toString(_dir_predictor_scheme                  )); xml.singleton_end();
+    xml.comment("predictor_scheme : ");
+    xml.comment(" * predictor_never_take  : don't use \"predictor_{0,1,2}\" parameters.");
+    xml.comment(" * predictor_always_take : don't use \"predictor_{0,1,2}\" parameters.");
+    xml.comment(" * predictor_static      : don't use \"predictor_{0,1,2}\" parameters.");
+    xml.comment(" * predictor_last_take   : don't use \"predictor_{0,1,2}\" parameters.");
+    xml.comment(" * predictor_counter     :       use \"predictor_0\"       parameters.");
+    xml.comment(" * predictor_local       :       use \"predictor_0\"       parameters.");
+    xml.comment(" * predictor_global      :       use \"predictor_0\"       parameters.");
+    xml.comment(" * predictor_meta        :       use \"predictor_{0,1,2}\" parameters.");
+    xml.comment(" * predictor_custom      :       use \"predictor_{0,1,2}\" parameters.");
+    for (uint32_t i=0; i<3; i++)
+      {
+        xml.singleton_begin("dir_predictor_"+toString(i)+"_have_bht              "); xml.attribut("value",toString(_dir_have_bht               [i])); xml.singleton_end();
+        xml.singleton_begin("dir_predictor_"+toString(i)+"_bht_size_shifter      "); xml.attribut("value",toString(_dir_bht_size_shifter       [i])); xml.singleton_end();
+        xml.singleton_begin("dir_predictor_"+toString(i)+"_bht_nb_shifter        "); xml.attribut("value",toString(_dir_bht_nb_shifter         [i])); xml.singleton_end();
+        xml.singleton_begin("dir_predictor_"+toString(i)+"_have_pht              "); xml.attribut("value",toString(_dir_have_pht               [i])); xml.singleton_end();
+        xml.singleton_begin("dir_predictor_"+toString(i)+"_pht_size_counter      "); xml.attribut("value",toString(_dir_pht_size_counter       [i])); xml.singleton_end();
+        xml.singleton_begin("dir_predictor_"+toString(i)+"_pht_nb_counter        "); xml.attribut("value",toString(_dir_pht_nb_counter         [i])); xml.singleton_end();
+        xml.singleton_begin("dir_predictor_"+toString(i)+"_pht_size_address_share"); xml.attribut("value",toString(_dir_pht_size_address_share [i])); xml.singleton_end();
+      }
+
+    for (uint32_t i=0;i<_nb_context; i++)
+      {
+        xml. balise_open_begin("component");
+        xml.  attribut("type","context");
+        xml.  attribut("id"  ,toString(i));
+        xml. balise_open_end();
+        xml.  singleton_begin("nb_instruction                        "); xml.attribut("value",toString(_nb_instruction                     [i])); xml.singleton_end();
+        xml.  singleton_begin("ras_size_queue                        "); xml.attribut("value",toString(_ras_size_queue                     [i])); xml.singleton_end();
+        xml.  singleton_begin("upt_size_queue                        "); xml.attribut("value",toString(_upt_size_queue                     [i])); xml.singleton_end();
+        xml. balise_close();
+      }
+
+    for (uint32_t i=0;i<_nb_decod_unit; i++)
+      {
+        xml. balise_open_begin("component");
+        xml.  attribut("type","decod_unit");
+        xml.  attribut("id"  ,toString(i));
+        xml. balise_open_end();
+        xml.  singleton_begin("nb_inst_decod                         "); xml.attribut("value",toString(_nb_inst_decod                      [i])); xml.singleton_end();
+        xml. balise_close();
+      }
+
+
     xml.balise_close();
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Prediction_unit_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Prediction_unit_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Prediction_unit_allocation.cpp	(revision 82)
@@ -15,6 +15,4 @@
 namespace front_end {
 namespace prediction_unit {
-
-
 
 #undef  FUNCTION
@@ -54,13 +52,764 @@
       in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_YES);
     }
+
+    // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    {
+      {
+	ALLOC1_INTERFACE("predict",IN,SOUTH,"Interface with ifetch unit",_param->_nb_context);
+	
+	ALLOC1_VALACK_IN ( in_PREDICT_VAL                        ,VAL);
+	ALLOC1_VALACK_OUT(out_PREDICT_ACK                        ,ACK);
+	ALLOC1_SIGNAL_IN ( in_PREDICT_PC_PREVIOUS                ,"pc_previous"                ,Taddress_t         ,_param->_size_address);
+	ALLOC1_SIGNAL_IN ( in_PREDICT_PC_CURRENT                 ,"pc_current"                 ,Taddress_t         ,_param->_size_address);
+	ALLOC1_SIGNAL_IN ( in_PREDICT_PC_CURRENT_IS_DS_TAKE      ,"pc_current_is_ds_take"      ,Tcontrol_t         ,1);
+	ALLOC1_SIGNAL_OUT(out_PREDICT_PC_NEXT                    ,"pc_next"                    ,Taddress_t         ,_param->_size_address);
+	ALLOC1_SIGNAL_OUT(out_PREDICT_PC_NEXT_IS_DS_TAKE         ,"pc_next_is_ds_take"         ,Tcontrol_t         ,1);
+	ALLOC1_SIGNAL_OUT(out_PREDICT_INST_IFETCH_PTR            ,"inst_ifetch_ptr"            ,Tinst_ifetch_ptr_t ,_param->_size_inst_ifetch_ptr [alloc_signal_it1]);
+	ALLOC1_SIGNAL_OUT(out_PREDICT_BRANCH_STATE               ,"branch_state"               ,Tbranch_state_t    ,_param->_size_branch_state);
+	ALLOC1_SIGNAL_OUT(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID,"branch_update_prediction_id",Tprediction_ptr_t  ,_param->_size_depth [alloc_signal_it1]);
+      }
+      {
+	ALLOC2_INTERFACE("predict",IN,SOUTH,"Interface with ifetch unit",_param->_nb_context,_param->_nb_instruction[alloc_interface_it1]);
+	_ALLOC2_SIGNAL_OUT(out_PREDICT_INSTRUCTION_ENABLE         ,"instruction_enable"         ,Tcontrol_t         ,1,_param->_nb_context,_param->_nb_instruction[alloc_signal_it1]);
+      }
+    }
+
+    // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	      
+    {
+      {
+	ALLOC2_INTERFACE("decod",IN,SOUTH,"Interface with decod unit",_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_interface_it1]);
+	
+	_ALLOC2_VALACK_IN ( in_DECOD_VAL                        ,VAL,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_VALACK_OUT(out_DECOD_ACK                        ,ACK,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_CONTEXT_ID                 ,"context_id"                 ,Tcontext_t         ,_param->_size_context_id      ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_MATCH_INST_IFETCH_PTR      ,"match_inst_ifetch_ptr"      ,Tcontrol_t         ,1                             ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_STATE               ,"branch_state"               ,Tbranch_state_t    ,_param->_size_branch_state    ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_UPDATE_PREDICTION_ID,"branch_update_prediction_id",Tprediction_ptr_t  ,_param->_max_size_depth       ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_CONDITION           ,"branch_condition"           ,Tbranch_condition_t,_param->_size_branch_condition,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_BRANCH_DIRECTION           ,"branch_direction"           ,Tcontrol_t         ,1                             ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_ADDRESS_SRC                ,"address_src"                ,Taddress_t         ,_param->_size_address         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+	_ALLOC2_SIGNAL_IN ( in_DECOD_ADDRESS_DEST               ,"address_dest"               ,Taddress_t         ,_param->_size_address         ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1]);
+      }
+    }
+
+    // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    {
+      ALLOC1_INTERFACE("branch_complete", IN,SOUTH, "branch_complete", _param->_nb_inst_branch_complete);
+      
+      ALLOC1_VALACK_IN ( in_BRANCH_COMPLETE_VAL            ,VAL);
+      ALLOC1_VALACK_OUT(out_BRANCH_COMPLETE_ACK            ,ACK);
+      ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_CONTEXT_ID     ,"context_id"     ,Tcontext_t,_param->_size_context_id);
+      ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_DEPTH          ,"depth"          ,Tdepth_t  ,_param->_max_size_depth);
+      ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_ADDRESS        ,"address"        ,Taddress_t,_param->_size_address);
+      ALLOC1_SIGNAL_IN ( in_BRANCH_COMPLETE_FLAG           ,"flag"           ,Tcontrol_t,1);
+      ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_MISS_PREDICTION,"miss_prediction",Tcontrol_t,1);
+      ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_TAKE           ,"take"           ,Tcontrol_t,1);
+      ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_SRC    ,"address_src"    ,Taddress_t,_param->_size_address);
+      ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_DEST   ,"address_dest"   ,Taddress_t,_param->_size_address);
+    }
+
+    // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    {
+      ALLOC1_INTERFACE("branch_event", IN,SOUTH, "branch_event", _param->_nb_context);
+      
+      ALLOC1_VALACK_OUT(out_BRANCH_EVENT_VAL            ,VAL);
+      ALLOC1_VALACK_IN ( in_BRANCH_EVENT_ACK            ,ACK);
+//    ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_CONTEXT_ID     ,"context_id"     ,Tcontext_t,_param->_size_context_id);
+//    ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_DEPTH          ,"depth"          ,Tdepth_t  ,_param->_max_size_depth);
+//    ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_MISS_PREDICTION,"miss_prediction",Tcontrol_t,1);
+      ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_SRC    ,"address_src"    ,Taddress_t,_param->_size_address);
+      ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_DEST   ,"address_dest"   ,Taddress_t,_param->_size_address);
+    }
+
+    // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	      
+    {
+      ALLOC1_INTERFACE("depth",OUT,SOUTH,"Interface with depth",_param->_nb_context);
+
+      ALLOC1_SIGNAL_OUT(out_DEPTH_NB_BRANCH    ,"nb_branch"    ,Tdepth_t,_param->_size_depth[alloc_signal_it1]+1);
+      ALLOC1_SIGNAL_OUT(out_DEPTH_TAIL         ,"tail"         ,Tdepth_t,_param->_size_depth[alloc_signal_it1]);
+    }
+
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    std::string name;
+
+    {
+      name = _name+"_branch_target_buffer";
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Create   : %s"),name.c_str());
+      
+      _component_btb = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::branch_target_buffer::Branch_Target_Buffer
+        (name.c_str()
+#ifdef STATISTICS
+         ,param_statistics
+#endif
+         ,_param->_param_btb
+	 ,_usage);
+      
+      _component->set_component (_component_btb->_component
+#ifdef POSITION
+                                 , 50, 50, 10, 10
+#endif
+                                 );
+    }
+
+    {
+      name = _name+"_direction";
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Create   : %s"),name.c_str());
+      
+      _component_dir = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction::Direction
+        (name.c_str()
+#ifdef STATISTICS
+         ,param_statistics
+#endif
+         ,_param->_param_dir
+	 ,_usage);
+      
+      _component->set_component (_component_dir->_component
+#ifdef POSITION
+                                 , 50, 50, 10, 10
+#endif
+                                 );
+    }
     
-    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    {
+      name = _name+"_return_address_stack";
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Create   : %s"),name.c_str());
+      
+      _component_ras = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::return_address_stack::Return_Address_Stack
+        (name.c_str()
+#ifdef STATISTICS
+         ,param_statistics
+#endif
+         ,_param->_param_ras
+	 ,_usage);
+      
+      _component->set_component (_component_ras->_component
+#ifdef POSITION
+                                 , 50, 50, 10, 10
+#endif
+                                 );
+    }
+    
+    {
+      name = _name+"_update_prediction_table";
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Create   : %s"),name.c_str());
+      
+      _component_upt = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::update_prediction_table::Update_Prediction_Table
+        (name.c_str()
+#ifdef STATISTICS
+         ,param_statistics
+#endif
+         ,_param->_param_upt
+	 ,_usage);
+      
+      _component->set_component (_component_upt->_component
+#ifdef POSITION
+                                 , 50, 50, 10, 10
+#endif
+                                 );
+    }
+
+    {
+      name = _name+"_prediction_unit_glue";
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Create   : %s"),name.c_str());
+      
+      _component_glue = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::prediction_unit_glue::Prediction_unit_Glue
+        (name.c_str()
+#ifdef STATISTICS
+         ,param_statistics
+#endif
+         ,_param->_param_glue
+	 ,_usage);
+      
+      _component->set_component (_component_glue->_component
+#ifdef POSITION
+                                 , 50, 50, 10, 10
+#endif
+                                 );
+    }
     
     // ~~~~~[ Instanciation ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
     std::string src,dest;
 
+    // ===================================================================
+    // =====[ branch_target_buffer ]======================================
+    // ===================================================================
+    {
+      src = _name+"_branch_target_buffer";
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str());
+           
+      {
+        dest = _name;
+#ifdef POSITION
+        _component->interface_map (src ,"",
+                                   dest,"");
+#endif
+        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
+        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
+      }
+
+      for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
+	{
+	  dest = _name+"_prediction_unit_glue";
+#ifdef POSITION
+	  _component->interface_map (src ,"predict_"+toString(i),
+				     dest,"predict_btb_"+toString(i));
+#endif
+
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_VAL"         ,
+			           dest,"out_PREDICT_BTB_"+toString(i)+"_VAL"         ); 
+	  COMPONENT_MAP(_component,src ,"out_PREDICT_"    +toString(i)+"_ACK"         ,
+		                   dest, "in_PREDICT_BTB_"+toString(i)+"_ACK"         ); 
+	  if (_param->_have_port_context_id)
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_CONTEXT_ID"  ,
+		                   dest,"out_PREDICT_BTB_"+toString(i)+"_CONTEXT_ID"  );
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_ADDRESS"     ,
+		                   dest,"out_PREDICT_BTB_"+toString(i)+"_ADDRESS"     );
+	  COMPONENT_MAP(_component,src ,"out_PREDICT_"    +toString(i)+"_HIT"         ,
+		                   dest, "in_PREDICT_BTB_"+toString(i)+"_HIT"         ); 
+	  COMPONENT_MAP(_component,src ,"out_PREDICT_"    +toString(i)+"_ADDRESS_SRC" ,
+		                   dest, "in_PREDICT_BTB_"+toString(i)+"_ADDRESS_SRC" ); 
+	  COMPONENT_MAP(_component,src ,"out_PREDICT_"    +toString(i)+"_ADDRESS_DEST",
+		                   dest, "in_PREDICT_BTB_"+toString(i)+"_ADDRESS_DEST"); 
+	  COMPONENT_MAP(_component,src ,"out_PREDICT_"    +toString(i)+"_CONDITION"   ,
+		                   dest, "in_PREDICT_BTB_"+toString(i)+"_CONDITION"   ); 
+	  COMPONENT_MAP(_component,src ,"out_PREDICT_"    +toString(i)+"_IS_ACCURATE" ,
+		                   dest, "in_PREDICT_BTB_"+toString(i)+"_IS_ACCURATE" );
+
+	  dest = _name+"_direction";
+	  COMPONENT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_LAST_TAKE" ,
+		                   dest, "in_PREDICT_"+toString(i)+"_LAST_TAKE" );
+	}
+
+      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+	{
+	  dest = _name+"_prediction_unit_glue";
+#ifdef POSITION
+	  _component->interface_map (src ,"decod_"+toString(i),
+				     dest,"decod_btb_"+toString(i));
+#endif
+
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_VAL"            ,
+			           dest,"out_DECOD_BTB_"+toString(i)+"_VAL"            );
+	  COMPONENT_MAP(_component,src ,"out_DECOD_"    +toString(i)+"_ACK"            ,
+			           dest, "in_DECOD_BTB_"+toString(i)+"_ACK"            );
+	  if (_param->_have_port_context_id)
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_CONTEXT_ID"     ,
+			           dest,"out_DECOD_BTB_"+toString(i)+"_CONTEXT_ID"     );
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_ADDRESS_SRC"    ,
+			           dest,"out_DECOD_BTB_"+toString(i)+"_ADDRESS_SRC"    );
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_ADDRESS_DEST"   ,
+			           dest,"out_DECOD_BTB_"+toString(i)+"_ADDRESS_DEST"   );
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_CONDITION"      ,
+			           dest,"out_DECOD_BTB_"+toString(i)+"_CONDITION"      );
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_LAST_TAKE"      ,
+			           dest,"out_DECOD_BTB_"+toString(i)+"_LAST_TAKE"      );
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_MISS_PREDICTION",
+			           dest,"out_DECOD_BTB_"+toString(i)+"_MISS_PREDICTION");
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_IS_ACCURATE"    ,
+			           dest,"out_DECOD_BTB_"+toString(i)+"_IS_ACCURATE"    );
+	}
+
+      for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++)
+	{
+	  dest = _name+"_prediction_unit_glue";
+
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"    +toString(i)+"_VAL",
+			           dest,"out_UPDATE_BTB_"+toString(i)+"_VAL");
+	  COMPONENT_MAP(_component,src ,"out_UPDATE_"    +toString(i)+"_ACK",
+			           dest, "in_UPDATE_BTB_"+toString(i)+"_ACK");
+
+	  dest = _name+"_update_prediction_table";
+#ifdef POSITION
+	  _component->interface_map (src ,"update_"+toString(i),
+				     dest,"update_"+toString(i));
+#endif
+
+	  if (_param->_have_port_context_id)
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_CONTEXT_ID"     ,
+			           dest,"out_UPDATE_"+toString(i)+    "_CONTEXT_ID"     );
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_ADDRESS_SRC"    ,
+			           dest,"out_UPDATE_"+toString(i)+"_BTB_ADDRESS_SRC"    );
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_ADDRESS_DEST"   ,
+			           dest,"out_UPDATE_"+toString(i)+"_BTB_ADDRESS_DEST"   );
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_CONDITION"      ,
+			           dest,"out_UPDATE_"+toString(i)+"_BTB_CONDITION"      );
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_LAST_TAKE"      ,
+			           dest,"out_UPDATE_"+toString(i)+    "_DIRECTION_GOOD" );
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_MISS_PREDICTION",
+			           dest,"out_UPDATE_"+toString(i)+    "_MISS_PREDICTION");
+	}
+    }
+
+    // ===================================================================
+    // =====[ direction ]=================================================
+    // ===================================================================
+    {
+      src = _name+"_direction";
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str());
+           
+      {
+        dest = _name;
+#ifdef POSITION
+        _component->interface_map (src ,"",
+                                   dest,"");
+#endif
+        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
+        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
+      }
+
+      for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
+	{
+	  dest = _name+"_prediction_unit_glue";
+#ifdef POSITION
+	  _component->interface_map (src ,"predict_"+toString(i),
+				     dest,"predict_dir_"+toString(i));
+#endif
+
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_VAL"        ,
+			           dest,"out_PREDICT_DIR_"+toString(i)+"_VAL"        );
+	  COMPONENT_MAP(_component,src ,"out_PREDICT_"    +toString(i)+"_ACK"        ,
+			           dest, "in_PREDICT_DIR_"+toString(i)+"_ACK"        );
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_ADDRESS_SRC",
+			           dest,"out_PREDICT_DIR_"+toString(i)+"_ADDRESS_SRC");
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_STATIC"     ,
+			           dest,"out_PREDICT_DIR_"+toString(i)+"_STATIC"     );
+	  COMPONENT_MAP(_component,src ,"out_PREDICT_"    +toString(i)+"_DIRECTION"  ,
+			           dest, "in_PREDICT_DIR_"+toString(i)+"_DIRECTION"  );
+
+	  dest = _name+"_update_prediction_table";
+	  if (_param->_have_port_history)
+	  COMPONENT_MAP(_component,src ,"out_PREDICT_"    +toString(i)+"_HISTORY"  ,
+			           dest, "in_PREDICT_"    +toString(i)+"_HISTORY"  );
+	  //out_PREDICT_DIR_LAST_TAKE - component_map branch_target_buffer
+	}
+
+      for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++)
+	{
+	  dest = _name+"_prediction_unit_glue";
+
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"    +toString(i)+"_VAL",
+			           dest,"out_UPDATE_DIR_"+toString(i)+"_VAL");
+	  COMPONENT_MAP(_component,src ,"out_UPDATE_"    +toString(i)+"_ACK",
+			           dest, "in_UPDATE_DIR_"+toString(i)+"_ACK");
+
+	  dest = _name+"_update_prediction_table";
+#ifdef POSITION
+	  _component->interface_map (src ,"update_"+toString(i),
+				     dest,"update_"+toString(i));
+#endif
+
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_ADDRESS"  ,
+			           dest,"out_UPDATE_"+toString(i)+"_BTB_ADDRESS_SRC");
+	  if (_param->_have_port_history)
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_HISTORY"  ,
+			           dest,"out_UPDATE_"+toString(i)+"_DIR_HISTORY"  );
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_DIRECTION",
+			           dest,"out_UPDATE_"+toString(i)+    "_DIRECTION_GOOD");
+	  
+	}
+    }
+
+    // ===================================================================
+    // =====[ return_address_stack ]======================================
+    // ===================================================================
+    {
+      src = _name+"_return_address_stack";
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str());
+
+           
+      {
+        dest = _name;
+#ifdef POSITION
+        _component->interface_map (src ,"",
+                                   dest,"");
+#endif
+        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
+        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
+      }
+
+      for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
+	{
+	  dest = _name+"_prediction_unit_glue";
+#ifdef POSITION
+	  _component->interface_map (src ,"predict_"+toString(i),
+				     dest,"predict_dir_"+toString(i));
+#endif
+	  
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_VAL"         ,
+		                   dest,"out_PREDICT_RAS_"+toString(i)+"_VAL"         );
+	  COMPONENT_MAP(_component,src ,"out_PREDICT_"    +toString(i)+"_ACK"         ,
+		                   dest, "in_PREDICT_RAS_"+toString(i)+"_ACK"         );
+	  if (_param->_have_port_context_id)
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_CONTEXT_ID"  ,
+		                   dest,"out_PREDICT_RAS_"+toString(i)+"_CONTEXT_ID"  );
+	  COMPONENT_MAP(_component,src ,"out_PREDICT_"    +toString(i)+"_HIT"         ,
+		                   dest, "in_PREDICT_RAS_"+toString(i)+"_HIT"         ); 
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_PUSH"        ,
+		                   dest,"out_PREDICT_RAS_"+toString(i)+"_PUSH"        );
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_ADDRESS_PUSH",
+		                   dest,"out_PREDICT_RAS_"+toString(i)+"_ADDRESS_PUSH");
+	  COMPONENT_MAP(_component,src ,"out_PREDICT_"    +toString(i)+"_ADDRESS_POP" ,
+		                   dest, "in_PREDICT_RAS_"+toString(i)+"_ADDRESS_POP" );
+
+	  dest = _name+"_update_prediction_table";
+	  COMPONENT_MAP(_component,src ,"out_PREDICT_"    +toString(i)+"_INDEX",
+		                   dest, "in_PREDICT_"    +toString(i)+"_RAS_INDEX");
+	}
+      
+      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+	{
+	  dest = _name+"_prediction_unit_glue";
+#ifdef POSITION
+	  _component->interface_map (src ,"decod_"+toString(i),
+				     dest,"decod_ras_"+toString(i));
+#endif
+	  
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_VAL"            ,
+			           dest,"out_DECOD_RAS_"+toString(i)+"_VAL"            );
+	  COMPONENT_MAP(_component,src ,"out_DECOD_"    +toString(i)+"_ACK"            ,
+			           dest, "in_DECOD_RAS_"+toString(i)+"_ACK"            );
+	  if (_param->_have_port_context_id)
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_CONTEXT_ID"     ,
+			           dest,"out_DECOD_RAS_"+toString(i)+"_CONTEXT_ID"     ); 
+	  COMPONENT_MAP(_component,src ,"out_DECOD_"    +toString(i)+"_HIT"            ,
+			           dest, "in_DECOD_RAS_"+toString(i)+"_HIT"            ); 
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_PUSH"           ,
+			           dest,"out_DECOD_RAS_"+toString(i)+"_PUSH"           );
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_ADDRESS_PUSH"   ,
+			           dest,"out_DECOD_RAS_"+toString(i)+"_ADDRESS_PUSH"   );
+	  COMPONENT_MAP(_component,src ,"out_DECOD_"    +toString(i)+"_ADDRESS_POP"    ,
+			           dest, "in_DECOD_RAS_"+toString(i)+"_ADDRESS_POP"    );
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_MISS_PREDICTION",
+			           dest,"out_DECOD_RAS_"+toString(i)+"_MISS_PREDICTION");
+
+	  dest = _name+"_update_prediction_table";
+	  COMPONENT_MAP(_component,src ,"out_DECOD_"    +toString(i)+"_INDEX"          ,
+			           dest, "in_DECOD_"    +toString(i)+"_RAS_INDEX"      ); 
+	}
+
+      for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++)
+	{
+	  dest = _name+"_prediction_unit_glue";
+
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"    +toString(i)+"_VAL",
+			           dest,"out_UPDATE_RAS_"+toString(i)+"_VAL");
+	  COMPONENT_MAP(_component,src ,"out_UPDATE_"    +toString(i)+"_ACK",
+			           dest, "in_UPDATE_RAS_"+toString(i)+"_ACK");
+
+	  dest = _name+"_update_prediction_table";
+#ifdef POSITION
+	  _component->interface_map (src ,"update_"+toString(i),
+				     dest,"update_"+toString(i));
+#endif
+
+	  if (_param->_have_port_context_id)
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_CONTEXT_ID"       ,
+			           dest,"out_UPDATE_"+toString(i)+    "_CONTEXT_ID"       );
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_PUSH"             ,
+			           dest,"out_UPDATE_"+toString(i)+"_RAS_PUSH"             );
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_ADDRESS"          ,
+			           dest,"out_UPDATE_"+toString(i)+"_RAS_ADDRESS"          );
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_INDEX"            ,
+			           dest,"out_UPDATE_"+toString(i)+"_RAS_INDEX"            );
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_MISS_PREDICTION"  ,
+			           dest,"out_UPDATE_"+toString(i)+    "_MISS_PREDICTION"  );
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_PREDICTION_IFETCH",
+			           dest,"out_UPDATE_"+toString(i)+"_RAS_PREDICTION_IFETCH");
+	}
+    }
+
+    // ===================================================================
+    // =====[ update_prediction_table ]===================================
+    // ===================================================================
+    {
+      src = _name+"_update_prediction_table";
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str());
+           
+      {
+        dest = _name;
+#ifdef POSITION
+        _component->interface_map (src ,"",
+                                   dest,"");
+#endif
+        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
+        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
+      }
+
+      for (uint32_t i=0; i<_param->_nb_inst_branch_predict; i++)
+	{
+	  dest = _name+"_prediction_unit_glue";
+#ifdef POSITION
+	  _component->interface_map (src ,"predict_"+toString(i),
+				     dest,"predict_dir_"+toString(i));
+#endif
+      
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_VAL"             ,
+			           dest,"out_PREDICT_UPT_"+toString(i)+"_VAL"             );
+	  COMPONENT_MAP(_component,src ,"out_PREDICT_"    +toString(i)+"_ACK"             ,
+		                   dest, "in_PREDICT_UPT_"+toString(i)+"_ACK"             );
+	  if (_param->_have_port_context_id)
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_CONTEXT_ID"      ,
+		                   dest,"out_PREDICT_UPT_"+toString(i)+"_CONTEXT_ID"      );
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_BTB_ADDRESS_SRC" ,
+		                   dest,"out_PREDICT_UPT_"+toString(i)+"_BTB_ADDRESS_SRC" );
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_BTB_ADDRESS_DEST",
+			           dest,"out_PREDICT_UPT_"+toString(i)+"_BTB_ADDRESS_DEST");
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_BTB_CONDITION"   ,
+		                   dest,"out_PREDICT_UPT_"+toString(i)+"_BTB_CONDITION"   );
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_BTB_LAST_TAKE"   ,
+		                   dest,"out_PREDICT_UPT_"+toString(i)+"_BTB_LAST_TAKE"   );
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_BTB_IS_ACCURATE" ,
+		                   dest,"out_PREDICT_UPT_"+toString(i)+"_BTB_IS_ACCURATE" );
+	  COMPONENT_MAP(_component,src , "in_PREDICT_"    +toString(i)+"_RAS_ADDRESS"     ,
+		                   dest,"out_PREDICT_UPT_"+toString(i)+"_RAS_ADDRESS"     );
+
+	  //out_PREDICT_HISTORY   - component_map direction
+	  // in_PREDICT_RAS_INDEX - component_map return_address_stack
+	}
+
+      for (uint32_t i=0; i<_param->_nb_inst_branch_decod; i++)
+	{
+	  dest = _name+"_prediction_unit_glue";
+	  
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_VAL"                 ,
+			           dest,"out_DECOD_UPT_"+toString(i)+"_VAL"                 );
+	  COMPONENT_MAP(_component,src ,"out_DECOD_"    +toString(i)+"_ACK"                 ,
+			           dest, "in_DECOD_UPT_"+toString(i)+"_ACK"                 );
+	  if (_param->_have_port_context_id)
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_CONTEXT_ID"          ,
+			           dest,"out_DECOD_UPT_"+toString(i)+"_CONTEXT_ID"          );
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_BTB_ADDRESS_SRC"     ,
+			           dest,"out_DECOD_UPT_"+toString(i)+"_BTB_ADDRESS_SRC"     );
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_BTB_ADDRESS_DEST"    ,
+			           dest,"out_DECOD_UPT_"+toString(i)+"_BTB_ADDRESS_DEST"    );
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_BTB_CONDITION"       ,
+			           dest,"out_DECOD_UPT_"+toString(i)+"_BTB_CONDITION"       );
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_BTB_LAST_TAKE"       ,
+			           dest,"out_DECOD_UPT_"+toString(i)+"_BTB_LAST_TAKE"       );
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_RAS_ADDRESS"         ,
+			           dest,"out_DECOD_UPT_"+toString(i)+"_RAS_ADDRESS"         );
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_MISS_IFETCH"         ,
+			           dest,"out_DECOD_UPT_"+toString(i)+"_MISS_IFETCH"         ); 
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_MISS_DECOD"          ,
+			           dest,"out_DECOD_UPT_"+toString(i)+"_MISS_DECOD"          ); 
+	  if (_param->_have_port_max_depth)
+	  COMPONENT_MAP(_component,src , "in_DECOD_"    +toString(i)+"_UPDATE_PREDICTION_ID",
+			           dest,"out_DECOD_UPT_"+toString(i)+"_UPDATE_PREDICTION_ID");
+	  
+	  //out_DECOD_UPT_RAS_INDEX - component_map return_address_stack
+	}
+
+      for (uint32_t i=0; i<_param->_nb_inst_branch_update; i++)
+	{
+	  dest = _name+"_prediction_unit_glue";
+
+#ifdef POSITION
+	  _component->interface_map (src ,"update_"+toString(i),
+				     dest,"update_upt_"+toString(i));
+#endif
+
+	  COMPONENT_MAP(_component,src ,"out_UPDATE_"    +toString(i)+"_VAL",
+			           dest, "in_UPDATE_UPT_"+toString(i)+"_VAL");
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"    +toString(i)+"_ACK",
+			           dest,"out_UPDATE_UPT_"+toString(i)+"_ACK");
+
+	  COMPONENT_MAP(_component,src ,"out_UPDATE_"    +toString(i)+"_BTB_VAL",
+			           dest, "in_UPDATE_UPT_"+toString(i)+"_BTB_VAL");
+	  COMPONENT_MAP(_component,src ,"out_UPDATE_"    +toString(i)+"_DIR_VAL",
+			           dest, "in_UPDATE_UPT_"+toString(i)+"_DIR_VAL");
+	  COMPONENT_MAP(_component,src ,"out_UPDATE_"    +toString(i)+"_RAS_VAL",
+			           dest, "in_UPDATE_UPT_"+toString(i)+"_RAS_VAL");
+
+	  //in_UPDATE_UPT_CONTEXT_ID            - component_map branch_target_buffer
+	  //in_UPDATE_UPT_MISS_PREDICTION       - component_map branch_target_buffer
+	  //in_UPDATE_UPT_DIRECTION_GOOD        - component_map branch_target_buffer
+	  //in_UPDATE_UPT_BTB_ADDRESS_SRC       - component_map branch_target_buffer
+	  //in_UPDATE_UPT_BTB_ADDRESS_DEST      - component_map branch_target_buffer
+	  //in_UPDATE_UPT_BTB_CONDITION         - component_map branch_target_buffer
+	  //in_UPDATE_UPT_DIR_HISTORY           - component_map direction
+	  //in_UPDATE_UPT_RAS_ADDRESS           - component_map return_address_stack
+	  //in_UPDATE_UPT_RAS_PUSH              - component_map return_address_stack
+	  //in_UPDATE_UPT_RAS_INDEX             - component_map return_address_stack
+	  //in_UPDATE_UPT_RAS_PREDICTION_IFETCH - component_map return_address_stack
+	}
+
+      for (uint32_t i=0; i<_param->_nb_inst_branch_complete; i++)
+	{
+	  dest = _name;
+
+#ifdef POSITION
+	  _component->interface_map (src ,"complete_"+toString(i),
+				     dest,"complete_"+toString(i));
+#endif
+
+	  PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_VAL"            ,
+		              dest, "in_BRANCH_COMPLETE_"+toString(i)+"_VAL"            );
+	  PORT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+"_ACK"            ,
+		              dest,"out_BRANCH_COMPLETE_"+toString(i)+"_ACK"            );
+	  if (_param->_have_port_context_id)
+	  PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_CONTEXT_ID"     ,
+		              dest, "in_BRANCH_COMPLETE_"+toString(i)+"_CONTEXT_ID"     );
+	  if (_param->_have_port_max_depth)
+	  PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_DEPTH"          ,
+		              dest, "in_BRANCH_COMPLETE_"+toString(i)+"_DEPTH"          );
+	  PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS"        ,
+		              dest, "in_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS"        );
+	  PORT_MAP(_component,src , "in_BRANCH_COMPLETE_"+toString(i)+"_FLAG"           ,
+		              dest, "in_BRANCH_COMPLETE_"+toString(i)+"_FLAG"           );
+	  PORT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+"_MISS_PREDICTION",
+		              dest,"out_BRANCH_COMPLETE_"+toString(i)+"_MISS_PREDICTION");
+	  PORT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+"_TAKE"           ,
+		              dest,"out_BRANCH_COMPLETE_"+toString(i)+"_TAKE"           );
+	  PORT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS_SRC"    ,
+		              dest,"out_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS_SRC"    );
+	  PORT_MAP(_component,src ,"out_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS_DEST"   ,
+		              dest,"out_BRANCH_COMPLETE_"+toString(i)+"_ADDRESS_DEST"   );
+	}
+
+      for (uint32_t i=0; i<_param->_nb_context; i++)
+	{
+	  dest = _name;
+
+#ifdef POSITION
+	  _component->interface_map (src ,"branch_event_"+toString(i),
+				     dest,"branch_event_"+toString(i));
+#endif
+
+	  PORT_MAP(_component,src ,"out_BRANCH_EVENT_"+toString(i)+"_VAL"         ,dest,"out_BRANCH_EVENT_"+toString(i)+"_VAL"         );
+	  PORT_MAP(_component,src , "in_BRANCH_EVENT_"+toString(i)+"_ACK"         ,dest, "in_BRANCH_EVENT_"+toString(i)+"_ACK"         );
+	  PORT_MAP(_component,src ,"out_BRANCH_EVENT_"+toString(i)+"_ADDRESS_SRC" ,dest,"out_BRANCH_EVENT_"+toString(i)+"_ADDRESS_SRC" );
+	  PORT_MAP(_component,src ,"out_BRANCH_EVENT_"+toString(i)+"_ADDRESS_DEST",dest,"out_BRANCH_EVENT_"+toString(i)+"_ADDRESS_DEST");
+	}
+
+      for (uint32_t i=0; i<_param->_nb_context; i++)
+	{
+	  dest = _name+"_prediction_unit_glue";
+	  
+#ifdef POSITION
+	  _component->interface_map (src ,"depth_"+toString(i),
+				     dest,"depth_"+toString(i));
+#endif
+	  
+	  COMPONENT_MAP(_component,src ,"out_DEPTH_"+toString(i)+    "_NB_BRANCH",
+			           dest, "in_DEPTH_"+toString(i)+"_UPT_NB_BRANCH");
+
+	  if (_param->_have_port_depth[i])
+	  COMPONENT_MAP(_component,src ,"out_DEPTH_"+toString(i)+    "_TAIL"     ,
+		                   dest, "in_DEPTH_"+toString(i)+"_UPT_TAIL"     );
+	}
+
+    }
+
+    // ===================================================================
+    // =====[ prediction_unit_glue ]======================================
+    // ===================================================================
+    {
+      src = _name+"_prediction_unit_glue";
+      log_printf(INFO,Prediction_unit,FUNCTION,_("Instance : %s"),src.c_str());
+           
+      {
+        dest = _name;
+#ifdef POSITION
+        _component->interface_map (src ,"",
+                                   dest,"");
+#endif
+
+        PORT_MAP(_component,src , "in_CLOCK" ,dest, "in_CLOCK");
+        PORT_MAP(_component,src , "in_NRESET",dest, "in_NRESET");
+      }
+
+      for (uint32_t i=0; i<_param->_nb_context; i++)
+	{
+	  dest = _name;
+#ifdef POSITION
+	  _component->interface_map (src ,"predict_"+toString(i),
+				     dest,"predict_"+toString(i));
+#endif
+	  
+	  PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_VAL"                        ,
+		              dest, "in_PREDICT_"+toString(i)+"_VAL"                        );
+	  PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_ACK"                        ,
+		              dest,"out_PREDICT_"+toString(i)+"_ACK"                        );
+	  PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_PC_PREVIOUS"                ,
+		              dest, "in_PREDICT_"+toString(i)+"_PC_PREVIOUS"                );
+	  PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_PC_CURRENT"                 ,
+		              dest, "in_PREDICT_"+toString(i)+"_PC_CURRENT"                 );
+	  PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_PC_CURRENT_IS_DS_TAKE"      ,
+		              dest, "in_PREDICT_"+toString(i)+"_PC_CURRENT_IS_DS_TAKE"      );
+	  PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_PC_NEXT"                    ,
+		              dest,"out_PREDICT_"+toString(i)+"_PC_NEXT"                    );
+	  PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_PC_NEXT_IS_DS_TAKE"         ,
+		              dest,"out_PREDICT_"+toString(i)+"_PC_NEXT_IS_DS_TAKE"         );
+	  if (_param->_have_port_inst_ifetch_ptr [i])
+	  PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_INST_IFETCH_PTR"            ,
+		              dest,"out_PREDICT_"+toString(i)+"_INST_IFETCH_PTR"            );
+	  PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_BRANCH_STATE"               ,
+		              dest,"out_PREDICT_"+toString(i)+"_BRANCH_STATE"               );
+	  if (_param->_have_port_depth [i])
+	  PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_BRANCH_UPDATE_PREDICTION_ID",
+		              dest,"out_PREDICT_"+toString(i)+"_BRANCH_UPDATE_PREDICTION_ID");
+	  
+	  for (uint32_t j=0; j<_param->_nb_instruction[i]; j++)
+	    {
+	      dest = _name;
+#ifdef POSITION
+	      _component->interface_map (src ,"predict_"+toString(i)+"_"+toString(j),
+					 dest,"predict_"+toString(i)+"_"+toString(j));
+#endif
+	      
+	      PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_INSTRUCTION_ENABLE",
+		                  dest,"out_PREDICT_"+toString(i)+"_"+toString(j)+"_INSTRUCTION_ENABLE");
+	    }
+	}
+
+      for (uint32_t i=0; i<_param->_nb_decod_unit; i++)
+	for (uint32_t j=0; j<_param->_nb_inst_decod[i]; j++)
+	  {
+	    dest = _name;
+#ifdef POSITION
+	    _component->interface_map (src ,"decod_"+toString(i),
+				       dest,"decod_"+toString(i));
+#endif
+	    
+	    PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_VAL"                        ,
+		                dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_VAL"                        );
+	    PORT_MAP(_component,src ,"out_DECOD_"+toString(i)+"_"+toString(j)+"_ACK"                        ,
+		                dest,"out_DECOD_"+toString(i)+"_"+toString(j)+"_ACK"                        );
+	    if (_param->_have_port_context_id)
+	    PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_CONTEXT_ID"                 ,
+		                dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_CONTEXT_ID"                 );
+	    PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_MATCH_INST_IFETCH_PTR"      ,
+		                dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_MATCH_INST_IFETCH_PTR"      );
+	    PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_STATE"               ,
+		                dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_STATE"               );
+	    if (_param->_have_port_max_depth)
+	    PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_UPDATE_PREDICTION_ID",
+		                dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_UPDATE_PREDICTION_ID");
+	    PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_CONDITION"           ,
+		                dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_CONDITION"           );
+	    PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_DIRECTION"           ,
+		                dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_BRANCH_DIRECTION"           );
+	    PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_ADDRESS_SRC"                ,
+		                dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_ADDRESS_SRC"                );
+	    PORT_MAP(_component,src , "in_DECOD_"+toString(i)+"_"+toString(j)+"_ADDRESS_DEST"               ,
+		                dest, "in_DECOD_"+toString(i)+"_"+toString(j)+"_ADDRESS_DEST"               );
+	  }
+
+      for (uint32_t i=0; i<_param->_nb_context; i++)
+	{
+	  dest = _name;
+#ifdef POSITION
+	  _component->interface_map (src ,"depth_"+toString(i),
+				     dest,"depth_"+toString(i));
+#endif
+	  
+	  PORT_MAP(_component,src ,"out_DEPTH_"+toString(i)+"_NB_BRANCH",dest,"out_DEPTH_"+toString(i)+"_NB_BRANCH");
+	  if (_param->_have_port_depth[i])
+	  PORT_MAP(_component,src ,"out_DEPTH_"+toString(i)+"_TAIL"     ,dest,"out_DEPTH_"+toString(i)+"_TAIL"     );
+	}
+    }
 
     // ~~~~~[ Others ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
-     _component->test_map();
+    _component->test_map(false);
 
 #ifdef POSITION
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Prediction_unit_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Prediction_unit_deallocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Prediction_unit_deallocation.cpp	(revision 82)
@@ -7,4 +7,5 @@
 
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Prediction_unit.h"
+#include "Behavioural/include/Allocation.h"
 
 namespace morpheo                    {
@@ -26,8 +27,59 @@
 	delete    in_CLOCK ;
 	delete    in_NRESET;
+
+	DELETE1_SIGNAL( in_PREDICT_VAL                        ,_param->_nb_context,1);
+	DELETE1_SIGNAL(out_PREDICT_ACK                        ,_param->_nb_context,1);
+	DELETE1_SIGNAL( in_PREDICT_PC_PREVIOUS                ,_param->_nb_context,_param->_size_address);
+	DELETE1_SIGNAL( in_PREDICT_PC_CURRENT                 ,_param->_nb_context,_param->_size_address);
+	DELETE1_SIGNAL( in_PREDICT_PC_CURRENT_IS_DS_TAKE      ,_param->_nb_context,1);
+	DELETE1_SIGNAL(out_PREDICT_PC_NEXT                    ,_param->_nb_context,_param->_size_address);
+	DELETE1_SIGNAL(out_PREDICT_PC_NEXT_IS_DS_TAKE         ,_param->_nb_context,1);
+	DELETE1_SIGNAL(out_PREDICT_INST_IFETCH_PTR            ,_param->_nb_context,_param->_size_inst_ifetch_ptr [alloc_signal_it1]);
+	DELETE1_SIGNAL(out_PREDICT_BRANCH_STATE               ,_param->_nb_context,_param->_size_branch_state);
+	DELETE1_SIGNAL(out_PREDICT_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_context,_param->_size_depth [alloc_signal_it1]);
+
+	DELETE2_SIGNAL(out_PREDICT_INSTRUCTION_ENABLE       ,_param->_nb_context,_param->_nb_instruction[alloc_signal_it1],1);
+	DELETE2_SIGNAL( in_DECOD_VAL                        ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1);
+	DELETE2_SIGNAL(out_DECOD_ACK                        ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1);
+	DELETE2_SIGNAL( in_DECOD_CONTEXT_ID                 ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_context_id      );
+	DELETE2_SIGNAL( in_DECOD_MATCH_INST_IFETCH_PTR      ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1                             );
+	DELETE2_SIGNAL( in_DECOD_BRANCH_STATE               ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_branch_state    );
+	DELETE2_SIGNAL( in_DECOD_BRANCH_UPDATE_PREDICTION_ID,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_max_size_depth       );
+	DELETE2_SIGNAL( in_DECOD_BRANCH_CONDITION           ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_branch_condition);
+	DELETE2_SIGNAL( in_DECOD_BRANCH_DIRECTION           ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],1                             );
+	DELETE2_SIGNAL( in_DECOD_ADDRESS_SRC                ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_address         );
+	DELETE2_SIGNAL( in_DECOD_ADDRESS_DEST               ,_param->_nb_decod_unit,_param->_nb_inst_decod[alloc_signal_it1],_param->_size_address         );
+      
+        DELETE1_SIGNAL( in_BRANCH_COMPLETE_VAL            ,_param->_nb_inst_branch_complete,1);
+        DELETE1_SIGNAL(out_BRANCH_COMPLETE_ACK            ,_param->_nb_inst_branch_complete,1);
+        DELETE1_SIGNAL( in_BRANCH_COMPLETE_CONTEXT_ID     ,_param->_nb_inst_branch_complete,_param->_size_context_id);
+        DELETE1_SIGNAL( in_BRANCH_COMPLETE_DEPTH          ,_param->_nb_inst_branch_complete,_param->_max_size_depth);
+        DELETE1_SIGNAL( in_BRANCH_COMPLETE_ADDRESS        ,_param->_nb_inst_branch_complete,_param->_size_address);
+        DELETE1_SIGNAL( in_BRANCH_COMPLETE_FLAG           ,_param->_nb_inst_branch_complete,1);
+        DELETE1_SIGNAL(out_BRANCH_COMPLETE_MISS_PREDICTION,_param->_nb_inst_branch_complete,1);
+        DELETE1_SIGNAL(out_BRANCH_COMPLETE_TAKE           ,_param->_nb_inst_branch_complete,1);
+        DELETE1_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_SRC    ,_param->_nb_inst_branch_complete,_param->_size_address);
+        DELETE1_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_DEST   ,_param->_nb_inst_branch_complete,_param->_size_address);
+
+        DELETE1_SIGNAL(out_BRANCH_EVENT_VAL            ,_param->_nb_context,1);
+        DELETE1_SIGNAL( in_BRANCH_EVENT_ACK            ,_param->_nb_context,1);
+//      DELETE1_SIGNAL(out_BRANCH_EVENT_CONTEXT_ID     ,_param->_nb_context,_param->_size_context_id);
+//      DELETE1_SIGNAL(out_BRANCH_EVENT_DEPTH          ,_param->_nb_context,_param->_max_size_depth);
+//      DELETE1_SIGNAL(out_BRANCH_EVENT_MISS_PREDICTION,_param->_nb_context,1);
+        DELETE1_SIGNAL(out_BRANCH_EVENT_ADDRESS_SRC    ,_param->_nb_context,_param->_size_address);
+        DELETE1_SIGNAL(out_BRANCH_EVENT_ADDRESS_DEST   ,_param->_nb_context,_param->_size_address);
+
+        DELETE1_SIGNAL(out_DEPTH_NB_BRANCH    ,_param->_nb_context,_param->_size_depth[alloc_signal_it1]+1);
+        DELETE1_SIGNAL(out_DEPTH_TAIL         ,_param->_nb_context,_param->_size_depth[alloc_signal_it1]);
       }
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
 
     delete _component;
+
+    delete _component_btb;
+    delete _component_dir;
+    delete _component_ras;
+    delete _component_upt;
+    delete _component_glue;
 
     log_printf(FUNC,Prediction_unit,FUNCTION,"End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/SelfTest/src/test.cpp	(revision 82)
@@ -7,4 +7,7 @@
  */
 
+#define NB_ITERATION  256
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/SelfTest/include/test.h"
 #include "Common/include/Test.h"
@@ -12,35 +15,4 @@
 #include "Behavioural/include/Allocation.h"
 #include <list>
-
-#define NB_ITERATION  256
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
 class request_t
@@ -78,9 +50,11 @@
 #endif
 
-  Load_Store_pointer_unit * _Load_Store_pointer_unit = new Load_Store_pointer_unit (name.c_str(),
+  Load_Store_pointer_unit * _Load_Store_pointer_unit = new Load_Store_pointer_unit 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/include/Load_Store_pointer_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/include/Load_Store_pointer_unit.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/include/Load_Store_pointer_unit.h	(revision 82)
@@ -120,5 +120,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Load_Store_pointer_unit             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/include/Parameters.h	(revision 82)
@@ -55,9 +55,9 @@
   public : ~Parameters () ;
 
-  public :        std::string   msg_error  (void);
+  public :        Parameters_test msg_error  (void);
 
-  public :        std::string   print      (uint32_t depth);
-  public : friend std::ostream& operator<< (std::ostream& output_stream,
-					    morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::load_store_pointer_unit::Parameters & x);
+  public :        std::string     print      (uint32_t depth);
+  public : friend std::ostream&   operator<< (std::ostream& output_stream,
+					      morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::load_store_pointer_unit::Parameters & x);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/src/Parameters_msg_error.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit/src/Parameters_msg_error.cpp	(revision 82)
@@ -21,16 +21,16 @@
 #undef  FUNCTION
 #define FUNCTION "Load_Store_pointer_unit::msg_error"
-  std::string Parameters::msg_error(void)
+  Parameters_test Parameters::msg_error(void)
   {
     log_printf(FUNC,Load_Store_pointer_unit,FUNCTION,"Begin");
 
-    std::string msg = "";
+    Parameters_test test ("Load_Store_pointer_unit");
 
     for (uint32_t i=0; i<_nb_load_store_queue; i++)
       {
 	if (not (_size_store_queue [i] > 1))
-	  msg += "  - The size of store_queue["+toString(i)+"] must be greater or equal at 2.\n";
+	  test.error(toString(_("The size of store_queue[%d] must be greater or equal at 2.\n"),i));
 	if (not (_size_load_queue  [i] > 0))
-	  msg += "  - The size of load_queue["+toString(i)+"] must be greater or equal at 1.\n";
+	  test.error(toString(_("The size of load_queue[%d] must be greater or equal at 1.\n"),i));
       }
 
@@ -43,11 +43,11 @@
 	  map_lsq [_link_load_store_unit_with_thread[i][j]] = true;
 	else
-	  msg += "  - The number of load_store_unit for the thread ["+toString(i)+"]["+toString(j)+"] is too high.\n";
+	  test.error(toString(_("The number of load_store_unit for the thread [%d][%d] is too high.\n"),i,j));
 	  
     for (uint32_t i=0; i<_nb_load_store_queue; i++)
       if (map_lsq [i] == false)
-	msg += "  - The load store unit ["+toString(i)+"] is not linked with a thread.\n";
+	test.error(toString(_("The load store unit [%d] is not linked with a thread.\n"),i));
     
-    return msg;
+    return test;
 
     log_printf(FUNC,Load_Store_pointer_unit,FUNCTION,"End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/SelfTest/src/test.cpp	(revision 82)
@@ -7,4 +7,7 @@
  */
 
+#define NB_ITERATION  32
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/SelfTest/include/test.h"
 #include "Common/include/Test.h"
@@ -12,35 +15,4 @@
 #include <list>
 
-#define NB_ITERATION  32
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
-
 void test (string name,
 	   morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::dependency_checking_unit::Parameters * _param)
@@ -52,9 +24,11 @@
 #endif
 
-  Dependency_checking_unit * _Dependency_checking_unit = new Dependency_checking_unit (name.c_str(),
+  Dependency_checking_unit * _Dependency_checking_unit = new Dependency_checking_unit 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/include/Dependency_checking_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/include/Dependency_checking_unit.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/include/Dependency_checking_unit.h	(revision 82)
@@ -132,5 +132,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Dependency_checking_unit             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/include/Parameters.h	(revision 82)
@@ -48,9 +48,9 @@
   public : ~Parameters () ;
 
-  public :        std::string   msg_error  (void);
+  public :        Parameters_test msg_error  (void);
 
-  public :        std::string   print      (uint32_t depth);
-  public : friend std::ostream& operator<< (std::ostream& output_stream,
-					    morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::dependency_checking_unit::Parameters & x);
+  public :        std::string     print      (uint32_t depth);
+  public : friend std::ostream&   operator<< (std::ostream& output_stream,
+					      morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::dependency_checking_unit::Parameters & x);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/src/Parameters_msg_error.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit/src/Parameters_msg_error.cpp	(revision 82)
@@ -22,11 +22,11 @@
 #undef  FUNCTION
 #define FUNCTION "Dependency_checking_unit::msg_error"
-  std::string Parameters::msg_error(void)
+  Parameters_test Parameters::msg_error(void)
   {
     log_printf(FUNC,Dependency_checking_unit,FUNCTION,"Begin");
 
-    std::string msg = "";
+    Parameters_test test ("Dependency_checking_unit");
 
-    return msg;
+    return test;
 
     log_printf(FUNC,Dependency_checking_unit,FUNCTION,"End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/SelfTest/src/test.cpp	(revision 82)
@@ -7,38 +7,10 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
 void test (string name,
@@ -51,9 +23,11 @@
 #endif
 
-  Free_List_unit * _Free_List_unit = new Free_List_unit (name.c_str(),
+  Free_List_unit * _Free_List_unit = new Free_List_unit 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
-#endif
-					     _param);
+     _parameters_statistics,
+#endif
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Free_List_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Free_List_unit.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Free_List_unit.h	(revision 82)
@@ -117,5 +117,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Free_List_unit             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/include/Parameters.h	(revision 82)
@@ -56,9 +56,9 @@
   public : ~Parameters () ;
 
-  public :        std::string   msg_error  (void);
+  public :        Parameters_test msg_error  (void);
 
-  public :        std::string   print      (uint32_t depth);
-  public : friend std::ostream& operator<< (std::ostream& output_stream,
-					    morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::free_list_unit::Parameters & x);
+  public :        std::string     print      (uint32_t depth);
+  public : friend std::ostream&   operator<< (std::ostream& output_stream,
+					      morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::free_list_unit::Parameters & x);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Parameters_msg_error.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit/src/Parameters_msg_error.cpp	(revision 82)
@@ -22,24 +22,24 @@
 #undef  FUNCTION
 #define FUNCTION "Free_List_unit::msg_error"
-  std::string Parameters::msg_error(void)
+  Parameters_test Parameters::msg_error(void)
   {
     log_printf(FUNC,Free_List_unit,FUNCTION,"Begin");
 
-    std::string msg = "";
+    Parameters_test test ("Free_List_unit");
 
     if (_nb_general_register <= _nb_thread*_nb_general_register_logic)
-      msg += "  - The number of physical general register is insufficient.\n";
+      test.error(_("The number of physical general register is insufficient.\n"));
     if (_nb_special_register <= _nb_thread*_nb_special_register_logic)
-      msg += "  - The number of physical special register is insufficient.\n";
+      test.error(_("The number of physical special register is insufficient.\n"));
     if (not is_multiple (_nb_bank, _nb_pop))
-      msg += "  - Number of pop must be a multiple of number of bank.\n";
+      test.error(_("Number of pop must be a multiple of number of bank.\n"));
     if (not is_power2 (_nb_bank))
-      msg += "  - Number of bank must be a power of 2.\n";
+      test.error(_("Number of bank must be a power of 2.\n"));
 
     if ((_priority != PRIORITY_STATIC) and
 	(_priority != PRIORITY_ROUND_ROBIN))
-      msg += "  - Unsupported priority scheme. Supported scheme are "+toString(PRIORITY_STATIC)+" and "+toString(PRIORITY_ROUND_ROBIN)+".\n";
+      test.error(toString(_("Unsupported priority scheme. Supported scheme are %s and %s.\n"),toString(PRIORITY_STATIC).c_str(),toString(PRIORITY_ROUND_ROBIN).c_str()));
 
-    return msg;
+    return test;
 
     log_printf(FUNC,Free_List_unit,FUNCTION,"End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/SelfTest/src/test.cpp	(revision 82)
@@ -7,4 +7,7 @@
  */
 
+#define NB_ITERATION  64
+#define CYCLE_MAX     (1024*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/SelfTest/include/test.h"
 #include "Common/include/Test.h"
@@ -12,35 +15,4 @@
 #include "Behavioural/include/Allocation.h"
 
-#define NB_ITERATION  64
-#define CYCLE_MAX     (1024*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
-
 void test (string name,
 	   morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::register_address_translation_unit::Parameters * _param)
@@ -52,9 +24,11 @@
 #endif
 
-  Register_Address_Translation_unit * _Register_Address_Translation_unit = new Register_Address_Translation_unit (name.c_str(),
+  Register_Address_Translation_unit * _Register_Address_Translation_unit = new Register_Address_Translation_unit 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/include/Parameters.h	(revision 82)
@@ -51,9 +51,9 @@
   public : ~Parameters () ;
 
-  public :        std::string   msg_error  (void);
+  public :        Parameters_test msg_error  (void);
 
-  public :        std::string   print      (uint32_t depth);
-  public : friend std::ostream& operator<< (std::ostream& output_stream,
-					    morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::register_address_translation_unit::Parameters & x);
+  public :        std::string     print      (uint32_t depth);
+  public : friend std::ostream&   operator<< (std::ostream& output_stream,
+					      morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::register_address_translation_unit::Parameters & x);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/include/Register_Address_Translation_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/include/Register_Address_Translation_unit.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/include/Register_Address_Translation_unit.h	(revision 82)
@@ -135,5 +135,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Register_Address_Translation_unit             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/src/Parameters_msg_error.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit/src/Parameters_msg_error.cpp	(revision 82)
@@ -19,14 +19,13 @@
 namespace register_address_translation_unit {
 
-
 #undef  FUNCTION
 #define FUNCTION "Register_Address_Translation_unit::msg_error"
-  std::string Parameters::msg_error(void)
+  Parameters_test Parameters::msg_error(void)
   {
     log_printf(FUNC,Register_Address_Translation_unit,FUNCTION,"Begin");
 
-    std::string msg = "";
+    Parameters_test test ("Register_Address_Translation_unit");
 
-    return msg;
+    return test;
 
     log_printf(FUNC,Register_Address_Translation_unit,FUNCTION,"End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/SelfTest/src/test.cpp	(revision 82)
@@ -7,38 +7,10 @@
  */
 
+#define NB_ITERATION  256
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  256
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
 void test (string name,
@@ -51,9 +23,11 @@
 #endif
 
-  Register_translation_unit_Glue * _Register_translation_unit_Glue = new Register_translation_unit_Glue (name.c_str(),
+  Register_translation_unit_Glue * _Register_translation_unit_Glue = new Register_translation_unit_Glue 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
-#endif
-					     _param);
+     _parameters_statistics,
+#endif
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/include/Parameters.h	(revision 82)
@@ -35,9 +35,9 @@
   public : ~Parameters () ;
 
-  public :        std::string   msg_error  (void);
+  public :        Parameters_test msg_error  (void);
 
-  public :        std::string   print      (uint32_t depth);
-  public : friend std::ostream& operator<< (std::ostream& output_stream,
-					    morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::register_translation_unit_glue::Parameters & x);
+  public :        std::string     print      (uint32_t depth);
+  public : friend std::ostream&   operator<< (std::ostream& output_stream,
+					      morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::register_translation_unit_glue::Parameters & x);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/include/Register_translation_unit_Glue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/include/Register_translation_unit_Glue.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/include/Register_translation_unit_Glue.h	(revision 82)
@@ -107,5 +107,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Register_translation_unit_Glue             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/src/Parameters_msg_error.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue/src/Parameters_msg_error.cpp	(revision 82)
@@ -22,11 +22,11 @@
 #undef  FUNCTION
 #define FUNCTION "Register_translation_unit_Glue::msg_error"
-  std::string Parameters::msg_error(void)
+  Parameters_test Parameters::msg_error(void)
   {
     log_printf(FUNC,Register_translation_unit_Glue,FUNCTION,"Begin");
 
-    std::string msg = "";
+    Parameters_test test ("Register_translation_unit_Glue");
 
-    return msg;
+    return test;
 
     log_printf(FUNC,Register_translation_unit_Glue,FUNCTION,"End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/SelfTest/src/test.cpp	(revision 82)
@@ -7,38 +7,10 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
 void test (string name,
@@ -51,9 +23,11 @@
 #endif
 
-  Register_translation_unit * _Register_translation_unit = new Register_translation_unit (name.c_str(),
+  Register_translation_unit * _Register_translation_unit = new Register_translation_unit 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
-#endif
-					     _param);
+     _parameters_statistics,
+#endif
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/SelfTest/src/test.cpp	(revision 82)
@@ -7,39 +7,11 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Behavioural/include/Allocation.h"
 #include <list>
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
 
@@ -62,9 +34,11 @@
 #endif
 
-  Stat_List_unit * _Stat_List_unit = new Stat_List_unit (name.c_str(),
+  Stat_List_unit * _Stat_List_unit = new Stat_List_unit 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Parameters.h	(revision 82)
@@ -68,9 +68,9 @@
   public : ~Parameters () ;
 
-  public :        std::string   msg_error  (void);
+  public :        Parameters_test msg_error  (void);
 
-  public :        std::string   print      (uint32_t depth);
-  public : friend std::ostream& operator<< (std::ostream& output_stream,
-					    morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::stat_list_unit::Parameters & x);
+  public :        std::string     print      (uint32_t depth);
+  public : friend std::ostream&   operator<< (std::ostream& output_stream,
+					      morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::stat_list_unit::Parameters & x);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Stat_List_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Stat_List_unit.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/include/Stat_List_unit.h	(revision 82)
@@ -136,5 +136,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Stat_List_unit             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Parameters_msg_error.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit/src/Parameters_msg_error.cpp	(revision 82)
@@ -22,29 +22,29 @@
 #undef  FUNCTION
 #define FUNCTION "Stat_List_unit::msg_error"
-  std::string Parameters::msg_error(void)
+  Parameters_test Parameters::msg_error(void)
   {
     log_printf(FUNC,Stat_List_unit,FUNCTION,"Begin");
 
-    std::string msg = "";
+    Parameters_test test("Stat_List_unit");
 
     if (not is_multiple(_nb_bank, _nb_reg_free))
-      msg += "  - nb_bank must be a multiple of nb_reg_free.\n";
+      test.error(_("nb_bank must be a multiple of nb_reg_free.\n"));
 
     if (_nb_general_register < _nb_gpr_use_init)
-      msg += "  - the number of physical general register is insuffisant. (you need less "+toString(_nb_gpr_use_init)+" registers.\n";
+      test.error(toString(_("the number of physical general register is insuffisant. (you need less %d registers.\n"),_nb_gpr_use_init));
 
     if (_nb_special_register < _nb_spr_use_init)
-      msg += "  - the number of physical special register is insuffisant. (you need less "+toString(_nb_spr_use_init)+" registers.\n";
+      test.error(toString(_("the number of physical special register is insuffisant. (you need less %d registers.\n"),_nb_spr_use_init));
     
     if (not is_power2(_nb_general_register))
-      msg += "  - the number of physical general register must be a power of 2.\n";
+      test.error(_("the number of physical general register must be a power of 2.\n"));
 
     if (not is_power2(_nb_special_register))
-      msg += "  - the number of physical special register must be a power of 2.\n";
+      test.error(_("the number of physical special register must be a power of 2.\n"));
 
     if (not is_power2(_nb_bank))
-      msg += "  - the number of bank must be a power of 2.\n";
+      test.error(_("the number of bank must be a power of 2.\n"));
 
-    return msg;
+    return test;
 
     log_printf(FUNC,Stat_List_unit,FUNCTION,"End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/include/Parameters.h	(revision 82)
@@ -66,9 +66,9 @@
   public : ~Parameters () ;
 
-  public :        std::string   msg_error  (void);
+  public :        Parameters_test msg_error  (void);
 
-  public :        std::string   print      (uint32_t depth);
-  public : friend std::ostream& operator<< (std::ostream& output_stream,
-					    morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::Parameters & x);
+  public :        std::string     print      (uint32_t depth);
+  public : friend std::ostream&   operator<< (std::ostream& output_stream,
+					      morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::register_translation_unit::Parameters & x);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/include/Register_translation_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/include/Register_translation_unit.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/include/Register_translation_unit.h	(revision 82)
@@ -155,5 +155,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Register_translation_unit             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/src/Parameters_msg_error.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/src/Parameters_msg_error.cpp	(revision 82)
@@ -21,11 +21,11 @@
 #undef  FUNCTION
 #define FUNCTION "Register_translation_unit::msg_error"
-  std::string Parameters::msg_error(void)
+  Parameters_test Parameters::msg_error(void)
   {
     log_printf(FUNC,Register_translation_unit,FUNCTION,"Begin");
 
-    std::string msg = "";
+    Parameters_test test("Register_translation_unit");
 
-    return msg;
+    return test;
 
     log_printf(FUNC,Register_translation_unit,FUNCTION,"End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/src/Register_translation_unit_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/src/Register_translation_unit_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/src/Register_translation_unit_allocation.cpp	(revision 82)
@@ -137,5 +137,6 @@
 	  ,param_statistics
 #endif
-	  ,_param->_param_dependency_checking_unit);
+	  ,_param->_param_dependency_checking_unit
+	  ,_usage);
        
        _component->set_component (_component_dependency_checking_unit->_component
@@ -155,5 +156,6 @@
 	  ,param_statistics
 #endif
-	  ,_param->_param_free_list_unit);
+	  ,_param->_param_free_list_unit
+	  ,_usage);
        
        _component->set_component (_component_free_list_unit->_component
@@ -173,5 +175,6 @@
 	  ,param_statistics
 #endif
-	  ,_param->_param_register_address_translation_unit);
+	  ,_param->_param_register_address_translation_unit
+	  ,_usage);
        
        _component->set_component (_component_register_address_translation_unit->_component
@@ -191,5 +194,6 @@
 	  ,param_statistics
 #endif
-	  ,_param->_param_stat_list_unit);
+	  ,_param->_param_stat_list_unit
+	  ,_usage);
        
        _component->set_component (_component_stat_list_unit->_component
@@ -209,5 +213,6 @@
 	  ,param_statistics
 #endif
-	  ,_param->_param_register_translation_unit_glue);
+	  ,_param->_param_register_translation_unit_glue
+	  ,_usage);
        
        _component->set_component (_component_register_translation_unit_glue->_component
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/SelfTest/src/test.cpp	(revision 82)
@@ -6,4 +6,6 @@
  * Test
  */
+#define NB_ITERATION  256
+#define CYCLE_MAX     (128*NB_ITERATION)
 
 #include "Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/SelfTest/include/test.h"
@@ -12,35 +14,4 @@
 #include "Behavioural/include/Allocation.h"
 
-#define NB_ITERATION  256
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
-
 void test (string name,
 	   morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::rename_select::Parameters * _param)
@@ -52,9 +23,11 @@
 #endif
 
-  Rename_select * _Rename_select = new Rename_select (name.c_str(),
+  Rename_select * _Rename_select = new Rename_select
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/include/Parameters.h	(revision 82)
@@ -58,9 +58,9 @@
   public : ~Parameters () ;
 
-  public :        std::string   msg_error  (void);
+  public :        Parameters_test msg_error  (void);
 
-  public :        std::string   print      (uint32_t depth);
-  public : friend std::ostream& operator<< (std::ostream& output_stream,
-					    morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::rename_select::Parameters & x);
+  public :        std::string     print      (uint32_t depth);
+  public : friend std::ostream&   operator<< (std::ostream& output_stream,
+					      morpheo::behavioural::core::multi_ooo_engine::ooo_engine::rename_unit::rename_select::Parameters & x);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/include/Rename_select.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/include/Rename_select.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/include/Rename_select.h	(revision 82)
@@ -134,5 +134,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Rename_select             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Parameters_msg_error.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select/src/Parameters_msg_error.cpp	(revision 82)
@@ -21,23 +21,23 @@
 #undef  FUNCTION
 #define FUNCTION "Rename_select::msg_error"
-  std::string Parameters::msg_error(void)
+  Parameters_test Parameters::msg_error(void)
   {
     log_printf(FUNC,Rename_select,FUNCTION,"Begin");
 
-    std::string msg = "";
+    Parameters_test test("Rename_select");
 
     if ((_nb_front_end_select == 0) or
 	(_nb_front_end_select > _nb_front_end))
-      msg += "  - nb_front_end_select must be in [1:nb_front_end].\n";
+      test.error(_("nb_front_end_select must be in [1:nb_front_end].\n"));
 
     if ((_priority != PRIORITY_STATIC) and
 	(_priority != PRIORITY_ROUND_ROBIN))
-      msg += "  - Unsupported priority scheme. Supported scheme are : "+toString(PRIORITY_STATIC)+" and "+toString(PRIORITY_ROUND_ROBIN)+".\n";
+      test.error(toString(_("Unsupported priority scheme. Supported scheme are : %s and %s.\n"),toString(PRIORITY_STATIC).c_str(),toString(PRIORITY_ROUND_ROBIN).c_str()));
     
     if ((_load_balancing != LOAD_BALANCING_BALANCE) and
 	(_load_balancing != LOAD_BALANCING_MAXIMUM_FOR_PRIORITY))
-      msg += "  - Unsupported load_balancing scheme. Supported scheme are : "+toString(LOAD_BALANCING_BALANCE)+" and "+toString(LOAD_BALANCING_MAXIMUM_FOR_PRIORITY)+".\n";
+      test.error(toString(_("Unsupported load_balancing scheme. Supported scheme are : %s and %s.\n"),toString(LOAD_BALANCING_BALANCE).c_str(),toString(LOAD_BALANCING_MAXIMUM_FOR_PRIORITY).c_str()));
 
-    return msg;
+    return test;
 
     log_printf(FUNC,Rename_select,FUNCTION,"End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Custom/include/Random.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Custom/include/Random.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Custom/include/Random.h	(revision 82)
@@ -34,10 +34,13 @@
   public  : custom_execute_transition_t * get_custom_execute_transition (void);
   public  : custom_execute_transition_t * get_custom_execute_reset      (void);
+    
+  private : static void function_transition
+  (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_register_t  * reg,
+   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_param_t     * param);
 
-  private : static void Random::function_transition (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_register_t  * reg,
-						      morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_param_t     * param);
-  private : static void Random::function_reset      (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_register_t  * reg,
-						      morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_param_t     * param);
-    };
+  private : static void function_reset      
+  (morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_register_t  * reg,
+   morpheo::behavioural::core::multi_execute_loop::execute_loop::multi_execute_unit::execute_unit::functionnal_unit::execute_param_t     * param);
+  };
   
 }; // end namespace random 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/SelfTest/src/test.cpp	(revision 82)
@@ -8,4 +8,5 @@
 
 #define NB_ITERATION 1024
+#define CYCLE_MAX    1024*NB_ITERATION
 
 #include "Behavioural/Generic/Counter/SelfTest/include/test.h"
@@ -40,5 +41,6 @@
 				    param_stat,
 #endif
-				    param);
+				    param,
+				    USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/include/Counter.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/include/Counter.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/include/Counter.h	(revision 82)
@@ -26,4 +26,5 @@
 #endif
 #include "Behavioural/include/Component.h"
+#include "Behavioural/include/Usage.h"
 
 namespace morpheo {
@@ -39,7 +40,7 @@
     // -----[ fields ]----------------------------------------------------
     // Parameters
-  protected : const std::string     _name;
-
-  protected : const Parameters _param;
+  protected : const std::string _name;
+  protected : const Parameters  _param;
+  private   : const Tusage_t    _usage;
 
 #ifdef STATISTICS
@@ -78,5 +79,6 @@
 					   morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-					   Parameters                                  param );
+					   Parameters param,
+					   Tusage_t   usage);
 					       
   public  :          Counter              (Parameters param );
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter.cpp	(revision 82)
@@ -14,15 +14,19 @@
 
 
+  Counter::Counter 
+  (
 #ifdef SYSTEMC
-  Counter::Counter (sc_module_name name,
+  sc_module_name name,
 #else
-  Counter::Counter (string name,
+  std::string name,
 #endif
 #ifdef STATISTICS
-			      morpheo::behavioural::Parameters_Statistics * param_statistics,
+  morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-			      morpheo::behavioural::generic::counter::Parameters param ):
-			      _name              (name)
-			      ,_param            (param)
+  morpheo::behavioural::generic::counter::Parameters param,
+   Tusage_t usage):
+    _name  (name),
+    _param (param),
+    _usage (usage)
   {
     log_printf(FUNC,Counter,"Counter","Begin");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Counter/src/Counter_allocation.cpp	(revision 82)
@@ -14,10 +14,9 @@
 namespace counter {
 
-
   void Counter::allocation (void)
   {
     log_printf(FUNC,Counter,"allocation","Begin");
 
-    _component   = new Component ();
+    _component   = new Component (_usage);
 
     Entity * entity = _component->set_entity (_name     
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/SelfTest/src/test.cpp	(revision 82)
@@ -7,36 +7,9 @@
  */
 
-#include "Behavioural/Generic/Queue/SelfTest/include/test.h"
-#include "Common/include/Test.h"
-
 #define NB_ITERATION  1
 #define CYCLE_MAX     (2048*NB_ITERATION)
 
-#define LABEL(str)                                                                       \
-{                                                                                        \
-  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} " << str << endl; \
-} while(0)
-
-static uint32_t cycle = 0;
-
-#define SC_START(cycle_offset)                                          \
-do                                                                      \
-{                                                                       \
-/*cout << "SC_START (begin)" << endl;*/                                 \
-                                                                        \
-  uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \
-  if (cycle_current != cycle)                                           \
-    {                                                                   \
-      cycle = cycle_current;                                            \
-      cout << "##########[ cycle "<< cycle << " ]" << endl;             \
-    }                                                                   \
-                                                                        \
-  if (cycle_current > CYCLE_MAX)                                        \
-    {                                                                   \
-      TEST_KO("Maximal cycles Reached");                                \
-    }                                                                   \
-  sc_start(cycle_offset);                                               \
-/*cout << "SC_START (end  )" << endl;*/                                 \
-} while(0)
+#include "Behavioural/Generic/Queue/SelfTest/include/test.h"
+#include "Common/include/Test.h"
 
 void test (string name,
@@ -49,9 +22,11 @@
 #endif
 
-  Queue * _Queue = new Queue (name.c_str(),
+  Queue * _Queue = new Queue 
+    (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+     _parameters_statistics,
 #endif
-					     _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
@@ -121,5 +96,5 @@
   for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
     {
-      LABEL("Iteration "+toString(iteration));
+      LABEL("Iteration %d",iteration);
 
       while (data_out <= nb_request)
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/include/Queue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/include/Queue.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Queue/include/Queue.h	(revision 82)
@@ -102,5 +102,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Queue             (void);
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 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/src/test.cpp	(revision 82)
@@ -8,5 +8,5 @@
 
 #define NB_ITERATION 16
-
+#define CYCLE_MAX    1024*NB_ITERATION
 #include "Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/SelfTest/include/test.h"
 #include "Common/include/Test.h"
@@ -36,9 +36,11 @@
   morpheo::behavioural::Parameters_Statistics * _param_stat = new morpheo::behavioural::Parameters_Statistics (5,100);
 #endif
-  RegisterFile_Monolithic * registerfile = new RegisterFile_Monolithic (name.c_str()
+  RegisterFile_Monolithic * registerfile = new RegisterFile_Monolithic 
+    (name.c_str()
 #ifdef STATISTICS
-									,_param_stat
+     ,_param_stat
 #endif
-									,_param);
+     ,_param
+     ,USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/RegisterFile_Monolithic.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/RegisterFile_Monolithic.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/RegisterFile_Monolithic.h	(revision 82)
@@ -105,5 +105,5 @@
 #endif
    ,Parameters                                  * param
-   ,morpheo::behavioural::Tusage_t                usage=USE_ALL
+   ,morpheo::behavioural::Tusage_t                usage
    );
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Types.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Monolithic/include/Types.h	(revision 82)
@@ -17,5 +17,5 @@
 namespace registerfile_monolithic    {
 
-  typedef uint32_t Taddress_t;
+//   typedef uint32_t Taddress_t;
   typedef uint32_t Tdata_t;
  
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 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/SelfTest/src/test.cpp	(revision 82)
@@ -13,20 +13,4 @@
 #include "Common/include/Test.h"
 
-
-#define LABEL(str)                                                                       \
-{                                                                                        \
-  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} " << str << endl; \
-} while(0)
-
-#define SC_START(cycle)                                        \
-do                                                             \
-{                                                              \
-  if (static_cast<uint32_t>(sc_simulation_time()) > CYCLE_MAX) \
-    {                                                          \
-      TEST_KO("Maximal cycles Reached");                       \
-    }                                                          \
-  sc_start(cycle);                                             \
-} while(0)
-
 void test (string name,
 	   morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters * _param)
@@ -39,9 +23,11 @@
 #endif
 
-  RegisterFile_Multi_Banked * _RegisterFile_Multi_Banked = new RegisterFile_Multi_Banked (name.c_str(),
+  RegisterFile_Multi_Banked * _RegisterFile_Multi_Banked = new RegisterFile_Multi_Banked 
+    (name.c_str(),
 #ifdef STATISTICS
-											  _param_stat,
+     _param_stat,
 #endif
-											  _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/RegisterFile_Multi_Banked.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/RegisterFile_Multi_Banked.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/RegisterFile_Multi_Banked.h	(revision 82)
@@ -26,4 +26,5 @@
 #include "Behavioural/include/Vhdl.h"
 #endif
+#include "Behavioural/include/Usage.h"
 
 namespace morpheo {
@@ -41,8 +42,8 @@
     // -----[ fields ]----------------------------------------------------
     // Parameters
-  protected : const std::string       _name;
-
+  protected : const std::string  _name;
   protected : const Parameters * _param;
-
+  private   : const Tusage_t     _usage;
+    
 #ifdef STATISTICS
   public    : Stat                           * _stat;
@@ -100,5 +101,6 @@
 					      morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-					      Parameters                                  * param );
+					      Parameters * param,
+					      Tusage_t     usage);
 					       
   public  :          ~RegisterFile_Multi_Banked             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Types.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/include/Types.h	(revision 82)
@@ -18,5 +18,5 @@
 namespace registerfile_multi_banked {
 
-  typedef uint32_t Taddress_t;
+//typedef uint32_t Taddress_t;
   typedef uint32_t Tdata_t;
 
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 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked.cpp	(revision 82)
@@ -14,16 +14,19 @@
 namespace registerfile_multi_banked {
 
-
+  RegisterFile_Multi_Banked::RegisterFile_Multi_Banked 
+  (
 #ifdef SYSTEMC
-  RegisterFile_Multi_Banked::RegisterFile_Multi_Banked (sc_module_name name,
+   sc_module_name name,
 #else
-  RegisterFile_Multi_Banked::RegisterFile_Multi_Banked (string name,
+   std::string name,
 #endif
 #ifdef STATISTICS
-			      morpheo::behavioural::Parameters_Statistics * param_statistics,
+   morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-			      morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters * param ):
-			      _name              (name)
-			      ,_param            (param)
+   morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters * param,
+   Tusage_t usage):
+    _name              (name)
+    ,_param            (param)
+    ,_usage (usage)
   {
     log_printf(FUNC,RegisterFile_Multi_Banked,"RegisterFile_Multi_Banked","Begin");
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 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/RegisterFile_Multi_Banked/src/RegisterFile_Multi_Banked_allocation.cpp	(revision 82)
@@ -20,5 +20,5 @@
     log_printf(FUNC,RegisterFile_Multi_Banked,"allocation","Begin");
 
-    _component   = new Component ();
+    _component   = new Component (_usage);
 
     Entity * entity = _component->set_entity (_name       
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 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/SelfTest/src/test.cpp	(revision 82)
@@ -7,24 +7,9 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (256*NB_ITERATION)
+
 #include "Behavioural/Generic/RegisterFile/SelfTest/include/test.h"
 #include "Common/include/Test.h"
-
-#define NB_ITERATION  1
-#define CYCLE_MAX     (256*NB_ITERATION)
-
-#define LABEL(str)                                                                       \
-{                                                                                        \
-  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} " << str << endl; \
-} while(0)
-
-#define SC_START(cycle)                                        \
-do                                                             \
-{                                                              \
-  if (static_cast<uint32_t>(sc_simulation_time()) > CYCLE_MAX) \
-    {                                                          \
-      TEST_KO("Maximal cycles Reached");                       \
-    }                                                          \
-  sc_start(cycle);                                             \
-} while(0)
 
 void test (string name,
@@ -41,5 +26,6 @@
 						   _param_stat,
 #endif
-						   _param);
+						   _param,
+						   USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/include/RegisterFile.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/include/RegisterFile.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/include/RegisterFile.h	(revision 82)
@@ -29,4 +29,5 @@
 #include "Behavioural/include/Vhdl.h"
 #endif
+#include "Behavioural/include/Usage.h"
 
 namespace morpheo {
@@ -43,7 +44,7 @@
     // -----[ fields ]----------------------------------------------------
     // Parameters
-  protected : const std::string       _name;
-
+  protected : const std::string  _name;
   protected : const Parameters * _param;
+  private   : const Tusage_t     _usage;
 
 #ifdef STATISTICS
@@ -95,5 +96,6 @@
 						morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-						Parameters                                  * param );
+						Parameters                                  * param ,
+						Tusage_t usage);
     
   public  :          ~RegisterFile             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile.cpp	(revision 82)
@@ -14,15 +14,18 @@
 
 
+  RegisterFile::RegisterFile (
 #ifdef SYSTEMC
-  RegisterFile::RegisterFile (sc_module_name name,
+			      sc_module_name name,
 #else
-  RegisterFile::RegisterFile (string name,
+			      std::string name,
 #endif
 #ifdef STATISTICS
 			      morpheo::behavioural::Parameters_Statistics             * param_statistics,
 #endif
-			      morpheo::behavioural::generic::registerfile::Parameters * param ):
-			      _name              (name)
-			      ,_param            (param)
+			      morpheo::behavioural::generic::registerfile::Parameters * param,
+			      Tusage_t usage):
+    _name              (name)
+    ,_param            (param)
+    ,_usage (usage)
   {
     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 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/RegisterFile/src/RegisterFile_allocation.cpp	(revision 82)
@@ -87,5 +87,5 @@
 #endif
 																					       ,_param->_param_registerfile_monolithic
-																					       );
+																					       ,_usage);
 	
       }
@@ -98,5 +98,5 @@
 #endif
 																						,_param->_param_registerfile_multi_banked
-																						);
+																						,_usage);
 	
       }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/SelfTest/src/test.cpp	(revision 82)
@@ -8,4 +8,5 @@
 
 #define NB_ITERATION 512
+#define CYCLE_MAX    (1024*NB_ITERATION)
 
 #include "Behavioural/Generic/Select/Select_Priority_Fixed/SelfTest/include/test.h"
@@ -21,9 +22,11 @@
   morpheo::behavioural::Parameters_Statistics * _param_stat = new morpheo::behavioural::Parameters_Statistics (5,50);
 #endif
-  Select_Priority_Fixed * _Select_Priority_Fixed = new Select_Priority_Fixed (name.c_str(),
+  Select_Priority_Fixed * _Select_Priority_Fixed = new Select_Priority_Fixed 
+    (name.c_str(),
 #ifdef STATISTICS
-									      _param_stat,
+     _param_stat,
 #endif
-									      _param);
+     _param,
+     USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/include/Select_Priority_Fixed.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/include/Select_Priority_Fixed.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Select/Select_Priority_Fixed/include/Select_Priority_Fixed.h	(revision 82)
@@ -91,5 +91,5 @@
 #endif
    Parameters                                  * param ,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL);
+   morpheo::behavioural::Tusage_t                usage);
     
   public  :          ~Select_Priority_Fixed             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/SelfTest/src/test.cpp	(revision 82)
@@ -7,9 +7,10 @@
  */
 
+#define NB_ITERATION 64
+#define CYCLE_MAX    (1024*NB_ITERATION)
+
 #include "Behavioural/Generic/Shifter/SelfTest/include/test.h"
 #include "Common/include/BitManipulation.h"
 #include "Common/include/Test.h"
-
-#define NB_ITERATION 64
 
 void test (string name,
@@ -41,5 +42,6 @@
 				    param_stat,
 #endif
-				    param);
+				    &param,
+				    USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/include/Parameters.h	(revision 82)
@@ -59,8 +59,8 @@
   public : ~Parameters () ;
 
-  public :        std::string   msg_error  (void);
-  public :        std::string   print      (uint32_t depth);
-  public : friend std::ostream& operator<< (std::ostream& output_stream,
-					    morpheo::behavioural::generic::shifter::Parameters & x);
+  public :        Parameters_test msg_error  (void);
+  public :        std::string     print      (uint32_t depth);
+  public : friend std::ostream&   operator<< (std::ostream& output_stream,
+					      morpheo::behavioural::generic::shifter::Parameters & x);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/include/Shifter.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/include/Shifter.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/include/Shifter.h	(revision 82)
@@ -25,4 +25,5 @@
 #endif
 #include "Behavioural/include/Component.h"
+#include "Behavioural/include/Usage.h"
 
 namespace morpheo                    {
@@ -39,7 +40,8 @@
     // -----[ fields ]----------------------------------------------------
     // Parameters
-  protected : const std::string     _name;
+  protected : const std::string  _name;
+  protected : const Parameters * _param;
+  private   : const Tusage_t     _usage;
 
-  protected : const Parameters _param;
 #ifdef STATISTICS
   public    : Stat                           * _stat;
@@ -84,5 +86,7 @@
 					   morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-					   Parameters                                    param );
+					   Parameters                                  * param,
+					   morpheo::behavioural::Tusage_t                usage
+					   );
     
   public  :          Shifter              (Parameters param );
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Parameters_msg_error.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Parameters_msg_error.cpp	(revision 82)
@@ -15,41 +15,24 @@
 namespace shifter {
 
-  std::string Parameters::msg_error(void)
+  Parameters_test Parameters::msg_error(void)
   {
-    std::string msg = "";
+    Parameters_test test ("Shifter");
 
     if (_size_data < 2)
-      {
-        msg += "  - size_data must be > 1\n";
-        msg += "    * size_data                       : " + toString(_size_data) + "\n";
-      }
-
+      test.error("size_data must be > 1\n");
+    
     if (is_positive(_nb_port) == false)
-      {
-        msg += "  - nb_port must be > 0\n";
-        msg += "    * nb_port                         : " + toString(_nb_port) + "\n";
-      }
-
+      test.error("nb_port must be > 0\n");
+    
     if (_shift_value > _size_data) 
-      {
-	msg += "  - shift_value must be < size_data\n";	
-        msg += "    * shift_value                     : " + toString(_shift_value) + "\n";
-        msg += "    * size_data                       : " + toString(_size_data)   + "\n";
-      }    
-
+      test.error("shift_value must be < size_data\n");	
+    
     if ( (_rotate == internal_rotate) && (_carry != internal_logic))
-      {
-	msg += "  - Incompatible parameters : internal_rotate have never carry (must be set at \"internal_logic\"\n";
-        msg += "    * rotate                          : " + toString(_rotate) + "\n";
-        msg += "    * carry                           : " + toString(_carry ) + "\n";
-      }    
-
+      test.error("Incompatible parameters : internal_rotate have never carry (must be set at \"internal_logic\"\n");
+    
     if (_type_completion_bool && (_size_data_completion != 1))
-      {
-	msg += "  - Incompatible parameters : you can't have the type of port in_SHIFTER_COMPLETION at bool. Because, This port must be more bits\n";
-	msg += "    * size_data_completion            : " + toString (_size_data_completion) + "\n";
-      }
+      test.error("Incompatible parameters : you can't have the type of port in_SHIFTER_COMPLETION at bool. Because, This port must be more bits\n");
       
-    return msg;
+    return test;
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter.cpp	(revision 82)
@@ -14,15 +14,18 @@
 
 
+  Shifter::Shifter (
 #ifdef SYSTEMC
-  Shifter::Shifter (sc_module_name name
+		    sc_module_name name
 #else
-  Shifter::Shifter (string name
+		    std::string name
 #endif
 #ifdef STATISTICS
 		    ,morpheo::behavioural::Parameters_Statistics * param_statistics
 #endif
-		    ,morpheo::behavioural::generic::shifter::Parameters param ):
-		    _name   (name)
-		    ,_param (param)
+		    ,morpheo::behavioural::generic::shifter::Parameters *param
+		    ,morpheo::behavioural::Tusage_t                usage ):
+    _name   (name)
+    ,_param (param)
+    ,_usage (usage)
   {
 #ifdef SYSTEMC
@@ -50,17 +53,17 @@
     dont_initialize ();
     sensitive << (*(in_CLOCK)).neg();
-    for (uint32_t i=0; i<param._nb_port; i++)
+    for (uint32_t i=0; i<param->_nb_port; i++)
       {
 	sensitive << (*(in_SHIFTER_DATA      [i]));
-	if (param._shift_value == 0)
+	if (param->_shift_value == 0)
 	sensitive << (*(in_SHIFTER_SHIFT     [i]));
-	if (param._direction   == external_direction)
+	if (param->_direction   == external_direction)
 	sensitive << (*(in_SHIFTER_DIRECTION [i]));
-	if (_param._rotate     == external_rotate)
+	if (_param->_rotate     == external_rotate)
 	sensitive << (*(in_SHIFTER_TYPE      [i]));
-	if (param._carry       == external_carry)
+	if (param->_carry       == external_carry)
 	sensitive << (*(in_SHIFTER_CARRY     [i]));
-	if (param._carry       == external_completion)
-	  if (_param._type_completion_bool == true)
+	if (param->_carry       == external_completion)
+	  if (_param->_type_completion_bool == true)
 	    sensitive << (*(in_SHIFTER_CARRY_IN  [i]));
 	  else
@@ -70,17 +73,17 @@
 #ifdef SYSTEMCASS_SPECIFIC
     // List dependency information
-    for (uint32_t i=0; i<param._nb_port; i++)
+    for (uint32_t i=0; i<param->_nb_port; i++)
       {
 	(*(out_SHIFTER_DATA [i])) (*(in_SHIFTER_DATA      [i]));
-	if (param._shift_value == 0)
+	if (param->_shift_value == 0)
 	(*(out_SHIFTER_DATA [i])) (*(in_SHIFTER_SHIFT     [i]));
-	if (param._direction   == external_direction)
+	if (param->_direction   == external_direction)
 	(*(out_SHIFTER_DATA [i])) (*(in_SHIFTER_DIRECTION [i]));
-	if (_param._rotate     == external_rotate)
+	if (_param->_rotate     == external_rotate)
 	(*(out_SHIFTER_DATA [i])) (*(in_SHIFTER_TYPE      [i]));
-	if (param._carry       == external_carry)
+	if (param->_carry       == external_carry)
 	(*(out_SHIFTER_DATA [i])) (*(in_SHIFTER_CARRY     [i]));
-	if (param._carry       == external_completion)
-	if (_param._type_completion_bool == true)
+	if (param->_carry       == external_completion)
+	if (_param->_type_completion_bool == true)
 	(*(out_SHIFTER_DATA [i])) (*(in_SHIFTER_CARRY_IN  [i]));
 	else
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_allocation.cpp	(revision 82)
@@ -17,5 +17,5 @@
   void Shifter::allocation (void)
   {
-    _component   = new Component ();
+    _component   = new Component (_usage);
 
     Entity * entity = _component->set_entity (_name       
@@ -45,21 +45,21 @@
     {
       // Interface "shifter"
-       in_SHIFTER_DATA      = new SC_IN (Tdata_t)      * [_param._nb_port];
-      if (_param._shift_value == 0)
-       in_SHIFTER_SHIFT     = new SC_IN (Tshift_t)     * [_param._nb_port];
-      if (_param._direction   == external_direction)
-       in_SHIFTER_DIRECTION = new SC_IN (Tdirection_t) * [_param._nb_port];
-      if (_param._rotate      == external_rotate)
-       in_SHIFTER_TYPE      = new SC_IN (Ttype_t)      * [_param._nb_port];
-      if (_param._carry       == external_carry)
-       in_SHIFTER_CARRY     = new SC_IN (Tcarry_t)     * [_param._nb_port];
-      if (_param._carry       == external_completion)
-      if (_param._type_completion_bool == true)
-       in_SHIFTER_CARRY_IN  = new SC_IN (Tcontrol_t)   * [_param._nb_port];
+       in_SHIFTER_DATA      = new SC_IN (Tdata_t)      * [_param->_nb_port];
+      if (_param->_shift_value == 0)
+       in_SHIFTER_SHIFT     = new SC_IN (Tshift_t)     * [_param->_nb_port];
+      if (_param->_direction   == external_direction)
+       in_SHIFTER_DIRECTION = new SC_IN (Tdirection_t) * [_param->_nb_port];
+      if (_param->_rotate      == external_rotate)
+       in_SHIFTER_TYPE      = new SC_IN (Ttype_t)      * [_param->_nb_port];
+      if (_param->_carry       == external_carry)
+       in_SHIFTER_CARRY     = new SC_IN (Tcarry_t)     * [_param->_nb_port];
+      if (_param->_carry       == external_completion)
+      if (_param->_type_completion_bool == true)
+       in_SHIFTER_CARRY_IN  = new SC_IN (Tcontrol_t)   * [_param->_nb_port];
       else
-       in_SHIFTER_COMPLETION= new SC_IN (Tdata_t)      * [_param._nb_port];
-      out_SHIFTER_DATA      = new SC_OUT(Tdata_t)      * [_param._nb_port];
+       in_SHIFTER_COMPLETION= new SC_IN (Tdata_t)      * [_param->_nb_port];
+      out_SHIFTER_DATA      = new SC_OUT(Tdata_t)      * [_param->_nb_port];
       
-      for (uint32_t i=0; i<_param._nb_port; i++)
+      for (uint32_t i=0; i<_param->_nb_port; i++)
 	{
 	  Interface_fifo * interface = _interfaces->set_interface("shifter_"+toString(i)
@@ -71,19 +71,19 @@
 								  );
 	 
-	   in_SHIFTER_DATA       [i] = interface->set_signal_in  <Tdata_t     > ("data"      ,_param._size_data);
-	  if (_param._shift_value == 0)
-	   in_SHIFTER_SHIFT      [i] = interface->set_signal_in  <Tshift_t    > ("shift"     ,static_cast<uint32_t>(ceil(log2(_param._size_data))));
-	  if (_param._direction == external_direction)
+	   in_SHIFTER_DATA       [i] = interface->set_signal_in  <Tdata_t     > ("data"      ,_param->_size_data);
+	  if (_param->_shift_value == 0)
+	   in_SHIFTER_SHIFT      [i] = interface->set_signal_in  <Tshift_t    > ("shift"     ,static_cast<uint32_t>(ceil(log2(_param->_size_data))));
+	  if (_param->_direction == external_direction)
 	   in_SHIFTER_DIRECTION  [i] = interface->set_signal_in  <Tdirection_t> ("direction" ,1);
-	  if (_param._rotate  == external_rotate)
+	  if (_param->_rotate  == external_rotate)
 	   in_SHIFTER_TYPE       [i] = interface->set_signal_in  <Ttype_t     > ("type"      ,1);
-	  if (_param._carry == external_carry)
+	  if (_param->_carry == external_carry)
 	   in_SHIFTER_CARRY      [i] = interface->set_signal_in  <Tcarry_t    > ("carry"     ,1);
-	  if (_param._carry       == external_completion)
-	  if (_param._type_completion_bool == true)
+	  if (_param->_carry       == external_completion)
+	  if (_param->_type_completion_bool == true)
 	   in_SHIFTER_CARRY_IN   [i] = interface->set_signal_in  <Tcontrol_t  > ("carry_in"  ,1);
 	  else
-	   in_SHIFTER_COMPLETION [i] = interface->set_signal_in  <Tdata_t     > ("completion",_param._size_data_completion);
-	  out_SHIFTER_DATA       [i] = interface->set_signal_out <Tdata_t     > ("data"      ,_param._size_data);
+	   in_SHIFTER_COMPLETION [i] = interface->set_signal_in  <Tdata_t     > ("completion",_param->_size_data_completion);
+	  out_SHIFTER_DATA       [i] = interface->set_signal_out <Tdata_t     > ("data"      ,_param->_size_data);
 	}										                                         
     }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_deallocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_deallocation.cpp	(revision 82)
@@ -22,14 +22,14 @@
 
     delete []  in_SHIFTER_DATA      ;
-    if (_param._shift_value == 0)
+    if (_param->_shift_value == 0)
     delete []  in_SHIFTER_SHIFT     ;
-    if (_param._direction   == external_direction )
+    if (_param->_direction   == external_direction )
     delete []  in_SHIFTER_DIRECTION ;
-    if (_param._rotate      == external_rotate    )
+    if (_param->_rotate      == external_rotate    )
     delete []  in_SHIFTER_TYPE      ;
-    if (_param._carry       == external_carry     )
+    if (_param->_carry       == external_carry     )
     delete []  in_SHIFTER_CARRY     ;
-    if (_param._carry       == external_completion)
-    if (_param._type_completion_bool == true)
+    if (_param->_carry       == external_completion)
+    if (_param->_type_completion_bool == true)
     delete []  in_SHIFTER_CARRY_IN  ;
     else
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_genMealy_shift.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_genMealy_shift.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_genMealy_shift.cpp	(revision 82)
@@ -18,40 +18,40 @@
   void Shifter::genMealy_shift (void)
   {
-    for (uint32_t i=0; i<_param._nb_port; i++)
+    for (uint32_t i=0; i<_param->_nb_port; i++)
       {
 	// Read
 	Tdata_t      data_in     = PORT_READ(in_SHIFTER_DATA [i]);
 	Tdata_t      data_out    = data_in;
-	Tshift_t     shift_value = _param._shift_value;
+	Tshift_t     shift_value = _param->_shift_value;
 	if (shift_value == 0)
 	  shift_value = PORT_READ(in_SHIFTER_SHIFT [i]);
 
  	Tdirection_t direction; 
- 	if (_param._direction == external_direction)
+ 	if (_param->_direction == external_direction)
 	  direction = PORT_READ(in_SHIFTER_DIRECTION [i]);
 	else
-	  direction = _param._internal_direction;
+	  direction = _param->_internal_direction;
 
 	Ttype_t      type;
-	if (_param._rotate    == external_rotate)
+	if (_param->_rotate    == external_rotate)
 	  type      = PORT_READ(in_SHIFTER_TYPE      [i]);
 	else
-	  type      = _param._internal_type; 
+	  type      = _param->_internal_type; 
 
 	Tcarry_t     carry;	
-	if (_param._carry     == external_carry)
+	if (_param->_carry     == external_carry)
 	  carry     = PORT_READ(in_SHIFTER_CARRY     [i]);
 	else
-	  carry     = _param._internal_carry; 
+	  carry     = _param->_internal_carry; 
 	
 	if (type == _shift)
 	  {
-	    data_out = shift  <Tdata_t> (_param._size_data, data_in, shift_value, direction == _left, carry == _arithmetic);
+	    data_out = shift  <Tdata_t> (_param->_size_data, data_in, shift_value, direction == _left, carry == _arithmetic);
 
-	    if (_param._size_data_completion > 0)
+	    if (_param->_size_data_completion > 0)
 	      {
 		Tdata_t completion;
 
-		if (_param._type_completion_bool == true)
+		if (_param->_type_completion_bool == true)
 		  completion = (PORT_READ(in_SHIFTER_CARRY_IN   [i])==true)?1:0;
 		else
@@ -66,5 +66,5 @@
 		else
 		  {
-		    mask       = gen_mask<Tdata_t> (shift_value)      << (_param._size_data-shift_value);
+		    mask       = gen_mask<Tdata_t> (shift_value)      << (_param->_size_data-shift_value);
 		  }
 		  
@@ -73,5 +73,5 @@
 	  }
 	else
-	  data_out = rotate <Tdata_t> (_param._size_data, data_in, shift_value, direction == _left);
+	  data_out = rotate <Tdata_t> (_param->_size_data, data_in, shift_value, direction == _left);
 
 	// Write
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_body.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Shifter/src/Shifter_vhdl_body.cpp	(revision 82)
@@ -17,45 +17,45 @@
   void Shifter::vhdl_body (Vhdl * & vhdl)
   {
-    //uint32_t log2_size_data = static_cast<uint32_t>(ceil(log2(_param._size_data)));
+    //uint32_t log2_size_data = static_cast<uint32_t>(ceil(log2(_param->_size_data)));
 
     vhdl->set_body ("-- Compute all case of shift");
 
-    for (uint32_t i=0; i<_param._nb_port; i++)
+    for (uint32_t i=0; i<_param->_nb_port; i++)
       {
 	//-----[ Shift logic Left ]--------------------------------------------
-	if (_param._have_shift_logic_left)
+	if (_param->_have_shift_logic_left)
 	  vhdl->set_body ("shift_logic_left_"+toString(i)+"        <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) sll CONV_INTEGER(shift_"+toString(i)+"));");
 	//-----[ Shift logic Right ]-------------------------------------------
-	if (_param._have_shift_logic_right)
+	if (_param->_have_shift_logic_right)
 	  vhdl->set_body ("shift_logic_right_"+toString(i)+"       <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) srl CONV_INTEGER(shift_"+toString(i)+"));");
 	//-----[ Shift arithmetic Left ]---------------------------------------
-	if (_param._have_shift_arithmetic_left)
+	if (_param->_have_shift_arithmetic_left)
 	  vhdl->set_body ("shift_arithmetic_left_"+toString(i)+"   <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) sla CONV_INTEGER(shift_"+toString(i)+"));");
 	//-----[ Shift arithmetic Right ]--------------------------------------
-	if (_param._have_shift_arithmetic_right)
+	if (_param->_have_shift_arithmetic_right)
 	  vhdl->set_body ("shift_arithmetic_right_"+toString(i)+"  <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) sra CONV_INTEGER(shift_"+toString(i)+"));");
 	//-----[ Rotate Left ]-------------------------------------------------
-	if (_param._have_rotate_left)
+	if (_param->_have_rotate_left)
 	  vhdl->set_body ("rotate_left_"+toString(i)+"             <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) rol CONV_INTEGER(shift_"+toString(i)+"));");
 	//-----[ Rotate Right ]------------------------------------------------
-	if (_param._have_rotate_right)
+	if (_param->_have_rotate_right)
 	  vhdl->set_body ("rotate_right_"+toString(i)+"            <= TO_STDLOGICVECTOR(TO_BITVECTOR(in_SHIFTER_"+toString(i)+"_DATA) ror CONV_INTEGER(shift_"+toString(i)+"));");
       }
 
-    if (_param._size_data_completion > 0)
+    if (_param->_size_data_completion > 0)
       {
 	vhdl->set_body ("");
 	vhdl->set_body ("-- Mask");
 
-	for (uint32_t i=0; i<_param._nb_port; i++)
+	for (uint32_t i=0; i<_param->_nb_port; i++)
 	  {
 	    std::string print_shifter_completion;
 	    
-	    if (_param._type_completion_bool == true)
+	    if (_param->_type_completion_bool == true)
 	      print_shifter_completion = "in_SHIFTER_"+toString(i)+"_CARRY_IN";
 	    else
 	      print_shifter_completion = "in_SHIFTER_"+toString(i)+"_COMPLETION";
 
-	    if (_param._size_data == _param._size_data_completion)
+	    if (_param->_size_data == _param->_size_data_completion)
 	      {
 		vhdl->set_body ("shifter_completion_left_"+toString(i)+"  <= "+print_shifter_completion+";");
@@ -64,9 +64,9 @@
 	    else
 	      {
-		vhdl->set_body ("shifter_completion_left_"+toString(i)+std_logic_range(_param._size_data-1,_param._size_data_completion)+"  <= "+std_logic_others(_param._size_data-_param._size_data_completion,0)+";");
-		vhdl->set_body ("shifter_completion_left_"+toString(i)+std_logic_range(_param._size_data_completion                    )+"  <= "+print_shifter_completion+";");
-
-		vhdl->set_body ("shifter_completion_right_"+toString(i)+std_logic_range(_param._size_data-1,_param._size_data-_param._size_data_completion)+" <= "+print_shifter_completion+";");
-		vhdl->set_body ("shifter_completion_right_"+toString(i)+std_logic_range(_param._size_data-_param._size_data_completion                    )+" <= "+std_logic_others(_param._size_data-_param._size_data_completion,0)+";");
+		vhdl->set_body ("shifter_completion_left_"+toString(i)+std_logic_range(_param->_size_data-1,_param->_size_data_completion)+"  <= "+std_logic_others(_param->_size_data-_param->_size_data_completion,0)+";");
+		vhdl->set_body ("shifter_completion_left_"+toString(i)+std_logic_range(_param->_size_data_completion                    )+"  <= "+print_shifter_completion+";");
+
+		vhdl->set_body ("shifter_completion_right_"+toString(i)+std_logic_range(_param->_size_data-1,_param->_size_data-_param->_size_data_completion)+" <= "+print_shifter_completion+";");
+		vhdl->set_body ("shifter_completion_right_"+toString(i)+std_logic_range(_param->_size_data-_param->_size_data_completion                    )+" <= "+std_logic_others(_param->_size_data-_param->_size_data_completion,0)+";");
 	      }
 	    
@@ -80,5 +80,5 @@
     vhdl->set_body ("-- Multiplexor");
 
-    for (uint32_t i=0; i<_param._nb_port; i++)
+    for (uint32_t i=0; i<_param->_nb_port; i++)
       {
 	vhdl->set_body ("out_SHIFTER_"+toString(i)+"_DATA       <=");
@@ -86,11 +86,11 @@
 
 	//-----[ Shift arithmetic Left ]---------------------------------------
-	if (_param._have_shift_arithmetic_left)
-	  {
-	    bool   have_when  = false;
-	    std::string print_when = "";
-	    std::string print_and  = "";
-	    
-	    if (_param._direction   == external_direction)
+	if (_param->_have_shift_arithmetic_left)
+	  {
+	    bool   have_when  = false;
+	    std::string print_when = "";
+	    std::string print_and  = "";
+	    
+	    if (_param->_direction   == external_direction)
 	      {
 		have_when = true;
@@ -98,5 +98,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._rotate      == external_rotate)
+	    if (_param->_rotate      == external_rotate)
 	      {
 		have_when = true;
@@ -104,5 +104,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._carry       == external_carry)
+	    if (_param->_carry       == external_carry)
 	      {
 		have_when = true;
@@ -117,11 +117,11 @@
 	  }
 	//-----[ Shift arithmetic Right ]--------------------------------------
-	if (_param._have_shift_arithmetic_right)
-	  {
-	    bool   have_when  = false;
-	    std::string print_when = "";
-	    std::string print_and  = "";
-	    
-	    if (_param._direction   == external_direction)
+	if (_param->_have_shift_arithmetic_right)
+	  {
+	    bool   have_when  = false;
+	    std::string print_when = "";
+	    std::string print_and  = "";
+	    
+	    if (_param->_direction   == external_direction)
 	      {
 		have_when = true;
@@ -129,5 +129,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._rotate      == external_rotate)
+	    if (_param->_rotate      == external_rotate)
 	      {
 		have_when = true;
@@ -135,5 +135,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._carry       == external_carry)
+	    if (_param->_carry       == external_carry)
 	      {
 		have_when = true;
@@ -148,11 +148,11 @@
 	  }
 	//-----[ Shift logic Left ]--------------------------------------------
-	if (_param._have_shift_logic_left)
-	  {
-	    bool   have_when  = false;
-	    std::string print_when = "";
-	    std::string print_and  = "";
-	    
-	    if (_param._direction   == external_direction)
+	if (_param->_have_shift_logic_left)
+	  {
+	    bool   have_when  = false;
+	    std::string print_when = "";
+	    std::string print_and  = "";
+	    
+	    if (_param->_direction   == external_direction)
 	      {
 		have_when = true;
@@ -160,5 +160,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._rotate      == external_rotate)
+	    if (_param->_rotate      == external_rotate)
 	      {
 		have_when = true;
@@ -166,5 +166,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._carry       == external_carry)
+	    if (_param->_carry       == external_carry)
 	      {
 		have_when = true;
@@ -177,5 +177,5 @@
 	    std::string print_expr_completion;
 
-	    if (_param._size_data_completion == 0)
+	    if (_param->_size_data_completion == 0)
 	      print_expr_completion = "shift_logic_left_"+toString(i)+" ";
 	    else
@@ -186,11 +186,11 @@
 	  }
 	//-----[ Shift logic Right ]-------------------------------------------
-	if (_param._have_shift_logic_right)
-	  {
-	    bool   have_when  = false;
-	    std::string print_when = "";
-	    std::string print_and  = "";
-	    
-	    if (_param._direction   == external_direction)
+	if (_param->_have_shift_logic_right)
+	  {
+	    bool   have_when  = false;
+	    std::string print_when = "";
+	    std::string print_and  = "";
+	    
+	    if (_param->_direction   == external_direction)
 	      {
 		have_when = true;
@@ -198,5 +198,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._rotate      == external_rotate)
+	    if (_param->_rotate      == external_rotate)
 	      {
 		have_when = true;
@@ -204,5 +204,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._carry       == external_carry)
+	    if (_param->_carry       == external_carry)
 	      {
 		have_when = true;
@@ -215,5 +215,5 @@
 	    std::string print_expr_completion;
 
-	    if (_param._size_data_completion == 0)
+	    if (_param->_size_data_completion == 0)
 	      print_expr_completion = "shift_logic_right_"+toString(i);
 	    else
@@ -224,11 +224,11 @@
 	  }
 	//-----[ Rotate Left ]-------------------------------------------------
-	if (_param._have_rotate_left)
-	  {
-	    bool   have_when  = false;
-	    std::string print_when = "";
-	    std::string print_and  = "";
-	    
-	    if (_param._direction   == external_direction)
+	if (_param->_have_rotate_left)
+	  {
+	    bool   have_when  = false;
+	    std::string print_when = "";
+	    std::string print_and  = "";
+	    
+	    if (_param->_direction   == external_direction)
 	      {
 		have_when = true;
@@ -236,5 +236,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._rotate      == external_rotate)
+	    if (_param->_rotate      == external_rotate)
 	      {
 		have_when = true;
@@ -250,11 +250,11 @@
 	  }
 	//-----[ Rotate Right ]------------------------------------------------
-	if (_param._have_rotate_right)
-	  {
-	    bool   have_when  = false;
-	    std::string print_when = "";
-	    std::string print_and  = "";
-	    
-	    if (_param._direction   == external_direction)
+	if (_param->_have_rotate_right)
+	  {
+	    bool   have_when  = false;
+	    std::string print_when = "";
+	    std::string print_and  = "";
+	    
+	    if (_param->_direction   == external_direction)
 	      {
 		have_when = true;
@@ -262,5 +262,5 @@
 		print_and = " and ";
 	      }
-	    if (_param._rotate      == external_rotate)
+	    if (_param->_rotate      == external_rotate)
 	      {
 		have_when = true;
@@ -281,5 +281,5 @@
   /*
   //-----[ Shift logic Left ]--------------------------------------------
-  if (_param._have_shift_logic_left)
+  if (_param->_have_shift_logic_left)
     {
 
@@ -287,5 +287,5 @@
 
   //-----[ Shift logic Right ]-------------------------------------------
-  if (_param._have_shift_logic_right)
+  if (_param->_have_shift_logic_right)
     {
       
@@ -293,5 +293,5 @@
 
   //-----[ Shift arithmetic Left ]---------------------------------------
-  if (_param._have_shift_arithmetic_left)
+  if (_param->_have_shift_arithmetic_left)
     {
 
@@ -299,5 +299,5 @@
 
   //-----[ Shift arithmetic Right ]--------------------------------------
-  if (_param._have_shift_arithmetic_right)
+  if (_param->_have_shift_arithmetic_right)
     {
       
@@ -305,5 +305,5 @@
   
   //-----[ Rotate Left ]-------------------------------------------------
-  if (_param._have_rotate_left)
+  if (_param->_have_rotate_left)
     {
       
@@ -311,5 +311,5 @@
   
   //-----[ Rotate Right ]------------------------------------------------
-  if (_param._have_rotate_right)
+  if (_param->_have_rotate_right)
     {
       
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Sort/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Sort/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Sort/SelfTest/src/test.cpp	(revision 82)
@@ -7,40 +7,11 @@
  */
 
+#define NB_ITERATION  1024
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Generic/Sort/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Common/include/BitManipulation.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  1024
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
-
 
 class entry_t
@@ -62,7 +33,8 @@
   Sort * _Sort = new Sort (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+			   _parameters_statistics,
 #endif
-					     _param);
+			   _param,
+			   USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Sort/include/Sort.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Sort/include/Sort.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Sort/include/Sort.h	(revision 82)
@@ -91,5 +91,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Sort             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Sort/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Sort/include/Types.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Sort/include/Types.h	(revision 82)
@@ -16,5 +16,5 @@
 namespace sort {
 
-  typedef uint32_t Taddress_t;
+//   typedef uint32_t Taddress_t;
   typedef uint32_t Tdata_t;
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/SelfTest/src/test.cpp	(revision 82)
@@ -7,38 +7,10 @@
  */
 
+#define NB_ITERATION  10
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Generic/Victim/SelfTest/include/test.h"
 #include "Common/include/Test.h"
 #include "Behavioural/include/Allocation.h"
-
-#define NB_ITERATION  10
-#define CYCLE_MAX     (128*NB_ITERATION)
-
-#define LABEL(str...)							\
-  {									\
-    msg (_("{%d} "),static_cast<uint32_t>(sc_simulation_time()));	\
-    msg (str);								\
-    msg (_("\n"));							\
-  } while(0)
-
-#define SC_START(cycle_offset)                                                       \
-  do									             \
-    {									             \
-      /*cout << "SC_START (begin)" << endl;*/				             \
-									             \
-      uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time());          \
-      if (cycle_offset != 0)						             \
-	{								             \
-	  cout << "##########[ cycle "<< cycle_current+cycle_offset << " ]" << endl; \
-	}								             \
-									             \
-      if (cycle_current > CYCLE_MAX)					             \
-	{								             \
-	  TEST_KO("Maximal cycles Reached");				             \
-	}								             \
-									             \
-      sc_start(cycle_offset);						             \
-									             \
-      /*cout << "SC_START (end  )" << endl;*/				             \
-    } while(0)
 
 void test (string name,
@@ -53,7 +25,8 @@
   Victim * _Victim = new Victim (name.c_str(),
 #ifdef STATISTICS
-					     _parameters_statistics,
+				 _parameters_statistics,
 #endif
-					     _param);
+				 _param,
+				 USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/SelfTest/src/test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/SelfTest/src/test.cpp	(revision 82)
@@ -7,4 +7,7 @@
  */
 
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
 #include "Behavioural/Generic/Victim/Victim_Pseudo_LRU/SelfTest/include/test.h"
 #include "Common/include/Test.h"
@@ -39,5 +42,6 @@
 								  param_stat,
 #endif
-								  &param);
+								  &param,
+								  USE_ALL);
   
 #ifdef SYSTEMC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/include/Victim_Pseudo_LRU.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/include/Victim_Pseudo_LRU.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/include/Victim_Pseudo_LRU.h	(revision 82)
@@ -41,4 +41,5 @@
 #endif
 #include "Behavioural/include/Component.h"
+#include "Behavioural/include/Usage.h"
 
 namespace morpheo {
@@ -55,7 +56,8 @@
     // -----[ fields ]----------------------------------------------------
     // Parameters
-  protected : const std::string   _name;
+  protected : const std::string  _name;
+  protected : const Parameters * _param;
+  private   : const Tusage_t     _usage;
 
-  protected : const Parameters  * _param;
 #ifdef STATISTICS
   public    : Stat                           * _stat;
@@ -104,5 +106,6 @@
    morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-   Parameters                                  * param );
+   Parameters                                  * param ,
+   morpheo::behavioural::Tusage_t                usage);
 					       
   public  :          Victim_Pseudo_LRU              (Parameters param );
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU.cpp	(revision 82)
@@ -14,15 +14,19 @@
 namespace victim_pseudo_lru {
 
+  Victim_Pseudo_LRU::Victim_Pseudo_LRU 
+  (
 #ifdef SYSTEMC
-  Victim_Pseudo_LRU::Victim_Pseudo_LRU (sc_module_name name,
+   sc_module_name name,
 #else
-  Victim_Pseudo_LRU::Victim_Pseudo_LRU (std::string name,
+   std::string name,
 #endif
 #ifdef STATISTICS
-			  morpheo::behavioural::Parameters_Statistics * param_statistics,
+   morpheo::behavioural::Parameters_Statistics * param_statistics,
 #endif
-			  morpheo::behavioural::generic::victim::victim_pseudo_lru::Parameters * param ):
-			  _name   (name)
-			  ,_param (param)
+   morpheo::behavioural::generic::victim::victim_pseudo_lru::Parameters * param ,
+   morpheo::behavioural::Tusage_t usage):
+    _name   (name)
+    ,_param (param)
+    ,_usage (usage)
   {
     log_printf(FUNC,Victim_Pseudo_LRU,"Victim_Pseudo_LRU","Begin");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/Victim_Pseudo_LRU/src/Victim_Pseudo_LRU_allocation.cpp	(revision 82)
@@ -18,5 +18,5 @@
   void Victim_Pseudo_LRU::allocation (void)
   {
-    _component   = new Component ();
+    _component   = new Component (_usage);
 
     Entity * entity = _component->set_entity (_name                  
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/include/Types.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/include/Types.h	(revision 82)
@@ -16,5 +16,5 @@
 namespace victim {
 
-  typedef uint32_t Taddress_t;
+//   typedef uint32_t Taddress_t;
   typedef uint32_t Tentity_t;
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/include/Victim.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/include/Victim.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/include/Victim.h	(revision 82)
@@ -102,5 +102,5 @@
 #endif
    Parameters                                  * param,
-   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   morpheo::behavioural::Tusage_t                usage
    );
   public  :          ~Victim             (void);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/src/Victim_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/src/Victim_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Generic/Victim/src/Victim_allocation.cpp	(revision 82)
@@ -65,5 +65,6 @@
 	     ,param_statistics
 #endif
-	     ,_param->_param_victim_pseudo_lru);
+	     ,_param->_param_victim_pseudo_lru
+	     ,_usage);
 	  break;
 	}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.Selftest
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.Selftest	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.Selftest	(revision 82)
@@ -37,5 +37,20 @@
 
 execute				: all_selftest
-				@$(MAKE) $(EXEC_LOG);
+				@\
+				$(MAKE) $(EXEC_LOG);					\
+				declare -i all_ok=1;					\
+				for i in $(EXEC_LOG); do				\
+				    $(GREP) -q "Test OK" $$i; 				\
+				    declare -i test_ok=$$?;				\
+				    $(GREP) -q "Test KO" $$i;				\
+				    declare -i test_ko=$$?;				\
+				    if $(TEST) $$test_ko -eq 0 -o $$test_ok -ne 0;	\
+				    then all_ok=0;	    	     	       	   	\
+				    fi;							\
+				done;							\
+				if $(TEST) $$all_ok -eq 1;				\
+				then echo "-------------------| Test OK"; exit 0;	\
+				else echo "-------------------| Test KO"; exit 1;	\
+				fi;
 
 reconfig			:
@@ -117,10 +132,13 @@
 				@\
 				$(ECHO) "Execute            : $*";\
-				export SYSTEMC=$(SYSTEMC_$(SIMULATOR)) ; $(EXEC_PREFIX) ./$(DIR_BIN)/$(EXEC).x $(EXEC_PARAMS) $* `$(CAT) $<` &> $@
-				declare -i count=`$(GREP) -ch "Test OK" $@`;		\
-				declare    timing=`$(GREP) -h "Timing"  $@`;		\
-				if $(TEST) $$count -ne 0;       			\
+				export SYSTEMC=$(SYSTEMC_$(SIMULATOR)) ; $(EXEC_PREFIX) ./$(DIR_BIN)/$(EXEC).x $(EXEC_PARAMS) $* `$(CAT) $<` &> $@; \
+				declare timing=`$(GREP) -h "Timing"  $@`;		\
+				$(GREP) -q "Test OK" $@; 				\
+				declare -i test_ok=$$?;					\
+				$(GREP) -q "Test KO" $@; 				\
+				declare -i test_ko=$$?;					\
+				if $(TEST) $$test_ko -ne 0 -a $$test_ok -eq 0;		\
 				then echo -e "                     $* ... OK\t$$timing";\
-				else echo    "                     $* ... KO"; exit 1;     \
+				else echo    "                     $* ... KO";          \
 				fi;
 
@@ -128,9 +146,13 @@
 				@\
 				$(ECHO) "Execute            : $*";\
-				export SYSTEMC=$(SYSTEMC_$(SIMULATOR)) ; $(EXEC_PREFIX) ./$(DIR_BIN)/$(EXEC).x $(EXEC_PARAMS) $* `$(CAT) $<` &> $@
-				declare -i count=`$(GREP) -ch "Test OK" $@`;		\
-				if $(TEST) $$count -ne 0;       			\
-				then echo "                     $* ... OK";           	\
-				else echo "                     $* ... KO"; exit 1;     \
+				export SYSTEMC=$(SYSTEMC_$(SIMULATOR)) ; $(EXEC_PREFIX) ./$(DIR_BIN)/$(EXEC).x $(EXEC_PARAMS) $* `$(CAT) $<` &> $@; \
+				declare timing=`$(GREP) -h "Timing"  $@`;		\
+				$(GREP) -q "Test OK" $@; 				\
+				declare -i test_ok=$$?;					\
+				$(GREP) -q "Test KO" $@; 				\
+				declare -i test_ko=$$?;					\
+				if $(TEST) $$test_ko -ne 0 -a $$test_ok -eq 0;		\
+				then echo -e "                     $* ... OK\t$$timing";\
+				else echo    "                     $* ... KO";		\
 				fi;
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.flags
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.flags	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Makefile.flags	(revision 82)
@@ -6,5 +6,5 @@
 
 #-----[ Simulator ]----------------------------------------
-SIMULATOR			= systemcass_deps
+SIMULATOR			= systemcass
 #SIMULATOR			= systemc
 
@@ -23,5 +23,5 @@
 #					-DVHDL_TESTBENCH_ASSERT	\
 #					-DPOSITION       	\
-#					-DNO_TRANSLATE   	\
+#					-DNO_TRANSLATION 	\
 
 # Flags :
@@ -39,4 +39,4 @@
 #                                             * Dynamique : at the runtime
 #                                                * consomation
-# NO_TRANSLATE			          - No translate message
+# NO_TRANSLATION		          - No translate message
 # NO_INIT				  - No init a lot of register
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/New_Component.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/New_Component.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/New_Component.tex	(revision 82)
@@ -1,2 +1,6 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \documentclass[10pt,a4paper,twocolumn]{article}
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/sty/header.sty
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/sty/header.sty	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/sty/header.sty	(revision 82)
@@ -1,2 +1,6 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \def\review{YYYY/MM/DD}
 %\def\review{\number\day/\number\month/\number\year\xspace}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/01_introduction.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/01_introduction.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/01_introduction.tex	(revision 82)
@@ -1,1 +1,5 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Introduction}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/02_features.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/02_features.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/02_features.tex	(revision 82)
@@ -1,1 +1,5 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Features}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/03_description.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/03_description.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/03_description.tex	(revision 82)
@@ -1,1 +1,5 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Functional Description}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/04_pinout.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/04_pinout.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/04_pinout.tex	(revision 82)
@@ -1,1 +1,5 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Pin out}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/05_parameters.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/05_parameters.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/05_parameters.tex	(revision 82)
@@ -1,1 +1,5 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Parameters}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/06_performance.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/06_performance.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/06_performance.tex	(revision 82)
@@ -1,1 +1,5 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Performance}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/07_details.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/07_details.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/07_details.tex	(revision 82)
@@ -1,1 +1,5 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Details}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/08_history.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/08_history.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/08_history.tex	(revision 82)
@@ -1,2 +1,6 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Revision History}
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/root.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/root.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/doc/tex/root.tex	(revision 82)
@@ -1,2 +1,6 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \input{\dirdoc/01_introduction}
 \input{\dirdoc/02_features}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/include/New_Component.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/include/New_Component.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/include/New_Component.h	(revision 82)
@@ -13,10 +13,7 @@
 #endif
 
-#include <iostream>
-#include "Common/include/ToString.h"
-#include "Common/include/Debug.h"
 
+#include "Behavioural/@DIRECTORY/include/Parameters.h"
 #include "Behavioural/@DIRECTORY/include/Types.h"
-#include "Behavioural/@DIRECTORY/include/Parameters.h"
 #ifdef STATISTICS
 #include "Behavioural/include/Stat.h"
@@ -27,4 +24,9 @@
 #endif
 #include "Behavioural/include/Usage.h"
+
+#include "Common/include/ToString.h"
+#include "Common/include/Debug.h"
+
+#include <iostream>
 
 namespace morpheo {
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/include/Parameters.h	(revision 82)
@@ -9,6 +9,6 @@
  */
 
+#include "Behavioural/include/Parameters.h"
 #include "Common/include/Debug.h"
-#include "Behavioural/include/Parameters.h"
 
 namespace morpheo {
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component.cpp	(revision 82)
@@ -31,9 +31,9 @@
     ,_usage            (usage)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
     usage_environment(_usage);
 
-    log_printf(INFO,@COMPONENT,FUNCTION,"Allocation");
+    log_printf(INFO,@COMPONENT,FUNCTION,_("Allocation"));
 
     allocation (
@@ -46,5 +46,5 @@
     if (usage_is_set(_usage,USE_STATISTICS))
       {	
-	log_printf(INFO,@COMPONENT,FUNCTION,"Allocation of statistics");
+	log_printf(INFO,@COMPONENT,FUNCTION,_("Allocation of statistics"));
 
 	statistics_allocation(param_statistics);
@@ -56,5 +56,5 @@
       {
 	// generate the vhdl
-	log_printf(INFO,@COMPONENT,FUNCTION,"Generate the vhdl");
+	log_printf(INFO,@COMPONENT,FUNCTION,_("Generate the vhdl"));
 	
 	vhdl();
@@ -65,5 +65,5 @@
     if (usage_is_set(_usage,USE_SYSTEMC))
       {
-	log_printf(INFO,@COMPONENT,FUNCTION,"Method - transition");
+	log_printf(INFO,@COMPONENT,FUNCTION,_("Method - transition"));
 
 	SC_METHOD (transition);
@@ -77,5 +77,5 @@
 #endif
       }
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
     
@@ -84,5 +84,5 @@
   @COMPONENT::~@COMPONENT (void)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
 #ifdef STATISTICS
@@ -93,8 +93,8 @@
 #endif
 
-    log_printf(INFO,@COMPONENT,FUNCTION,"Deallocation");
+    log_printf(INFO,@COMPONENT,FUNCTION,_("Deallocation"));
     deallocation ();
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_allocation.cpp	(revision 82)
@@ -8,4 +8,5 @@
 #include "Behavioural/@DIRECTORY/include/@COMPONENT.h"
 #include "Behavioural/include/Allocation.h"
+#include "Common/include/Max.h"
 
 namespace morpheo                    {
@@ -24,5 +25,5 @@
 			       )
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
     _component   = new Component (_usage);
@@ -43,5 +44,5 @@
 							 ,IN
 							 ,SOUTH,
-							 "Generalist interface"
+							 _("Generalist interface")
 #endif
 							 );
@@ -57,5 +58,5 @@
 #endif
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_deallocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_deallocation.cpp	(revision 82)
@@ -17,5 +17,5 @@
   void @COMPONENT::deallocation (void)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
     if (usage_is_set(_usage,USE_SYSTEMC))
@@ -28,5 +28,5 @@
     delete _component;
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_end_cycle.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_end_cycle.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_end_cycle.cpp	(revision 82)
@@ -17,5 +17,5 @@
 void @COMPONENT::end_cycle ()
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
 #ifdef STATISTICS
@@ -31,5 +31,5 @@
 #endif
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_statistics_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_statistics_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_statistics_allocation.cpp	(revision 82)
@@ -17,5 +17,5 @@
   void @COMPONENT::statistics_allocation (morpheo::behavioural::Parameters_Statistics * param_statistics)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
     _stat = new Stat (static_cast<std::string>(_name),
@@ -23,5 +23,5 @@
 		      param_statistics);
     
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_statistics_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_statistics_deallocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_statistics_deallocation.cpp	(revision 82)
@@ -17,11 +17,11 @@
   void @COMPONENT::statistics_deallocation (void)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
-    log_printf(INFO,@COMPONENT,FUNCTION,"Generate Statistics file");
+    log_printf(INFO,@COMPONENT,FUNCTION,_("Generate Statistics file"));
     
     delete _stat;
     
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_transition.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_transition.cpp	(revision 82)
@@ -17,5 +17,5 @@
   void @COMPONENT::transition (void)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
 #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
@@ -23,5 +23,5 @@
 #endif
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_vhdl.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_vhdl.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_vhdl.cpp	(revision 82)
@@ -18,5 +18,5 @@
   void @COMPONENT::vhdl (void)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
     Vhdl * vhdl = new Vhdl (_name);
@@ -32,5 +32,5 @@
     delete vhdl;
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_vhdl_body.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_vhdl_body.cpp	(revision 82)
@@ -17,7 +17,7 @@
   void @COMPONENT::vhdl_body (Vhdl * & vhdl)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
     vhdl->set_body ("");
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_vhdl_declaration.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_vhdl_declaration.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/New_Component_vhdl_declaration.cpp	(revision 82)
@@ -17,6 +17,6 @@
   void @COMPONENT::vhdl_declaration (Vhdl * & vhdl)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_begin(@COMPONENT,FUNCTION);
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/Parameters.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/Parameters.cpp	(revision 82)
@@ -16,7 +16,7 @@
   Parameters::Parameters ()
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
     test();
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
   
@@ -25,7 +25,7 @@
 //   Parameters::Parameters (Parameters & param)
 //   {
-//     log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+//     log_begin(@COMPONENT,FUNCTION);
 //     test();
-//     log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+//     log_end(@COMPONENT,FUNCTION);
 //   };
 
@@ -34,6 +34,6 @@
   Parameters::~Parameters () 
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_begin(@COMPONENT,FUNCTION);
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/Parameters_msg_error.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/Parameters_msg_error.cpp	(revision 82)
@@ -18,9 +18,9 @@
   Parameters_test Parameters::msg_error(void)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
     Parameters_test test ("@COMPONENT");
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
 
     return test;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/Parameters_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/Parameters_print.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vbe/src/Parameters_print.cpp	(revision 82)
@@ -17,5 +17,5 @@
   std::string Parameters::print (uint32_t depth)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
     XML xml ("@COMPONENT_LOWER");
@@ -25,5 +25,5 @@
     xml.balise_close();
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
     
     return xml.get_body(depth);
@@ -35,9 +35,9 @@
 			    morpheo::behavioural::@NAMESPACE_USE::Parameters & x)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
     output_stream << x.print(0);
     
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
 
     return output_stream;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/New_Component.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/New_Component.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/New_Component.tex	(revision 82)
@@ -1,2 +1,6 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \documentclass[10pt,a4paper,twocolumn]{article}
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/sty/header.sty
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/sty/header.sty	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/sty/header.sty	(revision 82)
@@ -1,2 +1,6 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \def\review{YYYY/MM/DD}
 %\def\review{\number\day/\number\month/\number\year\xspace}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/01_introduction.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/01_introduction.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/01_introduction.tex	(revision 82)
@@ -1,1 +1,5 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Introduction}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/02_features.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/02_features.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/02_features.tex	(revision 82)
@@ -1,1 +1,5 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Features}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/03_description.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/03_description.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/03_description.tex	(revision 82)
@@ -1,1 +1,5 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Functional Description}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/04_pinout.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/04_pinout.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/04_pinout.tex	(revision 82)
@@ -1,1 +1,5 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Pin out}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/05_parameters.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/05_parameters.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/05_parameters.tex	(revision 82)
@@ -1,1 +1,5 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Parameters}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/06_performance.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/06_performance.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/06_performance.tex	(revision 82)
@@ -1,1 +1,5 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Performance}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/07_details.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/07_details.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/07_details.tex	(revision 82)
@@ -1,1 +1,5 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Details}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/08_history.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/08_history.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/08_history.tex	(revision 82)
@@ -1,2 +1,6 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \Section{Revision History}
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/root.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/root.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/doc/tex/root.tex	(revision 82)
@@ -1,2 +1,6 @@
+%------------------------------------------------------------------------------
+% $Id$
+%------------------------------------------------------------------------------
+
 \input{\dirdoc/01_introduction}
 \input{\dirdoc/02_features}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/include/New_Component.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/include/New_Component.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/include/New_Component.h	(revision 82)
@@ -13,10 +13,7 @@
 #endif
 
-#include <iostream>
-#include "Common/include/ToString.h"
-#include "Common/include/Debug.h"
+#include "Behavioural/@DIRECTORY/include/Parameters.h"
 #include "Behavioural/include/Types.h"
 
-#include "Behavioural/@DIRECTORY/include/Parameters.h"
 #ifdef STATISTICS
 #include "Behavioural/include/Stat.h"
@@ -27,4 +24,9 @@
 #endif
 #include "Behavioural/include/Usage.h"
+
+#include "Common/include/ToString.h"
+#include "Common/include/Debug.h"
+
+#include <iostream>
 
 namespace morpheo {
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/include/Parameters.h	(revision 82)
@@ -9,6 +9,6 @@
  */
 
+#include "Behavioural/include/Parameters.h"
 #include "Common/include/Debug.h"
-#include "Behavioural/include/Parameters.h"
 
 namespace morpheo {
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component.cpp	(revision 82)
@@ -31,9 +31,9 @@
     ,_usage            (usage)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
     usage_environment(_usage);
 
-    log_printf(INFO,@COMPONENT,FUNCTION,"Allocation");
+    log_printf(INFO,@COMPONENT,FUNCTION,_("Allocation"));
 
     allocation (
@@ -46,5 +46,5 @@
     if (usage_is_set(_usage,USE_STATISTICS))
       {	
-	log_printf(INFO,@COMPONENT,FUNCTION,"Allocation of statistics");
+	log_printf(INFO,@COMPONENT,FUNCTION,_("Allocation of statistics"));
 
 	statistics_allocation(param_statistics);
@@ -56,5 +56,5 @@
       {
 	// generate the vhdl
-	log_printf(INFO,@COMPONENT,FUNCTION,"Generate the vhdl");
+	log_printf(INFO,@COMPONENT,FUNCTION,_("Generate the vhdl"));
 	
 	vhdl();
@@ -65,5 +65,5 @@
     if (usage_is_set(_usage,USE_SYSTEMC))
       {
-	log_printf(INFO,@COMPONENT,FUNCTION,"Method - transition");
+	log_printf(INFO,@COMPONENT,FUNCTION,_("Method - transition"));
 
 	SC_METHOD (transition);
@@ -77,5 +77,5 @@
 #endif
       }
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
     
@@ -84,5 +84,5 @@
   @COMPONENT::~@COMPONENT (void)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
 #ifdef STATISTICS
@@ -93,8 +93,8 @@
 #endif
 
-    log_printf(INFO,@COMPONENT,FUNCTION,"Deallocation");
+    log_printf(INFO,@COMPONENT,FUNCTION,_("Deallocation"));
     deallocation ();
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_allocation.cpp	(revision 82)
@@ -16,13 +16,14 @@
 #undef  FUNCTION
 #define FUNCTION "@COMPONENT::allocation"
-  void @COMPONENT::allocation (
+  void @COMPONENT::allocation 
+  (
 #ifdef STATISTICS
-			       morpheo::behavioural::Parameters_Statistics * param_statistics
+   morpheo::behavioural::Parameters_Statistics * param_statistics
 #else
-			       void
+   void
 #endif
-			       )
+   )
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin@COMPONENT,FUNCTION);
 
     _component   = new Component (_usage);
@@ -56,14 +57,14 @@
     std::string src,dest;
 
-
     // ~~~~~[ Others ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
-     _component->test_map();
+     if (DEBUG_@COMPONENT == true)
+       _component->test_map();
 
 #ifdef POSITION
      if (usage_is_set(_usage,USE_POSITION))
-	 _component->generate_file();
+       _component->generate_file();
 #endif
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+     log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_deallocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_deallocation.cpp	(revision 82)
@@ -17,5 +17,5 @@
   void @COMPONENT::deallocation (void)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
     if (usage_is_set(_usage,USE_SYSTEMC))
@@ -28,5 +28,5 @@
     delete _component;
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_end_cycle.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_end_cycle.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_end_cycle.cpp	(revision 82)
@@ -17,5 +17,5 @@
 void @COMPONENT::end_cycle ()
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
 #ifdef STATISTICS
@@ -31,5 +31,5 @@
 #endif
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_statistics_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_statistics_allocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_statistics_allocation.cpp	(revision 82)
@@ -17,5 +17,5 @@
   void @COMPONENT::statistics_allocation (morpheo::behavioural::Parameters_Statistics * param_statistics)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
     _stat = new Stat (static_cast<std::string>(_name),
@@ -23,5 +23,5 @@
 		      param_statistics);
     
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_statistics_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_statistics_deallocation.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_statistics_deallocation.cpp	(revision 82)
@@ -17,11 +17,11 @@
   void @COMPONENT::statistics_deallocation (void)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
-    log_printf(INFO,@COMPONENT,FUNCTION,"Generate Statistics file");
+    log_printf(INFO,@COMPONENT,FUNCTION,_("Generate Statistics file"));
     
     delete _stat;
     
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_transition.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_transition.cpp	(revision 82)
@@ -18,5 +18,5 @@
   void @COMPONENT::transition (void)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
 #if defined(STATISTICS) or defined(VHDL_TESTBENCH)
@@ -24,5 +24,5 @@
 #endif
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_vhdl.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_vhdl.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/New_Component_vhdl.cpp	(revision 82)
@@ -18,5 +18,5 @@
   void @COMPONENT::vhdl (void)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
     Vhdl * vhdl = new Vhdl (_name);
@@ -29,5 +29,5 @@
     delete vhdl;
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/Parameters.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/Parameters.cpp	(revision 82)
@@ -16,7 +16,7 @@
   Parameters::Parameters ()
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
     test();
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
   };
   
@@ -25,7 +25,7 @@
 //   Parameters::Parameters (Parameters & param)
 //   {
-//     log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+//     log_begin(@COMPONENT,FUNCTION);
 //     test();
-//     log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+//     log_end(@COMPONENT,FUNCTION);
 //   };
 
@@ -34,6 +34,6 @@
   Parameters::~Parameters () 
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_begin(@COMPONENT,FUNCTION);
+    log_end(@COMPONENT,FUNCTION);
   };
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/Parameters_msg_error.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/Parameters_msg_error.cpp	(revision 82)
@@ -18,9 +18,9 @@
   Parameters_test Parameters::msg_error(void)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
     Parameters_test test ("@COMPONENT");
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
 
     return test;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/Parameters_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/Parameters_print.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/New_Component_vst/src/Parameters_print.cpp	(revision 82)
@@ -17,5 +17,5 @@
   std::string Parameters::print (uint32_t depth)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
     XML xml ("@COMPONENT_LOWER");
@@ -25,5 +25,5 @@
     xml.balise_close();
 
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
     
     return xml.get_body(depth);
@@ -35,9 +35,9 @@
 			    morpheo::behavioural::@NAMESPACE_USE::Parameters & x)
   {
-    log_printf(FUNC,@COMPONENT,FUNCTION,"Begin");
+    log_begin(@COMPONENT,FUNCTION);
 
     output_stream << x.print(0);
     
-    log_printf(FUNC,@COMPONENT,FUNCTION,"End");
+    log_end(@COMPONENT,FUNCTION);
 
     return output_stream;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Allocation.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Allocation.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Allocation.h	(revision 82)
@@ -1,4 +1,11 @@
 #ifndef morpheo_behavioural_Allocation_h
 #define morpheo_behavioural_Allocation_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
 
 #include "Common/include/Debug.h"
@@ -46,9 +53,18 @@
     {									\
       sig = interface->set_signal_in <type> (name, size);		\
-    }									
+    }									\
+  else									\
+    {									\
+      log_printf(INFO,true,FUNCTION,_("%s %s.%s.%s : size is nul."),MSG_INFORMATION,_component->get_name().c_str(),interface->get_name().c_str(),name); \
+    }
+  
 #define ALLOC_SIGNAL_OUT( sig, name, type, size)			\
   if (size > 0)								\
     {									\
       sig = interface->set_signal_out<type> (name, size);		\
+    }									\
+  else									\
+    {									\
+      log_printf(INFO,true,FUNCTION,_("%s %s.%s.%s : size is nul."),MSG_INFORMATION,_component->get_name().c_str(),interface->get_name().c_str(),name); \
     }
 
@@ -63,8 +79,14 @@
 
 #define INSTANCE_SC_SIGNAL(component, sig)	\
-  (*(component->sig)) (*(sig));
-
-#define DELETE_SC_SIGNAL( sig)						\
-  delete sig;
+  {						\
+    TEST_PTR(component->sig);			\
+    TEST_PTR(sig);				\
+    (*(component->sig)) (*(sig));		\
+  }
+
+#define DELETE_SC_SIGNAL( sig)			\
+  {						\
+    delete sig;					\
+  }
 
 // ----------------------------------------------------------------------
@@ -166,4 +188,8 @@
 	    sig [alloc_signal_it1] = interface[alloc_signal_it1]->set_signal_in <type> (name, size); \
 	  }								\
+	else								\
+	  {								\
+	    log_printf(INFO,true,FUNCTION,_("%s %s.%s.%s : size is nul."),MSG_INFORMATION,_component->get_name().c_str(),interface[alloc_signal_it1]->get_name().c_str(),name); \
+	  }								\
       }									\
   }
@@ -177,4 +203,8 @@
 	  {								\
 	    sig [alloc_signal_it1] = interface[alloc_signal_it1]->set_signal_out<type> (name, size); \
+	  }								\
+	else								\
+	  {								\
+	    log_printf(INFO,true,FUNCTION,_("%s %s.%s.%s : size is nul."),MSG_INFORMATION,_component->get_name().c_str(),interface[alloc_signal_it1]->get_name().c_str(),name); \
 	  }								\
       }									\
@@ -208,4 +238,6 @@
   for (uint32_t alloc_signal_it1=0; alloc_signal_it1<it1; alloc_signal_it1++) \
     {									\
+      TEST_PTR(component->sig [alloc_signal_it1]);			\
+      TEST_PTR(sig            [alloc_signal_it1]);			\
       (*(component->sig[alloc_signal_it1])) (*(sig[alloc_signal_it1]));	\
     }
@@ -330,4 +362,8 @@
 		sig [alloc_signal_it1][alloc_signal_it2] = interface[alloc_signal_it1][alloc_signal_it2]->set_signal_in <type> (name, size); \
 	      }								\
+	    else							\
+	      {								\
+		log_printf(INFO,true,FUNCTION,_("%s %s.%s.%s : size is nul."),MSG_INFORMATION,_component->get_name().c_str(),interface[alloc_signal_it1][alloc_signal_it2]->get_name().c_str(),name); \
+	      }								\
 	  }								\
       }									\
@@ -345,4 +381,8 @@
 	      {								\
 		sig [alloc_signal_it1][alloc_signal_it2] = interface[alloc_signal_it1][alloc_signal_it2]->set_signal_out <type> (name, size); \
+	      }								\
+	    else							\
+	      {								\
+		log_printf(INFO,true,FUNCTION,_("%s %s.%s.%s : size is nul."),MSG_INFORMATION,_component->get_name().c_str(),interface[alloc_signal_it1][alloc_signal_it2]->get_name().c_str(),name); \
 	      }								\
 	  }								\
@@ -393,4 +433,6 @@
     for (uint32_t alloc_signal_it2=0; alloc_signal_it2<it2; alloc_signal_it2++)	\
       {									\
+	TEST_PTR(component->sig [alloc_signal_it1][alloc_signal_it2]);	\
+	TEST_PTR(sig            [alloc_signal_it1][alloc_signal_it2]);	\
 	(*(component->sig[alloc_signal_it1][alloc_signal_it2])) (*(sig[alloc_signal_it1][alloc_signal_it2])); \
       }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Component.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Component.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Component.h	(revision 82)
@@ -5,5 +5,5 @@
  * $Id$
  *
- * [ Description ]
+ * [ Description ]
  * 
  */
@@ -65,22 +65,24 @@
 #define INSTANCE_ALL          0x7
 
-  typedef struct
-  {
-//public : Component * _component;
-  public : Entity    * _entity   ;
-  public : Tinstance_t _instance ;
-  } Tcomponent_t;    
-  
   class Component
   {
-    // -----[ fields ]----------------------------------------------------
+    typedef struct
+    {
+    public : Component * _component;
+    public : Entity    * _entity   ;
+    public : Tinstance_t _instance ;
+    } Tcomponent_t;    
+  
+    // -----[ fields ]----------------------------------------------------
   private   : const Tusage_t             _usage;
   private   : Entity                   * _entity        ;
   private   : std::list<Tcomponent_t*> * _list_component;
 
-    // -----[ methods ]---------------------------------------------------
-  public    :                       Component         (Tusage_t usage=USE_ALL);
+    // -----[ methods ]---------------------------------------------------
+  public    :                       Component         (Tusage_t usage);
   public    :                       Component         (const Component & component);
   public    :                       ~Component        ();
+
+  public    : std::string           get_name          (void);
 
   public    : Entity *              set_entity        (std::string        name   
@@ -124,4 +126,7 @@
   private   : bool                  test_map          (uint32_t depth, bool recursive);
 
+//   public    : bool                  test_equi         (bool recursive=true);
+//   private   : bool                  test_equi         (uint32_t depth, bool recursive);
+
 #ifdef POSITION
   public    : void                  interface_map     (std::string component_src ,
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Debug_component.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Debug_component.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Debug_component.h	(revision 82)
@@ -43,9 +43,10 @@
 #  define         DEBUG_Decod_unit                                  false
 #  define           DEBUG_Decod                                     false
+#  define           DEBUG_Decod_queue                               true
 #  define         DEBUG_Ifetch_unit                                 false
 #  define           DEBUG_Address_management                        false
 #  define           DEBUG_Ifetch_queue                              false
 #  define           DEBUG_Ifetch_unit_Glue                          false
-#  define         DEBUG_Prediction_unit                             false
+#  define         DEBUG_Prediction_unit                             true 
 #  define           DEBUG_Branch_Target_Buffer                      false
 #  define             DEBUG_Branch_Target_Buffer_Glue               false
@@ -55,10 +56,10 @@
 #  define             DEBUG_Meta_Predictor                          false
 #  define               DEBUG_Meta_Predictor_Glue                   false
-#  define                 DEBUG_Two_Level_Branch_Predictor          false
-#  define                   DEBUG_Two_Level_Branch_Predictor_Glue   false 
-#  define                   DEBUG_Branch_History_Table              false
-#  define                   DEBUG_Pattern_History_Table             false
-#  define           DEBUG_Prediction_unit_Glue                      true 
-#  define           DEBUG_Return_Address_Stack                      true
+#  define               DEBUG_Two_Level_Branch_Predictor            false
+#  define                 DEBUG_Two_Level_Branch_Predictor_Glue     false 
+#  define                 DEBUG_Branch_History_Table                false
+#  define                 DEBUG_Pattern_History_Table               false
+#  define           DEBUG_Prediction_unit_Glue                      false 
+#  define           DEBUG_Return_Address_Stack                      false
 #  define           DEBUG_Update_Prediction_Table                   true
 #  define     DEBUG_Multi_OOO_Engine                                false
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Entity.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Entity.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Entity.h	(revision 82)
@@ -26,6 +26,6 @@
   {
     // -----[ fields ]----------------------------------------------------
-  private   : const std::string          _name         ;
-  private   : const std::string          _type         ;
+  private   : const std::string     _name         ;
+  private   : const std::string     _type         ;
 #ifdef POSITION
   private   : const schema_t        _schema       ;
@@ -36,5 +36,5 @@
 
 #ifdef POSITION
-  private   : std::string                _comment      ;
+  private   : std::string           _comment      ;
 
   private   :       bool            _is_map       ;
@@ -51,18 +51,18 @@
 						       ,schema_t      schema 
 #endif
-							,Tusage_t       usage=USE_ALL
+							,Tusage_t       usage
 							);
   public    :                        Entity           (const Entity & entity);
   public    :                       ~Entity           ();
 
-  public    : std::string                get_name          (void);
-  public    : std::string                get_type          (void);
+  public    : std::string           get_name          (void);
+  public    : std::string           get_type          (void);
 
 #ifdef POSITION
   public    : void                  set_comment       (std::string comment);
-  private   : std::string                get_comment       (void          );
+  private   : std::string           get_comment       (void          );
 #endif
   public    : Interfaces *          set_interfaces    (void);
-  private   : std::string                get_interfaces    (void);
+  private   : std::string           get_interfaces    (void);
   public    : Interfaces *          get_interfaces_list(void);
 
@@ -78,5 +78,6 @@
 #endif
 
-  public    : bool                  test_map          (uint32_t depth,bool top_level);
+  public    : bool                  test_map          (uint32_t depth,bool top_level, bool is_behavioural);
+//   public    : bool                  test_equi         (uint32_t depth);
 
 #ifdef POSITION
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface.h	(revision 82)
@@ -63,5 +63,5 @@
 							  ,localisation_t localisation
 #endif
-							  ,Tusage_t       usage=USE_ALL
+							  ,Tusage_t       usage
 							  );
 
@@ -220,14 +220,15 @@
 							  std::string             counter_name  ,
 							  std::string             reset_name    );
-  public    : std::string                testbench_test       (Vhdl           * & vhdl        ,
+  public    : std::string           testbench_test       (Vhdl           * & vhdl        ,
 							  std::string             counter_name,
 							  std::string             reset_name);
-  public    : std::string                testbench_test_ok    (Vhdl           * & vhdl        );
-  protected : std::string                testbench_test_name   (Vhdl           * & vhdl);
-  protected : std::string                testbench_test_ok_name(Vhdl           * & vhdl);
-  protected : std::string                testbench_test_transaction_name(Vhdl           * & vhdl);
-#endif
-
-  public    : bool                  test_map             (uint32_t depth, bool top_level);
+  public    : std::string           testbench_test_ok    (Vhdl           * & vhdl        );
+  protected : std::string           testbench_test_name   (Vhdl           * & vhdl);
+  protected : std::string           testbench_test_ok_name(Vhdl           * & vhdl);
+  protected : std::string           testbench_test_transaction_name(Vhdl           * & vhdl);
+#endif
+
+  public    : bool                  test_map             (uint32_t depth, bool top_level, bool is_behavioural);
+//   public    : bool                  test_equi            (uint32_t depth);
 
 #ifdef POSITION
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface_fifo.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface_fifo.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interface_fifo.h	(revision 82)
@@ -45,5 +45,5 @@
 							  ,localisation_t localisation
 #endif
-							  ,Tusage_t       usage=USE_ALL
+							  ,Tusage_t       usage
 							  );
     
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interfaces.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interfaces.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Interfaces.h	(revision 82)
@@ -33,5 +33,5 @@
     // -----[ methods ]---------------------------------------------------
   public    :                       Interfaces            (std::string name, 
-							   Tusage_t usage=USE_ALL);
+							   Tusage_t usage);
   public    :                       Interfaces            (const Interfaces & interfaces);
   public    :                       ~Interfaces           ();
@@ -80,5 +80,6 @@
 #endif
 
-  public    : bool                  test_map              (uint32_t depth, bool top_level);
+  public    : bool                  test_map              (uint32_t depth, bool top_level, bool is_behavioural);
+//   public    : bool                  test_equi             (uint32_t depth);
 
   public    : friend std::ostream&       operator<<            (std::ostream& output_stream,
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Parameters.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Parameters.h	(revision 82)
@@ -44,7 +44,7 @@
 
   public    : bool        have_error  (void)            { return (_error.length() != 0);};
-  public    : void        error       (std::string str) { _error       += "[   ERROR   ] <" + _component + "> " + str + "\n";}
-  public    : void        warning     (std::string str) { _warning     += "[  WARNING  ] <" + _component + "> " + str + "\n";}
-  public    : void        information (std::string str) { _information += "[INFORMATION] <" + _component + "> " + str + "\n";}
+  public    : void        error       (std::string str) { _error       += MSG_ERROR      ; _error       += " <" + _component + "> " + str + "\n";}
+  public    : void        warning     (std::string str) { _warning     += MSG_WARNING    ; _warning     += " <" + _component + "> " + str + "\n";}
+  public    : void        information (std::string str) { _information += MSG_INFORMATION; _information += " <" + _component + "> " + str + "\n";}
   public    : std::string print       (void)            { return _error + _warning + _information;};
   };
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Signal.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Signal.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Signal.h	(revision 82)
@@ -79,5 +79,5 @@
   public    :                   ~Signal         ();
 
-  public    : std::string            get_name                (void);
+  public    : std::string       get_name                (void);
   public    : uint32_t          get_size                (void);
   public    : void              set_size                (uint32_t size);
@@ -92,5 +92,6 @@
   public    : bool              presence_testbench      (void);
 
-  public    : bool              test_map                (uint32_t depth, bool top_level);
+  public    : bool              test_map                (uint32_t depth, bool top_level, bool is_behavioural);
+//   public    : bool              test_equi               (uint32_t depth);
 
   public    : void              link                    (Signal * signal_dest,
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Version.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Version.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Version.h	(revision 82)
@@ -4,11 +4,9 @@
 #include "Common/include/ToString.h"
 
-// Identification : MORPHEO_MAJOR_VERSION.MORPHEO_MINOR_VERSION.MORPHEO_REVISION
-// Revision       : svn variable 
-
 #define MORPHEO_MAJOR_VERSION 0
 #define MORPHEO_MINOR_VERSION 2
-#define MORPHEO_REVISION      0
-//$Revision$
+#define MORPHEO_REVISION      82
+
+// Identification : MORPHEO_MAJOR_VERSION.MORPHEO_MINOR_VERSION.MORPHEO_REVISION
 
 #define MORPHEO_VERSION       morpheo::toString(MORPHEO_MAJOR_VERSION)+"."+morpheo::toString(MORPHEO_MINOR_VERSION)+"."+morpheo::toString(MORPHEO_REVISION)
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Version.h.sed
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Version.h.sed	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/include/Version.h.sed	(revision 82)
@@ -0,0 +1,14 @@
+#ifndef morpheo_behavioural_Version_h
+#define morpheo_behavioural_Version_h
+
+#include "Common/include/ToString.h"
+
+#define MORPHEO_MAJOR_VERSION 0
+#define MORPHEO_MINOR_VERSION 2
+#define MORPHEO_REVISION      @REVISION
+
+// Identification : MORPHEO_MAJOR_VERSION.MORPHEO_MINOR_VERSION.MORPHEO_REVISION
+
+#define MORPHEO_VERSION       morpheo::toString(MORPHEO_MAJOR_VERSION)+"."+morpheo::toString(MORPHEO_MINOR_VERSION)+"."+morpheo::toString(MORPHEO_REVISION)
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_get_name.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_get_name.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_get_name.cpp	(revision 82)
@@ -0,0 +1,28 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Component.h"
+
+
+namespace morpheo              {
+namespace behavioural          {
+
+#undef  FUNCTION
+#define FUNCTION "Component::get_name"
+  std::string Component::get_name (void)
+  {
+    log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+
+    std::string _return = _entity->get_name();
+
+    log_printf(FUNC,Behavioural,FUNCTION,"End");
+    
+    return _return;
+  };
+  
+}; // end namespace behavioural          
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_port_map.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_port_map.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_port_map.cpp	(revision 82)
@@ -2,5 +2,5 @@
  * $Id$
  *
- * [ Description ]
+ * [ Description ]
  * 
  */
@@ -32,10 +32,10 @@
 
     if (entity_dest == NULL)
-      throw (ErrorMorpheo ("<Component::port_map> in component \""+name_entity+"\", try map \""+component_src+"."+port_src+"\" with \""+component_dest+"."+port_dest+"\" but the component \""+component_dest+"\" is unknow."));
+      throw (ERRORMORPHEO (FUNCTION,"In component \""+name_entity+"\", try map \""+component_src+"."+port_src+"\" with \""+component_dest+"."+port_dest+"\" but the component \""+component_dest+"\" is unknow.\n"));
 
     Signal * signal_dest = entity_dest->find_signal (port_dest);
 
     if (signal_dest == NULL)
-      throw (ErrorMorpheo ("<Component::port_map> in component \""+name_entity+"\",try map \""+component_src+"."+port_src+"\" with \""+component_dest+"."+port_dest+"\" but the component \""+component_dest+"\" have not the signal \""+port_dest+"\"."));
+      throw (ERRORMORPHEO (FUNCTION,"In component \""+name_entity+"\",try map \""+component_src+"."+port_src+"\" with \""+component_dest+"."+port_dest+"\" but the component \""+component_dest+"\" have not the signal \""+port_dest+"\".\n"));
 
     // Second entity
@@ -43,13 +43,13 @@
 
     if (entity_src == NULL)
-      throw (ErrorMorpheo ("<Component::port_map> in component \""+name_entity+"\", try map \""+component_src+"."+port_src+"\" with \""+component_dest+"."+port_dest+"\" but the component \""+component_src+"\" is unknow."));
+      throw (ERRORMORPHEO (FUNCTION,"In component \""+name_entity+"\", try map \""+component_src+"."+port_src+"\" with \""+component_dest+"."+port_dest+"\" but the component \""+component_src+"\" is unknow.\n"));
 
     Signal * signal_src = entity_src->find_signal (port_src);
 
     if (signal_src == NULL)
-      throw (ErrorMorpheo ("<Component::port_map> in component \""+name_entity+"\", try map \""+component_src+"."+port_src+"\" with \""+component_dest+"."+port_dest+"\" but the component \""+component_src+"\" have not the signal \""+port_src+"\"."));
+      throw (ERRORMORPHEO (FUNCTION,"In component \""+name_entity+"\", try map \""+component_src+"."+port_src+"\" with \""+component_dest+"."+port_dest+"\" but the component \""+component_src+"\" have not the signal \""+port_src+"\".\n"));
 
     // If all is ok, mapping
-    log_printf(TRACE,Behavioural,FUNCTION, "Signal \"%s.%s\"\tlink with \"%s.%s\""
+    log_printf(TRACE,Behavioural,FUNCTION, _("Signal \"%s.%s\"\tlink with \"%s.%s\"")
 	       ,entity_src ->get_name().c_str()
 	       ,signal_src ->get_name().c_str()
@@ -62,5 +62,5 @@
 
     if (src_is_port == true)
-      throw (ErrorMorpheo ("<Component::port_map> in component \""+name_entity+"\", try map \""+component_src+"."+port_src+"\" with \""+component_dest+"."+port_dest+"\" but the component \""+component_src+" is the Top_level, and we can't be use interface's port of the top level as a source."));
+      throw (ERRORMORPHEO (FUNCTION,"In component \""+name_entity+"\", try map \""+component_src+"."+port_src+"\" with \""+component_dest+"."+port_dest+"\" but the component \""+component_src+" is the Top_level, and we can't be use interface's port of the top level as a source.\n"));
     
     // 2 cases : 
@@ -106,5 +106,5 @@
     catch (morpheo::ErrorMorpheo & error)
       {
-	throw (ErrorMorpheo ("<Component::port_map> in component \""+name_entity+"\", try map \""+component_src+"."+port_src+"\" with \""+component_dest+"."+port_dest+"\" but "+error.what ()));
+      throw (ERRORMORPHEO (FUNCTION,"In component \""+name_entity+"\", try map \""+component_src+"."+port_src+"\" with \""+component_dest+"."+port_dest+"\" but "+error.what ()));
       }
     //catch (...)
@@ -117,4 +117,2 @@
 }; // end namespace behavioural          
 }; // end namespace morpheo              
-
-
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_print.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_print.cpp	(revision 82)
@@ -2,5 +2,5 @@
  * $Id$
  *
- * [ Description ]
+ * [ Description ]
  * 
  */
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_set_component.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_set_component.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_set_component.cpp	(revision 82)
@@ -29,5 +29,5 @@
     Tcomponent_t * entry = new Tcomponent_t;
     
-//     entry->_component= component;
+    entry->_component= component;
     entry->_instance = instance;
     entry->_entity   = entity;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_test_map.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_test_map.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Component_test_map.cpp	(revision 82)
@@ -15,4 +15,5 @@
   bool Component::test_map (bool recursive)
   {
+    log_printf(NONE,Behavioural,FUNCTION, "Test port map and interface.");
     return test_map (0, recursive);
   }
@@ -26,5 +27,6 @@
     bool test_ok = true;
 
-    if (_list_component->empty () == true)
+    bool is_behavioural = _list_component->empty ();
+    if (is_behavioural)
       {
 	log_printf(NONE,Behavioural,FUNCTION, "%s* Component \"%s\" is a behavioural description",tab.c_str(),name.c_str());
@@ -33,21 +35,27 @@
       {
 	log_printf(NONE,Behavioural,FUNCTION, "%s* Component \"%s\" is a structural description",tab.c_str(),name.c_str());
+      }
 
-	log_printf(INFO,Behavioural,FUNCTION, "%s* Test port I/O",tab.c_str());
+    
+    // 	log_printf(NONE,Behavioural,FUNCTION, "%s* Test port I/O",tab.c_str());
+    
+    test_ok &= _entity->test_map(depth+1,true,is_behavioural);
+    
+    // 	log_printf(NONE,Behavioural,FUNCTION, "%s* Test all internal component",tab.c_str());
 	
-	test_ok &= _entity->test_map(1,true);
-
-	log_printf(INFO,Behavioural,FUNCTION, "%s* Test all internal component",tab.c_str());
-	
-	for (std::list<Tcomponent_t *>::iterator i= _list_component->begin();
-	     i != _list_component->end();
-	     ++i)
-	  test_ok &= (*i)->_entity->test_map(1,false);
-
-// 	if (recursive)
-// 	  for (std::list<Tcomponent_t *>::iterator i= _list_component->begin();
-// 	       i != _list_component->end();
-// 	       ++i)
-// 	    test_ok &= (*i)->_component->test_map(1,recursive);
+    for (std::list<Tcomponent_t *>::iterator i= _list_component->begin();
+	 i != _list_component->end();
+	 ++i)
+      {
+	test_ok &= (*i)->_entity->test_map(depth+1,false,is_behavioural);
+	if (recursive)
+	  try 
+	    {
+	      test_ok &= (*i)->_component->test_map(depth+1,recursive);
+	    }
+	  catch (morpheo::ErrorMorpheo & error)
+	    {
+	      // no error propagation, only top level
+	    }
       }
     
@@ -55,9 +63,51 @@
     
     if (test_ok == false)
-      throw (ERRORMORPHEO (FUNCTION,"A lot of port is not connected."));
+      throw (ERRORMORPHEO (FUNCTION,_("A lot of port is not connected.\n")));
 
     return test_ok;
   };
 
+// #undef  FUNCTION
+// #define FUNCTION "Component::test_equi"
+//   bool Component::test_equi (bool recursive)
+//   {
+//     log_printf(NONE,Behavioural,FUNCTION, "Test port equi and interface.");
+//     return test_equi (0, recursive);
+//   }
+
+//   bool Component::test_equi (uint32_t depth, bool recursive)
+//   {
+//     log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+
+//     std::string tab  = std::string(depth,'\t');
+//     std::string name = _entity->get_name();
+//     bool test_ok = true;
+
+//     test_ok &= _entity->test_equi(depth+1);
+
+//     for (std::list<Tcomponent_t *>::iterator i= _list_component->begin();
+// 	 i != _list_component->end();
+// 	 ++i)
+//       {
+// 	test_ok &= (*i)->_entity->test_equi(depth+1);
+// 	if (recursive)
+// 	  try 
+// 	    {
+// 	      test_ok &= (*i)->_component->test_equi(depth+1,recursive);
+// 	    }
+// 	  catch (morpheo::ErrorMorpheo & error)
+// 	    {
+// 	      // no error propagation, only top level
+// 	    }
+//       }
+    
+//     log_printf(FUNC,Behavioural,FUNCTION,"End");
+    
+//     if (test_ok == false)
+//       throw (ERRORMORPHEO (FUNCTION,_("A lot of port is not connected.\n")));
+
+//     return test_ok;
+//   };
+
 
 }; // end namespace behavioural          
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Entity_test_map.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Entity_test_map.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Entity_test_map.cpp	(revision 82)
@@ -14,12 +14,12 @@
 #undef  FUNCTION
 #define FUNCTION "Entity::test_map"
-  bool Entity::test_map (uint32_t depth, bool top_level)
+  bool Entity::test_map (uint32_t depth, bool top_level, bool is_behavioural)
   {
     log_printf(FUNC,Behavioural,FUNCTION,"Begin");
   
     std::string tab  = std::string(depth,'\t');
-    log_printf(NONE,Behavioural,FUNCTION, "%s* Test mapping : Entity \"%s\"",tab.c_str(),_name.c_str());
+    log_printf(NONE,Behavioural,FUNCTION, "%s* Entity \"%s\"",tab.c_str(),_name.c_str());
   
-    bool _return = _interfaces->test_map(depth+1,top_level);
+    bool _return = _interfaces->test_map(depth+1,top_level, is_behavioural);
 
 #ifndef DEBUG
@@ -35,4 +35,27 @@
   };
 
+// #undef  FUNCTION
+// #define FUNCTION "Entity::test_equi"
+//   bool Entity::test_equi (uint32_t depth)
+//   {
+//     log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+  
+//     std::string tab  = std::string(depth,'\t');
+//     log_printf(NONE,Behavioural,FUNCTION, "%s* Entity \"%s\"",tab.c_str(),_name.c_str());
+  
+//     bool _return = _interfaces->test_equi(depth+1);
+
+// #ifndef DEBUG
+//     if (_return == false)
+//       {
+// 	std::cerr << "In entity \"" << _name << "\" (type : \"" << _type << "\"), a lot of port is not connected !" << std::endl;
+//       }
+// #endif
+
+//     log_printf(FUNC,Behavioural,FUNCTION,"End");
+    
+//     return _return;
+//   };
+
 }; // end namespace behavioural          
 }; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_fifo.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_fifo.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_fifo.cpp	(revision 82)
@@ -45,4 +45,5 @@
 	       ,interface_fifo._localisation
 #endif
+	       ,interface_fifo._usage
 	       )
   {
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_test_map.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_test_map.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interface_test_map.cpp	(revision 82)
@@ -14,5 +14,5 @@
 #undef  FUNCTION
 #define FUNCTION "Interface::test_map"
-  bool Interface::test_map (uint32_t depth, bool top_level)
+  bool Interface::test_map (uint32_t depth, bool top_level, bool is_behavioural)
   {
     log_printf(FUNC,Behavioural,FUNCTION,"Begin");
@@ -26,5 +26,5 @@
 	 i != _list_signal->end();
 	 ++i)
-      _return &= (*i)->test_map(depth+1,top_level);
+      _return &= (*i)->test_map(depth+1,top_level, is_behavioural);
 
     log_printf(FUNC,Behavioural,FUNCTION,"End");
@@ -33,4 +33,25 @@
   };
 
+// #undef  FUNCTION
+// #define FUNCTION "Interface::test_equi"
+//   bool Interface::test_equi (uint32_t depth)
+//   {
+//     log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+
+//     std::string tab  = std::string(depth,'\t');
+//     bool _return = true;
+
+//     log_printf(NONE,Behavioural,FUNCTION, "%s* Interface \"%s\"",tab.c_str(),_name.c_str());
+    
+//     for (std::list<Signal*>::iterator i  = _list_signal->begin();
+// 	 i != _list_signal->end();
+// 	 ++i)
+//       _return &= (*i)->test_equi(depth+1);
+
+//     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 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Interfaces_test_map.cpp	(revision 82)
@@ -14,5 +14,5 @@
 #undef  FUNCTION
 #define FUNCTION "Interfaces::test_map"
-  bool Interfaces::test_map (uint32_t depth, bool top_level)
+  bool Interfaces::test_map (uint32_t depth, bool top_level, bool is_behavioural)
   {
     log_printf(FUNC,Behavioural,FUNCTION,"Begin");
@@ -27,5 +27,5 @@
 	 i != _list_interface->end();
 	 ++i)
-      _return &= (*i)->test_map(depth+1, top_level);
+      _return &= (*i)->test_map(depth+1, top_level, is_behavioural);
 
     log_printf(FUNC,Behavioural,FUNCTION,"End");
@@ -34,4 +34,26 @@
   };
 
+// #undef  FUNCTION
+// #define FUNCTION "Interfaces::test_equi"
+//   bool Interfaces::test_equi (uint32_t depth)
+//   {
+//     log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+
+//     std::string tab  = std::string(depth,'\t');
+
+//     bool _return = true;
+
+//     log_printf(NONE,Behavioural,FUNCTION, "%s* Interfaces \"%s\"",tab.c_str(),_name.c_str());
+    
+//     for (std::list<Interface_fifo*>::iterator i  = _list_interface->begin();
+// 	 i != _list_interface->end();
+// 	 ++i)
+//       _return &= (*i)->test_equi(depth+1);
+
+//     log_printf(FUNC,Behavioural,FUNCTION,"End");
+    
+//     return _return;
+//   };
+
 }; // end namespace behavioural          
 }; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Parameters_test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Parameters_test.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Parameters_test.cpp	(revision 82)
@@ -20,5 +20,5 @@
     Parameters_test x = msg_error();
     
-    std::cerr << x.print() << std::endl;
+    std::cerr << x.print();
 
     if (x.have_error())
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_connect.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_connect.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_connect.cpp	(revision 82)
@@ -2,5 +2,5 @@
  * $Id$
  *
- * [ Description ]
+ * [ Description ]
  * 
  */
@@ -27,4 +27,7 @@
 //     log_printf(ALL,Behavioural,FUNCTION,"   * sc_signal : %.8x",signal_dest->_sc_signal);
 //     log_printf(ALL,Behavioural,FUNCTION,"   * type_info : %s",toString(signal_dest->_type_info).c_str());
+
+    TEST_PTR(_sc_signal);
+    TEST_PTR(signal_dest->_sc_signal);
 
     if ((_direction == IN ) and (signal_dest->_direction == IN ))
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_link.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_link.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_link.cpp	(revision 82)
@@ -77,6 +77,4 @@
       signal_dest->_connect_from_signal   = signal_src;
     
-
-
     // vhdl_testbench : to read an output producte by a internal component
     // TODO : à vérifier !!!!!!!!!!!!
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_test_map.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_test_map.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/src/Signal_test_map.cpp	(revision 82)
@@ -14,10 +14,12 @@
 #undef  FUNCTION
 #define FUNCTION "Signal::test_map"
-  bool Signal::test_map (uint32_t depth, bool top_level)
+  bool Signal::test_map (uint32_t depth, bool top_level, bool is_behavioural)
   {
     log_printf(FUNC,Behavioural,FUNCTION,"Begin");
 
-    std::string str = "";
-    std::string tab = std::string(depth,'\t');
+    std::string str     = "";
+    std::string tab     = std::string(depth,'\t');
+    bool        _return = true;
+
 //     log_printf(NONE,Behavioural,FUNCTION, "%s* Signal \"%s\"",tab.c_str(),_name.c_str());
 //     log_printf(NONE,Behavioural,FUNCTION, "%s%d - %d - %d",tab.c_str(),
@@ -25,91 +27,117 @@
 // 	       _is_map_as_component_src,
 // 	       _is_map_as_component_dest);
-    bool _return = true;
+//     log_printf(NONE,Behavioural,FUNCTION, "%stop_level %d, is_behavioural %d",tab.c_str(),
+// 	       top_level,
+// 	       is_behavioural);
 
-    if (top_level == true)
-      {
-	switch (_direction)
-	  {
-	  case morpheo::behavioural::IN       : 
+    // behavioural | top_level
+    //-------------+-----------
+    // 0           | 0         - 
+    // 0           | 1         - 
+    // 1           | 0         - 
+    // 1           | 1         - 
+
+    if (not (is_behavioural and top_level))
+      if (top_level == true)
+	{
+	  switch (_direction)
 	    {
-	      if (_is_map_as_toplevel_dest == false)
-		{
-		  _return = false;
-
-		  str = "Signal \""+_name+"\" is not mapped with an outpout port top-level's interface or a input port component's interface.";
-		}
-	      break;
+	    case morpheo::behavioural::IN       : 
+	      {
+		if (_is_map_as_toplevel_dest == false)
+		  {
+		    _return = false;
+		    
+		    str = "Signal \""+_name+"\" is not mapped with an outpout port top-level's interface or a input port component's interface.";
+		  }
+		break;
+	      }
+	    case morpheo::behavioural::OUT      : 
+	      {
+		if (_is_map_as_toplevel_dest == false)
+		  {
+		    _return = false;
+		    str = "Signal \""+_name+"\" is not mapped with an input port top-level's interface or a output port component's interface.";
+		  }
+		break;
+	      }
+	    case morpheo::behavioural::INTERNAL : 
+	      {
+		if (_is_map_as_component_src  == false)
+		  {
+		    _return = false;
+		    
+		    str = "Internal signal \""+_name+"\" is not mapped with an outpout port top-level's interface or a input port component's interface.";
+		  }
+		
+		if (_is_map_as_component_dest == false)
+		  {
+		    if (_return == false)
+		      str+="\n";
+		    
+		    _return = false;
+		    
+		    str += "Internal signal \""+_name+"\" is not mapped with an input port top-level's interface or a output port component's interface.";
+		  }
+		
+		break;
+	      }
+	      //case morpheo::behavioural::INOUT    :
+	    default    : break;
 	    }
-	  case morpheo::behavioural::OUT      : 
+	}
+      else
+	{
+	  // internal signal :
+	  // Component --- I/O       (as_src)
+	  // Component --- Component (as_src and as_dest)
+	  
+	  switch (_direction)
 	    {
-	      if (_is_map_as_toplevel_dest == false)
-		{
-		  _return = false;
-		  str = "Signal \""+_name+"\" is not mapped with an input port top-level's interface or a output port component's interface.";
-		}
-	      break;
+	    case morpheo::behavioural::IN       : 
+	      {
+		if (_is_map_as_component_src == false)
+		  {
+		    _return = false;
+		    
+		    str = "Signal \""+_name+"\" is not mapped with an input port top-level's interface or a output port component's interface.";
+		  }
+		break;
+	      }
+	    case morpheo::behavioural::OUT      : 
+	      {
+		if (_is_map_as_component_src == false)
+		  {
+		    _return = false;
+		    
+		    str = "Signal \""+_name+"\" is not mapped with an outpout port top-level's interface or a input port component's interface.";
+		  }
+		break;
+	      }
+	    case morpheo::behavioural::INTERNAL : 
+	      {
+		if (_is_map_as_component_src  == false)
+		  {
+		    _return = false;
+		    
+		    str = "Internal signal \""+_name+"\" is not mapped with an outpout port top-level's interface or a input port component's interface.";
+		  }
+		
+		if (_is_map_as_component_dest == false)
+		  {
+		    if (_return == false)
+		      str+="\n";
+		    
+		    _return = false;
+		    
+		    str += "Internal signal \""+_name+"\" is not mapped with an input port top-level's interface or a output port component's interface.";
+		  }
+		
+		break;
+	      }
+	      //case morpheo::behavioural::INOUT    :
+	    default    : break;
 	    }
-	    //case morpheo::behavioural::INTERNAL :
-	    //case morpheo::behavioural::INOUT    :
-	  default    : break;
-	  }
-      }
-    else
-      {
-	// internal signal :
-	// Component --- I/O       (as_src)
-	// Component --- Component (as_src and as_dest)
-
-	switch (_direction)
-	  {
-	  case morpheo::behavioural::IN       : 
-	    {
-	      if (_is_map_as_component_src == false)
-		{
-		  _return = false;
-		  
-		  str = "Signal \""+_name+"\" is not mapped with an input port top-level's interface or a output port component's interface.";
-		}
-	      break;
-	    }
-	  case morpheo::behavioural::OUT      : 
-	    {
-	      if (_is_map_as_component_src == false)
-		{
-		  _return = false;
-		  
-		  str = "Signal \""+_name+"\" is not mapped with an outpout port top-level's interface or a input port component's interface.";
-		}
-	      break;
-	    }
-	  case morpheo::behavioural::INTERNAL : 
-	    {
-	      if (_is_map_as_component_src  == false)
-		{
-		  _return = false;
-		  
-		  str = "Internal signal \""+_name+"\" is not mapped with an outpout port top-level's interface or a input port component's interface.";
-		}
-
-	      if (_is_map_as_component_dest == false)
-		{
-		  if (_return == false)
-		    str+="\n";
-
-		  _return = false;
-		  
-		  str += "Internal signal \""+_name+"\" is not mapped with an input port top-level's interface or a output port component's interface.";
-		}
-
-	      break;
-	    }
-	    //case morpheo::behavioural::INOUT    :
-	  default    : break;
-	  }
-      }
-    
-    log_printf(FUNC,Behavioural,FUNCTION,"End");
-
-
+	}
 
     if (_return == false)
@@ -125,8 +153,38 @@
 // 	log_printf(NONE,Behavioural,FUNCTION, "%s* Signal \"%s\" is OK.",tab.c_str(),_name.c_str());
       }
+
+    log_printf(FUNC,Behavioural,FUNCTION,"End");
     
     return _return;
   };
 
+// #undef  FUNCTION
+// #define FUNCTION "Signal::test_equi"
+//   bool Signal::test_equi (uint32_t depth)
+//   {
+//     log_printf(FUNC,Behavioural,FUNCTION,"Begin");
+
+//     std::string str = "";
+//     std::string tab = std::string(depth,'\t');
+//     bool _return = true;
+
+    
+
+//     if (_return == false)
+//       {
+// 	log_printf(NONE,Behavioural,FUNCTION, "%s* %s",tab.c_str(),str.c_str());
+	
+// #ifndef DEBUG
+// 	std::cerr << str << std::endl;
+// #endif
+//       }
+//     else
+//       {
+// // 	log_printf(NONE,Behavioural,FUNCTION, "%s* Signal \"%s\" is OK.",tab.c_str(),_name.c_str());
+//       }
+    
+//     return _return;
+//   };
+
 }; // end namespace behavioural          
 }; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Common/include/Debug.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Common/include/Debug.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Common/include/Debug.h	(revision 82)
@@ -2,6 +2,28 @@
 #define DEBUG_H
 
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ * function to help the debugging :
+ *
+ *  - debug_tab
+ *  - log_printf
+ *  - log_begin
+ *  - log_end
+ *  - breakpoint
+ *
+ *  Debug's Level :
+ *  - None    : print elementary information
+ *  - Info    : print basic information
+ *  - Trace   : trace internal variable
+ *  - Func    : trace call and return function
+ *  - All     : print all information
+ */
+
 #include "Common/include/Message.h"
 #include "Behavioural/include/Debug_component.h"
+#include "Behavioural/include/Environment.h"
 #include <stdio.h>
 #include <string.h>
@@ -9,15 +31,4 @@
 #include <sstream>
 #include <string>
-
-std::string debug_tab            (void);
-void        debug_function_begin (std::string component, std::string function);
-void        debug_function_end   (std::string component, std::string function);
-
-// Debug's Level :
-//  * None    : print elementary information
-//  * Info    : print basic information
-//  * Trace   : trace internal variable
-//  * Func    : trace call and return function
-//  * All     : print all information
 
 enum _debug_verbosity 
@@ -30,4 +41,8 @@
   };
 
+std::string debug_tab     (void);
+void        debug_tab_inc (void);
+void        debug_tab_dec (void);
+
 #ifdef DEBUG
 # define log_printf(level, component, func, str... )			\
@@ -39,5 +54,8 @@
 	   ( DEBUG_ ## component == true )) )				\
 	{								\
-	  msg(_("%s"),debug_tab().c_str());				\
+	  if (DEBUG >= DEBUG_FUNC)					\
+	    {								\
+	      msg(_("%s"),debug_tab().c_str());				\
+	    }								\
 	  if (DEBUG >= DEBUG_ALL )					\
 	    {								\
@@ -64,6 +82,31 @@
 	}								\
     } while(0)
+
+# define log_begin(component, func)					\
+  do									\
+    {									\
+      debug_tab_inc ();							\
+      log_printf(FUNC,component,func,"Begin");				\
+    } while(0)
+
+# define log_end(component, func)					\
+  do									\
+    {									\
+      log_printf(FUNC,component,func,"End");				\
+      debug_tab_dec ();							\
+    } while(0)
+
 #else
 # define log_printf(level, component, func, str... )			\
+  do									\
+    {									\
+    } while(0)
+
+# define log_begin(component, func)					\
+  do									\
+    {									\
+    } while(0)
+
+# define log_end(component, func)					\
   do									\
     {									\
@@ -77,7 +120,23 @@
       msg(_("Breakpoint : file %s, line %d. Enter Any key to continue\n"),__FILE__,__LINE__); \
       msg(str);								\
-      msg(_("\n"));							\
       getchar();							\
     } while(0)
 
+#ifdef DEBUG_TEST
+#define TEST_PTR(x)							\
+  do									\
+    {									\
+      if (x == NULL)							\
+	err(_("%s File %s, Line %d, this pointeur is null"),MSG_ERROR,__FILE__,__LINE__); \
+    }									\
+  while (0)
+#else
+#define TEST_PTR(x)	 \
+  do			 \
+    {			 \
+    }			 \
+  while (0)
+#endif
+
+
 #endif // !DEBUG_H
Index: trunk/IPs/systemC/processor/Morpheo/Common/include/ErrorMorpheo.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Common/include/ErrorMorpheo.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Common/include/ErrorMorpheo.h	(revision 82)
@@ -30,5 +30,5 @@
 				       std::string file    ) throw() 
     { 
-      _msg = "<"+funcname+"> at line " + toString(line) + ", in file " + file + " : "+msg;
+      _msg = toString("<%s> at line %d, in file %s : %s",funcname.c_str(),line,file.c_str(),msg.c_str());
     }
   public  :             ~ErrorMorpheo (void)       throw() {}
Index: trunk/IPs/systemC/processor/Morpheo/Common/include/Message.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Common/include/Message.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Common/include/Message.h	(revision 82)
@@ -11,16 +11,25 @@
 #include <stdio.h>
 #include <string.h>
-#include <libintl.h>
+#include "Translation.h"
 
 namespace morpheo {
 
-#ifdef NO_TRANSLATE
-# define _(String) (String)
-#else
-# define _(String) gettext (String)
-#endif
+#define MSG_ERROR         _("[   ERROR   ]")
+#define MSG_WARNING       _("[  WARNING  ]")
+#define MSG_INFORMATION   _("[INFORMATION]")
 
-#define msg(arg...) fprintf(stdout,arg);
-#define err(arg...) fprintf(stderr,arg);
+#define msg(arg...)				\
+  do						\
+    {						\
+      fprintf(stdout,arg);			\
+    } while (0) 
+
+#define err(arg...)				\
+  do						\
+    {						\
+      fprintf(stderr,"%s ",MSG_ERROR);		\
+      fprintf(stderr,arg);			\
+    } while (0) 
+
 
 }; // end namespace morpheo
Index: trunk/IPs/systemC/processor/Morpheo/Common/include/ToString.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Common/include/ToString.h	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Common/include/ToString.h	(revision 82)
@@ -16,4 +16,7 @@
 #include <string>
 #include <limits>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
 
 namespace morpheo              {
@@ -99,4 +102,6 @@
     return out.str();
   }
+
+  std::string toString (const char *fmt, ...);
   
 }; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Common/include/Translation.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Common/include/Translation.h	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Common/include/Translation.h	(revision 82)
@@ -0,0 +1,33 @@
+#ifndef morpheo_Translation_H
+#define morpheo_Translation_H
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include <libintl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <iostream>
+
+#define MORPHEO_PACKAGE "morpheo"
+
+#ifdef NO_TRANSLATION
+# define _(str) (str)
+#else
+# define _(str) dgettext (MORPHEO_PACKAGE,str)
+#endif
+
+namespace morpheo 
+{
+  class Translation
+  {
+  public :  Translation (void);
+  public : ~Translation (void);
+  };
+
+}; // end namespace morpheo
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Common/src/Debug.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Common/src/Debug.cpp	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Common/src/Debug.cpp	(revision 82)
@@ -1,6 +1,12 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
 #include "Common/include/Debug.h"
 
 static uint32_t _debug_depth = 0;
-
 
 std::string debug_tab (void)
@@ -9,15 +15,11 @@
 }
 
-void debug_function_begin (std::string component, std::string function)
+void debug_tab_inc (void)
 {
-  _debug_depth ++;
-
-  log_printf(FUNC,true,function.c_str(),"%sBegin",debug_tab().c_str());
+//   _debug_depth ++;
 }
 
-void debug_function_end (std::string component, std::string function)
+void debug_tab_dec (void)
 {
-  log_printf(FUNC,true,function.c_str(),"%sEnd",debug_tab().c_str());
-
-  _debug_depth --;
+//   _debug_depth --;
 }
Index: trunk/IPs/systemC/processor/Morpheo/Common/src/ToString.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Common/src/ToString.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Common/src/ToString.cpp	(revision 82)
@@ -0,0 +1,48 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "../include/ToString.h"
+
+namespace morpheo {
+
+  std::string toString (const char *fmt, ...)
+  {
+    int size = 128; // initial size
+    char *tmp;
+    va_list ap;
+    while (1) 
+      {
+	// Allocation
+	tmp = new char [size];
+	
+	va_start(ap, fmt);
+	int n = vsnprintf (tmp, size, fmt, ap);
+	va_end(ap);
+	
+	// n : (<= GlibC 2.0.6) number of print caracter, if n == -1, tmp is truncate 
+	//     ( > GlibC 2.1  ) number of caracter
+
+	// Test if ok
+	if ((n > -1) and (n < size))
+	  break;
+	
+	if (n > -1)
+	  size = n+1; // ( > GlibC 2.1  )
+	else
+	  size *= 2;  // (<= GlibC 2.0.6)
+	
+	delete [] tmp;
+      }
+    
+    std::string str = toString(tmp);
+    delete [] tmp;
+
+    return str;
+  }
+
+
+}; // end namespace morpheo
Index: trunk/IPs/systemC/processor/Morpheo/Common/src/Translation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Common/src/Translation.cpp	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Common/src/Translation.cpp	(revision 82)
@@ -0,0 +1,33 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "../include/Translation.h"
+#include "../include/ErrorMorpheo.h"
+
+namespace morpheo {
+
+  Translation:: Translation (void)
+  {
+#ifndef NO_TRANSLATION
+    char * top_level = getenv("MORPHEO_TOPLEVEL");
+    
+    if (top_level == NULL)
+      throw ERRORMORPHEO("Translation","Error morpheo environment is not positioned\n");
+  
+    std::string dirname = top_level;
+    dirname += "IPs/systemC/processor/Morpheo/locale";
+
+    bindtextdomain(MORPHEO_PACKAGE,dirname.c_str());
+#endif    
+  }
+
+  Translation::~Translation (void)
+  {
+
+  }
+
+}; // end namespace morpheo
Index: trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Documents/article-07sympa/fr/root.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Documents/article-07sympa/fr/root.tex	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Documents/article-07sympa/fr/root.tex	(revision 82)
@@ -11,5 +11,4 @@
 
 L'approche actuelle pour dévelloper des systèmes embarquées est fondée sur le secret. Les composants matériels et/ou logicielle sont fermés. Les concepteurs utilisant ces Intellectual Proprity (IP) ne sont pas assuré d'absence de chevaux de troie, de la pérénité de ce composant (arrêt de la production ou changement de protocole de communication).
-
 La nouvelle approche se base sur l'utilisation de composant ouvert. Ceci engendre la disponibilité du code source et rendre plus facile l'intégration sur FPGA. Ceci permet d'avoir des systèmes sur puces (SOC).
 
Index: trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Include/doc-style.sty
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Include/doc-style.sty	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Documentation/Source/Include/doc-style.sty	(revision 82)
@@ -14,8 +14,6 @@
 \usepackage[latin1]{inputenc}  % Pour utiliser les caractères accentués dans votre texte 
 \usepackage{openbib}
-
+\usepackage[draft]{fixme}
 \bibliographystyle{plain}
-
-
 
 % Titres de figures en 9 points helvetica gras
Index: trunk/IPs/systemC/processor/Morpheo/Script/SelfTest.sh
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Script/SelfTest.sh	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Script/SelfTest.sh	(revision 82)
@@ -0,0 +1,232 @@
+#!/bin/sh
+#-----------------------------------------------------------
+# $Id$
+#-----------------------------------------------------------
+
+#-----[ variable ]------------------------------------------
+
+declare    test_ko="Test KO";
+declare    test_ok="Test OK";
+declare    tmp="${MORPHEO_HOME}/tmp/SelfTest";
+declare    path="${MORPHEO_TOPLEVEL}/IPs/systemC/processor/Morpheo/Behavioural";
+
+declare -a directory=(
+    ""
+    "Generic/Counter"
+    "Generic/Queue_Control"                                 
+    "Generic/Queue"                                 
+    "Generic/RegisterFile/RegisterFile_Monolithic"  
+    "Generic/RegisterFile/RegisterFile_Multi_Banked"
+    "Generic/RegisterFile"                          
+    "Generic/Select/Select_Priority_Fixed"           
+    "Generic/Select"                                
+    "Generic/Shifter"                               
+    "Generic/Sort"                                  
+    "Generic/Victim/Victim_Pseudo_LRU"              
+    "Generic/Victim"                                
+
+    "Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Functionnal_unit"
+    "Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit/Load_store_unit"
+    "Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit/Execute_unit"
+    "Core/Multi_Execute_loop/Execute_loop/Multi_Execute_unit"
+    "Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Read_queue"
+    "Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit/Reservation_station"
+    "Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit/Read_unit"
+    "Core/Multi_Execute_loop/Execute_loop/Multi_Read_unit"
+    "Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Execute_queue"
+    "Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit/Write_queue"
+    "Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit/Write_unit"
+    "Core/Multi_Execute_loop/Execute_loop/Multi_Write_unit"
+    "Core/Multi_Execute_loop/Execute_loop/Network/Execution_unit_to_Write_unit"
+    "Core/Multi_Execute_loop/Execute_loop/Network/Read_unit_to_Execution_unit"
+    "Core/Multi_Execute_loop/Execute_loop/Network"
+    "Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue"
+    "Core/Multi_Execute_loop/Execute_loop/Register_unit"
+#   "Core/Multi_Execute_loop/Execute_loop"
+#   "Core/Multi_Execute_loop"
+
+    "Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Load_Store_pointer_unit"
+    "Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Dependency_checking_unit"
+    "Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Free_List_unit"
+    "Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_Address_Translation_unit"
+    "Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Register_translation_unit_Glue"
+    "Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit/Stat_List_unit"
+    "Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Register_translation_unit"
+    "Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_queue"
+    "Core/Multi_OOO_Engine/OOO_Engine/Rename_unit/Rename_select"
+    "Core/Multi_OOO_Engine/OOO_Engine/Rename_unit"
+    "Core/Multi_OOO_Engine/OOO_Engine"
+    "Core/Multi_OOO_Engine"
+    
+    "Core/Multi_Front_end/Front_end/Decod_unit/Decod"
+    "Core/Multi_Front_end/Front_end/Decod_unit/Decod_queue"
+    "Core/Multi_Front_end/Front_end/Decod_unit"
+    "Core/Multi_Front_end/Front_end/Ifetch_unit/Address_management"
+    "Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_queue"
+    "Core/Multi_Front_end/Front_end/Ifetch_unit/Ifetch_unit_Glue"
+    "Core/Multi_Front_end/Front_end/Ifetch_unit"
+    "Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue"
+    "Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register"
+    "Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer"
+    "Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue"
+    "Core/Multi_Front_end/Front_end/Prediction_unit/Direction"
+#   "Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue"
+#   "Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/Two_Level_Branch_Predictor_Glue"
+#   "Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/Branch_History_Table"
+#   "Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/Pattern_History_Table"
+#   "Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor"
+#   "Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor"
+    "Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue"
+    "Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack"
+    "Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table"
+    "Core/Multi_Front_end/Front_end/Prediction_unit"
+    "Core/Multi_Front_end/Front_end"
+    "Core/Multi_Front_end"
+
+    );
+                                           
+
+#-----[ usage ]---------------------------------------------
+function usage ()
+{
+    echo "Usage          : ${0} action";
+    echo "Arguments      : ";
+    echo " * action";
+    echo "   * test      : test all component";
+    echo '                 for each component, create file in ${MORPHEO_HOME}/tmp/';
+    echo "   * test_all  : same as test, but don't stop at the first error";
+    echo "   * res       : list test's resultat";
+    echo "   * list      : list test's resultat";
+    echo "   * clean     : erase file in ${MORPHEO_HOME}/tmp/ directory";
+    echo "   * clean_all : clean all component";
+    echo "   * help      : print this message";
+    echo "";
+    echo "Notes          : ";
+    echo " * Morpheo environment must be positionned";
+    exit;
+}
+
+#-----[ main ]----------------------------------------------
+function main ()
+{
+    # Test operand
+    if test ${#} -ne 1; then
+	usage ${*};
+    fi;
+
+    if test -z ${MORPHEO_TOPLEVEL}; then
+	usage ${*};
+    fi;
+
+    if test ! -d ${tmp}; then
+	mkdir ${tmp};
+    fi;
+
+    nb_cpu=$(cat /proc/cpuinfo |grep -c processor);
+    pwd=${PWD};
+    case ${1} in
+	"test" | "test_all")
+	    for i in ${directory[@]}; do
+		component=$(basename ${i});
+		dir="${path}/${i}/SelfTest";
+
+		if test -d "${dir}"; then
+		    # have previous test ok ?
+		    declare -i make_test=1;
+		    
+		    if test -f ${tmp}/${component}; then
+			res_test=$(cat ${tmp}/${component});
+			if test "${test_ok}" = "${res_test}"; then
+			    make_test=0;
+			fi;
+		    fi;
+
+		    if test ${make_test} -eq 1; then
+			cd ${dir};
+			make config;
+			make -j${nb_cpu} execute;
+			case ${?} in
+			    "0")
+				echo ${test_ok} > ${tmp}/"${component}";
+				;;
+			    *)
+
+				echo ${test_ko} > ${tmp}/"${component}";
+				echo "";
+				echo "${component} : ${test_ko}";
+				echo "";
+				if test ${1} = "test"; then
+				    exit 1;
+				fi;
+				;;
+			esac;
+		    fi;
+		else
+		    echo "${component} have not SelfTest directory.";
+		fi;
+
+		cd ${pwd};
+	    done;
+	    ;;
+
+	"res")
+	    for i in ${tmp}/*; do
+		if test -f ${i}; then
+		    component=$(basename ${i});
+		    res_test=$(cat ${i});
+
+		    
+		    case "${res_test}" in
+			"${test_ok}") color=32; 
+			    ;;
+			"${test_ko}") color=31; 
+			    ;;
+			*)            color=39; 
+			    ;;
+		    esac
+		    echo "[1;${color}m${res_test} - ${component}[1;0m";
+		fi;
+	    done;
+	    ;;
+
+	"list")
+	    for i in ${directory[@]}; do
+		component=$(basename ${i});
+		echo "${i}";
+	    done;
+	    ;;
+
+	"clean")
+	    rm -r ${tmp};
+	    ;;
+	    
+	"clean_all")
+	    for i in ${directory[@]}; do
+		component=$(basename ${i});
+
+		cd ${path}/${i};
+		make clean;
+		dir="SelfTest";
+
+		if test -d ${dir}; then
+		    cd ${dir};
+		    make clean;
+		else
+		    echo "${component} have not SelfTest directory.";
+		fi;
+		cd ${pwd};
+
+	    done;
+	    ;;
+
+	"help")
+	    usage ${*};
+	    ;;
+	*)
+	    usage ${*};
+    esac
+}
+
+#-----[ Body ]----------------------------------------------
+main ${*};
+
Index: trunk/IPs/systemC/processor/Morpheo/Script/execute.sh
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Script/execute.sh	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Script/execute.sh	(revision 82)
@@ -1,3 +1,6 @@
 #!/bin/sh
+#-----------------------------------------------------------
+# $Id$
+#-----------------------------------------------------------
 
 declare -a COMMAND;
Index: trunk/IPs/systemC/processor/Morpheo/Script/execute_n.sh
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Script/execute_n.sh	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Script/execute_n.sh	(revision 82)
@@ -1,3 +1,6 @@
 #!/bin/sh
+#-----------------------------------------------------------
+# $Id$
+#-----------------------------------------------------------
 
 #-----[ variable ]------------------------------------------
Index: trunk/IPs/systemC/processor/Morpheo/Script/first_run.sh
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Script/first_run.sh	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Script/first_run.sh	(revision 82)
@@ -1,3 +1,6 @@
 #!/bin/sh
+#-----------------------------------------------------------
+# $Id$
+#-----------------------------------------------------------
 
 #-----[ usage ]---------------------------------------------
Index: trunk/IPs/systemC/processor/Morpheo/Script/lock.sh
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Script/lock.sh	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Script/lock.sh	(revision 82)
@@ -1,3 +1,6 @@
 #!/bin/sh
+#-----------------------------------------------------------
+# $Id$
+#-----------------------------------------------------------
 
 #-----[ usage ]---------------------------------------------
Index: trunk/IPs/systemC/processor/Morpheo/Script/log_trace.pl
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Script/log_trace.pl	(revision 81)
+++ 	(revision )
@@ -1,99 +1,0 @@
-#! /usr/bin/perl -w
-
-### -------------------------------------------------------------- ###
-#                                                                    #
-# File       : log_trace.pl                                          #
-# Authors    : Sroka Marek                                          #
-# Date       : 20/07/2006                                            #
-# Modif.     : 18/08/2006                                            #
-# Version    : 1.0                                                   #
-#                                                                    #
-# Origin     : this description has been developed by CAO-VLSI team  #
-#              at ASIM laboratory, University Pierre et Marie Curie  #
-#              4 Place Jussieu 75252 Paris Cedex 05 - France         #
-#                                                                    #
-### -------------------------------------------------------------- ###
-
-my $TAB1='|  ';
-my $TAB2='+--';
-
-sub usage() 
-{
-    print "Usage     : $0 rob_trace_file nm_file\n";
-    print "Arguments : ";
-    print " * rob_trace_file : Trace file generate by simulation\n";
-    print " * nm_file        : List of symbol (generate by nm)\n";
-    exit(1);
-}
-
-my $rob = $ARGV[0];
-my $nm  = $ARGV[1];
-
-if (not defined $rob) 
-{
-    usage();
-}
-
-unless (defined $nm) 
-{
-    usage();
-}
-
-my %calls=();
-my %end=();
-
-open (nm_f,$nm) or die "could not open $nm : $!\n";
-
-my $current_section;
-
-while ($line = <nm_f>) 
-{ 
-    if ($line =~ /([0-9a-f]{8}) [Tt] (.*)/) 
-    { 
-        my $addr=hex $1;
-        $calls{$addr}=$2;
-        $end{$current_section} = $addr if (defined $current_section);
-        $current_section=$addr;
-    }
-}
-
-$end{$current_section}=0xffffffff;
-
-close nm_f;
-
-my @pile  = ();
-my $depth = 0;
-open (rob_f,$rob) or die "could not open $rob : $!\n";
-
-print "[ time     ] ","depth"," ","address "," ","function\n";
-
-while (<rob_f>) 
-{
-    if (/(\d+) inst OK - \@([0-9a-f]{8})/) 
-    {
-        my $addr        = hex $2;
-        my $time        = sprintf "%-8d",$1;
-	my $print_addr  = sprintf "%-8x",$addr;
-
-        if (exists $calls{$addr}) 
-	{ 
-	    my $print_depth = sprintf "%-5d",$depth;
-	    $depth = $depth + 1;
-
-            #print "[ $time ] ",$print_depth," ",$print_addr," ",$TAB1x@pile,"[1;32m$calls{$addr}[0m\n";
-	    print "[ $time ] ",$print_depth," ",$print_addr," ",$TAB1 x(@pile-1),$TAB2,"  $calls{$addr}\n";
-            push(@pile,$addr);
-        }
-
-        while (@pile and ($addr < $pile[-1] or $addr >= $end{$pile[-1]})) 
-	{
-	    $depth = $depth - 1;
-	    my $print_depth = sprintf "%-5d",$depth;
-
-            my $end=pop(@pile);
-            #print "[ $time ] ",$print_depth," ","        "," ",$TAB2x@pile,"[0;31m$calls{$end}[0m\n";
-	    print "[ $time ] ",$print_depth," ","        "," ",$TAB1 x@pile,"  $calls{$end}\n";
-	}
-    }
-}
-close rob_f;
Index: trunk/IPs/systemC/processor/Morpheo/Script/range.sh
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Script/range.sh	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Script/range.sh	(revision 82)
@@ -1,3 +1,6 @@
 #!/bin/sh
+#-----------------------------------------------------------
+# $Id$
+#-----------------------------------------------------------
 
 #-----[ usage ]---------------------------------------------
Index: trunk/IPs/systemC/processor/Morpheo/Script/simulation.sh
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Script/simulation.sh	(revision 81)
+++ 	(revision )
@@ -1,114 +1,0 @@
-#!/bin/sh
-
-#-----[ variable ]------------------------------------------
-declare DIR_DEFAULT_EXEC="$SOFT/SpecInt2000.or32";
-#declare DIR_DEFAULT_EXEC="$SOFT/Basic_test.or32";
-declare DIR_CONFIG="$IPS/processor/M_CPU/Configuration_files/Architecture"
-declare DIR_PLATFORMS="$PLATFORMS/Generic";
-declare DEFAULT_EXEC="$DIR_DEFAULT_EXEC/bin/soft.x";
-
-declare CONFIGURATION;
-declare EXECUTE;
-declare NB_CYCLE;
-
-#-----[ usage ]---------------------------------------------
-function usage ()
-{
-    echo "usage : $0 [config [nb_cycle [exec]]]";
-    echo "      * if config is not indicated, execute the more recent executable";
-    echo "      * nb_cycle : number of simulated cycle";
-    echo "      * if exec   is not indicated, execute \"$DEFAULT_EXEC\"";
-    exit 1;
-}
-
-#-----[ test_usage ]----------------------------------------
-function test_usage ()
-{
-    if test $# == 0 -o $# -gt 3;
-	then
-	usage;
-    fi
-}
-
-#-----[ make_arg ]------------------------------------------
-
-function make_arg ()
-{
-    local CONFIG;
-    local EXEC;
-    local CYCLE;
-# Construction du nom de la configuration
-    if [ $# -ge 1 ];
-	then
-	CONFIG="system_"$1""
-	
-    # Recompile l'executable
-	( 
-	    cd $DIR_PLATFORMS;
-
-	    make M_CPU_CONFIGURATION_DIRECTORY="$DIR_CONFIG/m_cpu_configuration_$1" \
-  		 M_CPU_CONFIGURATION_FILENAME="m_cpu_configuration.h"               \
-		 ID="$1";
-	)
-    else
-    # Test la presence du repertoire contenant les binaires
-	if test ! -d $DIR_PLATFORMS/bin;
-	    then
-	    echo "Directory don't exist : \"$DIR_PLATFORMS/bin\", you need a configuration"
-	    usage;
-	fi;
-
-	CONFIG=(`ls -t $DIR_PLATFORMS/bin/*`);
-	CONFIG=`basename ${CONFIG[0]} :`;
-    fi
-
-#nombre de cycle
-    if [ $# -ge 2 ];
-	then
-	CYCLE=$2;
-    fi;
-
-#executable
-    if [ $# -ge 3 ];
-	then
-	if [ -f $2 ];
-	    then
-	    EXEC=$2;
-	else
-	    echo "$2 : file not exist";
-	    usage;
-	fi
-    else
-	EXEC=$DEFAULT_EXEC;
-
-	(cd $DIR_DEFAULT_EXEC; make;)
-
-	if [ $? -ne 0 ]
-	    then
-	    echo "Error of compilation"
-	    exit 1;
-	fi
-    fi
-
-    eval "CONFIGURATION=$CONFIG";
-    eval "EXECUTE=$EXEC";
-    eval "NB_CYCLE=$CYCLE";
-}
-
-#-----[ main ]----------------------------------------------
-function main ()
-{
-    test_usage $*;
-    make_arg   $*;
-
-# Lancement de l'executable
-
-#OPTION=--c
-    OPTION=
-    time $DIR_PLATFORMS/bin/$CONFIGURATION $OPTION $EXECUTE $NB_CYCLE;
-    killall xtty;
-#valgrind --tool=memcheck 
-}
-
-#-----[ Corps ]---------------------------------------------
-main $*;
Index: trunk/IPs/systemC/processor/Morpheo/Script/unlock.sh
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Script/unlock.sh	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Script/unlock.sh	(revision 82)
@@ -1,3 +1,6 @@
 #!/bin/sh
+#-----------------------------------------------------------
+# $Id$
+#-----------------------------------------------------------
 
 #-----[ usage ]---------------------------------------------
Index: trunk/IPs/systemC/processor/Morpheo/Script/version.sh
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Script/version.sh	(revision 82)
+++ trunk/IPs/systemC/processor/Morpheo/Script/version.sh	(revision 82)
@@ -0,0 +1,75 @@
+#!/bin/sh
+#-----------------------------------------------------------
+# $Id$
+#-----------------------------------------------------------
+
+file_sed_src="${MORPHEO_TOPLEVEL}/IPs/systemC/processor/Morpheo/Behavioural/include/Version.h.sed";
+file_sed_dest="${MORPHEO_TOPLEVEL}/IPs/systemC/processor/Morpheo/Behavioural/include/Version.h";
+
+#-----[ usage ]---------------------------------------------
+function usage ()
+{
+    echo "Usage       : ${0} action";
+    echo "Arguments   : ";
+    echo " * action";
+    echo "   * add    : add all file unpresent in project and set proprity";
+    echo "   * commit : update revision number and commit";
+    echo "   * help   : print this message";
+    echo "Note        :";
+    echo " * Morpheo's environnement must be positionned.";
+    exit;
+}
+
+#-----[ main ]----------------------------------------------
+function main ()
+{
+    # Test operand
+    if test ${#} -ne 1; then
+	usage ${*};
+    fi;
+
+    if test -z ${MORPHEO_TOPLEVEL}; then
+	usage ${*};
+    fi;
+
+    export LC_ALL=C;
+    export EDITOR="emacs";
+
+    pwd=${PWD};
+    
+    case ${1} in
+	"commit")
+	    cd ${MORPHEO_TOPLEVEL};
+    
+	    # +1 because is the next revision
+	    revision=$(($(export LC_ALL=C; svnversion  | tr -d [:alpha:] | cut -d : -f 2) + 1));
+    
+	    cat ${file_sed_src} |sed s/"@REVISION"/"${revision}"/ &> ${file_sed_dest};
+    
+	    svn commit;
+
+	    cd ${pwd};
+	    ;;
+
+	"add")
+	    cd ${MORPHEO_TOPLEVEL};
+
+	    for i in $(svn status | grep '?'); do
+		if test -e ${i}; then
+		    svn add ${i};
+		    svn propset svn:keywords "Id" ${i} -R
+		fi;
+	    done;
+
+	    cd ${pwd};
+	    ;;
+	"help")
+	    usage ${*};
+	    ;;
+	*)
+	    usage ${*};
+    esac
+}
+
+#-----[ Body ]----------------------------------------------
+main ${*}
Index: trunk/IPs/systemC/processor/Morpheo/Script/xilinx_extract_info.sh
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Script/xilinx_extract_info.sh	(revision 81)
+++ trunk/IPs/systemC/processor/Morpheo/Script/xilinx_extract_info.sh	(revision 82)
@@ -1,3 +1,6 @@
 #!/bin/sh
+#-----------------------------------------------------------
+# $Id$
+#-----------------------------------------------------------
 
 for i in *.fpga.log; do
