Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/src/Branch_Target_Buffer_Glue_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/src/Branch_Target_Buffer_Glue_allocation.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/src/Branch_Target_Buffer_Glue_allocation.cpp	(revision 112)
@@ -49,5 +49,5 @@
 							 ,IN
 							 ,SOUTH,
-							 "Generalist interface"
+							 _("Generalist interface")
 #endif
 							 );
@@ -60,5 +60,5 @@
     {
       {
-	ALLOC1_INTERFACE("predict", IN, WEST, "predict",_param->_nb_inst_predict);
+	ALLOC1_INTERFACE_BEGIN("predict", IN, WEST, _("predict"),_param->_nb_inst_predict);
 
 	ALLOC1_SIGNAL_IN ( in_PREDICT_VAL           , "val"           ,Tcontrol_t         , 1);
@@ -84,7 +84,9 @@
 	ALLOC1_SIGNAL_IN ( in_PREDICT_VICTIM_VICTIM , "victim_victim" ,Tptr_t             , _param->_size_victim);
 	  }
+
+	ALLOC1_INTERFACE_END(_param->_nb_inst_predict);
       }
       {
-	ALLOC2_INTERFACE("predict", IN, WEST, "predict",_param->_nb_inst_predict, _param->_associativity);
+	ALLOC2_INTERFACE_BEGIN("predict", IN, WEST, _("predict"),_param->_nb_inst_predict, _param->_associativity);
 
 	ALLOC2_SIGNAL_IN ( in_PREDICT_REGISTER_HIT         ,"register_hit"         ,Tcontrol_t         ,1);
@@ -94,4 +96,6 @@
 	ALLOC2_SIGNAL_IN ( in_PREDICT_REGISTER_LAST_TAKE   ,"register_last_take"   ,Tcontrol_t         ,1);
 	ALLOC2_SIGNAL_IN ( in_PREDICT_REGISTER_IS_ACCURATE ,"register_is_accurate" ,Tcontrol_t         ,1);
+
+	ALLOC2_INTERFACE_END(_param->_nb_inst_predict, _param->_associativity);
       }
     }
@@ -99,5 +103,5 @@
     // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("decod", IN, WEST, "decod",_param->_nb_inst_decod);
+      ALLOC1_INTERFACE_BEGIN("decod", IN, WEST, _("decod"),_param->_nb_inst_decod);
 
       ALLOC1_SIGNAL_IN ( in_DECOD_VAL           ,"val"           ,Tcontrol_t     ,1);
@@ -115,9 +119,11 @@
       ALLOC1_SIGNAL_OUT(out_DECOD_VICTIM_ADDRESS,"victim_address",Tgeneral_data_t,_param->_size_victim_address);
 	}
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_decod);
     }
 
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("update", IN, WEST, "update",_param->_nb_inst_update);
+      ALLOC1_INTERFACE_BEGIN("update", IN, WEST, _("update"),_param->_nb_inst_update);
 
       ALLOC1_SIGNAL_IN ( in_UPDATE_VAL           ,"val"           ,Tcontrol_t     ,1);
@@ -135,4 +141,6 @@
       ALLOC1_SIGNAL_OUT(out_UPDATE_VICTIM_ADDRESS,"victim_address",Tgeneral_data_t,_param->_size_victim_address);
 	}
+
+      ALLOC1_INTERFACE_END(_param->_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/src/Branch_Target_Buffer_Glue_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/src/Branch_Target_Buffer_Glue_deallocation.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/src/Branch_Target_Buffer_Glue_deallocation.cpp	(revision 112)
@@ -7,4 +7,5 @@
 
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Glue/include/Branch_Target_Buffer_Glue.h"
+#include "Behavioural/include/Allocation.h"
 
 namespace morpheo                    {
@@ -29,58 +30,61 @@
 	delete     in_NRESET;
 
-	delete []  in_PREDICT_VAL                    ;
-	delete [] out_PREDICT_ACK                    ;
-	delete [] out_PREDICT_HIT                    ;
-	delete [] out_PREDICT_ADDRESS_SRC            ;
-	delete [] out_PREDICT_ADDRESS_DEST           ;
-	delete [] out_PREDICT_CONDITION              ;
-	delete [] out_PREDICT_LAST_TAKE              ;
-	delete [] out_PREDICT_IS_ACCURATE            ;
-	delete [] out_PREDICT_REGISTER_VAL           ;
-	delete []  in_PREDICT_REGISTER_ACK           ;
-	delete []  in_PREDICT_REGISTER_HIT           ;
-	delete []  in_PREDICT_REGISTER_ADDRESS_SRC   ;
-	delete []  in_PREDICT_REGISTER_ADDRESS_DEST  ;
-	delete []  in_PREDICT_REGISTER_CONDITION     ;
-	delete []  in_PREDICT_REGISTER_LAST_TAKE     ;
-	delete []  in_PREDICT_REGISTER_IS_ACCURATE   ;
+	DELETE1_SIGNAL( in_PREDICT_VAL           ,_param->_nb_inst_predict, 1);
+	DELETE1_SIGNAL(out_PREDICT_ACK           ,_param->_nb_inst_predict, 1);
+	DELETE1_SIGNAL(out_PREDICT_HIT           ,_param->_nb_inst_predict, 1);
+	DELETE1_SIGNAL(out_PREDICT_ADDRESS_SRC   ,_param->_nb_inst_predict, _param->_size_instruction_address);
+	DELETE1_SIGNAL(out_PREDICT_ADDRESS_DEST  ,_param->_nb_inst_predict, _param->_size_instruction_address);
+	DELETE1_SIGNAL(out_PREDICT_CONDITION     ,_param->_nb_inst_predict, _param->_size_branch_condition);
+	DELETE1_SIGNAL(out_PREDICT_LAST_TAKE     ,_param->_nb_inst_predict, 1);
+	DELETE1_SIGNAL(out_PREDICT_IS_ACCURATE   ,_param->_nb_inst_predict, 1);
+	DELETE1_SIGNAL(out_PREDICT_REGISTER_VAL  ,_param->_nb_inst_predict, 1);
+	DELETE1_SIGNAL( in_PREDICT_REGISTER_ACK  ,_param->_nb_inst_predict, 1);
 	if (_param->_have_port_victim)
 	  {
-	delete []  in_PREDICT_SORT_VAL               ;
-	delete []  in_PREDICT_SORT_INDEX             ;
-	delete [] out_PREDICT_VICTIM_VAL             ;
-	delete []  in_PREDICT_VICTIM_ACK             ;
-	delete [] out_PREDICT_VICTIM_HIT             ;
-	if (not _param->_is_full_associative)
-	delete [] out_PREDICT_VICTIM_ADDRESS         ;
-	delete [] out_PREDICT_VICTIM_INDEX           ;
-	delete []  in_PREDICT_VICTIM_VICTIM          ;
+	DELETE1_SIGNAL( in_PREDICT_SORT_VAL      ,_param->_nb_inst_predict,1);
+	DELETE1_SIGNAL( in_PREDICT_SORT_INDEX    ,_param->_nb_inst_predict,_param->_size_victim);
+
+	DELETE1_SIGNAL(out_PREDICT_VICTIM_VAL    ,_param->_nb_inst_predict, 1);
+	DELETE1_SIGNAL( in_PREDICT_VICTIM_ACK    ,_param->_nb_inst_predict, 1);
+	DELETE1_SIGNAL(out_PREDICT_VICTIM_HIT    ,_param->_nb_inst_predict, 1);
+	DELETE1_SIGNAL(out_PREDICT_VICTIM_ADDRESS,_param->_nb_inst_predict, _param->_size_victim_address);
+	DELETE1_SIGNAL(out_PREDICT_VICTIM_INDEX  ,_param->_nb_inst_predict, _param->_size_victim);
+	DELETE1_SIGNAL( in_PREDICT_VICTIM_VICTIM ,_param->_nb_inst_predict, _param->_size_victim);
 	  }
-	delete []  in_DECOD_VAL                      ;
-	delete [] out_DECOD_ACK                      ;
-	if (not _param->_is_full_associative)
-	delete []  in_DECOD_ADDRESS_SRC              ;
-	delete [] out_DECOD_REGISTER_VAL             ;
-	delete []  in_DECOD_REGISTER_ACK             ;
-	if (_param->_have_port_victim)
-	  {
-	delete [] out_DECOD_VICTIM_VAL               ;
-	delete []  in_DECOD_VICTIM_ACK               ;
-	if (not _param->_is_full_associative)
-	delete [] out_DECOD_VICTIM_ADDRESS           ;
-	  }
-	delete []  in_UPDATE_VAL                     ;
-	delete [] out_UPDATE_ACK                     ;
-	if (not _param->_is_full_associative)
-	delete []  in_UPDATE_ADDRESS_SRC             ;
-	delete [] out_UPDATE_REGISTER_VAL            ;
-	delete []  in_UPDATE_REGISTER_ACK            ;
-	if (_param->_have_port_victim)
-	  {
-	delete [] out_UPDATE_VICTIM_VAL              ;
-	delete []  in_UPDATE_VICTIM_ACK              ;
-	if (not _param->_is_full_associative)
-	delete [] out_UPDATE_VICTIM_ADDRESS          ;
-	  }
+
+	DELETE2_SIGNAL( in_PREDICT_REGISTER_HIT         ,_param->_nb_inst_predict, _param->_associativity,1);
+	DELETE2_SIGNAL( in_PREDICT_REGISTER_ADDRESS_SRC ,_param->_nb_inst_predict, _param->_associativity,_param->_size_instruction_address);
+	DELETE2_SIGNAL( in_PREDICT_REGISTER_ADDRESS_DEST,_param->_nb_inst_predict, _param->_associativity,_param->_size_instruction_address);
+	DELETE2_SIGNAL( in_PREDICT_REGISTER_CONDITION   ,_param->_nb_inst_predict, _param->_associativity,_param->_size_branch_condition);
+	DELETE2_SIGNAL( in_PREDICT_REGISTER_LAST_TAKE   ,_param->_nb_inst_predict, _param->_associativity,1);
+	DELETE2_SIGNAL( in_PREDICT_REGISTER_IS_ACCURATE ,_param->_nb_inst_predict, _param->_associativity,1);
+
+        DELETE1_SIGNAL( in_DECOD_VAL           ,_param->_nb_inst_decod,1);
+        DELETE1_SIGNAL(out_DECOD_ACK           ,_param->_nb_inst_decod,1);
+        if (not _param->_is_full_associative)
+        DELETE1_SIGNAL( in_DECOD_ADDRESS_SRC   ,_param->_nb_inst_decod,_param->_size_instruction_address);
+      
+        DELETE1_SIGNAL(out_DECOD_REGISTER_VAL  ,_param->_nb_inst_decod,1);
+        DELETE1_SIGNAL( in_DECOD_REGISTER_ACK  ,_param->_nb_inst_decod,1);
+        if (_param->_have_port_victim)
+          {
+        DELETE1_SIGNAL(out_DECOD_VICTIM_VAL    ,_param->_nb_inst_decod,1);
+        DELETE1_SIGNAL( in_DECOD_VICTIM_ACK    ,_param->_nb_inst_decod,1);
+        DELETE1_SIGNAL(out_DECOD_VICTIM_ADDRESS,_param->_nb_inst_decod,_param->_size_victim_address);
+          }
+
+        DELETE1_SIGNAL( in_UPDATE_VAL           ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_ACK           ,_param->_nb_inst_update,1);
+        if (not _param->_is_full_associative)
+        DELETE1_SIGNAL( in_UPDATE_ADDRESS_SRC   ,_param->_nb_inst_update,_param->_size_instruction_address);
+        DELETE1_SIGNAL(out_UPDATE_REGISTER_VAL  ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL( in_UPDATE_REGISTER_ACK  ,_param->_nb_inst_update,1);
+        if (_param->_have_port_victim)
+          {
+        DELETE1_SIGNAL(out_UPDATE_VICTIM_VAL    ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL( in_UPDATE_VICTIM_ACK    ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_VICTIM_ADDRESS,_param->_nb_inst_update,_param->_size_victim_address);
+          }
+
       }
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
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 111)
+++ 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 112)
@@ -49,5 +49,5 @@
 							 ,IN
 							 ,SOUTH,
-							 "Generalist interface"
+							 _("Generalist interface")
 #endif
 							 );
@@ -59,5 +59,5 @@
     // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("predict", IN, SOUTH, "Compute next pc.", _param->_nb_inst_predict);
+      ALLOC1_INTERFACE_BEGIN("predict", IN, SOUTH, _("Compute next pc."), _param->_nb_inst_predict);
 
       ALLOC1_VALACK_IN ( in_PREDICT_VAL         ,VAL);
@@ -66,19 +66,22 @@
       ALLOC1_SIGNAL_IN ( in_PREDICT_ADDRESS     ,"address"     ,Tgeneral_data_t    ,_param->_size_instruction_address);
 
-      {
-	ALLOC2_INTERFACE("predict", OUT, SOUTH, "Compute next pc.", _param->_nb_inst_predict, _param->_associativity);
- 
-	ALLOC2_SIGNAL_OUT(out_PREDICT_HIT         ,"hit"         ,Tcontrol_t         ,1);
-	ALLOC2_SIGNAL_OUT(out_PREDICT_ADDRESS_SRC ,"address_src" ,Tgeneral_data_t    ,_param->_size_instruction_address);
-	ALLOC2_SIGNAL_OUT(out_PREDICT_ADDRESS_DEST,"address_dest",Tgeneral_data_t    ,_param->_size_instruction_address);
-	ALLOC2_SIGNAL_OUT(out_PREDICT_CONDITION   ,"condition"   ,Tbranch_condition_t,_param->_size_branch_state);
-	ALLOC2_SIGNAL_OUT(out_PREDICT_LAST_TAKE   ,"last_take"   ,Tcontrol_t         ,1);
-	ALLOC2_SIGNAL_OUT(out_PREDICT_IS_ACCURATE ,"is_accurate" ,Tcontrol_t         ,1);
-      }
+      ALLOC1_INTERFACE_END(_param->_nb_inst_predict);
+    }
+    {
+      ALLOC2_INTERFACE_BEGIN("predict", OUT, SOUTH, _("Compute next pc."), _param->_nb_inst_predict, _param->_associativity);
+      
+      ALLOC2_SIGNAL_OUT(out_PREDICT_HIT         ,"hit"         ,Tcontrol_t         ,1);
+      ALLOC2_SIGNAL_OUT(out_PREDICT_ADDRESS_SRC ,"address_src" ,Tgeneral_data_t    ,_param->_size_instruction_address);
+      ALLOC2_SIGNAL_OUT(out_PREDICT_ADDRESS_DEST,"address_dest",Tgeneral_data_t    ,_param->_size_instruction_address);
+      ALLOC2_SIGNAL_OUT(out_PREDICT_CONDITION   ,"condition"   ,Tbranch_condition_t,_param->_size_branch_state);
+      ALLOC2_SIGNAL_OUT(out_PREDICT_LAST_TAKE   ,"last_take"   ,Tcontrol_t         ,1);
+      ALLOC2_SIGNAL_OUT(out_PREDICT_IS_ACCURATE ,"is_accurate" ,Tcontrol_t         ,1);
+
+      ALLOC2_INTERFACE_END(_param->_nb_inst_predict, _param->_associativity);
     }
 
     // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("decod", IN, SOUTH, "decod instruction", _param->_nb_inst_decod);
+      ALLOC1_INTERFACE_BEGIN("decod", IN, SOUTH, _("decod instruction"), _param->_nb_inst_decod);
 
       ALLOC1_VALACK_IN ( in_DECOD_VAL            ,VAL);
@@ -97,9 +100,11 @@
       ALLOC1_SIGNAL_IN ( in_DECOD_MISS_PREDICTION,"miss_prediction",Tcontrol_t         ,1);
       ALLOC1_SIGNAL_IN ( in_DECOD_IS_ACCURATE    ,"is_accurate"    ,Tcontrol_t         ,1);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_decod);
     }
 
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("update", IN, SOUTH, "update instruction", _param->_nb_inst_update);
+      ALLOC1_INTERFACE_BEGIN("update", IN, SOUTH, _("update instruction"), _param->_nb_inst_update);
 
       ALLOC1_VALACK_IN ( in_UPDATE_VAL            ,VAL);
@@ -117,4 +122,6 @@
       ALLOC1_SIGNAL_IN ( in_UPDATE_LAST_TAKE      ,"last_take"      ,Tcontrol_t         ,1);
       ALLOC1_SIGNAL_IN ( in_UPDATE_MISS_PREDICTION,"miss_prediction",Tcontrol_t         ,1);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_update);
     }
 
@@ -122,17 +129,15 @@
       {
     // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
-    reg_BTB = new btb_entry_t * [_param->_size_bank];
-    for (uint32_t i=0; i<_param->_size_bank; i++)
-      reg_BTB [i] = new btb_entry_t [_param->_associativity];
+        ALLOC2(reg_BTB,btb_entry_t,_param->_size_bank,_param->_associativity);
 
-    internal_DECOD_ACK        = new Tcontrol_t [_param->_nb_inst_decod];
-    internal_DECOD_HIT        = new Tcontrol_t [_param->_nb_inst_decod];
-    internal_DECOD_NUM_BANK   = new uint32_t   [_param->_nb_inst_decod];
-    internal_DECOD_NUM_ENTRY  = new uint32_t   [_param->_nb_inst_decod];
+        ALLOC1(internal_DECOD_ACK       ,Tcontrol_t,_param->_nb_inst_decod );
+        ALLOC1(internal_DECOD_HIT       ,Tcontrol_t,_param->_nb_inst_decod );
+        ALLOC1(internal_DECOD_NUM_BANK  ,uint32_t  ,_param->_nb_inst_decod );
+        ALLOC1(internal_DECOD_NUM_ENTRY ,uint32_t  ,_param->_nb_inst_decod );
 
-    internal_UPDATE_ACK       = new Tcontrol_t [_param->_nb_inst_update];
-    internal_UPDATE_HIT       = new Tcontrol_t [_param->_nb_inst_update];
-    internal_UPDATE_NUM_BANK  = new uint32_t   [_param->_nb_inst_update];
-    internal_UPDATE_NUM_ENTRY = new uint32_t   [_param->_nb_inst_update];
+        ALLOC1(internal_UPDATE_ACK      ,Tcontrol_t,_param->_nb_inst_update);
+        ALLOC1(internal_UPDATE_HIT      ,Tcontrol_t,_param->_nb_inst_update);
+        ALLOC1(internal_UPDATE_NUM_BANK ,uint32_t  ,_param->_nb_inst_update);
+        ALLOC1(internal_UPDATE_NUM_ENTRY,uint32_t  ,_param->_nb_inst_update);
       }
 
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 111)
+++ 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 112)
@@ -7,4 +7,5 @@
 
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/Branch_Target_Buffer_Register/include/Branch_Target_Buffer_Register.h"
+#include "Behavioural/include/Allocation.h"
 
 namespace morpheo                    {
@@ -29,58 +30,56 @@
 	delete    in_NRESET;
 
-	delete []  in_PREDICT_VAL           ;
-	delete [] out_PREDICT_ACK           ;
-	if (_param->_have_port_context_id)
-	delete []  in_PREDICT_CONTEXT_ID    ;
-	delete []  in_PREDICT_ADDRESS       ;
-	delete [] out_PREDICT_HIT           ;
-	delete [] out_PREDICT_ADDRESS_SRC   ;
-	delete [] out_PREDICT_ADDRESS_DEST  ;
-	delete [] out_PREDICT_CONDITION     ;
-	delete [] out_PREDICT_LAST_TAKE     ;
-	delete [] out_PREDICT_IS_ACCURATE   ;
-	delete []  in_DECOD_VAL             ;
-	delete [] out_DECOD_ACK             ;
-	if (_param->_have_port_victim)
-          {
-	delete [] out_DECOD_HIT             ;
-	delete [] out_DECOD_HIT_INDEX       ;
-	delete []  in_DECOD_VICTIM          ;
-          }
-	if (_param->_have_port_context_id)
-	delete []  in_DECOD_CONTEXT_ID      ;
-	delete []  in_DECOD_ADDRESS_SRC     ;
-	delete []  in_DECOD_ADDRESS_DEST    ;
-	delete []  in_DECOD_CONDITION       ;
-	delete []  in_DECOD_LAST_TAKE       ;
-	delete []  in_DECOD_MISS_PREDICTION ;
-	delete []  in_DECOD_IS_ACCURATE     ;
-	delete []  in_UPDATE_VAL            ;
-	delete [] out_UPDATE_ACK            ;
-	if (_param->_have_port_victim)
-          {
-	delete [] out_UPDATE_HIT            ;
-	delete [] out_UPDATE_HIT_INDEX      ;
-	delete []  in_UPDATE_VICTIM         ;
-          }
-	if (_param->_have_port_context_id)
-	delete []  in_UPDATE_CONTEXT_ID     ;
-	delete []  in_UPDATE_ADDRESS_SRC    ;
-	delete []  in_UPDATE_ADDRESS_DEST   ;
-	delete []  in_UPDATE_CONDITION      ;
-	delete []  in_UPDATE_LAST_TAKE      ;
-	delete []  in_UPDATE_MISS_PREDICTION;
+        DELETE1_SIGNAL( in_PREDICT_VAL         ,_param->_nb_inst_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_ACK         ,_param->_nb_inst_predict,1);
+        DELETE1_SIGNAL( in_PREDICT_CONTEXT_ID  ,_param->_nb_inst_predict,_param->_size_context_id);
+        DELETE1_SIGNAL( in_PREDICT_ADDRESS     ,_param->_nb_inst_predict,_param->_size_instruction_address);
+        DELETE2_SIGNAL(out_PREDICT_HIT         , _param->_nb_inst_predict, _param->_associativity,1);
+        DELETE2_SIGNAL(out_PREDICT_ADDRESS_SRC , _param->_nb_inst_predict, _param->_associativity,_param->_size_instruction_address);
+        DELETE2_SIGNAL(out_PREDICT_ADDRESS_DEST, _param->_nb_inst_predict, _param->_associativity,_param->_size_instruction_address);
+        DELETE2_SIGNAL(out_PREDICT_CONDITION   , _param->_nb_inst_predict, _param->_associativity,_param->_size_branch_state);
+        DELETE2_SIGNAL(out_PREDICT_LAST_TAKE   , _param->_nb_inst_predict, _param->_associativity,1);
+        DELETE2_SIGNAL(out_PREDICT_IS_ACCURATE , _param->_nb_inst_predict, _param->_associativity,1);
+  
+        DELETE1_SIGNAL( in_DECOD_VAL            , _param->_nb_inst_decod,1);
+        DELETE1_SIGNAL(out_DECOD_ACK            , _param->_nb_inst_decod,1);
+        if (_param->_have_port_victim)
+  	{
+        DELETE1_SIGNAL(out_DECOD_HIT            , _param->_nb_inst_decod,1);
+        DELETE1_SIGNAL(out_DECOD_HIT_INDEX      , _param->_nb_inst_decod,_param->_size_victim);
+        DELETE1_SIGNAL( in_DECOD_VICTIM         , _param->_nb_inst_decod,_param->_size_victim);
+  	}
+        DELETE1_SIGNAL( in_DECOD_CONTEXT_ID     , _param->_nb_inst_decod,_param->_size_context_id);
+        DELETE1_SIGNAL( in_DECOD_ADDRESS_SRC    , _param->_nb_inst_decod,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_DECOD_ADDRESS_DEST   , _param->_nb_inst_decod,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_DECOD_CONDITION      , _param->_nb_inst_decod,_param->_size_branch_state);
+        DELETE1_SIGNAL( in_DECOD_LAST_TAKE      , _param->_nb_inst_decod,1);
+        DELETE1_SIGNAL( in_DECOD_MISS_PREDICTION, _param->_nb_inst_decod,1);
+        DELETE1_SIGNAL( in_DECOD_IS_ACCURATE    , _param->_nb_inst_decod,1);
+  
+        DELETE1_SIGNAL( in_UPDATE_VAL            , _param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_ACK            , _param->_nb_inst_update,1);
+        if (_param->_have_port_victim)
+  	{
+        DELETE1_SIGNAL(out_UPDATE_HIT            , _param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_HIT_INDEX      , _param->_nb_inst_update,_param->_size_victim);
+        DELETE1_SIGNAL( in_UPDATE_VICTIM         , _param->_nb_inst_update,_param->_size_victim);
+  	}
+        DELETE1_SIGNAL( in_UPDATE_CONTEXT_ID     , _param->_nb_inst_update,_param->_size_context_id);
+        DELETE1_SIGNAL( in_UPDATE_ADDRESS_SRC    , _param->_nb_inst_update,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_UPDATE_ADDRESS_DEST   , _param->_nb_inst_update,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_UPDATE_CONDITION      , _param->_nb_inst_update,_param->_size_branch_state);
+        DELETE1_SIGNAL( in_UPDATE_LAST_TAKE      , _param->_nb_inst_update,1);
+        DELETE1_SIGNAL( in_UPDATE_MISS_PREDICTION, _param->_nb_inst_update,1);
+  
+        DELETE2(reg_BTB                  ,_param->_size_bank,_param->_associativity);
 
-	delete [] reg_BTB;
-
-	delete [] internal_DECOD_ACK       ;
-	delete [] internal_DECOD_HIT       ;
-	delete [] internal_DECOD_NUM_BANK  ;
-	delete [] internal_DECOD_NUM_ENTRY ;
-
-	delete [] internal_UPDATE_ACK      ;
-	delete [] internal_UPDATE_HIT      ;
-	delete [] internal_UPDATE_NUM_BANK ;
-	delete [] internal_UPDATE_NUM_ENTRY;
+        DELETE1(internal_DECOD_ACK       ,_param->_nb_inst_decod );
+        DELETE1(internal_DECOD_HIT       ,_param->_nb_inst_decod );
+        DELETE1(internal_DECOD_NUM_BANK  ,_param->_nb_inst_decod );
+        DELETE1(internal_DECOD_NUM_ENTRY ,_param->_nb_inst_decod );
+        DELETE1(internal_UPDATE_ACK      ,_param->_nb_inst_update);
+        DELETE1(internal_UPDATE_HIT      ,_param->_nb_inst_update);
+        DELETE1(internal_UPDATE_NUM_BANK ,_param->_nb_inst_update);
+        DELETE1(internal_UPDATE_NUM_ENTRY,_param->_nb_inst_update);
       }
 
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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/src/Branch_Target_Buffer_allocation.cpp	(revision 112)
@@ -49,5 +49,5 @@
 							 ,IN
 							 ,SOUTH,
-							 "Generalist interface"
+							 _("Generalist interface")
 #endif
 							 );
@@ -59,5 +59,5 @@
     // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("predict", IN, SOUTH, "Predict (next pc) interface", _param->_nb_inst_predict);
+      ALLOC1_INTERFACE_BEGIN("predict", IN, SOUTH, _("Predict (next pc) interface"), _param->_nb_inst_predict);
 
       ALLOC1_VALACK_IN ( in_PREDICT_VAL         ,VAL);
@@ -71,9 +71,11 @@
       ALLOC1_SIGNAL_OUT(out_PREDICT_LAST_TAKE   ,"last_take"   ,Tcontrol_t         ,1);
       ALLOC1_SIGNAL_OUT(out_PREDICT_IS_ACCURATE ,"is_accurate" ,Tcontrol_t         ,1);
+
+      ALLOC1_INTERFACE_END(param->_nb_inst_predict);
     }
 
     // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("decod", IN, SOUTH, "Decod Interface", _param->_nb_inst_decod);
+      ALLOC1_INTERFACE_BEGIN("decod", IN, SOUTH, _("Decod Interface"), _param->_nb_inst_decod);
     
       ALLOC1_VALACK_IN ( in_DECOD_VAL            ,VAL);
@@ -86,9 +88,11 @@
       ALLOC1_SIGNAL_IN ( in_DECOD_MISS_PREDICTION,"miss_prediction",Tcontrol_t         ,1);
       ALLOC1_SIGNAL_IN ( in_DECOD_IS_ACCURATE    ,"is_accurate"    ,Tcontrol_t         ,1);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_decod);
     }
 
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("update", IN, SOUTH, "Update interface", _param->_nb_inst_update);
+      ALLOC1_INTERFACE_BEGIN("update", IN, SOUTH, _("Update interface"), _param->_nb_inst_update);
     
       ALLOC1_VALACK_IN ( in_UPDATE_VAL            ,VAL);
@@ -100,4 +104,6 @@
       ALLOC1_SIGNAL_IN ( in_UPDATE_LAST_TAKE      ,"last_take"      ,Tcontrol_t         ,1);
       ALLOC1_SIGNAL_IN ( in_UPDATE_MISS_PREDICTION,"miss_prediction",Tcontrol_t         ,1);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_update);
     }
 
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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/src/Branch_Target_Buffer_deallocation.cpp	(revision 112)
@@ -7,4 +7,5 @@
 
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Branch_Target_Buffer/include/Branch_Target_Buffer.h"
+#include "Behavioural/include/Allocation.h"
 
 namespace morpheo                    {
@@ -28,36 +29,33 @@
 	delete    in_NRESET;
 
-	delete []  in_PREDICT_VAL           ;
-	delete [] out_PREDICT_ACK           ;
-	if (_param->_have_port_context_id)
-	delete []  in_PREDICT_CONTEXT_ID    ;
-	delete []  in_PREDICT_ADDRESS       ;
-	delete [] out_PREDICT_HIT           ;
-	delete [] out_PREDICT_ADDRESS_SRC   ;
-	delete [] out_PREDICT_ADDRESS_DEST  ;
-	delete [] out_PREDICT_CONDITION     ;
-	delete [] out_PREDICT_LAST_TAKE     ;
-	delete [] out_PREDICT_IS_ACCURATE   ;
+        DELETE1_SIGNAL( in_PREDICT_VAL           ,_param->_nb_inst_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_ACK           ,_param->_nb_inst_predict,1);
+        DELETE1_SIGNAL( in_PREDICT_CONTEXT_ID    ,_param->_nb_inst_predict,_param->_size_context_id);
+        DELETE1_SIGNAL( in_PREDICT_ADDRESS       ,_param->_nb_inst_predict,_param->_size_instruction_address);
+        DELETE1_SIGNAL(out_PREDICT_HIT           ,_param->_nb_inst_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_ADDRESS_SRC   ,_param->_nb_inst_predict,_param->_size_instruction_address);
+        DELETE1_SIGNAL(out_PREDICT_ADDRESS_DEST  ,_param->_nb_inst_predict,_param->_size_instruction_address);
+        DELETE1_SIGNAL(out_PREDICT_CONDITION     ,_param->_nb_inst_predict,_param->_size_branch_condition);
+        DELETE1_SIGNAL(out_PREDICT_LAST_TAKE     ,_param->_nb_inst_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_IS_ACCURATE   ,_param->_nb_inst_predict,1);
 
-	delete []  in_DECOD_VAL             ;
-	delete [] out_DECOD_ACK             ;
-	if (_param->_have_port_context_id)
-	delete []  in_DECOD_CONTEXT_ID      ;
-	delete []  in_DECOD_ADDRESS_SRC     ;
-	delete []  in_DECOD_ADDRESS_DEST    ;
-	delete []  in_DECOD_CONDITION       ;
-	delete []  in_DECOD_LAST_TAKE       ;
-	delete []  in_DECOD_MISS_PREDICTION ;
-	delete []  in_DECOD_IS_ACCURATE     ;
+        DELETE1_SIGNAL( in_DECOD_VAL             ,_param->_nb_inst_decod,1);
+        DELETE1_SIGNAL(out_DECOD_ACK             ,_param->_nb_inst_decod,1);
+        DELETE1_SIGNAL( in_DECOD_CONTEXT_ID      ,_param->_nb_inst_decod,_param->_size_context_id);
+        DELETE1_SIGNAL( in_DECOD_ADDRESS_SRC     ,_param->_nb_inst_decod,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_DECOD_ADDRESS_DEST    ,_param->_nb_inst_decod,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_DECOD_CONDITION       ,_param->_nb_inst_decod,_param->_size_branch_condition);
+        DELETE1_SIGNAL( in_DECOD_LAST_TAKE       ,_param->_nb_inst_decod,1);
+        DELETE1_SIGNAL( in_DECOD_MISS_PREDICTION ,_param->_nb_inst_decod,1);
+        DELETE1_SIGNAL( in_DECOD_IS_ACCURATE     ,_param->_nb_inst_decod,1);
 
-	delete []  in_UPDATE_VAL            ;
-	delete [] out_UPDATE_ACK            ;
-	if (_param->_have_port_context_id)
-	delete []  in_UPDATE_CONTEXT_ID     ;
-	delete []  in_UPDATE_ADDRESS_SRC    ;
-	delete []  in_UPDATE_ADDRESS_DEST   ;
-	delete []  in_UPDATE_CONDITION      ;
-	delete []  in_UPDATE_LAST_TAKE      ;
-	delete []  in_UPDATE_MISS_PREDICTION;
+        DELETE1_SIGNAL( in_UPDATE_VAL            ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_ACK            ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL( in_UPDATE_CONTEXT_ID     ,_param->_nb_inst_update,_param->_size_context_id);
+        DELETE1_SIGNAL( in_UPDATE_ADDRESS_SRC    ,_param->_nb_inst_update,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_UPDATE_ADDRESS_DEST   ,_param->_nb_inst_update,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_UPDATE_CONDITION      ,_param->_nb_inst_update,_param->_size_branch_condition);
+        DELETE1_SIGNAL( in_UPDATE_LAST_TAKE      ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL( in_UPDATE_MISS_PREDICTION,_param->_nb_inst_update,1);
       }
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/SelfTest/src/test.cpp	(revision 112)
@@ -51,26 +51,28 @@
   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_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_ACK                  ,"out_PREDICT_ACK                  ",Tcontrol_t,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_ADDRESS_SRC          ," in_PREDICT_ADDRESS_SRC          ",Taddress_t,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_STATIC               ," in_PREDICT_STATIC               ",Tcontrol_t,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_LAST_TAKE            ," in_PREDICT_LAST_TAKE            ",Tcontrol_t,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_HISTORY              ,"out_PREDICT_HISTORY              ",Thistory_t,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_DIRECTION            ,"out_PREDICT_DIRECTION            ",Tcontrol_t,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_PREDICTOR_VAL        ,"out_PREDICT_PREDICTOR_VAL        ",Tcontrol_t,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_PREDICTOR_ACK        ," in_PREDICT_PREDICTOR_ACK        ",Tcontrol_t,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL(out_PREDICT_PREDICTOR_ADDRESS_SRC,"out_PREDICT_PREDICTOR_ADDRESS_SRC",Taddress_t,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_PREDICTOR_HISTORY    ," in_PREDICT_PREDICTOR_HISTORY    ",Thistory_t,_param->_nb_inst_predict);
-  ALLOC1_SC_SIGNAL( in_PREDICT_PREDICTOR_DIRECTION  ," in_PREDICT_PREDICTOR_DIRECTION  ",Tcontrol_t,_param->_nb_inst_predict);
-  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);
-  ALLOC1_SC_SIGNAL( in_UPDATE_ADDRESS               ," in_UPDATE_ADDRESS               ",Taddress_t,_param->_nb_inst_update);
-  ALLOC1_SC_SIGNAL( in_UPDATE_HISTORY               ," in_UPDATE_HISTORY               ",Thistory_t,_param->_nb_inst_update);
-  ALLOC1_SC_SIGNAL( in_UPDATE_DIRECTION             ," in_UPDATE_DIRECTION             ",Tcontrol_t,_param->_nb_inst_update);
-  ALLOC1_SC_SIGNAL(out_UPDATE_PREDICTOR_VAL         ,"out_UPDATE_PREDICTOR_VAL         ",Tcontrol_t,_param->_nb_inst_update);
-  ALLOC1_SC_SIGNAL( in_UPDATE_PREDICTOR_ACK         ," in_UPDATE_PREDICTOR_ACK         ",Tcontrol_t,_param->_nb_inst_update);
-  ALLOC1_SC_SIGNAL(out_UPDATE_PREDICTOR_ADDRESS     ,"out_UPDATE_PREDICTOR_ADDRESS     ",Taddress_t,_param->_nb_inst_update);
-  ALLOC1_SC_SIGNAL(out_UPDATE_PREDICTOR_HISTORY     ,"out_UPDATE_PREDICTOR_HISTORY     ",Thistory_t,_param->_nb_inst_update);
-  ALLOC1_SC_SIGNAL(out_UPDATE_PREDICTOR_DIRECTION   ,"out_UPDATE_PREDICTOR_DIRECTION   ",Tcontrol_t,_param->_nb_inst_update);
+  ALLOC1_SC_SIGNAL( in_PREDICT_VAL                        ," in_PREDICT_VAL                        ",Tcontrol_t,_param->_nb_inst_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_ACK                        ,"out_PREDICT_ACK                        ",Tcontrol_t,_param->_nb_inst_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_ADDRESS_SRC                ," in_PREDICT_ADDRESS_SRC                ",Taddress_t,_param->_nb_inst_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_STATIC                     ," in_PREDICT_STATIC                     ",Tcontrol_t,_param->_nb_inst_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_LAST_TAKE                  ," in_PREDICT_LAST_TAKE                  ",Tcontrol_t,_param->_nb_inst_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_HISTORY                    ,"out_PREDICT_HISTORY                    ",Thistory_t,_param->_nb_inst_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_DIRECTION                  ,"out_PREDICT_DIRECTION                  ",Tcontrol_t,_param->_nb_inst_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_PREDICTOR_VAL              ,"out_PREDICT_PREDICTOR_VAL              ",Tcontrol_t,_param->_nb_inst_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_PREDICTOR_ACK              ," in_PREDICT_PREDICTOR_ACK              ",Tcontrol_t,_param->_nb_inst_predict);
+  ALLOC1_SC_SIGNAL(out_PREDICT_PREDICTOR_ADDRESS_SRC      ,"out_PREDICT_PREDICTOR_ADDRESS_SRC      ",Taddress_t,_param->_nb_inst_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_PREDICTOR_HISTORY          ," in_PREDICT_PREDICTOR_HISTORY          ",Thistory_t,_param->_nb_inst_predict);
+  ALLOC1_SC_SIGNAL( in_PREDICT_PREDICTOR_DIRECTION        ," in_PREDICT_PREDICTOR_DIRECTION        ",Tcontrol_t,_param->_nb_inst_predict);
+  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);
+  ALLOC1_SC_SIGNAL( in_UPDATE_ADDRESS                     ," in_UPDATE_ADDRESS                     ",Taddress_t,_param->_nb_inst_update);
+  ALLOC1_SC_SIGNAL( in_UPDATE_HISTORY                     ," in_UPDATE_HISTORY                     ",Thistory_t,_param->_nb_inst_update);
+  ALLOC1_SC_SIGNAL( in_UPDATE_DIRECTION                   ," in_UPDATE_DIRECTION                   ",Tcontrol_t,_param->_nb_inst_update);
+  ALLOC1_SC_SIGNAL( in_UPDATE_PREDICTION_IFETCH           ," in_UPDATE_PREDICTION_IFETCH           ",Tcontrol_t,_param->_nb_inst_update);
+  ALLOC1_SC_SIGNAL(out_UPDATE_PREDICTOR_VAL               ,"out_UPDATE_PREDICTOR_VAL               ",Tcontrol_t,_param->_nb_inst_update);
+  ALLOC1_SC_SIGNAL( in_UPDATE_PREDICTOR_ACK               ," in_UPDATE_PREDICTOR_ACK               ",Tcontrol_t,_param->_nb_inst_update);
+  ALLOC1_SC_SIGNAL(out_UPDATE_PREDICTOR_ADDRESS           ,"out_UPDATE_PREDICTOR_ADDRESS           ",Taddress_t,_param->_nb_inst_update);
+  ALLOC1_SC_SIGNAL(out_UPDATE_PREDICTOR_HISTORY           ,"out_UPDATE_PREDICTOR_HISTORY           ",Thistory_t,_param->_nb_inst_update);
+  ALLOC1_SC_SIGNAL(out_UPDATE_PREDICTOR_DIRECTION         ,"out_UPDATE_PREDICTOR_DIRECTION         ",Tcontrol_t,_param->_nb_inst_update);
+  ALLOC1_SC_SIGNAL(out_UPDATE_PREDICTOR_PREDICTION_IFETCH ,"out_UPDATE_PREDICTOR_PREDICTION_IFETCH ",Tcontrol_t,_param->_nb_inst_update);
 
   /********************************************************
@@ -83,36 +85,38 @@
   (*(_Direction_Glue->in_NRESET))       (*(in_NRESET));
 
-  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_VAL                  ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_PREDICT_ACK                  ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_ADDRESS_SRC          ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_STATIC               ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_LAST_TAKE            ,_param->_nb_inst_predict);
-  if (_param->_have_port_history)
-  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_PREDICT_HISTORY              ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_PREDICT_DIRECTION            ,_param->_nb_inst_predict);
-  if (_param->_have_component_meta_predictor)
-    {
-  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_PREDICT_PREDICTOR_VAL        ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_PREDICTOR_ACK        ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_PREDICT_PREDICTOR_ADDRESS_SRC,_param->_nb_inst_predict);
-  if (_param->_have_port_history)
-  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_PREDICTOR_HISTORY    ,_param->_nb_inst_predict);
-  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_PREDICTOR_DIRECTION  ,_param->_nb_inst_predict);
-    }
-
-  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_VAL                   ,_param->_nb_inst_update );
-  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_ACK                   ,_param->_nb_inst_update );
-  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_ADDRESS               ,_param->_nb_inst_update );
-  if (_param->_have_port_history)
-  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_HISTORY               ,_param->_nb_inst_update );
-  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_DIRECTION             ,_param->_nb_inst_update );
-  if (_param->_have_component_meta_predictor)
-    {
-  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_PREDICTOR_VAL         ,_param->_nb_inst_update );
-  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_PREDICTOR_ACK         ,_param->_nb_inst_update );
-  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_PREDICTOR_ADDRESS     ,_param->_nb_inst_update );
-  if (_param->_have_port_history)
-  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_PREDICTOR_HISTORY     ,_param->_nb_inst_update );
-  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_PREDICTOR_DIRECTION   ,_param->_nb_inst_update );
+  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_VAL                        ,_param->_nb_inst_predict);
+  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_PREDICT_ACK                        ,_param->_nb_inst_predict);
+  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_ADDRESS_SRC                ,_param->_nb_inst_predict);
+  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_STATIC                     ,_param->_nb_inst_predict);
+  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_LAST_TAKE                  ,_param->_nb_inst_predict);
+  if (_param->_have_port_history)                                            
+  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_PREDICT_HISTORY                    ,_param->_nb_inst_predict);
+  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_PREDICT_DIRECTION                  ,_param->_nb_inst_predict);
+  if (_param->_have_component_meta_predictor)                                
+    {                                                                        
+  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_PREDICT_PREDICTOR_VAL              ,_param->_nb_inst_predict);
+  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_PREDICTOR_ACK              ,_param->_nb_inst_predict);
+  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_PREDICT_PREDICTOR_ADDRESS_SRC      ,_param->_nb_inst_predict);
+  if (_param->_have_port_history)                                            
+  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_PREDICTOR_HISTORY          ,_param->_nb_inst_predict);
+  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_PREDICT_PREDICTOR_DIRECTION        ,_param->_nb_inst_predict);
+    }                                                                        
+                                                                             
+  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_VAL                         ,_param->_nb_inst_update );
+  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_ACK                         ,_param->_nb_inst_update );
+  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_ADDRESS                     ,_param->_nb_inst_update );
+  if (_param->_have_port_history)                                            
+  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_HISTORY                     ,_param->_nb_inst_update );
+  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_DIRECTION                   ,_param->_nb_inst_update );
+  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_PREDICTION_IFETCH           ,_param->_nb_inst_update );
+  if (_param->_have_component_meta_predictor)                                
+    {                                                                        
+  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_PREDICTOR_VAL               ,_param->_nb_inst_update );
+  INSTANCE1_SC_SIGNAL(_Direction_Glue, in_UPDATE_PREDICTOR_ACK               ,_param->_nb_inst_update );
+  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_PREDICTOR_ADDRESS           ,_param->_nb_inst_update );
+  if (_param->_have_port_history)                                            
+  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_PREDICTOR_HISTORY           ,_param->_nb_inst_update );
+  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_PREDICTOR_DIRECTION         ,_param->_nb_inst_update );
+  INSTANCE1_SC_SIGNAL(_Direction_Glue,out_UPDATE_PREDICTOR_PREDICTION_IFETCH ,_param->_nb_inst_update );
     }
 
@@ -163,4 +167,5 @@
 	  in_UPDATE_HISTORY              [i]->write(range<Thistory_t>(rand(),_param->_size_history));
 	  in_UPDATE_DIRECTION            [i]->write(rand()%2);
+	  in_UPDATE_PREDICTION_IFETCH    [i]->write(rand()%2);
 	  in_UPDATE_PREDICTOR_ACK        [i]->write(rand()%2);
 	}
@@ -228,9 +233,10 @@
 	    case PREDICTOR_CUSTOM      :
 	      {
-		TEST(Tcontrol_t,out_UPDATE_ACK                 [i]->read(), in_UPDATE_PREDICTOR_ACK [i]->read());
-		TEST(Tcontrol_t,out_UPDATE_PREDICTOR_VAL       [i]->read(), in_UPDATE_VAL           [i]->read());
-		TEST(Taddress_t,out_UPDATE_PREDICTOR_ADDRESS   [i]->read(), in_UPDATE_ADDRESS       [i]->read());
-		TEST(Thistory_t,out_UPDATE_PREDICTOR_HISTORY   [i]->read(), in_UPDATE_HISTORY       [i]->read());
-		TEST(Tcontrol_t,out_UPDATE_PREDICTOR_DIRECTION [i]->read(), in_UPDATE_DIRECTION     [i]->read());
+		TEST(Tcontrol_t,out_UPDATE_ACK                        [i]->read(), in_UPDATE_PREDICTOR_ACK       [i]->read());
+		TEST(Tcontrol_t,out_UPDATE_PREDICTOR_VAL              [i]->read(), in_UPDATE_VAL                 [i]->read());
+		TEST(Taddress_t,out_UPDATE_PREDICTOR_ADDRESS          [i]->read(), in_UPDATE_ADDRESS             [i]->read());
+		TEST(Thistory_t,out_UPDATE_PREDICTOR_HISTORY          [i]->read(), in_UPDATE_HISTORY             [i]->read());
+		TEST(Tcontrol_t,out_UPDATE_PREDICTOR_DIRECTION        [i]->read(), in_UPDATE_DIRECTION           [i]->read());
+		TEST(Tcontrol_t,out_UPDATE_PREDICTOR_PREDICTION_IFETCH[i]->read(), in_UPDATE_PREDICTION_IFETCH   [i]->read());
 		
 		break;
@@ -281,4 +287,5 @@
   delete []  in_UPDATE_HISTORY               ;
   delete []  in_UPDATE_DIRECTION             ;
+  delete []  in_UPDATE_PREDICTION_IFETCH     ;
   delete [] out_UPDATE_PREDICTOR_VAL         ;
   delete []  in_UPDATE_PREDICTOR_ACK         ;
@@ -286,4 +293,5 @@
   delete [] out_UPDATE_PREDICTOR_HISTORY     ;
   delete [] out_UPDATE_PREDICTOR_DIRECTION   ;
+  delete [] out_UPDATE_PREDICTOR_PREDICTION_IFETCH;
 #endif
 
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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/include/Direction_Glue.h	(revision 112)
@@ -79,15 +79,17 @@
 
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_VAL                ;
-  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_ACK                ;
-  public    : SC_IN (Taddress_t)           **  in_UPDATE_ADDRESS            ;
-  public    : SC_IN (Thistory_t)           **  in_UPDATE_HISTORY            ;
-  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_DIRECTION          ;
+  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_VAL                        ;
+  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_ACK                        ;
+  public    : SC_IN (Taddress_t)           **  in_UPDATE_ADDRESS                    ;
+  public    : SC_IN (Thistory_t)           **  in_UPDATE_HISTORY                    ;
+  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_DIRECTION                  ;
+  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_PREDICTION_IFETCH          ;
 
-  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_PREDICTOR_VAL      ;
-  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_PREDICTOR_ACK      ;
-  public    : SC_OUT(Taddress_t)           ** out_UPDATE_PREDICTOR_ADDRESS  ;
-  public    : SC_OUT(Thistory_t)           ** out_UPDATE_PREDICTOR_HISTORY  ;
-  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_PREDICTOR_DIRECTION;
+  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_PREDICTOR_VAL              ;
+  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_PREDICTOR_ACK              ;
+  public    : SC_OUT(Taddress_t)           ** out_UPDATE_PREDICTOR_ADDRESS          ;
+  public    : SC_OUT(Thistory_t)           ** out_UPDATE_PREDICTOR_HISTORY          ;
+  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_PREDICTOR_DIRECTION        ;
+  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_PREDICTOR_PREDICTION_IFETCH;
 
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue.cpp	(revision 112)
@@ -215,9 +215,11 @@
 // 	    sensitive << (*(in_CLOCK)).neg(); // don't use internal register
 	    for (uint32_t i=0; i<_param->_nb_inst_update; i++)
-	      sensitive << (*(in_UPDATE_VAL           [i]))
-			<< (*(in_UPDATE_PREDICTOR_ACK [i]))
-			<< (*(in_UPDATE_ADDRESS       [i]))
-			<< (*(in_UPDATE_HISTORY       [i]))
-			<< (*(in_UPDATE_DIRECTION     [i]));
+	      sensitive << (*(in_UPDATE_VAL               [i]))
+			<< (*(in_UPDATE_PREDICTOR_ACK     [i]))
+			<< (*(in_UPDATE_ADDRESS           [i]))
+			<< (*(in_UPDATE_HISTORY           [i]))
+			<< (*(in_UPDATE_DIRECTION         [i]))
+			<< (*(in_UPDATE_PREDICTION_IFETCH [i]))
+                ;
 
 #  ifdef SYSTEMCASS_SPECIFIC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue_allocation.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue_allocation.cpp	(revision 112)
@@ -59,5 +59,5 @@
     // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("predict", IN, SOUTH, "predict's interface", _param->_nb_inst_predict);
+      ALLOC1_INTERFACE_BEGIN("predict", IN, SOUTH, _("predict's interface"), _param->_nb_inst_predict);
 
       ALLOC1_SIGNAL_IN ( in_PREDICT_VAL                  ,"val"                  ,Tcontrol_t,1);
@@ -68,6 +68,7 @@
       ALLOC1_SIGNAL_OUT(out_PREDICT_HISTORY              ,"history"              ,Thistory_t,_param->_size_history);
       ALLOC1_SIGNAL_OUT(out_PREDICT_DIRECTION            ,"direction"            ,Tcontrol_t,1);
-      if (_param->_have_component_meta_predictor)
-	{
+
+      if (_param->_have_component_meta_predictor)                                
+	{                                                                        
       ALLOC1_SIGNAL_OUT(out_PREDICT_PREDICTOR_VAL        ,"predictor_val"        ,Tcontrol_t,1);
       ALLOC1_SIGNAL_IN ( in_PREDICT_PREDICTOR_ACK        ,"predictor_ack"        ,Tcontrol_t,1);
@@ -76,23 +77,30 @@
       ALLOC1_SIGNAL_IN ( in_PREDICT_PREDICTOR_DIRECTION  ,"predictor_direction"  ,Tcontrol_t,1);
 	}
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_predict);
     }
 
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("update", IN, SOUTH, "update's interface", _param->_nb_inst_update);
+      ALLOC1_INTERFACE_BEGIN("update", IN, SOUTH, _("update's interface"), _param->_nb_inst_update);
 
-      ALLOC1_SIGNAL_IN ( in_UPDATE_VAL                ,"val"                ,Tcontrol_t,1);
-      ALLOC1_SIGNAL_OUT(out_UPDATE_ACK                ,"ack"                ,Tcontrol_t,1);
-      ALLOC1_SIGNAL_IN ( in_UPDATE_ADDRESS            ,"address"            ,Taddress_t,_param->_size_instruction_address);
-      ALLOC1_SIGNAL_IN ( in_UPDATE_HISTORY            ,"history"            ,Thistory_t,_param->_size_history);
-      ALLOC1_SIGNAL_IN ( in_UPDATE_DIRECTION          ,"direction"          ,Tcontrol_t,1);
+      ALLOC1_SIGNAL_IN ( in_UPDATE_VAL                        ,"val"                        ,Tcontrol_t,1);
+      ALLOC1_SIGNAL_OUT(out_UPDATE_ACK                        ,"ack"                        ,Tcontrol_t,1);
+      ALLOC1_SIGNAL_IN ( in_UPDATE_ADDRESS                    ,"address"                    ,Taddress_t,_param->_size_instruction_address);
+      ALLOC1_SIGNAL_IN ( in_UPDATE_HISTORY                    ,"history"                    ,Thistory_t,_param->_size_history);
+      ALLOC1_SIGNAL_IN ( in_UPDATE_DIRECTION                  ,"direction"                  ,Tcontrol_t,1);
+      ALLOC1_SIGNAL_IN ( in_UPDATE_PREDICTION_IFETCH          ,"prediction_ifetch"          ,Tcontrol_t,1);
+
       if (_param->_have_component_meta_predictor)
 	{
-      ALLOC1_SIGNAL_OUT(out_UPDATE_PREDICTOR_VAL      ,"predictor_val"      ,Tcontrol_t,1);
-      ALLOC1_SIGNAL_IN ( in_UPDATE_PREDICTOR_ACK      ,"predictor_ack"      ,Tcontrol_t,1);
-      ALLOC1_SIGNAL_OUT(out_UPDATE_PREDICTOR_ADDRESS  ,"predictor_address"  ,Taddress_t,_param->_size_instruction_address);
-      ALLOC1_SIGNAL_OUT(out_UPDATE_PREDICTOR_HISTORY  ,"predictor_history"  ,Thistory_t,_param->_size_history);
-      ALLOC1_SIGNAL_OUT(out_UPDATE_PREDICTOR_DIRECTION,"predictor_direction",Tcontrol_t,1);
+      ALLOC1_SIGNAL_OUT(out_UPDATE_PREDICTOR_VAL              ,"predictor_val"              ,Tcontrol_t,1);
+      ALLOC1_SIGNAL_IN ( in_UPDATE_PREDICTOR_ACK              ,"predictor_ack"              ,Tcontrol_t,1);
+      ALLOC1_SIGNAL_OUT(out_UPDATE_PREDICTOR_ADDRESS          ,"predictor_address"          ,Taddress_t,_param->_size_instruction_address);
+      ALLOC1_SIGNAL_OUT(out_UPDATE_PREDICTOR_HISTORY          ,"predictor_history"          ,Thistory_t,_param->_size_history);
+      ALLOC1_SIGNAL_OUT(out_UPDATE_PREDICTOR_DIRECTION        ,"predictor_direction"        ,Tcontrol_t,1);
+      ALLOC1_SIGNAL_OUT(out_UPDATE_PREDICTOR_PREDICTION_IFETCH,"predictor_prediction_ifetch",Tcontrol_t,1);
 	}
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_update);
     }
     
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue_deallocation.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue_deallocation.cpp	(revision 112)
@@ -7,4 +7,5 @@
 
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/include/Direction_Glue.h"
+#include "Behavioural/include/Allocation.h"
 
 namespace morpheo                    {
@@ -29,39 +30,38 @@
 	delete    in_NRESET;
 
-	delete []  in_PREDICT_VAL                  ;
-	delete [] out_PREDICT_ACK                  ;
-	delete []  in_PREDICT_ADDRESS_SRC          ;
-	delete []  in_PREDICT_STATIC               ;
-	delete []  in_PREDICT_LAST_TAKE            ;
-	if (_param->_have_port_history)
-	delete [] out_PREDICT_HISTORY              ;
-	delete [] out_PREDICT_DIRECTION            ;
-	if (_param->_have_component_meta_predictor)
-	  {
-	delete [] out_PREDICT_PREDICTOR_VAL        ;
-	delete []  in_PREDICT_PREDICTOR_ACK        ;
-	delete [] out_PREDICT_PREDICTOR_ADDRESS_SRC;
-	if (_param->_have_port_history)
-	delete []  in_PREDICT_PREDICTOR_HISTORY    ;
-	delete []  in_PREDICT_PREDICTOR_DIRECTION  ;
-	  }
-	delete []  in_UPDATE_VAL                ;
-	delete [] out_UPDATE_ACK                ;
-	delete []  in_UPDATE_ADDRESS            ;
-	if (_param->_have_port_history)
-	delete []  in_UPDATE_HISTORY            ;
-	delete []  in_UPDATE_DIRECTION          ;
-	if (_param->_have_component_meta_predictor)
-	  {
-	delete [] out_UPDATE_PREDICTOR_VAL      ;
-	delete []  in_UPDATE_PREDICTOR_ACK      ;
-	delete [] out_UPDATE_PREDICTOR_ADDRESS  ;
-	if (_param->_have_port_history)
-	delete [] out_UPDATE_PREDICTOR_HISTORY  ;
-	delete [] out_UPDATE_PREDICTOR_DIRECTION;
-	  }
+        DELETE1_SIGNAL( in_PREDICT_VAL                  , _param->_nb_inst_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_ACK                  , _param->_nb_inst_predict,1);
+        DELETE1_SIGNAL( in_PREDICT_ADDRESS_SRC          , _param->_nb_inst_predict,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_PREDICT_STATIC               , _param->_nb_inst_predict,1);
+        DELETE1_SIGNAL( in_PREDICT_LAST_TAKE            , _param->_nb_inst_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_HISTORY              , _param->_nb_inst_predict,_param->_size_history);
+        DELETE1_SIGNAL(out_PREDICT_DIRECTION            , _param->_nb_inst_predict,1);
+        if (_param->_have_component_meta_predictor)                                
+          {                                                                        
+        DELETE1_SIGNAL(out_PREDICT_PREDICTOR_VAL        , _param->_nb_inst_predict,1);
+        DELETE1_SIGNAL( in_PREDICT_PREDICTOR_ACK        , _param->_nb_inst_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_PREDICTOR_ADDRESS_SRC, _param->_nb_inst_predict,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_PREDICT_PREDICTOR_HISTORY    , _param->_nb_inst_predict,_param->_size_history);
+        DELETE1_SIGNAL( in_PREDICT_PREDICTOR_DIRECTION  , _param->_nb_inst_predict,1);
+          }
+
+        DELETE1_SIGNAL( in_UPDATE_VAL                        ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_ACK                        ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL( in_UPDATE_ADDRESS                    ,_param->_nb_inst_update,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_UPDATE_HISTORY                    ,_param->_nb_inst_update,_param->_size_history);
+        DELETE1_SIGNAL( in_UPDATE_DIRECTION                  ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL( in_UPDATE_PREDICTION_IFETCH          ,_param->_nb_inst_update,1);
+        if (_param->_have_component_meta_predictor)
+          {
+        DELETE1_SIGNAL(out_UPDATE_PREDICTOR_VAL              ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL( in_UPDATE_PREDICTOR_ACK              ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_PREDICTOR_ADDRESS          ,_param->_nb_inst_update,_param->_size_instruction_address);
+        DELETE1_SIGNAL(out_UPDATE_PREDICTOR_HISTORY          ,_param->_nb_inst_update,_param->_size_history);
+        DELETE1_SIGNAL(out_UPDATE_PREDICTOR_DIRECTION        ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_PREDICTOR_PREDICTION_IFETCH,_param->_nb_inst_update,1);
+          }
       }
+
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
-
     delete _component;
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue_genMealy_update.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue_genMealy_update.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Direction_Glue/src/Direction_Glue_genMealy_update.cpp	(revision 112)
@@ -28,9 +28,10 @@
     for (uint32_t i=0; i<_param->_nb_inst_update; i++)
       {
-	PORT_WRITE(out_UPDATE_PREDICTOR_VAL       [i], PORT_READ(in_UPDATE_VAL           [i]));
-	PORT_WRITE(out_UPDATE_ACK                 [i], PORT_READ(in_UPDATE_PREDICTOR_ACK [i]));
-	PORT_WRITE(out_UPDATE_PREDICTOR_ADDRESS   [i], PORT_READ(in_UPDATE_ADDRESS       [i]));
-	PORT_WRITE(out_UPDATE_PREDICTOR_HISTORY   [i], PORT_READ(in_UPDATE_HISTORY       [i]));
-	PORT_WRITE(out_UPDATE_PREDICTOR_DIRECTION [i], PORT_READ(in_UPDATE_DIRECTION     [i]));
+	PORT_WRITE(out_UPDATE_PREDICTOR_VAL               [i], PORT_READ(in_UPDATE_VAL               [i]));
+	PORT_WRITE(out_UPDATE_ACK                         [i], PORT_READ(in_UPDATE_PREDICTOR_ACK     [i]));
+	PORT_WRITE(out_UPDATE_PREDICTOR_ADDRESS           [i], PORT_READ(in_UPDATE_ADDRESS           [i]));
+	PORT_WRITE(out_UPDATE_PREDICTOR_HISTORY           [i], PORT_READ(in_UPDATE_HISTORY           [i]));
+	PORT_WRITE(out_UPDATE_PREDICTOR_DIRECTION         [i], PORT_READ(in_UPDATE_DIRECTION         [i]));
+	PORT_WRITE(out_UPDATE_PREDICTOR_PREDICTION_IFETCH [i], PORT_READ(in_UPDATE_PREDICTION_IFETCH [i]));
       }
     
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/SelfTest/src/test.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/SelfTest/src/test.cpp	(revision 112)
@@ -64,8 +64,10 @@
   ALLOC1_SC_SIGNAL(out_UPDATE_ACK                     ,"out_UPDATE_ACK                     ",Tcontrol_t,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL( in_UPDATE_HISTORY                 ," in_UPDATE_HISTORY                 ",Thistory_t,_param->_nb_inst_update);
+  ALLOC1_SC_SIGNAL( in_UPDATE_HISTORY_VAL             ," in_UPDATE_HISTORY_VAL             ",Tcontrol_t,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL( in_UPDATE_DIRECTION               ," in_UPDATE_DIRECTION               ",Tcontrol_t,_param->_nb_inst_update);
   ALLOC2_SC_SIGNAL(out_UPDATE_PREDICTOR_VAL           ,"out_UPDATE_PREDICTOR_VAL           ",Tcontrol_t,_param->_nb_predictor,_param->_nb_inst_update);
   ALLOC2_SC_SIGNAL( in_UPDATE_PREDICTOR_ACK           ," in_UPDATE_PREDICTOR_ACK           ",Tcontrol_t,_param->_nb_predictor,_param->_nb_inst_update);
   ALLOC2_SC_SIGNAL(out_UPDATE_PREDICTOR_HISTORY       ,"out_UPDATE_PREDICTOR_HISTORY       ",Thistory_t,_param->_nb_predictor,_param->_nb_inst_update);
+  ALLOC2_SC_SIGNAL(out_UPDATE_PREDICTOR_HISTORY_VAL   ,"out_UPDATE_PREDICTOR_HISTORY_VAL   ",Tcontrol_t,_param->_nb_predictor,_param->_nb_inst_update);
   ALLOC2_SC_SIGNAL(out_UPDATE_PREDICTOR_DIRECTION     ,"out_UPDATE_PREDICTOR_DIRECTION     ",Tcontrol_t,_param->_nb_predictor,_param->_nb_inst_update);
   ALLOC2_SC_SIGNAL(out_UPDATE_PREDICTOR_MISS          ,"out_UPDATE_PREDICTOR_MISS          ",Tcontrol_t,_param->_nb_predictor,_param->_nb_inst_update);
@@ -100,4 +102,5 @@
   INSTANCE1_SC_SIGNAL(_Meta_Predictor_Glue,out_UPDATE_ACK                     ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Meta_Predictor_Glue, in_UPDATE_HISTORY                 ,_param->_nb_inst_update);
+  INSTANCE1_SC_SIGNAL(_Meta_Predictor_Glue, in_UPDATE_HISTORY_VAL             ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Meta_Predictor_Glue, in_UPDATE_DIRECTION               ,_param->_nb_inst_update);
 
@@ -105,4 +108,5 @@
   INSTANCE2_SC_SIGNAL(_Meta_Predictor_Glue, in_UPDATE_PREDICTOR_ACK           ,_param->_nb_predictor,_param->_nb_inst_update);
   INSTANCE2_SC_SIGNAL(_Meta_Predictor_Glue,out_UPDATE_PREDICTOR_HISTORY       ,_param->_nb_predictor,_param->_nb_inst_update);
+  INSTANCE2_SC_SIGNAL(_Meta_Predictor_Glue,out_UPDATE_PREDICTOR_HISTORY_VAL   ,_param->_nb_predictor,_param->_nb_inst_update);
   INSTANCE2_SC_SIGNAL(_Meta_Predictor_Glue,out_UPDATE_PREDICTOR_DIRECTION     ,_param->_nb_predictor,_param->_nb_inst_update);
   for (uint32_t i=0; i<_param->_nb_predictor; ++i)
@@ -169,4 +173,5 @@
   DELETE1_SC_SIGNAL(out_UPDATE_ACK                     ,_param->_nb_inst_update);
   DELETE1_SC_SIGNAL( in_UPDATE_HISTORY                 ,_param->_nb_inst_update);
+  DELETE1_SC_SIGNAL( in_UPDATE_HISTORY_VAL             ,_param->_nb_inst_update);
   DELETE1_SC_SIGNAL( in_UPDATE_DIRECTION               ,_param->_nb_inst_update);
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h	(revision 112)
@@ -83,4 +83,5 @@
   public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_ACK                     ;//              [nb_inst_update]
   public    : SC_IN (Thistory_t)           **  in_UPDATE_HISTORY                 ;//              [nb_inst_update]
+  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_HISTORY_VAL             ;//              [nb_inst_update]
   public    : SC_IN (Tcontrol_t)           **  in_UPDATE_DIRECTION               ;//              [nb_inst_update]
 
@@ -88,4 +89,5 @@
   public    : SC_IN (Tcontrol_t)          ***  in_UPDATE_PREDICTOR_ACK           ;//[nb_predictor][nb_inst_update]
   public    : SC_OUT(Thistory_t)          *** out_UPDATE_PREDICTOR_HISTORY       ;//[nb_predictor][nb_inst_update]
+  public    : SC_OUT(Tcontrol_t)          *** out_UPDATE_PREDICTOR_HISTORY_VAL   ;//[nb_predictor][nb_inst_update]
   public    : SC_OUT(Tcontrol_t)          *** out_UPDATE_PREDICTOR_DIRECTION     ;//[nb_predictor][nb_inst_update]
   public    : SC_OUT(Tcontrol_t)          *** out_UPDATE_PREDICTOR_MISS          ;//[nb_predictor][nb_inst_update] // if update_on_prediction
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue.cpp	(revision 112)
@@ -101,6 +101,7 @@
 // 	sensitive << (*(in_CLOCK)).neg(); // don't need internal register
         for (uint32_t i=0; i<_param->_nb_inst_update; ++i)
-          sensitive << (*(in_UPDATE_HISTORY   [i]))
-                    << (*(in_UPDATE_DIRECTION [i]));
+          sensitive << (*(in_UPDATE_HISTORY     [i]))
+                    << (*(in_UPDATE_HISTORY_VAL [i]))
+                    << (*(in_UPDATE_DIRECTION   [i]));
 
 # ifdef SYSTEMCASS_SPECIFIC
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_allocation.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_allocation.cpp	(revision 112)
@@ -61,5 +61,5 @@
     // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("predict",IN,NORTH,_("Predict next address"),_param->_nb_inst_predict);
+      ALLOC1_INTERFACE_BEGIN("predict",IN,NORTH,_("Predict next address"),_param->_nb_inst_predict);
 
       ALLOC1_SIGNAL_IN ( in_PREDICT_VAL                    ,"VAL"          ,Tcontrol_t,1);
@@ -67,8 +67,10 @@
       ALLOC1_SIGNAL_OUT(out_PREDICT_HISTORY                ,"HISTORY"      ,Thistory_t,_param->_size_history);
       ALLOC1_SIGNAL_OUT(out_PREDICT_DIRECTION              ,"DIRECTION"    ,Tcontrol_t,1);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_predict);
     }
 
     {
-      ALLOC2_INTERFACE("predict_predictor",IN,NORTH,_("Predict next address"),_param->_nb_predictor,_param->_nb_inst_predict);
+      ALLOC2_INTERFACE_BEGIN("predict_predictor",IN,NORTH,_("Predict next address"),_param->_nb_predictor,_param->_nb_inst_predict);
       
       ALLOC2_SIGNAL_OUT(out_PREDICT_PREDICTOR_VAL          ,"VAL"          ,Tcontrol_t,1);
@@ -78,23 +80,31 @@
       ALLOC2_SIGNAL_OUT(out_PREDICT_PREDICTOR_DIRECTION_VAL,"DIRECTION_VAL",Tcontrol_t,(_param->_predictor_update_on_prediction [it1])?1:0);
       ALLOC2_SIGNAL_OUT(out_PREDICT_PREDICTOR_DIRECTION    ,"DIRECTION"    ,Tcontrol_t,(_param->_predictor_update_on_prediction [it1])?1:0);
+
+      ALLOC2_INTERFACE_END(_param->_nb_predictor,_param->_nb_inst_predict);
     }
 
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("update",IN,NORTH,_("Update predictor"),_param->_nb_inst_update);
+      ALLOC1_INTERFACE_BEGIN("update",IN,NORTH,_("Update predictor"),_param->_nb_inst_update);
       
       ALLOC1_SIGNAL_IN ( in_UPDATE_VAL                     ,"VAL"          ,Tcontrol_t,1);
       ALLOC1_SIGNAL_OUT(out_UPDATE_ACK                     ,"ACK"          ,Tcontrol_t,1);
       ALLOC1_SIGNAL_IN ( in_UPDATE_HISTORY                 ,"HISTORY"      ,Thistory_t,_param->_size_history);
+      ALLOC1_SIGNAL_IN ( in_UPDATE_HISTORY_VAL             ,"HISTORY_VAL"  ,Tcontrol_t,1);
       ALLOC1_SIGNAL_IN ( in_UPDATE_DIRECTION               ,"DIRECTION"    ,Tcontrol_t,1);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_update);
     }
     {
-      ALLOC2_INTERFACE("update_predictor",IN,NORTH,_("Update predictor"),_param->_nb_predictor,_param->_nb_inst_update);
+      ALLOC2_INTERFACE_BEGIN("update_predictor",IN,NORTH,_("Update predictor"),_param->_nb_predictor,_param->_nb_inst_update);
       
       ALLOC2_SIGNAL_OUT(out_UPDATE_PREDICTOR_VAL           ,"VAL"          ,Tcontrol_t,1);
       ALLOC2_SIGNAL_IN ( in_UPDATE_PREDICTOR_ACK           ,"ACK"          ,Tcontrol_t,1);
       ALLOC2_SIGNAL_OUT(out_UPDATE_PREDICTOR_HISTORY       ,"HISTORY"      ,Thistory_t,_param->_predictor_size_history[it1]);
+      ALLOC2_SIGNAL_OUT(out_UPDATE_PREDICTOR_HISTORY_VAL   ,"HISTORY_VAL"  ,Tcontrol_t,1);
       ALLOC2_SIGNAL_OUT(out_UPDATE_PREDICTOR_DIRECTION     ,"DIRECTION"    ,Tcontrol_t,1);
       ALLOC2_SIGNAL_OUT(out_UPDATE_PREDICTOR_MISS          ,"MISS"         ,Tcontrol_t,(_param->_predictor_update_on_prediction [it1])?1:0);
+
+      ALLOC2_INTERFACE_END(_param->_nb_predictor,_param->_nb_inst_update);
     }
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_deallocation.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_deallocation.cpp	(revision 112)
@@ -46,4 +46,5 @@
         DELETE1_SIGNAL(out_UPDATE_ACK                     ,_param->_nb_inst_update,1);
         DELETE1_SIGNAL( in_UPDATE_HISTORY                 ,_param->_nb_inst_update,_param->_size_history);
+        DELETE1_SIGNAL( in_UPDATE_HISTORY_VAL             ,_param->_nb_inst_update,1);
         DELETE1_SIGNAL( in_UPDATE_DIRECTION               ,_param->_nb_inst_update,1);
 
@@ -51,4 +52,5 @@
         DELETE2_SIGNAL( in_UPDATE_PREDICTOR_ACK           ,_param->_nb_predictor,_param->_nb_inst_update,1);
         DELETE2_SIGNAL(out_UPDATE_PREDICTOR_HISTORY       ,_param->_nb_predictor,_param->_nb_inst_update,_param->_predictor_size_history[it1]);
+        DELETE2_SIGNAL(out_UPDATE_PREDICTOR_HISTORY_VAL   ,_param->_nb_predictor,_param->_nb_inst_update,1);
         DELETE2_SIGNAL(out_UPDATE_PREDICTOR_DIRECTION     ,_param->_nb_predictor,_param->_nb_inst_update,1);
         DELETE2_SIGNAL(out_UPDATE_PREDICTOR_MISS          ,_param->_nb_predictor,_param->_nb_inst_update,(_param->_predictor_update_on_prediction [it1])?1:0);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_update.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_update.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_update.cpp	(revision 112)
@@ -29,6 +29,7 @@
     for (uint32_t i=0; i<_param->_nb_inst_update; ++i)
       {
-        Thistory_t history   = PORT_READ(in_UPDATE_HISTORY   [i]);
-        Tcontrol_t direction = PORT_READ(in_UPDATE_DIRECTION [i]);
+        Thistory_t history     = PORT_READ(in_UPDATE_HISTORY     [i]);
+        Tcontrol_t history_val = PORT_READ(in_UPDATE_HISTORY_VAL [i]);
+        Tcontrol_t direction   = PORT_READ(in_UPDATE_DIRECTION   [i]);
 
         switch (_param->_nb_predictor)
@@ -38,8 +39,9 @@
               Thistory_t history_0       =  history;
               Tcontrol_t direction_old_0 = (history_0>>_param->_predictor_history_shift_msb[0])&1;
-              PORT_WRITE(out_UPDATE_PREDICTOR_HISTORY   [0][i],history_0);
-              PORT_WRITE(out_UPDATE_PREDICTOR_DIRECTION [0][i],direction);
+              PORT_WRITE(out_UPDATE_PREDICTOR_HISTORY     [0][i],history_0);
+              PORT_WRITE(out_UPDATE_PREDICTOR_HISTORY_VAL [0][i],history_val);
+              PORT_WRITE(out_UPDATE_PREDICTOR_DIRECTION   [0][i],direction);
               if (_param->_predictor_update_on_prediction [0])
-              PORT_WRITE(out_UPDATE_PREDICTOR_MISS      [0][i],direction xor direction_old_0);
+              PORT_WRITE(out_UPDATE_PREDICTOR_MISS        [0][i],direction xor direction_old_0);
 
               break;
@@ -83,18 +85,22 @@
                                    (not direction and direction_old_0));
 
-              PORT_WRITE(out_UPDATE_PREDICTOR_DIRECTION [0][i],direction);
-              PORT_WRITE(out_UPDATE_PREDICTOR_DIRECTION [1][i],direction);
-              PORT_WRITE(out_UPDATE_PREDICTOR_DIRECTION [2][i],direction_new_2);
+              PORT_WRITE(out_UPDATE_PREDICTOR_DIRECTION   [0][i],direction);
+              PORT_WRITE(out_UPDATE_PREDICTOR_DIRECTION   [1][i],direction);
+              PORT_WRITE(out_UPDATE_PREDICTOR_DIRECTION   [2][i],direction_new_2);
 
               if (_param->_predictor_update_on_prediction [0])
-              PORT_WRITE(out_UPDATE_PREDICTOR_MISS      [0][i],direction       xor direction_old_0);
+              PORT_WRITE(out_UPDATE_PREDICTOR_MISS        [0][i],direction       xor direction_old_0);
               if (_param->_predictor_update_on_prediction [1])
-              PORT_WRITE(out_UPDATE_PREDICTOR_MISS      [1][i],direction       xor direction_old_1);
+              PORT_WRITE(out_UPDATE_PREDICTOR_MISS        [1][i],direction       xor direction_old_1);
               if (_param->_predictor_update_on_prediction [2])
-              PORT_WRITE(out_UPDATE_PREDICTOR_MISS      [2][i],direction_new_2 xor direction_old_2);
+              PORT_WRITE(out_UPDATE_PREDICTOR_MISS        [2][i],direction_new_2 xor direction_old_2);
 
-              PORT_WRITE(out_UPDATE_PREDICTOR_HISTORY   [0][i],history_0);
-              PORT_WRITE(out_UPDATE_PREDICTOR_HISTORY   [1][i],history_1);
-              PORT_WRITE(out_UPDATE_PREDICTOR_HISTORY   [2][i],history_2);
+              PORT_WRITE(out_UPDATE_PREDICTOR_HISTORY     [0][i],history_0);
+              PORT_WRITE(out_UPDATE_PREDICTOR_HISTORY     [1][i],history_1);
+              PORT_WRITE(out_UPDATE_PREDICTOR_HISTORY     [2][i],history_2);
+
+              PORT_WRITE(out_UPDATE_PREDICTOR_HISTORY_VAL [0][i],history_val);
+              PORT_WRITE(out_UPDATE_PREDICTOR_HISTORY_VAL [1][i],history_val);
+              PORT_WRITE(out_UPDATE_PREDICTOR_HISTORY_VAL [2][i],history_val);
 
               break;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/SelfTest/src/test.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/SelfTest/src/test.cpp	(revision 112)
@@ -60,4 +60,5 @@
   ALLOC1_SC_SIGNAL( in_UPDATE_ADDRESS       ," in_UPDATE_ADDRESS       ",Taddress_t,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL( in_UPDATE_HISTORY       ," in_UPDATE_HISTORY       ",Thistory_t,_param->_nb_inst_update);
+  ALLOC1_SC_SIGNAL( in_UPDATE_HISTORY_VAL   ," in_UPDATE_HISTORY_VAL   ",Tcontrol_t,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL( in_UPDATE_DIRECTION     ," in_UPDATE_DIRECTION     ",Tcontrol_t,_param->_nb_inst_update);
   
@@ -81,4 +82,5 @@
   INSTANCE1_SC_SIGNAL(_Meta_Predictor, in_UPDATE_ADDRESS       ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Meta_Predictor, in_UPDATE_HISTORY       ,_param->_nb_inst_update);
+  INSTANCE1_SC_SIGNAL(_Meta_Predictor, in_UPDATE_HISTORY_VAL   ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Meta_Predictor, in_UPDATE_DIRECTION     ,_param->_nb_inst_update);
 
@@ -137,4 +139,5 @@
   DELETE1_SC_SIGNAL( in_UPDATE_ADDRESS       ,_param->_nb_inst_update);
   DELETE1_SC_SIGNAL( in_UPDATE_HISTORY       ,_param->_nb_inst_update);
+  DELETE1_SC_SIGNAL( in_UPDATE_HISTORY_VAL   ,_param->_nb_inst_update);
   DELETE1_SC_SIGNAL( in_UPDATE_DIRECTION     ,_param->_nb_inst_update);
     }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/SelfTest/src/test.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/SelfTest/src/test.cpp	(revision 112)
@@ -63,4 +63,5 @@
   ALLOC1_SC_SIGNAL( in_UPDATE_ADDRESS       ," in_UPDATE_ADDRESS       ",Taddress_t,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL( in_UPDATE_HISTORY       ," in_UPDATE_HISTORY       ",Thistory_t,_param->_nb_inst_update);
+  ALLOC1_SC_SIGNAL( in_UPDATE_HISTORY_VAL   ," in_UPDATE_HISTORY_VAL   ",Tcontrol_t,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL( in_UPDATE_DIRECTION     ," in_UPDATE_DIRECTION     ",Tcontrol_t,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL( in_UPDATE_MISS          ," in_UPDATE_MISS          ",Tcontrol_t,_param->_nb_inst_update);
@@ -90,4 +91,5 @@
   INSTANCE1_SC_SIGNAL(_Two_Level_Branch_Predictor, in_UPDATE_ADDRESS       ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Two_Level_Branch_Predictor, in_UPDATE_HISTORY       ,_param->_nb_inst_update);
+  INSTANCE1_SC_SIGNAL(_Two_Level_Branch_Predictor, in_UPDATE_HISTORY_VAL   ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Two_Level_Branch_Predictor, in_UPDATE_DIRECTION     ,_param->_nb_inst_update);
   if (_param->_update_on_prediction)
@@ -155,11 +157,12 @@
               {
                 bool val = ((rand()%2)<percent_transaction_update);
-                in_UPDATE_VAL       [port]->write(val);
-                in_UPDATE_DIRECTION [port]->write(0);
+                in_UPDATE_VAL         [port]->write(val);
+                in_UPDATE_DIRECTION   [port]->write(0);
                 
                 if (_param->_update_on_prediction)
-                  in_UPDATE_MISS      [port]->write(1); // miss
-                in_UPDATE_HISTORY   [port]->write(0);
-                in_UPDATE_ADDRESS   [port]->write(bht_num_reg);
+                in_UPDATE_MISS        [port]->write(1); // miss
+                in_UPDATE_HISTORY     [port]->write(0);
+                in_UPDATE_HISTORY_VAL [port]->write(0);
+                in_UPDATE_ADDRESS     [port]->write(bht_num_reg);
                 
                 SC_START(0);
@@ -185,11 +188,12 @@
                   {
                     bool val = ((rand()%2)<percent_transaction_update);
-                    in_UPDATE_VAL       [port]->write(val);
-                    in_UPDATE_DIRECTION [port]->write(0);
+                    in_UPDATE_VAL         [port]->write(val);
+                    in_UPDATE_DIRECTION   [port]->write(0);
                     
                     if (_param->_update_on_prediction)
-                      in_UPDATE_MISS      [port]->write(1); // miss
-                    in_UPDATE_HISTORY   [port]->write(i<<_param->_bht_history_rshift);
-                    in_UPDATE_ADDRESS   [port]->write(pht_num_bank<<_param->_pht_address_bank_rshift);
+                      in_UPDATE_MISS        [port]->write(1); // miss
+                    in_UPDATE_HISTORY     [port]->write(i<<_param->_bht_history_rshift);
+                    in_UPDATE_HISTORY_VAL [port]->write(1);
+                    in_UPDATE_ADDRESS     [port]->write(pht_num_bank<<_param->_pht_address_bank_rshift);
                     
                     SC_START(0);
@@ -241,4 +245,5 @@
   DELETE1_SC_SIGNAL( in_UPDATE_ADDRESS       ,_param->_nb_inst_update);
   DELETE1_SC_SIGNAL( in_UPDATE_HISTORY       ,_param->_nb_inst_update);
+  DELETE1_SC_SIGNAL( in_UPDATE_HISTORY_VAL   ,_param->_nb_inst_update);
   DELETE1_SC_SIGNAL( in_UPDATE_DIRECTION     ,_param->_nb_inst_update);
   DELETE1_SC_SIGNAL( in_UPDATE_MISS          ,_param->_nb_inst_update);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/include/Parameters.h	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/include/Parameters.h	(revision 112)
@@ -59,4 +59,10 @@
   public : Taddress_t _pht_address_bank_rshift ;
 
+  public : Thistory_t _bht_init_take           ;
+  public : Thistory_t _bht_init_ntake          ;
+
+  public : Thistory_t _pht_init_take           ;
+  public : Thistory_t _pht_init_ntake          ;
+
     //-----[ methods ]-----------------------------------------------------------
   public : Parameters  (uint32_t nb_inst_predict       ,
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/include/Two_Level_Branch_Predictor.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/include/Two_Level_Branch_Predictor.h	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/include/Two_Level_Branch_Predictor.h	(revision 112)
@@ -80,4 +80,5 @@
   public    : SC_IN (Taddress_t)           **  in_UPDATE_ADDRESS       ;//[nb_inst_update]
   public    : SC_IN (Thistory_t)           **  in_UPDATE_HISTORY       ;//[nb_inst_update]
+  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_HISTORY_VAL   ;//[nb_inst_update]
   public    : SC_IN (Tcontrol_t)           **  in_UPDATE_DIRECTION     ;//[nb_inst_update]
   public    : SC_IN (Tcontrol_t)           **  in_UPDATE_MISS          ;//[nb_inst_update] // if update_on_prediction
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/src/Parameters.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/src/Parameters.cpp	(revision 112)
@@ -44,6 +44,6 @@
     _bht_nb_shifter          = (have_bht)?(bht_nb_shifter  ):0;
     _have_pht                = have_pht              ;
-    _pht_size_counter        = (have_pht)?(pht_size_counter      ):0;
-    _pht_nb_counter          = (have_pht)?(pht_nb_counter        ):0;
+    _pht_size_counter        = (have_pht)?(pht_size_counter):0;
+    _pht_nb_counter          = (have_pht)?(pht_nb_counter  ):0;
     _pht_size_address_share  = (have_bht and have_pht)?(pht_size_address_share):0;
     _update_on_prediction    = update_on_prediction  ;
@@ -54,6 +54,9 @@
     test();                  
 
+    // history to update_prediction_table :
+    //  MSB : pht_history
+    //  LSB : bht_history
+                       
     _size_history            = _bht_size_shifter + _pht_size_counter;
-                             
     _bht_history_mask        = gen_mask<Thistory_t>(_bht_size_shifter);
     _bht_history_rshift      = 0;
@@ -67,4 +70,14 @@
     log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _pht_history_rshift       : %d",_pht_history_rshift);
 
+    _bht_init_take           = (Thistory_t)(-1)&_bht_history_mask;
+    _bht_init_ntake          = 0;
+    _pht_init_take           = (1<<(_pht_size_counter-1)); // size = 4 : 1000/2
+    _pht_init_ntake          = _pht_init_take-1;           // size = 4 : 0111/2
+
+    log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _bht_init_take            : 0x%x",_bht_init_take );
+    log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _bht_init_ntake           : 0x%x",_bht_init_ntake);
+    log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _pht_init_take            : 0x%x",_pht_init_take );
+    log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * _pht_init_ntake           : 0x%x",_pht_init_ntake);
+    
     if (_have_bht)
       {
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_allocation.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_allocation.cpp	(revision 112)
@@ -59,5 +59,5 @@
     // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("predict",IN,WEST,_("Predict direction interface"),_param->_nb_inst_predict);
+      ALLOC1_INTERFACE_BEGIN("predict",IN,WEST,_("Predict direction interface"),_param->_nb_inst_predict);
 
       ALLOC1_VALACK_IN ( in_PREDICT_VAL          ,VAL);
@@ -71,9 +71,11 @@
       ALLOC1_SIGNAL_IN ( in_PREDICT_DIRECTION    ,"DIRECTION"    ,Tcontrol_t,1                    );
         }
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_predict);
     }
 
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("update",IN,WEST,_("Update direction interface"),_param->_nb_inst_update);
+      ALLOC1_INTERFACE_BEGIN("update",IN,WEST,_("Update direction interface"),_param->_nb_inst_update);
 
       ALLOC1_VALACK_IN ( in_UPDATE_VAL           ,VAL);
@@ -81,8 +83,13 @@
       ALLOC1_SIGNAL_IN ( in_UPDATE_ADDRESS       ,"ADDRESS"      ,Taddress_t,_param->_size_address);
       ALLOC1_SIGNAL_IN ( in_UPDATE_HISTORY       ,"HISTORY"      ,Thistory_t,_param->_size_history);
+      ALLOC1_SIGNAL_IN ( in_UPDATE_HISTORY_VAL   ,"HISTORY_VAL"  ,Tcontrol_t,1                    );
       ALLOC1_SIGNAL_IN ( in_UPDATE_DIRECTION     ,"DIRECTION"    ,Tcontrol_t,1                    );
       if (_param->_update_on_prediction)
       ALLOC1_SIGNAL_IN ( in_UPDATE_MISS          ,"MISS"         ,Tcontrol_t,1                    );
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_update);
     }
+
+    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
     if (usage_is_set(_usage,USE_SYSTEMC))
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_deallocation.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_deallocation.cpp	(revision 112)
@@ -46,4 +46,5 @@
         DELETE1_SIGNAL( in_UPDATE_ADDRESS       ,_param->_nb_inst_update,_param->_size_address);
         DELETE1_SIGNAL( in_UPDATE_HISTORY       ,_param->_nb_inst_update,_param->_size_history);
+        DELETE1_SIGNAL( in_UPDATE_HISTORY_VAL   ,_param->_nb_inst_update,1                    );
         DELETE1_SIGNAL( in_UPDATE_DIRECTION     ,_param->_nb_inst_update,1                    );
         if (_param->_update_on_prediction)                              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_transition.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/Two_Level_Branch_Predictor/src/Two_Level_Branch_Predictor_transition.cpp	(revision 112)
@@ -90,16 +90,24 @@
             {
               log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * UPDATE [%d]",i);
+              log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * miss             : %d",PORT_READ(in_UPDATE_MISS [i]));
+              log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * update_on_predict: %d",_param->_update_on_prediction);
               
               // Update if 
               //  * update_on_prediction and miss
               //  * not update_on_prediction
-              if (not _param->_update_on_prediction or (_param->_update_on_prediction and PORT_READ(in_UPDATE_MISS [i])))
-                {
-                  Taddress_t address     = PORT_READ(in_UPDATE_ADDRESS   [i]);
-                  Thistory_t history     = PORT_READ(in_UPDATE_HISTORY   [i]);
-                  Tcontrol_t direction   = PORT_READ(in_UPDATE_DIRECTION [i])&1;
+              Tcontrol_t history_val = PORT_READ(in_UPDATE_HISTORY_VAL [i]);
+
+              if (not _param->_update_on_prediction or 
+                  (_param->_update_on_prediction and PORT_READ(in_UPDATE_MISS [i])) or
+                  not history_val // static_prediction
+                  )
+                {
+                  Taddress_t address     = PORT_READ(in_UPDATE_ADDRESS     [i]);
+                  Thistory_t history     = PORT_READ(in_UPDATE_HISTORY     [i]);
+                  Tcontrol_t direction   = PORT_READ(in_UPDATE_DIRECTION   [i])&1;
 
                   log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * address          : %.8x",address);
                   log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * direction        : %d",direction);
+                  log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * history_val      : %d",direction);
 
                   Thistory_t pht_bht_history = 0;
@@ -107,16 +115,20 @@
                   if (_param->_have_bht)
                     {
+                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * bht");
+
                       Thistory_t bht_history = (history>>_param->_bht_history_rshift)&_param->_bht_history_mask;
                       Thistory_t bht_num_reg = address & _param->_bht_address_mask;
                       
+                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"    * bht_history (old): %x",bht_history);
+                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"    * bht_num_reg      : %x",bht_num_reg);
+                      
+                      // BHT : shift register
+                      if (not history_val)
+                        bht_history = (direction)?_param->_bht_init_take:_param->_bht_init_ntake;
+                      else
+                        bht_history = ((bht_history<<1) | direction)&_param->_bht_history_mask ;
+                        
                       pht_bht_history = bht_history;
-                      
-                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * bht_history (old): %x",bht_history);
-                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * bht_num_reg      : %x",bht_num_reg);
-                      
-                      // BHT : shift register
-                      
-                      bht_history = ((bht_history<<1) | direction)&_param->_bht_history_mask ;
-                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * bht_history (new): %x",bht_history);
+                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"    * bht_history (new): %x",bht_history);
                       reg_BHT [bht_num_reg]               = bht_history;
                     }
@@ -124,17 +136,22 @@
                   if (_param->_have_pht)
                     {
+                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * pht");
+
                       Thistory_t pht_history = (history>>_param->_pht_history_rshift)&_param->_pht_history_mask;
                       Thistory_t pht_num_reg = pht_bht_history xor ((address&_param->_pht_address_share_mask)<<_param->_pht_address_share_lshift);
                       Thistory_t pht_num_bank= (address>>_param->_pht_address_bank_rshift)&_param->_pht_address_bank_mask;
                       
-                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * bht_history (old): %x",pht_bht_history);
-                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * pht_history (old): %x",pht_history);
-                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * pht_num_reg      : %x",pht_num_reg);
-                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * pht_num_bank     : %x",pht_num_bank);
+                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"    * bht_history (old): %x",pht_bht_history);
+                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"    * pht_history (old): %x",pht_history);
+                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"    * pht_num_reg      : %x",pht_num_reg);
+                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"    * pht_num_bank     : %x",pht_num_bank);
                       
                       // PHT : saturation counter
-                      pht_history = (direction==1)?((pht_history<_param->_pht_counter_max)?(pht_history+1):(pht_history)):((pht_history>0)?(pht_history-1):(pht_history));
-                      
-                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * pht_history (new): %x",pht_history);
+                      if (not history_val)
+                        pht_history = (direction)?_param->_pht_init_take:_param->_pht_init_ntake;
+                      else
+                        pht_history = (direction==1)?((pht_history<_param->_pht_counter_max)?(pht_history+1):(pht_history)):((pht_history>0)?(pht_history-1):(pht_history));
+                      
+                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"    * pht_history (new): %x",pht_history);
                       
                       reg_PHT [pht_num_bank][pht_num_reg] = pht_history;
@@ -145,5 +162,5 @@
 
 #if defined(DEBUG) and DEBUG_Two_Level_Branch_Predictor and (DEBUG >= DEBUG_TRACE)
-    if (0)
+    if (1)
     {
       log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  * Dump Two_Level_Branch_Predictor");
@@ -180,20 +197,27 @@
           for (uint32_t num_bank=0; num_bank <_param->_pht_nb_bank; ++num_bank)
             {
-              log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  [%.4d]",num_bank);
-
-              for (uint32_t i=0; i<_param->_pht_size_bank; i+=limit)
-                {
-                  std::string str = "";
+              if (_param->_pht_size_bank == 1)
+                {
+                  log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  [%.4d][0000] %4x",num_bank,reg_PHT[num_bank][0]);
+                }
+              else
+                {
+                  log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"  [%.4d]",num_bank);
                   
-                  for (uint32_t j=0; j<limit; j++)
+                  for (uint32_t i=0; i<_param->_pht_size_bank; i+=limit)
                     {
-                      uint32_t index = i+j;
-                      if (index >= _param->_pht_nb_counter)
-                        break;
-                      else
-                        str+=toString("[%.4d] %.4x ",index,reg_PHT[num_bank][index]);
+                      std::string str = "";
+                      
+                      for (uint32_t j=0; j<limit; j++)
+                        {
+                          uint32_t index = i+j;
+                          if (index >= _param->_pht_size_bank)
+                            break;
+                          else
+                            str+=toString("[%.4d] %.4x ",index,reg_PHT[num_bank][index]);
+                        }
+                      
+                      log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"    %s",str.c_str());
                     }
-                  
-                  log_printf(TRACE,Two_Level_Branch_Predictor,FUNCTION,"    %s",str.c_str());
                 }
             }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/include/Meta_Predictor.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/include/Meta_Predictor.h	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/include/Meta_Predictor.h	(revision 112)
@@ -80,4 +80,5 @@
   public    : SC_IN (Taddress_t)           **  in_UPDATE_ADDRESS       ;//[nb_inst_update]
   public    : SC_IN (Thistory_t)           **  in_UPDATE_HISTORY       ;//[nb_inst_update]
+  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_HISTORY_VAL   ;//[nb_inst_update]
   public    : SC_IN (Tcontrol_t)           **  in_UPDATE_DIRECTION     ;//[nb_inst_update]
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/src/Meta_Predictor_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/src/Meta_Predictor_allocation.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/src/Meta_Predictor_allocation.cpp	(revision 112)
@@ -58,5 +58,5 @@
     // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("predict",IN,WEST,_("Predict direction interface"),_param->_nb_inst_predict);
+      ALLOC1_INTERFACE_BEGIN("predict",IN,WEST,_("Predict direction interface"),_param->_nb_inst_predict);
 
       ALLOC1_VALACK_IN ( in_PREDICT_VAL          ,VAL);
@@ -65,9 +65,11 @@
       ALLOC1_SIGNAL_OUT(out_PREDICT_DIRECTION    ,"DIRECTION"    ,Tcontrol_t,1                    );
       ALLOC1_SIGNAL_OUT(out_PREDICT_HISTORY      ,"HISTORY"      ,Thistory_t,_param->_size_history);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_predict);
     }
 
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("update",IN,WEST,_("Update direction interface"),_param->_nb_inst_update);
+      ALLOC1_INTERFACE_BEGIN("update",IN,WEST,_("Update direction interface"),_param->_nb_inst_update);
 
       ALLOC1_VALACK_IN ( in_UPDATE_VAL           ,VAL);
@@ -75,5 +77,8 @@
       ALLOC1_SIGNAL_IN ( in_UPDATE_ADDRESS       ,"ADDRESS"      ,Taddress_t,_param->_size_address);
       ALLOC1_SIGNAL_IN ( in_UPDATE_HISTORY       ,"HISTORY"      ,Thistory_t,_param->_size_history);
+      ALLOC1_SIGNAL_IN ( in_UPDATE_HISTORY_VAL   ,"HISTORY_VAL"  ,Tcontrol_t,1                    );
       ALLOC1_SIGNAL_IN ( in_UPDATE_DIRECTION     ,"DIRECTION"    ,Tcontrol_t,1                    );
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_update);
     }
     
@@ -218,4 +223,6 @@
           COMPONENT_MAP(_component,src , "in_UPDATE_"                          +toString(j)+"_HISTORY"      ,
                                    dest,"out_UPDATE_PREDICTOR_"+toString(i)+"_"+toString(j)+"_HISTORY"      );
+          COMPONENT_MAP(_component,src , "in_UPDATE_"                          +toString(j)+"_HISTORY_VAL"  ,
+                                   dest,"out_UPDATE_PREDICTOR_"+toString(i)+"_"+toString(j)+"_HISTORY_VAL"  );
           if (_param->_predictor_update_on_prediction [i])
           COMPONENT_MAP(_component,src , "in_UPDATE_"                          +toString(j)+"_MISS"         ,
@@ -286,19 +293,22 @@
 #endif
 
-          PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_VAL"      ,
-                              dest, "in_UPDATE_"+toString(i)+"_VAL"      );
-          PORT_MAP(_component,src ,"out_UPDATE_"+toString(i)+"_ACK"      ,
-                              dest,"out_UPDATE_"+toString(i)+"_ACK"      );
-          PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_HISTORY"  ,
-                              dest, "in_UPDATE_"+toString(i)+"_HISTORY"  );
-          PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_DIRECTION",
-                              dest, "in_UPDATE_"+toString(i)+"_DIRECTION");
-        }
-      
-      //  out_UPDATE_PREDICTOR_VAL       -> two_level_branch_predictor. in_UPDATE_PREDICTOR_VAL      
-      //   in_UPDATE_PREDICTOR_ACK       -> two_level_branch_predictor.out_UPDATE_PREDICTOR_ACK      
-      //  out_UPDATE_PREDICTOR_HISTORY   -> two_level_branch_predictor. in_UPDATE_PREDICTOR_HISTORY  
-      //  out_UPDATE_PREDICTOR_DIRECTION -> two_level_branch_predictor. in_UPDATE_PREDICTOR_DIRECTION
-      //  out_UPDATE_PREDICTOR_MISS      -> two_level_branch_predictor. in_UPDATE_PREDICTOR_MISS     
+          PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_VAL"        ,
+                              dest, "in_UPDATE_"+toString(i)+"_VAL"        );
+          PORT_MAP(_component,src ,"out_UPDATE_"+toString(i)+"_ACK"        ,
+                              dest,"out_UPDATE_"+toString(i)+"_ACK"        );
+          PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_HISTORY"    ,
+                              dest, "in_UPDATE_"+toString(i)+"_HISTORY"    );
+          PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_HISTORY_VAL",
+                              dest, "in_UPDATE_"+toString(i)+"_HISTORY_VAL");
+          PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_DIRECTION"  ,
+                              dest, "in_UPDATE_"+toString(i)+"_DIRECTION"  );
+        }
+      
+      //  out_UPDATE_PREDICTOR_VAL        -> two_level_branch_predictor. in_UPDATE_PREDICTOR_VAL      
+      //   in_UPDATE_PREDICTOR_ACK        -> two_level_branch_predictor.out_UPDATE_PREDICTOR_ACK      
+      //  out_UPDATE_PREDICTOR_HISTORY    -> two_level_branch_predictor. in_UPDATE_PREDICTOR_HISTORY  
+      //  out_UPDATE_PREDICTOR_HISTORY_VAL-> two_level_branch_predictor. in_UPDATE_PREDICTOR_HISTORY  
+      //  out_UPDATE_PREDICTOR_DIRECTION  -> two_level_branch_predictor. in_UPDATE_PREDICTOR_DIRECTION
+      //  out_UPDATE_PREDICTOR_MISS       -> two_level_branch_predictor. in_UPDATE_PREDICTOR_MISS     
 
     }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/src/Meta_Predictor_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/src/Meta_Predictor_deallocation.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/src/Meta_Predictor_deallocation.cpp	(revision 112)
@@ -40,4 +40,5 @@
         DELETE1_SIGNAL( in_UPDATE_ADDRESS       ,_param->_nb_inst_update,_param->_size_address);
         DELETE1_SIGNAL( in_UPDATE_HISTORY       ,_param->_nb_inst_update,_param->_size_history);
+        DELETE1_SIGNAL( in_UPDATE_HISTORY_VAL   ,_param->_nb_inst_update,1                    );
         DELETE1_SIGNAL( in_UPDATE_DIRECTION     ,_param->_nb_inst_update,1                    );
       }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/src/Parameters.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/Meta_Predictor/src/Parameters.cpp	(revision 112)
@@ -64,4 +64,8 @@
     if (_have_meta_predictor)
       _predictor_update_on_prediction [_nb_predictor-1] = false;
+
+//     // All predictor can't update on prediction ....
+//     for (uint32_t i=0; i<_nb_predictor; ++i)
+//       _predictor_update_on_prediction [i] = false;
 
     _param_two_level_branch_predictor = new morpheo::behavioural::core::multi_front_end::front_end::prediction_unit::direction::meta_predictor::two_level_branch_predictor::Parameters * [_nb_predictor];
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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/include/Direction.h	(revision 112)
@@ -63,18 +63,19 @@
 
     // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  public    : SC_IN (Tcontrol_t)           **  in_PREDICT_VAL        ;
-  public    : SC_OUT(Tcontrol_t)           ** out_PREDICT_ACK        ;
-  public    : SC_IN (Taddress_t)           **  in_PREDICT_ADDRESS_SRC;
-  public    : SC_IN (Tcontrol_t)           **  in_PREDICT_STATIC     ;
-  public    : SC_IN (Tcontrol_t)           **  in_PREDICT_LAST_TAKE  ;
-  public    : SC_OUT(Thistory_t)           ** out_PREDICT_HISTORY    ;
-  public    : SC_OUT(Tcontrol_t)           ** out_PREDICT_DIRECTION  ;
+  public    : SC_IN (Tcontrol_t)           **  in_PREDICT_VAL             ;
+  public    : SC_OUT(Tcontrol_t)           ** out_PREDICT_ACK             ;
+  public    : SC_IN (Taddress_t)           **  in_PREDICT_ADDRESS_SRC     ;
+  public    : SC_IN (Tcontrol_t)           **  in_PREDICT_STATIC          ;
+  public    : SC_IN (Tcontrol_t)           **  in_PREDICT_LAST_TAKE       ;
+  public    : SC_OUT(Thistory_t)           ** out_PREDICT_HISTORY         ;
+  public    : SC_OUT(Tcontrol_t)           ** out_PREDICT_DIRECTION       ;
 
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_VAL        ;
-  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_ACK        ;
-  public    : SC_IN (Taddress_t)           **  in_UPDATE_ADDRESS    ;
-  public    : SC_IN (Thistory_t)           **  in_UPDATE_HISTORY    ;
-  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_DIRECTION  ;
+  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_VAL              ;
+  public    : SC_OUT(Tcontrol_t)           ** out_UPDATE_ACK              ;
+  public    : SC_IN (Taddress_t)           **  in_UPDATE_ADDRESS          ;
+  public    : SC_IN (Thistory_t)           **  in_UPDATE_HISTORY          ;
+  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_DIRECTION        ;
+  public    : SC_IN (Tcontrol_t)           **  in_UPDATE_PREDICTION_IFETCH;
 
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/src/Direction_allocation.cpp	(revision 112)
@@ -49,5 +49,5 @@
 							 ,IN
 							 ,SOUTH,
-							 "Generalist interface"
+							 _("Generalist interface")
 #endif
 							 );
@@ -59,5 +59,5 @@
     // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("predict", IN, SOUTH, "Interface predict",_param->_nb_inst_predict);
+      ALLOC1_INTERFACE_BEGIN("predict", IN, SOUTH, _("Interface predict"),_param->_nb_inst_predict);
 
       ALLOC1_VALACK_IN ( in_PREDICT_VAL        ,VAL);
@@ -68,15 +68,20 @@
       ALLOC1_SIGNAL_OUT(out_PREDICT_HISTORY    ,"history"    ,Thistory_t,_param->_size_history);
       ALLOC1_SIGNAL_OUT(out_PREDICT_DIRECTION  ,"direction"  ,Tcontrol_t,1);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_predict);
     }
 
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("update", IN, SOUTH, "Interface update",_param->_nb_inst_update);
-
-      ALLOC1_VALACK_IN ( in_UPDATE_VAL      ,VAL);
-      ALLOC1_VALACK_OUT(out_UPDATE_ACK      ,ACK);
-      ALLOC1_SIGNAL_IN ( in_UPDATE_ADDRESS  ,"address"  ,Taddress_t,_param->_size_instruction_address);
-      ALLOC1_SIGNAL_IN ( in_UPDATE_HISTORY  ,"history"  ,Thistory_t,_param->_size_history);
-      ALLOC1_SIGNAL_IN ( in_UPDATE_DIRECTION,"direction",Tcontrol_t,1);
+      ALLOC1_INTERFACE_BEGIN("update", IN, SOUTH, _("Interface update"),_param->_nb_inst_update);
+
+      ALLOC1_VALACK_IN ( in_UPDATE_VAL              ,VAL);
+      ALLOC1_VALACK_OUT(out_UPDATE_ACK              ,ACK);
+      ALLOC1_SIGNAL_IN ( in_UPDATE_ADDRESS          ,"address"          ,Taddress_t,_param->_size_instruction_address);
+      ALLOC1_SIGNAL_IN ( in_UPDATE_HISTORY          ,"history"          ,Thistory_t,_param->_size_history);
+      ALLOC1_SIGNAL_IN ( in_UPDATE_DIRECTION        ,"direction"        ,Tcontrol_t,1);
+      ALLOC1_SIGNAL_IN ( in_UPDATE_PREDICTION_IFETCH,"prediction_ifetch",Tcontrol_t,1);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_update);
     }
 
@@ -183,4 +188,6 @@
           COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+          "_HISTORY"    ,
                                    dest,"out_UPDATE_"+toString(i)+"_PREDICTOR_HISTORY"    );
+          COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+          "_HISTORY_VAL"      ,
+                                   dest,"out_UPDATE_"+toString(i)+"_PREDICTOR_PREDICTION_IFETCH");
         }
     }
@@ -212,25 +219,25 @@
 #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)+"_ADDRESS_SRC",
-		              dest, "in_PREDICT_"+toString(i)+"_ADDRESS_SRC");
-	  PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_STATIC"     ,
-		              dest, "in_PREDICT_"+toString(i)+"_STATIC"     );
-	  PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_LAST_TAKE"  ,
-		              dest, "in_PREDICT_"+toString(i)+"_LAST_TAKE"  );
-	  if (_param->_have_port_history)
-	  PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_HISTORY"    ,
-		              dest,"out_PREDICT_"+toString(i)+"_HISTORY"    );
-	  PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_DIRECTION"  ,
-		              dest,"out_PREDICT_"+toString(i)+"_DIRECTION"  );
-
-// 	  PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_PREDICTOR_VAL"        ,dest,"out_PREDICT_"+toString(i)+"_PREDICTOR_VAL"        );
-// 	  PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_PREDICTOR_ACK"        ,dest, "in_PREDICT_"+toString(i)+"_PREDICTOR_ACK"        );
-// 	  PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_PREDICTOR_ADDRESS_SRC",dest,"out_PREDICT_"+toString(i)+"_PREDICTOR_ADDRESS_SRC");
-// 	  PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_PREDICTOR_HISTORY"    ,dest, "in_PREDICT_"+toString(i)+"_PREDICTOR_HISTORY"    );
-// 	  PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_PREDICTOR_DIRECTION"  ,dest, "in_PREDICT_"+toString(i)+"_PREDICTOR_DIRECTION"  );
+	  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)+"_ADDRESS_SRC"      ,
+		              dest, "in_PREDICT_"+toString(i)+"_ADDRESS_SRC"      );
+	  PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_STATIC"           ,
+		              dest, "in_PREDICT_"+toString(i)+"_STATIC"           );
+	  PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_LAST_TAKE"        ,
+		              dest, "in_PREDICT_"+toString(i)+"_LAST_TAKE"        );
+	  if (_param->_have_port_history)                                         
+	  PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_HISTORY"          ,
+		              dest,"out_PREDICT_"+toString(i)+"_HISTORY"          );
+	  PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_DIRECTION"        ,
+		              dest,"out_PREDICT_"+toString(i)+"_DIRECTION"        );
+
+// 	  PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_PREDICTOR_VAL"              ,dest,"out_PREDICT_"+toString(i)+"_PREDICTOR_VAL"              );
+// 	  PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_PREDICTOR_ACK"              ,dest, "in_PREDICT_"+toString(i)+"_PREDICTOR_ACK"              );
+// 	  PORT_MAP(_component,src ,"out_PREDICT_"+toString(i)+"_PREDICTOR_ADDRESS_SRC"      ,dest,"out_PREDICT_"+toString(i)+"_PREDICTOR_ADDRESS_SRC"      );
+// 	  PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_PREDICTOR_HISTORY"          ,dest, "in_PREDICT_"+toString(i)+"_PREDICTOR_HISTORY"          );
+// 	  PORT_MAP(_component,src , "in_PREDICT_"+toString(i)+"_PREDICTOR_DIRECTION"        ,dest, "in_PREDICT_"+toString(i)+"_PREDICTOR_DIRECTION"        );
 	}
       
@@ -243,20 +250,25 @@
 #endif
 
-	  PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_VAL"      ,
-		              dest, "in_UPDATE_"+toString(i)+"_VAL"      );
-	  PORT_MAP(_component,src ,"out_UPDATE_"+toString(i)+"_ACK"      ,
-		              dest,"out_UPDATE_"+toString(i)+"_ACK"      );
-	  PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_ADDRESS"  ,
-		              dest, "in_UPDATE_"+toString(i)+"_ADDRESS"  );
+	  PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_VAL"              ,
+		              dest, "in_UPDATE_"+toString(i)+"_VAL"              );
+	  PORT_MAP(_component,src ,"out_UPDATE_"+toString(i)+"_ACK"              ,
+		              dest,"out_UPDATE_"+toString(i)+"_ACK"              );
+	  PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_ADDRESS"          ,
+		              dest, "in_UPDATE_"+toString(i)+"_ADDRESS"          );
 	  if (_param->_have_port_history)
-	  PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_HISTORY"  ,
-		              dest, "in_UPDATE_"+toString(i)+"_HISTORY"  );
-	  PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_DIRECTION",
-		              dest, "in_UPDATE_"+toString(i)+"_DIRECTION");
-// 	  PORT_MAP(_component,src ,"out_UPDATE_"+toString(i)+"_PREDICTOR_VAL"      ,dest,"out_UPDATE_"+toString(i)+"_PREDICTOR_VAL"      );
-// 	  PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_PREDICTOR_ACK"      ,dest, "in_UPDATE_"+toString(i)+"_PREDICTOR_ACK"      );
-// 	  PORT_MAP(_component,src ,"out_UPDATE_"+toString(i)+"_PREDICTOR_ADDRESS"  ,dest,"out_UPDATE_"+toString(i)+"_PREDICTOR_ADDRESS"  );
-// 	  PORT_MAP(_component,src ,"out_UPDATE_"+toString(i)+"_PREDICTOR_HISTORY"  ,dest,"out_UPDATE_"+toString(i)+"_PREDICTOR_HISTORY"  );
-// 	  PORT_MAP(_component,src ,"out_UPDATE_"+toString(i)+"_PREDICTOR_DIRECTION",dest,"out_UPDATE_"+toString(i)+"_PREDICTOR_DIRECTION");
+	  PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_HISTORY"          ,
+		              dest, "in_UPDATE_"+toString(i)+"_HISTORY"          );
+	  PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_DIRECTION"        ,
+		              dest, "in_UPDATE_"+toString(i)+"_DIRECTION"        );
+	  PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_PREDICTION_IFETCH",
+		              dest, "in_UPDATE_"+toString(i)+"_PREDICTION_IFETCH");
+
+// 	  PORT_MAP(_component,src ,"out_UPDATE_"+toString(i)+"_PREDICTOR_VAL"              ,dest,"out_UPDATE_"+toString(i)+"_PREDICTOR_VAL"              );
+// 	  PORT_MAP(_component,src , "in_UPDATE_"+toString(i)+"_PREDICTOR_ACK"              ,dest, "in_UPDATE_"+toString(i)+"_PREDICTOR_ACK"              );
+// 	  PORT_MAP(_component,src ,"out_UPDATE_"+toString(i)+"_PREDICTOR_ADDRESS"          ,dest,"out_UPDATE_"+toString(i)+"_PREDICTOR_ADDRESS"          );
+// 	  PORT_MAP(_component,src ,"out_UPDATE_"+toString(i)+"_PREDICTOR_HISTORY"          ,dest,"out_UPDATE_"+toString(i)+"_PREDICTOR_HISTORY"          );
+// 	  PORT_MAP(_component,src ,"out_UPDATE_"+toString(i)+"_PREDICTOR_DIRECTION"        ,dest,"out_UPDATE_"+toString(i)+"_PREDICTOR_DIRECTION"        );
+// 	  PORT_MAP(_component,src ,"out_UPDATE_"+toString(i)+"_PREDICTOR_PREDICTION_IFETCH",dest,"out_UPDATE_"+toString(i)+"_PREDICTOR_PREDICTION_IFETCH");
+
       }
     }
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/src/Direction_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/src/Direction_deallocation.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/src/Direction_deallocation.cpp	(revision 112)
@@ -7,4 +7,5 @@
 
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Direction/include/Direction.h"
+#include "Behavioural/include/Allocation.h"
 
 namespace morpheo                    {
@@ -28,18 +29,18 @@
 	delete    in_NRESET;
 
-	delete []  in_PREDICT_VAL             ;
-	delete [] out_PREDICT_ACK             ;
-	delete []  in_PREDICT_ADDRESS_SRC     ;
-	delete []  in_PREDICT_STATIC          ;
-	delete []  in_PREDICT_LAST_TAKE       ;
-	if (_param->_have_port_history)
-	delete [] out_PREDICT_HISTORY         ;
-	delete [] out_PREDICT_DIRECTION       ;
-	delete []  in_UPDATE_VAL              ;
-	delete [] out_UPDATE_ACK              ;
-	delete []  in_UPDATE_ADDRESS          ;
-	if (_param->_have_port_history)
-	delete []  in_UPDATE_HISTORY          ;
-	delete []  in_UPDATE_DIRECTION        ;
+        DELETE1_SIGNAL( in_PREDICT_VAL        ,_param->_nb_inst_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_ACK        ,_param->_nb_inst_predict,1);
+        DELETE1_SIGNAL( in_PREDICT_ADDRESS_SRC,_param->_nb_inst_predict,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_PREDICT_STATIC     ,_param->_nb_inst_predict,1);
+        DELETE1_SIGNAL( in_PREDICT_LAST_TAKE  ,_param->_nb_inst_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_HISTORY    ,_param->_nb_inst_predict,_param->_size_history);
+        DELETE1_SIGNAL(out_PREDICT_DIRECTION  ,_param->_nb_inst_predict,1);
+
+        DELETE1_SIGNAL( in_UPDATE_VAL              ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_ACK              ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL( in_UPDATE_ADDRESS          ,_param->_nb_inst_update,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_UPDATE_HISTORY          ,_param->_nb_inst_update,_param->_size_history);
+        DELETE1_SIGNAL( in_UPDATE_DIRECTION        ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL( in_UPDATE_PREDICTION_IFETCH,_param->_nb_inst_update,1);
       }
     // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/SelfTest/src/test.cpp	(revision 112)
@@ -208,7 +208,7 @@
     {
       if (_param->_have_port_inst_ifetch_ptr)
-        INSTANCE_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_INST_IFETCH_PTR [i]);
+        INSTANCE0_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_INST_IFETCH_PTR [i]);
       if (_param->_have_port_depth)
-	INSTANCE_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [i]);
+	INSTANCE0_SC_SIGNAL(_Prediction_unit_Glue,out_PREDICT_BRANCH_UPDATE_PREDICTION_ID [i]);
     }
 
@@ -350,9 +350,9 @@
 //       if (_param->_have_port_depth)
 // 	{
-// 	  INSTANCE_SC_SIGNAL(_Prediction_unit_Glue, in_DEPTH_UPT_TAIL      [i]);
-// 	  INSTANCE_SC_SIGNAL(_Prediction_unit_Glue,out_DEPTH_TAIL          [i]);
+// 	  INSTANCE0_SC_SIGNAL(_Prediction_unit_Glue, in_DEPTH_UPT_TAIL      [i]);
+// 	  INSTANCE0_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,out_DEPTH_NB_BRANCH     [i]);
+// 	  INSTANCE0_SC_SIGNAL(_Prediction_unit_Glue, in_DEPTH_UPT_NB_BRANCH [i]);
+// 	  INSTANCE0_SC_SIGNAL(_Prediction_unit_Glue,out_DEPTH_NB_BRANCH     [i]);
 //     }
 
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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Prediction_unit_Glue/src/Prediction_unit_Glue_allocation.cpp	(revision 112)
@@ -47,5 +47,5 @@
                                                          ,IN
                                                          ,SOUTH,
-                                                         "Generalist interface"
+                                                         _("Generalist interface")
 #endif
                                                          );
@@ -58,5 +58,5 @@
     {
       {
-        ALLOC1_INTERFACE("predict",IN,SOUTH,"Interface with ifetch unit",_param->_nb_context);
+        ALLOC1_INTERFACE_BEGIN("predict",IN,SOUTH,_("Interface with ifetch unit"),_param->_nb_context);
         
         ALLOC1_VALACK_IN ( in_PREDICT_VAL                        ,VAL);
@@ -70,12 +70,17 @@
         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);
-      }
-      {
-        ALLOC2_INTERFACE("predict",IN,SOUTH,"Interface with ifetch unit",_param->_nb_context,_param->_nb_instruction[it1]);
+
+        ALLOC1_INTERFACE_END(_param->_nb_context);
+      }
+      {
+        ALLOC2_INTERFACE_BEGIN("predict",IN,SOUTH,_("Interface with ifetch unit"),_param->_nb_context,_param->_nb_instruction[it1]);
+
         _ALLOC2_SIGNAL_OUT(out_PREDICT_INSTRUCTION_ENABLE         ,"instruction_enable"         ,Tcontrol_t         ,1,_param->_nb_context,_param->_nb_instruction[it1]);
-      }
-      
-      {
-        ALLOC1_INTERFACE("predict_btb",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_branch_predict);
+
+        ALLOC2_INTERFACE_END(_param->_nb_context,_param->_nb_instruction[it1]);
+      }
+      
+      {
+        ALLOC1_INTERFACE_BEGIN("predict_btb",OUT,NORTH,_("Interface with ifetch unit"),_param->_nb_inst_branch_predict);
         
         ALLOC1_VALACK_OUT(out_PREDICT_BTB_VAL         ,VAL);
@@ -89,8 +94,10 @@
 //      ALLOC1_SIGNAL_IN ( in_PREDICT_BTB_LAST_TAKE   ,"last_take"   ,Tcontrol_t         ,1);
         ALLOC1_SIGNAL_IN ( in_PREDICT_BTB_IS_ACCURATE ,"is_accurate" ,Tcontrol_t         ,1);
-      }
-      
-      {
-        ALLOC1_INTERFACE("predict_dir",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_branch_predict);
+
+        ALLOC1_INTERFACE_END(_param->_nb_inst_branch_predict);
+      }
+      
+      {
+        ALLOC1_INTERFACE_BEGIN("predict_dir",OUT,NORTH,_("Interface with ifetch unit"),_param->_nb_inst_branch_predict);
         
         ALLOC1_VALACK_OUT(out_PREDICT_DIR_VAL        ,VAL);
@@ -101,8 +108,10 @@
 //      ALLOC1_SIGNAL_IN ( in_PREDICT_DIR_HISTORY    ,"history"    ,Thistory_t         ,_param->_size_history);
         ALLOC1_SIGNAL_IN ( in_PREDICT_DIR_DIRECTION  ,"direction"  ,Tcontrol_t         ,1);
-      }
-      
-      {
-        ALLOC1_INTERFACE("predict_ras",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_branch_predict);
+
+        ALLOC1_INTERFACE_END(_param->_nb_inst_branch_predict);
+      }
+      
+      {
+        ALLOC1_INTERFACE_BEGIN("predict_ras",OUT,NORTH,_("Interface with ifetch unit"),_param->_nb_inst_branch_predict);
         
         ALLOC1_VALACK_OUT(out_PREDICT_RAS_VAL         ,VAL);
@@ -114,8 +123,10 @@
         ALLOC1_SIGNAL_IN ( in_PREDICT_RAS_ADDRESS_POP ,"address_pop" ,Taddress_t         ,_param->_size_instruction_address);
 //      ALLOC1_SIGNAL_IN ( in_PREDICT_RAS_INDEX       ,"index"       ,Tptr_t             ,_param->_size_ras_index);
-      }
-      
-      {
-        ALLOC1_INTERFACE("predict_upt",OUT,NORTH,"Interface with ifetch unit",_param->_nb_inst_branch_predict);
+
+        ALLOC1_INTERFACE_END(_param->_nb_inst_branch_predict);
+      }
+      
+      {
+        ALLOC1_INTERFACE_BEGIN("predict_upt",OUT,NORTH,_("Interface with ifetch unit"),_param->_nb_inst_branch_predict);
         
         ALLOC1_VALACK_OUT(out_PREDICT_UPT_VAL             ,VAL);
@@ -131,4 +142,6 @@
         ALLOC1_SIGNAL_OUT(out_PREDICT_UPT_RAS_ADDRESS     ,"ras_address"     ,Taddress_t         ,_param->_size_instruction_address);
 //      ALLOC1_SIGNAL_OUT(out_PREDICT_UPT_RAS_INDEX       ,"ras_index"       ,Tptr_t             ,_param->_size_ras_index);
+
+        ALLOC1_INTERFACE_END(_param->_nb_inst_branch_predict);
       }
     }
@@ -137,5 +150,5 @@
     {
       {
-        ALLOC2_INTERFACE("decod",IN,SOUTH,"Interface with decod unit",_param->_nb_decod_unit,_param->_nb_inst_decod[it1]);
+        ALLOC2_INTERFACE_BEGIN("decod",IN,SOUTH,_("Interface with decod unit"),_param->_nb_decod_unit,_param->_nb_inst_decod[it1]);
         
         _ALLOC2_VALACK_IN ( in_DECOD_VAL                        ,VAL,_param->_nb_decod_unit,_param->_nb_inst_decod[it1]);
@@ -150,8 +163,10 @@
         _ALLOC2_SIGNAL_IN ( in_DECOD_ADDRESS_DEST               ,"address_dest"               ,Taddress_t         ,_param->_size_instruction_address         ,_param->_nb_decod_unit,_param->_nb_inst_decod[it1]);
         _ALLOC2_SIGNAL_OUT(out_DECOD_CAN_CONTINUE               ,"can_continue"               ,Tcontrol_t         ,1                                         ,_param->_nb_decod_unit,_param->_nb_inst_decod[it1]);
-      }
-
-      {
-        ALLOC1_INTERFACE("decod_btb",OUT,NORTH,"Interface with decod unit",_param->_nb_inst_branch_decod);
+
+        ALLOC2_INTERFACE_END(_param->_nb_decod_unit,_param->_nb_inst_decod[it1]);
+      }
+
+      {
+        ALLOC1_INTERFACE_BEGIN("decod_btb",OUT,NORTH,_("Interface with decod unit"),_param->_nb_inst_branch_decod);
 
         ALLOC1_VALACK_OUT(out_DECOD_BTB_VAL            ,VAL);
@@ -164,8 +179,10 @@
         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_INTERFACE_END(_param->_nb_inst_branch_decod);
+      }
+
+      {
+        ALLOC1_INTERFACE_BEGIN("decod_ras",OUT,NORTH,_("Interface with decod unit"),_param->_nb_inst_branch_decod);
                                                                                       
         ALLOC1_VALACK_OUT(out_DECOD_RAS_VAL            ,VAL);
@@ -178,8 +195,10 @@
 //      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_INTERFACE_END(_param->_nb_inst_branch_decod);
+      }
+
+      {
+        ALLOC1_INTERFACE_BEGIN("decod_upt",OUT,NORTH,_("Interface with decod unit"),_param->_nb_inst_branch_decod);
                                                                                       
         ALLOC1_VALACK_OUT(out_DECOD_UPT_VAL                 ,VAL);
@@ -197,4 +216,6 @@
         ALLOC1_SIGNAL_OUT(out_DECOD_UPT_IS_ACCURATE         ,"is_accurate"         ,Tcontrol_t         ,1); 
         ALLOC1_SIGNAL_IN ( in_DECOD_UPT_CAN_CONTINUE        ,"can_continue"        ,Tcontrol_t         ,1); 
+
+        ALLOC1_INTERFACE_END(_param->_nb_inst_branch_decod);
       }
     }
@@ -203,5 +224,5 @@
     {
       {
-        ALLOC1_INTERFACE("update_btb",OUT,SOUTH,"Interface with update unit",_param->_nb_inst_branch_update);
+        ALLOC1_INTERFACE_BEGIN("update_btb",OUT,SOUTH,_("Interface with update unit"),_param->_nb_inst_branch_update);
 
         ALLOC1_VALACK_OUT(out_UPDATE_BTB_VAL                  ,VAL);
@@ -213,8 +234,10 @@
 //      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_INTERFACE_END(_param->_nb_inst_branch_update);
+      }
+
+      {
+        ALLOC1_INTERFACE_BEGIN("update_dir",OUT,NORTH,_("Interface with update unit"),_param->_nb_inst_branch_update);
 
         ALLOC1_VALACK_OUT(out_UPDATE_DIR_VAL                  ,VAL);
@@ -223,8 +246,10 @@
 //      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_INTERFACE_END(_param->_nb_inst_branch_update);
+      }
+
+      {
+        ALLOC1_INTERFACE_BEGIN("update_ras",OUT,NORTH,_("Interface with update unit"),_param->_nb_inst_branch_update);
 
         ALLOC1_VALACK_OUT(out_UPDATE_RAS_VAL                  ,VAL);
@@ -236,8 +261,10 @@
 //      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_INTERFACE_END(_param->_nb_inst_branch_update);
+      }
+
+      {
+        ALLOC1_INTERFACE_BEGIN("update_upt",IN ,NORTH,_("Interface with update unit"),_param->_nb_inst_branch_update);
 
         ALLOC1_VALACK_IN ( in_UPDATE_UPT_VAL                  ,VAL);
@@ -257,4 +284,6 @@
 //      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);
+
+        ALLOC1_INTERFACE_END(_param->_nb_inst_branch_update);
       }
     }
@@ -262,5 +291,5 @@
 //  // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~            
 //  {
-//    ALLOC1_INTERFACE("depth",IN,NORTH,"Interface with depth",_param->_nb_context);
+//    ALLOC1_INTERFACE_BEGIN("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+1);
@@ -268,4 +297,6 @@
 //    ALLOC1_SIGNAL_OUT(out_DEPTH_NB_BRANCH    ,"nb_branch"    ,Tdepth_t,_param->_size_depth+1);
 //    ALLOC1_SIGNAL_OUT(out_DEPTH_TAIL         ,"tail"         ,Tdepth_t,_param->_size_depth);
+//
+//    ALLOC1_INTERFACE_END(_param->_nb_context);
 //  }
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_allocation.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_allocation.cpp	(revision 112)
@@ -46,5 +46,5 @@
 							 ,IN
 							 ,SOUTH,
-							 "Generalist interface"
+							 _("Generalist interface")
 #endif
 							 );
@@ -56,5 +56,5 @@
     // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("predict", IN, SOUTH, "predict's interface", _param->_nb_inst_predict);
+      ALLOC1_INTERFACE_BEGIN("predict", IN, SOUTH, _("predict's interface"), _param->_nb_inst_predict);
 
       ALLOC1_VALACK_IN ( in_PREDICT_VAL         ,VAL);
@@ -66,9 +66,11 @@
       ALLOC1_SIGNAL_OUT(out_PREDICT_ADDRESS_POP ,"address_pop" ,Taddress_t,_param->_size_instruction_address);
       ALLOC1_SIGNAL_OUT(out_PREDICT_INDEX       ,"index"       ,Tptr_t    ,_param->_size_index);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_predict);
     }
 
     // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("decod", IN, SOUTH, "decod's interface", _param->_nb_inst_decod);
+      ALLOC1_INTERFACE_BEGIN("decod", IN, SOUTH, _("decod's interface"), _param->_nb_inst_decod);
 
       ALLOC1_VALACK_IN ( in_DECOD_VAL            ,VAL);
@@ -81,9 +83,11 @@
       ALLOC1_SIGNAL_OUT(out_DECOD_INDEX          ,"index"          ,Tptr_t    ,_param->_size_index);
       ALLOC1_SIGNAL_IN ( in_DECOD_MISS_PREDICTION,"miss_prediction",Tcontrol_t,1);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_decod);
     }
 
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("update", IN, SOUTH, "update's interface", _param->_nb_inst_update);
+      ALLOC1_INTERFACE_BEGIN("update", IN, SOUTH, _("update's interface"), _param->_nb_inst_update);
 
       ALLOC1_VALACK_IN ( in_UPDATE_VAL              ,VAL);
@@ -96,4 +100,6 @@
       ALLOC1_SIGNAL_IN ( in_UPDATE_MISS_PREDICTION  ,"miss_prediction"  ,Tcontrol_t,1);
       ALLOC1_SIGNAL_IN ( in_UPDATE_PREDICTION_IFETCH,"prediction_ifetch",Tcontrol_t,1);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_update);
     }
 
@@ -101,22 +107,19 @@
       {
     // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+        ALLOC2(reg_stack            ,ras_entry_t,_param->_nb_context,_param->_size_queue [it1]);
 
-    reg_stack = new ras_entry_t * [_param->_nb_context];
-    for (uint32_t i=0; i<_param->_nb_context; i++)
-      reg_stack [i] = new ras_entry_t [_param->_size_queue [i]];
+        ALLOC1(reg_TOP              ,Tptr_t     ,_param->_nb_context);
+//      ALLOC1(reg_BOTTOM           ,Tptr_t     ,_param->_nb_context);
+        ALLOC1(reg_NB_ELT           ,Tptr_t     ,_param->_nb_context);
 
-    reg_TOP              = new Tptr_t     [_param->_nb_context];
-//  reg_BOTTOM           = new Tptr_t     [_param->_nb_context];
-    reg_NB_ELT           = new Tptr_t     [_param->_nb_context];
+        ALLOC1(reg_PREDICT_TOP      ,Tptr_t     ,_param->_nb_context);
+//      ALLOC1(reg_PREDICT_BOTTOM   ,Tptr_t     ,_param->_nb_context);
+        ALLOC1(reg_PREDICT_NB_ELT   ,Tptr_t     ,_param->_nb_context);
 
-    reg_PREDICT_TOP      = new Tptr_t     [_param->_nb_context];
-//  reg_PREDICT_BOTTOM   = new Tptr_t     [_param->_nb_context];
-    reg_PREDICT_NB_ELT   = new Tptr_t     [_param->_nb_context];
-
-    internal_PREDICT_ACK = new Tcontrol_t [_param->_nb_inst_predict];
-    internal_PREDICT_HIT = new Tcontrol_t [_param->_nb_inst_predict];
-    internal_DECOD_ACK   = new Tcontrol_t [_param->_nb_inst_decod  ];
-    internal_DECOD_HIT   = new Tcontrol_t [_param->_nb_inst_decod  ];
-    internal_UPDATE_ACK  = new Tcontrol_t [_param->_nb_inst_update ];
+        ALLOC1(internal_PREDICT_ACK ,Tcontrol_t ,_param->_nb_inst_predict);
+        ALLOC1(internal_PREDICT_HIT ,Tcontrol_t ,_param->_nb_inst_predict);
+        ALLOC1(internal_DECOD_ACK   ,Tcontrol_t ,_param->_nb_inst_decod  );
+        ALLOC1(internal_DECOD_HIT   ,Tcontrol_t ,_param->_nb_inst_decod  );
+        ALLOC1(internal_UPDATE_ACK  ,Tcontrol_t ,_param->_nb_inst_update );
       }
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_deallocation.cpp	(revision 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Return_Address_Stack/src/Return_Address_Stack_deallocation.cpp	(revision 112)
@@ -59,20 +59,19 @@
         
         // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-        
-        for (uint32_t i=0; i<_param->_nb_context; i++)
-          delete [] reg_stack [i];
-        delete [] reg_stack;
-        delete [] reg_TOP;
-//      delete [] reg_BOTTOM;
-        delete [] reg_NB_ELT;
-        delete [] reg_PREDICT_TOP;
-//      delete [] reg_PREDICT_BOTTOM;
-        delete [] reg_PREDICT_NB_ELT;
-        
-        delete [] internal_PREDICT_ACK;
-        delete [] internal_PREDICT_HIT;
-        delete [] internal_DECOD_ACK;
-        delete [] internal_DECOD_HIT;
-        delete [] internal_UPDATE_ACK;
+        DELETE2(reg_stack            ,_param->_nb_context,_param->_size_queue [it1]);
+
+        DELETE1(reg_TOP              ,_param->_nb_context);
+//      DELETE1(reg_BOTTOM           ,_param->_nb_context);
+        DELETE1(reg_NB_ELT           ,_param->_nb_context);
+
+        DELETE1(reg_PREDICT_TOP      ,_param->_nb_context);
+//      DELETE1(reg_PREDICT_BOTTOM   ,_param->_nb_context);
+        DELETE1(reg_PREDICT_NB_ELT   ,_param->_nb_context);
+
+        DELETE1(internal_PREDICT_ACK ,_param->_nb_inst_predict);
+        DELETE1(internal_PREDICT_HIT ,_param->_nb_inst_predict);
+        DELETE1(internal_DECOD_ACK   ,_param->_nb_inst_decod  );
+        DELETE1(internal_DECOD_HIT   ,_param->_nb_inst_decod  );
+        DELETE1(internal_UPDATE_ACK  ,_param->_nb_inst_update );
       }
 
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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/src/test.cpp	(revision 112)
@@ -126,4 +126,5 @@
   ALLOC1_SC_SIGNAL(out_UPDATE_MISS_PREDICTION         ,"out_UPDATE_MISS_PREDICTION         ",Tcontrol_t         ,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL(out_UPDATE_DIRECTION_GOOD          ,"out_UPDATE_DIRECTION_GOOD          ",Tcontrol_t         ,_param->_nb_inst_update);
+  ALLOC1_SC_SIGNAL(out_UPDATE_PREDICTION_IFETCH       ,"out_UPDATE_PREDICTION_IFETCH       ",Tcontrol_t         ,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL(out_UPDATE_BTB_VAL                 ,"out_UPDATE_BTB_VAL                 ",Tcontrol_t         ,_param->_nb_inst_update);
   ALLOC1_SC_SIGNAL(out_UPDATE_BTB_ADDRESS_SRC         ,"out_UPDATE_BTB_ADDRESS_SRC         ",Taddress_t         ,_param->_nb_inst_update);
@@ -137,5 +138,4 @@
   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);
-  ALLOC1_SC_SIGNAL(out_UPDATE_RAS_PREDICTION_IFETCH   ,"out_UPDATE_RAS_PREDICTION_IFETCH   ",Tcontrol_t         ,_param->_nb_inst_update);
 
   ALLOC1_SC_SIGNAL( in_EVENT_VAL                      ," in_EVENT_VAL                      ",Tcontrol_t         ,_param->_nb_context);
@@ -223,4 +223,5 @@
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_MISS_PREDICTION         ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_DIRECTION_GOOD          ,_param->_nb_inst_update);
+  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_PREDICTION_IFETCH       ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_BTB_VAL                 ,_param->_nb_inst_update);
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_UPDATE_BTB_ADDRESS_SRC         ,_param->_nb_inst_update);
@@ -235,5 +236,4 @@
   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);
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_EVENT_VAL                      ,_param->_nb_context);
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_EVENT_ACK                      ,_param->_nb_context);
@@ -575,4 +575,5 @@
                       TEST(Tcontrol_t         ,out_UPDATE_MISS_PREDICTION       [port]->read(),it_upt->miss_commit);
                       TEST(Tcontrol_t         ,out_UPDATE_DIRECTION_GOOD        [port]->read(),it_upt->take_good);
+                      TEST(Tcontrol_t         ,out_UPDATE_PREDICTION_IFETCH     [port]->read(),not it_upt->miss_ifetch);
                       TEST(Tcontrol_t         ,out_UPDATE_BTB_VAL               [port]->read(),update_btb(it_upt->condition));
                       if (update_btb(it_upt->condition))
@@ -593,5 +594,4 @@
                       TEST(Taddress_t         ,out_UPDATE_RAS_ADDRESS           [port]->read(),it_upt->ras_address);
                       TEST(Tptr_t             ,out_UPDATE_RAS_INDEX             [port]->read(),it_upt->ras_index);
-                      TEST(Tcontrol_t         ,out_UPDATE_RAS_PREDICTION_IFETCH [port]->read(),not it_upt->miss_ifetch);
                         }
                       ++ it_upt;
@@ -906,5 +906,5 @@
                       TEST(Taddress_t         ,out_UPDATE_RAS_ADDRESS           [port]->read(),it_upt->ras_address);
                       TEST(Tptr_t             ,out_UPDATE_RAS_INDEX             [port]->read(),it_upt->ras_index);
-                      TEST(Tcontrol_t         ,out_UPDATE_RAS_PREDICTION_IFETCH [port]->read(),not it_upt->miss_ifetch);
+                      TEST(Tcontrol_t         ,out_UPDATE_PREDICTION_IFETCH     [port]->read(),not it_upt->miss_ifetch);
                         }
                       ++ it_upt;
@@ -1281,5 +1281,5 @@
                       TEST(Taddress_t         ,out_UPDATE_RAS_ADDRESS           [port]->read(),it_ufpt->ras_address);
                       TEST(Tptr_t             ,out_UPDATE_RAS_INDEX             [port]->read(),it_ufpt->ras_index);
-                      TEST(Tcontrol_t         ,out_UPDATE_RAS_PREDICTION_IFETCH [port]->read(),not it_ufpt->miss_ifetch);
+                      TEST(Tcontrol_t         ,out_UPDATE_PREDICTION_IFETCH     [port]->read(),not it_ufpt->miss_ifetch);
                         }
 		    }
@@ -1353,5 +1353,5 @@
                       TEST(Taddress_t         ,out_UPDATE_RAS_ADDRESS           [port]->read(),it_upt->ras_address);
                       TEST(Tptr_t             ,out_UPDATE_RAS_INDEX             [port]->read(),it_upt->ras_index);
-                      TEST(Tcontrol_t         ,out_UPDATE_RAS_PREDICTION_IFETCH [port]->read(),not it_upt->miss_ifetch);
+                      TEST(Tcontrol_t         ,out_UPDATE_PREDICTION_IFETCH     [port]->read(),not it_upt->miss_ifetch);
                         }
                       ++ it_upt;
@@ -1888,5 +1888,5 @@
                               TEST(Taddress_t         ,out_UPDATE_RAS_ADDRESS           [port]->read(),it_ufpt->ras_address);
                               TEST(Tptr_t             ,out_UPDATE_RAS_INDEX             [port]->read(),it_ufpt->ras_index);
-                              TEST(Tcontrol_t         ,out_UPDATE_RAS_PREDICTION_IFETCH [port]->read(),not it_ufpt->miss_ifetch);
+                              TEST(Tcontrol_t         ,out_UPDATE_PREDICTION_IFETCH     [port]->read(),not it_ufpt->miss_ifetch);
                             }
                         }
@@ -1976,5 +1976,5 @@
                         TEST(Taddress_t         ,out_UPDATE_RAS_ADDRESS           [port]->read(),it_upt->ras_address);
                         TEST(Tptr_t             ,out_UPDATE_RAS_INDEX             [port]->read(),it_upt->ras_index);
-                        TEST(Tcontrol_t         ,out_UPDATE_RAS_PREDICTION_IFETCH [port]->read(),not it_upt->miss_ifetch);
+                        TEST(Tcontrol_t         ,out_UPDATE_PREDICTION_IFETCH     [port]->read(),not it_upt->miss_ifetch);
                           }
 
@@ -2103,5 +2103,5 @@
                         TEST(Taddress_t         ,out_UPDATE_RAS_ADDRESS           [port]->read(),it_upt->ras_address);
                         TEST(Tptr_t             ,out_UPDATE_RAS_INDEX             [port]->read(),it_upt->ras_index);
-                        TEST(Tcontrol_t         ,out_UPDATE_RAS_PREDICTION_IFETCH [port]->read(),not it_upt->miss_ifetch);
+                        TEST(Tcontrol_t         ,out_UPDATE_PREDICTION_IFETCH     [port]->read(),not it_upt->miss_ifetch);
                           }
 
@@ -2544,5 +2544,5 @@
                               TEST(Taddress_t         ,out_UPDATE_RAS_ADDRESS           [port]->read(),it_ufpt->ras_address);
                               TEST(Tptr_t             ,out_UPDATE_RAS_INDEX             [port]->read(),it_ufpt->ras_index);
-                              TEST(Tcontrol_t         ,out_UPDATE_RAS_PREDICTION_IFETCH [port]->read(),not it_ufpt->miss_ifetch);
+                              TEST(Tcontrol_t         ,out_UPDATE_PREDICTION_IFETCH     [port]->read(),not it_ufpt->miss_ifetch);
                             }
                         }
@@ -2637,5 +2637,5 @@
                         TEST(Taddress_t         ,out_UPDATE_RAS_ADDRESS           [port]->read(),it_upt->ras_address);
                         TEST(Tptr_t             ,out_UPDATE_RAS_INDEX             [port]->read(),it_upt->ras_index);
-                        TEST(Tcontrol_t         ,out_UPDATE_RAS_PREDICTION_IFETCH [port]->read(),not it_upt->miss_ifetch);
+                        TEST(Tcontrol_t         ,out_UPDATE_PREDICTION_IFETCH     [port]->read(),not it_upt->miss_ifetch);
                           }
 //                         -- it_upt;
@@ -2763,5 +2763,5 @@
                         TEST(Taddress_t         ,out_UPDATE_RAS_ADDRESS           [port]->read(),it_upt->ras_address);
                         TEST(Tptr_t             ,out_UPDATE_RAS_INDEX             [port]->read(),it_upt->ras_index);
-                        TEST(Tcontrol_t         ,out_UPDATE_RAS_PREDICTION_IFETCH [port]->read(),not it_upt->miss_ifetch);
+                        TEST(Tcontrol_t         ,out_UPDATE_PREDICTION_IFETCH     [port]->read(),not it_upt->miss_ifetch);
                           }
 
@@ -2870,4 +2870,5 @@
   delete [] out_UPDATE_MISS_PREDICTION      ;
   delete [] out_UPDATE_DIRECTION_GOOD       ;
+  delete [] out_UPDATE_PREDICTION_IFETCH    ;
   delete [] out_UPDATE_BTB_VAL              ;
   delete [] out_UPDATE_BTB_ADDRESS_SRC      ;
@@ -2881,5 +2882,4 @@
   delete [] out_UPDATE_RAS_ADDRESS          ;
   delete [] out_UPDATE_RAS_INDEX            ;
-  delete [] out_UPDATE_RAS_PREDICTION_IFETCH;
 
   DELETE1_SC_SIGNAL( in_EVENT_VAL                      ,_param->_nb_context);
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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Types.h	(revision 112)
@@ -88,5 +88,7 @@
   public : Tcontrol_t          _ifetch_prediction; // not in ufpt
 
+    // to branchement_log_file
   public : bool                _retire_ok        ;
+  public : bool                _miss_prediction  ;
   };
 
@@ -115,5 +117,5 @@
 #define pop_ras(cond)     ((cond == BRANCH_CONDITION_READ_STACK                    ))
 
-#define need_update(cond) update_ras(cond)
+#define need_update(cond) (update_ras(cond) or update_dir(cond))
 
 }; // end namespace update_prediction_table
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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h	(revision 112)
@@ -130,4 +130,5 @@
   public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_MISS_PREDICTION         ; //[nb_inst_update]
   public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_DIRECTION_GOOD          ; //[nb_inst_update]
+  public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_PREDICTION_IFETCH       ; //[nb_inst_update]
   public    : SC_OUT(Tcontrol_t         )  ** out_UPDATE_BTB_VAL                 ; //[nb_inst_update]
   public    : SC_OUT(Taddress_t         )  ** out_UPDATE_BTB_ADDRESS_SRC         ; //[nb_inst_update]
@@ -141,5 +142,4 @@
   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_PREDICTION_IFETCH   ; //[nb_inst_update]
 
     // ~~~~~[ Interface : "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -183,7 +183,8 @@
   private   : bool                          * reg_EVENT_VAL                      ; //[nb_context]
   private   : uint32_t                      * reg_EVENT_UPT_PTR                  ; //[nb_context]
+  private   : bool                          * reg_EVENT_UPT_FULL                 ; //[nb_context]
 
   private   : event_state_t                 * reg_EVENT_STATE                    ; //[nb_context]
-  private   : event_source_t                * reg_EVENT_SOURCE                   ; //[nb_context]
+  private   : bool                          * reg_EVENT_IS_BRANCH                ; //[nb_context]
   private   : Tdepth_t                      * reg_EVENT_DEPTH                    ; //[nb_context]
   private   : Taddress_t                    * reg_EVENT_ADDRESS_SRC              ; //[nb_context] // Address branch
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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp	(revision 112)
@@ -48,5 +48,5 @@
 							 ,IN
 							 ,SOUTH,
-							 "Generalist interface"
+							 _("Generalist interface")
 #endif
 							 );
@@ -58,5 +58,5 @@
     // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("predict", IN,SOUTH, "predict", _param->_nb_inst_predict);
+      ALLOC1_INTERFACE_BEGIN("predict", IN,SOUTH, _("predict"), _param->_nb_inst_predict);
       
       ALLOC1_VALACK_IN ( in_PREDICT_VAL                 ,VAL);
@@ -72,9 +72,11 @@
       ALLOC1_SIGNAL_IN ( in_PREDICT_RAS_ADDRESS         ,"ras_address"         ,Taddress_t         ,_param->_size_instruction_address);
       ALLOC1_SIGNAL_IN ( in_PREDICT_RAS_INDEX           ,"ras_index"           ,Tptr_t             ,_param->_max_size_ras_index);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_predict);
     }
 
     // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("decod", IN,SOUTH, "decod", _param->_nb_inst_decod);
+      ALLOC1_INTERFACE_BEGIN("decod", IN,SOUTH, _("decod"), _param->_nb_inst_decod);
 
       ALLOC1_VALACK_IN ( in_DECOD_VAL                 ,VAL);
@@ -93,9 +95,11 @@
       ALLOC1_SIGNAL_IN ( in_DECOD_IS_ACCURATE         ,"is_accurate"         ,Tcontrol_t         ,1);
       ALLOC1_SIGNAL_OUT(out_DECOD_CAN_CONTINUE        ,"can_continue"        ,Tcontrol_t         ,1);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_decod);
     }
 
     // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("branch_complete", IN,SOUTH, "branch_complete", _param->_nb_inst_branch_complete);
+      ALLOC1_INTERFACE_BEGIN("branch_complete", IN,SOUTH, _("branch_complete"), _param->_nb_inst_branch_complete);
       
       ALLOC1_VALACK_IN ( in_BRANCH_COMPLETE_VAL            ,VAL);
@@ -109,9 +113,11 @@
 //       ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_SRC    ,"address_src"    ,Taddress_t,_param->_size_instruction_address);
 //       ALLOC1_SIGNAL_OUT(out_BRANCH_COMPLETE_ADDRESS_DEST   ,"address_dest"   ,Taddress_t,_param->_size_instruction_address);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_branch_complete);
     }
 
     // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("branch_event", IN,SOUTH, "branch_event", _param->_nb_context);
+      ALLOC1_INTERFACE_BEGIN("branch_event", IN,SOUTH, _("branch_event"), _param->_nb_context);
       
       ALLOC1_VALACK_OUT(out_BRANCH_EVENT_VAL              ,VAL);
@@ -123,9 +129,11 @@
       ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_DEST_VAL ,"address_dest_val",Tcontrol_t,1);
       ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_DEST     ,"address_dest"    ,Taddress_t,_param->_size_instruction_address);
+
+      ALLOC1_INTERFACE_END(_param->_nb_context);
     }
 
     // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("update",OUT,SOUTH, "update", _param->_nb_inst_update);
+      ALLOC1_INTERFACE_BEGIN("update",OUT,SOUTH, "update", _param->_nb_inst_update);
 
       ALLOC1_VALACK_OUT(out_UPDATE_VAL                  ,VAL);
@@ -134,4 +142,5 @@
       ALLOC1_SIGNAL_OUT(out_UPDATE_MISS_PREDICTION      ,"miss_prediction"      ,Tcontrol_t         ,1);
       ALLOC1_SIGNAL_OUT(out_UPDATE_DIRECTION_GOOD       ,"direction_good"       ,Tcontrol_t         ,1);
+      ALLOC1_SIGNAL_OUT(out_UPDATE_PREDICTION_IFETCH    ,"prediction_ifetch"    ,Tcontrol_t         ,1);
       ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_VAL              ,"btb_val"              ,Tcontrol_t         ,1);
       ALLOC1_SIGNAL_OUT(out_UPDATE_BTB_ADDRESS_SRC      ,"btb_address_src"      ,Taddress_t         ,_param->_size_instruction_address);
@@ -145,10 +154,11 @@
       ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_ADDRESS          ,"ras_address"          ,Taddress_t         ,_param->_size_instruction_address);
       ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_INDEX            ,"ras_index"            ,Tptr_t             ,_param->_max_size_ras_index);
-      ALLOC1_SIGNAL_OUT(out_UPDATE_RAS_PREDICTION_IFETCH,"ras_prediction_ifetch",Tcontrol_t         ,1);
+      
+      ALLOC1_INTERFACE_END(_param->_nb_inst_update);
     }
 
     // ~~~~~[ Interface : "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("event", IN,SOUTH,"event", _param->_nb_context);
+      ALLOC1_INTERFACE_BEGIN("event", IN,SOUTH,_("event"), _param->_nb_context);
 
       ALLOC1_VALACK_IN ( in_EVENT_VAL    ,VAL);
@@ -156,9 +166,12 @@
       ALLOC1_SIGNAL_IN ( in_EVENT_TYPE   ,"type" ,Tevent_type_t ,_param->_size_event_type );
       ALLOC1_SIGNAL_IN ( in_EVENT_DEPTH  ,"depth",Tdepth_t      ,_param->_size_depth      );
+
+      ALLOC1_INTERFACE_END(_param->_nb_context);
     }
 
     // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("depth",OUT,SOUTH, "depth", _param->_nb_context);
+      ALLOC1_INTERFACE_BEGIN("depth",OUT,SOUTH, _("depth"), _param->_nb_context);
+
       ALLOC1_SIGNAL_OUT(out_DEPTH_VAL    ,"VAL"    ,Tcontrol_t,1);
       ALLOC1_SIGNAL_OUT(out_DEPTH_CURRENT,"CURRENT",Tdepth_t  ,_param->_size_depth);
@@ -166,4 +179,6 @@
       ALLOC1_SIGNAL_OUT(out_DEPTH_MAX    ,"MAX"    ,Tdepth_t  ,_param->_size_depth);
       ALLOC1_SIGNAL_OUT(out_DEPTH_FULL   ,"FULL"   ,Tcontrol_t,1);
+
+      ALLOC1_INTERFACE_END(_param->_nb_context);
     }
 
@@ -209,7 +224,8 @@
     ALLOC1(reg_EVENT_VAL                    ,bool         ,_param->_nb_context);
     ALLOC1(reg_EVENT_UPT_PTR                ,uint32_t     ,_param->_nb_context);
+    ALLOC1(reg_EVENT_UPT_FULL               ,bool         ,_param->_nb_context);
 
     ALLOC1(reg_EVENT_STATE                  ,event_state_t ,_param->_nb_context);
-    ALLOC1(reg_EVENT_SOURCE                 ,event_source_t,_param->_nb_context);
+    ALLOC1(reg_EVENT_IS_BRANCH              ,bool          ,_param->_nb_context);
     ALLOC1(reg_EVENT_DEPTH                  ,Tdepth_t      ,_param->_nb_context);
     ALLOC1(reg_EVENT_ADDRESS_SRC            ,Taddress_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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_deallocation.cpp	(revision 112)
@@ -29,54 +29,46 @@
 	delete    in_NRESET;
 
-	// ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	delete []  in_PREDICT_VAL                 ;
-	delete [] out_PREDICT_ACK                 ;
-	if (_param->_have_port_context_id)
-	delete []  in_PREDICT_CONTEXT_ID          ;
-	delete []  in_PREDICT_BTB_ADDRESS_SRC     ;
-	delete []  in_PREDICT_BTB_ADDRESS_DEST    ;
-	delete []  in_PREDICT_BTB_CONDITION       ;
-	delete []  in_PREDICT_BTB_LAST_TAKE       ;
-	delete []  in_PREDICT_BTB_IS_ACCURATE     ;
-	if (_param->_have_port_history)
-	delete []  in_PREDICT_DIR_HISTORY         ;
-	delete []  in_PREDICT_RAS_ADDRESS         ;
-	delete []  in_PREDICT_RAS_INDEX           ;
- 	if (_param->_have_port_depth)
- 	delete [] out_PREDICT_UPDATE_PREDICTION_ID;
-	
-	// ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	delete []  in_DECOD_VAL                   ;
-	delete [] out_DECOD_ACK                   ;
-	if (_param->_have_port_context_id)
-	delete []  in_DECOD_CONTEXT_ID            ;
-	delete []  in_DECOD_BTB_ADDRESS_SRC       ;
-	delete []  in_DECOD_BTB_ADDRESS_DEST      ;
-	delete []  in_DECOD_BTB_CONDITION         ;
-	delete []  in_DECOD_BTB_LAST_TAKE         ;
-	delete []  in_DECOD_RAS_ADDRESS           ;
-	delete []  in_DECOD_RAS_INDEX             ;
-	delete []  in_DECOD_MISS_IFETCH           ;
-	delete []  in_DECOD_MISS_DECOD            ;
-	if (_param->_have_port_depth)
-	delete []  in_DECOD_UPDATE_PREDICTION_ID  ;
-// 	if (_param->_have_port_depth)
-// 	delete [] out_DECOD_DEPTH                 ;
-	delete []  in_DECOD_IS_ACCURATE           ;
-	delete [] out_DECOD_CAN_CONTINUE          ;
-	
-	// ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	delete []  in_BRANCH_COMPLETE_VAL            ;
-	delete [] out_BRANCH_COMPLETE_ACK            ;
-	if (_param->_have_port_context_id)
-	delete []  in_BRANCH_COMPLETE_CONTEXT_ID     ;
-	if (_param->_have_port_depth)
-	delete []  in_BRANCH_COMPLETE_DEPTH          ;
-	delete []  in_BRANCH_COMPLETE_ADDRESS        ;
-	delete []  in_BRANCH_COMPLETE_NO_SEQUENCE    ;
-	delete [] out_BRANCH_COMPLETE_MISS_PREDICTION;
-// 	delete [] out_BRANCH_COMPLETE_TAKE           ;
-// 	delete [] out_BRANCH_COMPLETE_ADDRESS_SRC    ;
-// 	delete [] out_BRANCH_COMPLETE_ADDRESS_DEST   ;
+        // ~~~~~[ Interface : "predict" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+        DELETE1_SIGNAL( in_PREDICT_VAL                 ,_param->_nb_inst_predict,1);
+        DELETE1_SIGNAL(out_PREDICT_ACK                 ,_param->_nb_inst_predict,1);
+        DELETE1_SIGNAL( in_PREDICT_CONTEXT_ID          ,_param->_nb_inst_predict,_param->_size_context_id);
+        DELETE1_SIGNAL(out_PREDICT_UPDATE_PREDICTION_ID,_param->_nb_inst_predict,_param->_size_depth);
+        DELETE1_SIGNAL( in_PREDICT_BTB_ADDRESS_SRC     ,_param->_nb_inst_predict,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_PREDICT_BTB_ADDRESS_DEST    ,_param->_nb_inst_predict,_param->_size_instruction_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( in_PREDICT_DIR_HISTORY         ,_param->_nb_inst_predict,_param->_size_history);
+        DELETE1_SIGNAL( in_PREDICT_RAS_ADDRESS         ,_param->_nb_inst_predict,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_PREDICT_RAS_INDEX           ,_param->_nb_inst_predict,_param->_max_size_ras_index);
+
+        // ~~~~~[ Interface : "decod" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+        DELETE1_SIGNAL( in_DECOD_VAL                 ,_param->_nb_inst_decod,1);
+        DELETE1_SIGNAL(out_DECOD_ACK                 ,_param->_nb_inst_decod,1);
+        DELETE1_SIGNAL( in_DECOD_CONTEXT_ID          ,_param->_nb_inst_decod,_param->_size_context_id);
+        DELETE1_SIGNAL( in_DECOD_BTB_ADDRESS_SRC     ,_param->_nb_inst_decod,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_DECOD_BTB_ADDRESS_DEST    ,_param->_nb_inst_decod,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_DECOD_BTB_CONDITION       ,_param->_nb_inst_decod,_param->_size_branch_condition);
+        DELETE1_SIGNAL( in_DECOD_BTB_LAST_TAKE       ,_param->_nb_inst_decod,1);
+        DELETE1_SIGNAL( in_DECOD_RAS_ADDRESS         ,_param->_nb_inst_decod,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_DECOD_RAS_INDEX           ,_param->_nb_inst_decod,_param->_max_size_ras_index);
+        DELETE1_SIGNAL( in_DECOD_MISS_IFETCH         ,_param->_nb_inst_decod,1);
+        DELETE1_SIGNAL( in_DECOD_MISS_DECOD          ,_param->_nb_inst_decod,1);
+        DELETE1_SIGNAL( in_DECOD_UPDATE_PREDICTION_ID,_param->_nb_inst_decod,_param->_size_depth);
+//      DELETE1_SIGNAL(out_DECOD_DEPTH               ,_param->_nb_inst_decod,_param->_size_depth);
+        DELETE1_SIGNAL( in_DECOD_IS_ACCURATE         ,_param->_nb_inst_decod,1);
+        DELETE1_SIGNAL(out_DECOD_CAN_CONTINUE        ,_param->_nb_inst_decod,1);
+
+        // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+        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->_size_depth);
+        DELETE1_SIGNAL( in_BRANCH_COMPLETE_ADDRESS        ,_param->_nb_inst_branch_complete,_param->_size_instruction_address);
+        DELETE1_SIGNAL( in_BRANCH_COMPLETE_NO_SEQUENCE    ,_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_instruction_address);
+//      DELETE1_SIGNAL(out_BRANCH_COMPLETE_ADDRESS_DEST   ,_param->_nb_inst_branch_complete,_param->_size_instruction_address);
 
 	// ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -90,24 +82,22 @@
         DELETE1_SIGNAL(out_BRANCH_EVENT_ADDRESS_DEST     ,_param->_nb_context,_param->_size_instruction_address);
 
-	// ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	delete [] out_UPDATE_VAL                  ;
-	delete []  in_UPDATE_ACK                  ;
-	if (_param->_have_port_context_id)
-	delete [] out_UPDATE_CONTEXT_ID           ;
-	delete [] out_UPDATE_MISS_PREDICTION      ;
-	delete [] out_UPDATE_DIRECTION_GOOD       ;
-	delete [] out_UPDATE_BTB_VAL              ;
-	delete [] out_UPDATE_BTB_ADDRESS_SRC      ;
-	delete [] out_UPDATE_BTB_ADDRESS_DEST     ;
-	delete [] out_UPDATE_BTB_CONDITION        ;
-	delete [] out_UPDATE_DIR_VAL              ;
-	if (_param->_have_port_history)
-	delete [] out_UPDATE_DIR_HISTORY          ;
-	delete [] out_UPDATE_RAS_VAL              ;
-	delete [] out_UPDATE_RAS_FLUSH            ;
-	delete [] out_UPDATE_RAS_PUSH             ;
-	delete [] out_UPDATE_RAS_ADDRESS          ;
-	delete [] out_UPDATE_RAS_INDEX            ;
-	delete [] out_UPDATE_RAS_PREDICTION_IFETCH;
+        // ~~~~~[ Interface : "update" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+        DELETE1_SIGNAL(out_UPDATE_VAL                  ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL( in_UPDATE_ACK                  ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_CONTEXT_ID           ,_param->_nb_inst_update,_param->_size_context_id);
+        DELETE1_SIGNAL(out_UPDATE_MISS_PREDICTION      ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_DIRECTION_GOOD       ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_PREDICTION_IFETCH    ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_BTB_VAL              ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_BTB_ADDRESS_SRC      ,_param->_nb_inst_update,_param->_size_instruction_address);
+        DELETE1_SIGNAL(out_UPDATE_BTB_ADDRESS_DEST     ,_param->_nb_inst_update,_param->_size_instruction_address);
+        DELETE1_SIGNAL(out_UPDATE_BTB_CONDITION        ,_param->_nb_inst_update,_param->_size_branch_condition);
+        DELETE1_SIGNAL(out_UPDATE_DIR_VAL              ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_DIR_HISTORY          ,_param->_nb_inst_update,_param->_size_history);
+        DELETE1_SIGNAL(out_UPDATE_RAS_VAL              ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_RAS_FLUSH            ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_RAS_PUSH             ,_param->_nb_inst_update,1);
+        DELETE1_SIGNAL(out_UPDATE_RAS_ADDRESS          ,_param->_nb_inst_update,_param->_size_instruction_address);
+        DELETE1_SIGNAL(out_UPDATE_RAS_INDEX            ,_param->_nb_inst_update,_param->_max_size_ras_index);
 
         // ~~~~~[ Interface : "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -162,7 +152,8 @@
         DELETE1(reg_EVENT_VAL                    ,_param->_nb_context);
         DELETE1(reg_EVENT_UPT_PTR                ,_param->_nb_context);
+        DELETE1(reg_EVENT_UPT_FULL               ,_param->_nb_context);
 
         DELETE1(reg_EVENT_STATE                  ,_param->_nb_context);
-        DELETE1(reg_EVENT_SOURCE                 ,_param->_nb_context);
+        DELETE1(reg_EVENT_IS_BRANCH              ,_param->_nb_context);
         DELETE1(reg_EVENT_DEPTH                  ,_param->_nb_context);
         DELETE1(reg_EVENT_ADDRESS_SRC            ,_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_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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMoore.cpp	(revision 112)
@@ -98,4 +98,5 @@
         Tcontrol_t          miss_prediction      ;
         Tcontrol_t          direction_good       ;
+        Tcontrol_t          prediction_ifetch    ;
         Tcontrol_t          btb_val              ;
         Taddress_t          btb_address_src      ;
@@ -109,5 +110,4 @@
         Taddress_t          ras_address          ;
         Tptr_t              ras_index            ;
-        Tcontrol_t          ras_prediction_ifetch;
 
         // Test if update fetch prediction table need update port
@@ -133,10 +133,11 @@
                 miss_prediction       = 1;
 //              direction_good        = ;
+                prediction_ifetch     = 1;
                 btb_val               = 0; // don't update btb (is update by the event branch)
-//              btb_address_src       = ;
-//              btb_address_dest      = ;
-//              btb_condition         = ;
-                dir_val               = 0; // don't update btb (is update by the event branch (if conditionnal branch))
-//              dir_history           = ;
+//              btb_address_src       = reg_UPDATE_PREDICTION_TABLE [context][depth]._address_src ;
+//              btb_address_dest      = reg_UPDATE_PREDICTION_TABLE [context][depth]._address_dest;
+//              btb_condition         = condition;
+                dir_val               = update_ras(condition);
+                dir_history           = reg_UPDATE_PREDICTION_TABLE [context][depth]._history;
                 // repop/ repush data -> don't corrupt ras
                 ras_val               = update_ras(condition); 
@@ -145,5 +146,4 @@
                 ras_address           = reg_UPDATE_FETCH_PREDICTION_TABLE [context][depth]._address_ras;
                 ras_index             = reg_UPDATE_FETCH_PREDICTION_TABLE [context][depth]._index_ras;
-                ras_prediction_ifetch = 1;
                 
                 internal_UPDATE_FROM_UFPT [i] = true;
@@ -200,9 +200,11 @@
                 miss_prediction       = (state != UPDATE_PREDICTION_STATE_OK);
                 direction_good        = reg_UPDATE_PREDICTION_TABLE [context][depth]._good_take   ;
+                prediction_ifetch     = ifetch;
                 btb_val               = state_is_ok_ko and update_btb(condition);
                 btb_address_src       = reg_UPDATE_PREDICTION_TABLE [context][depth]._address_src ;
                 btb_address_dest      = reg_UPDATE_PREDICTION_TABLE [context][depth]._address_dest;
                 btb_condition         = condition;
-                dir_val               = state_is_ok_ko and update_dir(condition) and ifetch; // if not ifetch, then static prediction
+                dir_val               = // state_is_ok_ko and 
+                                        update_dir(condition); // if not ifetch, then static prediction
                 dir_history           = reg_UPDATE_PREDICTION_TABLE [context][depth]._history     ;
                 ras_val               = update_ras(condition); // repop/ repush data -> don't corrupt ras
@@ -213,5 +215,4 @@
                 ras_address           = (ras_flush)?(reg_UPDATE_PREDICTION_TABLE [context][depth]._address_src+2):reg_UPDATE_PREDICTION_TABLE [context][depth]._address_ras;
                 ras_index             = reg_UPDATE_PREDICTION_TABLE [context][depth]._index_ras;
-                ras_prediction_ifetch = ifetch;
 
                 internal_UPDATE_FROM_UFPT [i] = false;
@@ -257,4 +258,5 @@
         PORT_WRITE(out_UPDATE_MISS_PREDICTION       [i],miss_prediction      );
         PORT_WRITE(out_UPDATE_DIRECTION_GOOD        [i],direction_good       );
+        PORT_WRITE(out_UPDATE_PREDICTION_IFETCH     [i],prediction_ifetch    );
         PORT_WRITE(out_UPDATE_BTB_VAL               [i],btb_val              );
         PORT_WRITE(out_UPDATE_BTB_ADDRESS_SRC       [i],btb_address_src      );
@@ -269,5 +271,4 @@
         PORT_WRITE(out_UPDATE_RAS_ADDRESS           [i],ras_address          );
         PORT_WRITE(out_UPDATE_RAS_INDEX             [i],ras_index            );
-        PORT_WRITE(out_UPDATE_RAS_PREDICTION_IFETCH [i],ras_prediction_ifetch);
           }
       }
@@ -290,4 +291,17 @@
       }
       }
+    else
+      {
+        for (uint32_t i=0; i<_param->_nb_inst_update; i++)
+          {
+            internal_UPDATE_VAL             [i] = 0;
+            internal_UPDATE_VAL_WITHOUT_ACK [i] = 0;
+          }
+        for (uint32_t i=0; i<_param->_nb_context; i++)
+          {
+            internal_BRANCH_EVENT_VAL       [i] = 0;
+          }
+      }
+
 
     log_end(Update_Prediction_Table,FUNCTION);
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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp	(revision 112)
@@ -53,4 +53,5 @@
             reg_EVENT_VAL            [i] = false;
             reg_EVENT_STATE          [i] = EVENT_STATE_OK;
+            reg_EVENT_IS_BRANCH      [i] = true;
           }
       }
@@ -100,4 +101,8 @@
               // Test if state is end
 //               if (end_ok or end_ko)
+              
+              log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * state is STATE_END      : %d",end);
+              log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UPT_BOTTOM (before) : %d",reg_UPT_BOTTOM         [i]);
+
               if (end)
                 {
@@ -108,8 +113,12 @@
                       branchement_log_file [num_thread] 
                         << std::hex
-                        << "0x" << reg_UPDATE_PREDICTION_TABLE [i][bottom]._address_src  << " "
-                        << "0x" << reg_UPDATE_PREDICTION_TABLE [i][bottom]._address_dest << " "
+                        << "0x" << reg_UPDATE_PREDICTION_TABLE [i][bottom]._address_src       << " "
+                        << "0x" << reg_UPDATE_PREDICTION_TABLE [i][bottom]._address_dest      << " "
                         << std::dec
-                        <<         reg_UPDATE_PREDICTION_TABLE [i][bottom]._good_take    << " "
+                        <<         reg_UPDATE_PREDICTION_TABLE [i][bottom]._good_take         << " - "
+                        << "["  << sc_simulation_time() << "] " << " "
+                        <<         reg_UPDATE_PREDICTION_TABLE [i][bottom]._miss_prediction   << " "
+                        <<         reg_UPDATE_PREDICTION_TABLE [i][bottom]._ifetch_prediction << " "
+                        << "("  << (uint32_t)reg_UPDATE_PREDICTION_TABLE [i][bottom]._condition         << ")"
                         << std::endl;
                     }
@@ -128,23 +137,38 @@
 //                   if (bottom = reg_UPT_UPDATE [i])
 //                     reg_UPT_UPDATE [i] = reg_UPT_BOTTOM [i];
-
-                  if (reg_EVENT_VAL [i] and (reg_EVENT_UPT_PTR [i] == bottom))
+                }// @@@
+              
+              log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UPT_BOTTOM (after ) : %d",reg_UPT_BOTTOM         [i]);
+              log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_EVENT_VAL           : %d",reg_EVENT_VAL     [i]);
+              log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_EVENT_UPT_PTR       : %d",reg_EVENT_UPT_PTR [i]);
+              log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_EVENT_UPT_FULL      : %d",reg_EVENT_UPT_FULL[i]);
+
+              if (reg_EVENT_VAL [i] and (reg_EVENT_UPT_PTR [i] == bottom))
+                {
+                  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * END EVENT");
+
+                  if ((reg_EVENT_IS_BRANCH [i] == false) and (reg_EVENT_UPT_FULL [i] == false))
+                    reg_EVENT_STATE[i] = EVENT_STATE_OK;
+
+                  if ((reg_EVENT_IS_BRANCH [i] == true) or (reg_EVENT_UPT_FULL [i] == false))
                     {
-                      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * END EVENT");
-                      
-                      reg_EVENT_VAL  [i] = false;
-                      reg_UPT_TOP    [i] = reg_UPT_TOP_EVENT [i];
-                      reg_UPT_UPDATE [i] = reg_UPT_TOP_EVENT [i];
-                      
-                      if (reg_UPT_BOTTOM [i] != reg_UPT_TOP [i])
-                        reg_UPT_EMPTY [i] = false;
-
-                      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UPT_TOP             : %d",reg_UPT_TOP            [i]);
-                      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UPT_TOP_EVENT       : %d",reg_UPT_TOP_EVENT      [i]);
-                      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UPT_UPDATE          : %d",reg_UPT_UPDATE         [i]);
-                      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UPT_EMPTY           : %d",reg_UPT_EMPTY          [i]);
+                  reg_EVENT_VAL       [i] = false;
+//                reg_EVENT_IS_BRANCH [i] = true;
+                  reg_UPT_TOP         [i] = reg_UPT_TOP_EVENT [i];
+                  reg_UPT_UPDATE      [i] = reg_UPT_TOP_EVENT [i];
+                  
+                  if (reg_UPT_BOTTOM [i] != reg_UPT_TOP [i])
+                    reg_UPT_EMPTY [i] = false;
                     }
 
+                  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UPT_TOP             : %d",reg_UPT_TOP            [i]);
+                  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UPT_TOP_EVENT       : %d",reg_UPT_TOP_EVENT      [i]);
+                  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UPT_UPDATE          : %d",reg_UPT_UPDATE         [i]);
+                  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UPT_EMPTY           : %d",reg_UPT_EMPTY          [i]);
+                
                 }
+              
+              if (end)
+                reg_EVENT_UPT_FULL [i] = false;
             }
 	  }
@@ -245,4 +269,5 @@
                       log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_UPDATE_CONTEXT (decod - miss - no flush ufpt)",context);
                       reg_EVENT_STATE [context] = EVENT_STATE_UPDATE_CONTEXT;
+//                       reg_EVENT_SOURCE[context] = EVENT_SOURCE_UFPT;
                     }
                   else
@@ -251,9 +276,9 @@
                       reg_EVENT_STATE [context] = EVENT_STATE_MISS_FLUSH_UFPT;
                     }
-                  reg_EVENT_SOURCE          [context] = EVENT_SOURCE_UFPT;
 
                   // Flush UPFT
                   flush_UFPT [context] = true;
 
+                  reg_EVENT_IS_BRANCH       [context] = true;
                   reg_EVENT_DEPTH           [context] = upt_ptr_write;
                   reg_EVENT_ADDRESS_SRC     [context] = address_src; // delay_slot is compute in Context_State
@@ -357,5 +382,5 @@
                   (internal_UPDATE_VAL_WITHOUT_ACK [i] and can_continue [context]))
                 {
-                  Tdepth_t   depth     = internal_UPDATE_DEPTH      [i];
+                  Tdepth_t   depth     = internal_UPDATE_DEPTH [i];
                   
                   log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * UPDATE[%d] - Accepted",i);
@@ -369,13 +394,21 @@
 //                       if (reg_UFPT_UPDATE [context] == reg_UFPT_BOTTOM [context])
                       if ((--reg_UFPT_NB_UPDATE [context])==0)
-                        switch (reg_EVENT_STATE [context])
-                          {
-                          case EVENT_STATE_MISS_FLUSH_UFPT         : reg_EVENT_STATE [context] = EVENT_STATE_UPDATE_CONTEXT; break;
-                            // impossible to have an update on ufpt and reg_upt_update>reg_upt_top
-                          case EVENT_STATE_MISS_FLUSH_UFPT_AND_UPT : reg_EVENT_STATE [context] = EVENT_STATE_MISS_FLUSH_UPT ; break;
-                          case EVENT_STATE_EVENT_FLUSH_UFPT        : reg_EVENT_STATE [context] = EVENT_STATE_OK             ; break;
-                          case EVENT_STATE_EVENT_FLUSH_UFPT_AND_UPT: reg_EVENT_STATE [context] = EVENT_STATE_EVENT_FLUSH_UPT; break;
-                          default : break;
-                          }
+                        {
+                          switch (reg_EVENT_STATE [context])
+                            {
+                            case EVENT_STATE_MISS_FLUSH_UFPT         : 
+                              {
+                                reg_EVENT_STATE [context] = EVENT_STATE_UPDATE_CONTEXT; 
+//                                 reg_EVENT_SOURCE[context] = EVENT_SOURCE_UFPT;
+
+                                break;
+                              }
+                              // impossible to have an update on ufpt and reg_upt_update>reg_upt_top
+                            case EVENT_STATE_MISS_FLUSH_UFPT_AND_UPT : reg_EVENT_STATE [context] = EVENT_STATE_MISS_FLUSH_UPT ; break;
+                            case EVENT_STATE_EVENT_FLUSH_UFPT        : reg_EVENT_STATE [context] = EVENT_STATE_OK             ; break;
+                            case EVENT_STATE_EVENT_FLUSH_UFPT_AND_UPT: reg_EVENT_STATE [context] = EVENT_STATE_EVENT_FLUSH_UPT; break;
+                            default : break;
+                            }
+                        }
                       
                       log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * Update Fetch Prediction Table");
@@ -405,5 +438,7 @@
                     {
                       log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * Update Prediction Table");
-                      
+                      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UPT_UPDATE (before) : %d",reg_UPT_UPDATE [context]);
+                      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_EVENT_STATE         : %s",toString(reg_EVENT_STATE [context]).c_str());
+ 
                       // Change state
 #ifdef DEBUG_TEST 
@@ -430,5 +465,8 @@
 
                       if (ok or ko)
-                        reg_UPDATE_PREDICTION_TABLE [context][depth]._retire_ok = true;
+                        {
+                          reg_UPDATE_PREDICTION_TABLE [context][depth]._retire_ok       = true;
+                          reg_UPDATE_PREDICTION_TABLE [context][depth]._miss_prediction = ko;
+                        }
 
                       // Have an update, test the state to transiste to the good state
@@ -444,6 +482,9 @@
                           reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_END_KO;
 
-                          reg_EVENT_VAL     [context] = true;
-                          reg_EVENT_UPT_PTR [context] = depth;
+                          reg_EVENT_VAL      [context] = true;
+                          reg_EVENT_UPT_PTR  [context] = depth;
+//                        reg_EVENT_UPT_FULL [context] = 0;
+//                        reg_EVENT_UPT_FULL        [i] = (not reg_UPT_EMPTY [i] and (bottom == reg_UPT_TOP [i]));
+
 
 #ifdef STATISTICS
@@ -473,13 +514,18 @@
                       // Update pointer
                       //  * if update RAS : update pointer is decreaste until it equal at top pointer
+                      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * internal_UPDATE_RAS [%d] : %d",i,internal_UPDATE_RAS [i]);
+                      
                       if (internal_UPDATE_RAS [i])
                         {
                           // if end_event, restart too bottom, else decrease pointer
                           bool end_event  = (reg_UPT_UPDATE [context] == reg_UPT_TOP [context]);
+
+                          log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * end_event               : %d",end_event);
+                          log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * bottom                  : %d",reg_UPT_BOTTOM[context]);
                           
-                          reg_UPT_UPDATE [context] = (end_event)?reg_UPT_BOTTOM[context]:(((depth==0)?_param->_size_upt_queue[context]:depth)-1);
                           if (end_event)
                             {
-//                               reg_UPT_UPDATE [context] = reg_UPT_BOTTOM[context];
+                              reg_UPT_UPDATE [context] = (end_event)?reg_UPT_BOTTOM[context]:(((depth==0)?_param->_size_upt_queue[context]:depth)-1);
+//                            reg_UPT_UPDATE [context] = reg_UPT_BOTTOM[context];
 
                               if (reg_EVENT_STATE [context] == EVENT_STATE_EVENT_FLUSH_UPT)
@@ -488,5 +534,8 @@
                                 }
                               else
-                                reg_EVENT_STATE [context] = EVENT_STATE_UPDATE_CONTEXT;
+                                {
+                                  reg_EVENT_STATE [context] = EVENT_STATE_UPDATE_CONTEXT;
+//                                   reg_EVENT_SOURCE[context] = EVENT_SOURCE_UPT;
+                                }
                             }
                           else
@@ -497,4 +546,6 @@
                       else
                         {
+                          log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * next update");
+                          
                           // increase pointer
                           reg_UPT_UPDATE [context] = (depth+1)%_param->_size_upt_queue[context];
@@ -502,6 +553,9 @@
                       
                       // Free the branch with no accurate ?
-                      if ( (reg_UPDATE_PREDICTION_TABLE [context][depth]._is_accurate == false) and not ko)
+                      if ((reg_UPDATE_PREDICTION_TABLE [context][depth]._is_accurate == false) and not ko)
                         reg_IS_ACCURATE [context] = true;
+
+                      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_UPT_UPDATE (after ) : %d",reg_UPT_UPDATE[context]);
+                      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"      * reg_EVENT_STATE         : %s",toString(reg_EVENT_STATE [context]).c_str());
                     }
                 }
@@ -513,5 +567,4 @@
           reg_UPDATE_PRIORITY = (reg_UPDATE_PRIORITY+1)%_param->_nb_context;
         }
-
 
 	// ===================================================================
@@ -533,7 +586,8 @@
 
 	      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * BRANCH_COMPLETE[%d] - Accepted",i);
-	      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * context        : %d",context);
-	      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * depth          : %d",depth);
-	      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * miss           : %d",miss);
+	      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * context             : %d",context);
+	      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * depth               : %d",depth);
+	      log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * miss                : %d",miss);
+              log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_STATE     : %s",toString(reg_EVENT_STATE [context]).c_str());
 	      
               if (miss)
@@ -546,4 +600,7 @@
                   event_state_t event_state         = reg_EVENT_STATE [context];
                   upt_state_t   event_top           = reg_UPDATE_PREDICTION_TABLE [context][top]._state;
+
+                  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * event_top           : %s",toString(event_top).c_str());
+
                   bool          previous_ufpt_event = ((event_state == EVENT_STATE_MISS_FLUSH_UFPT_AND_UPT ) or
                                                        (event_state == EVENT_STATE_MISS_FLUSH_UFPT         ) or
@@ -551,14 +608,15 @@
                                                        (event_state == EVENT_STATE_EVENT_FLUSH_UFPT        ));
 
-                  bool          previous_upt_event  = ((event_state == EVENT_STATE_MISS_FLUSH_UFPT_AND_UPT ) or
-                                                       (event_state == EVENT_STATE_MISS_FLUSH_UPT          ) or
-                                                       (event_state == EVENT_STATE_EVENT_FLUSH_UFPT_AND_UPT) or
-                                                       (event_state == EVENT_STATE_EVENT_FLUSH_UPT         ) or
-                                                       (event_top   == UPDATE_PREDICTION_STATE_END_KO      ) or
-                                                       (event_top   == UPDATE_PREDICTION_STATE_KO          )
-//                                                   (event_state == EVENT_STATE_WAIT_END_EVENT          ) or
-//                                                   ((event_state == EVENT_STATE_UPDATE_CONTEXT         ) and
-//                                                    (reg_EVENT_SOURCE [context] == EVENT_SOURCE_UPT))
-                                                  );
+                  bool          previous_upt_event  = (false
+                                                       or  (event_state == EVENT_STATE_MISS_FLUSH_UFPT_AND_UPT )
+                                                       or  (event_state == EVENT_STATE_MISS_FLUSH_UPT          )
+                                                       or  (event_state == EVENT_STATE_EVENT_FLUSH_UFPT_AND_UPT)
+                                                       or  (event_state == EVENT_STATE_EVENT_FLUSH_UPT         )
+                                                       or  (event_top   == UPDATE_PREDICTION_STATE_END_KO      )
+                                                       or  (event_top   == UPDATE_PREDICTION_STATE_KO          )
+//                                                     or  (event_state == EVENT_STATE_WAIT_END_EVENT          )
+//                                                        or ((event_state == EVENT_STATE_UPDATE_CONTEXT          )
+//                                                            and (reg_EVENT_SOURCE [context] == EVENT_SOURCE_UPT))
+                                                       );
 //                bool          update_ras     = (new_update != depth);
 
@@ -568,8 +626,9 @@
                   log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * previous_upt_event  : %d",previous_upt_event);
                   log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * previous_ufpt_event : %d",previous_ufpt_event);
-
+                  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_UPT_UPDATE      : %d",reg_UPT_UPDATE [context]);
+                          
                   // Have a miss !!!
                   // Flush UPFT
-                  flush_UFPT [context] = not previous_ufpt_event;
+                  flush_UFPT [context] |= not previous_ufpt_event;
                   
                   if (reg_UPDATE_PREDICTION_TABLE [context][depth]._state == UPDATE_PREDICTION_STATE_WAIT_END)
@@ -587,5 +646,5 @@
                       reg_UPT_TOP       [context] = depth;
 //                    reg_UPT_TOP_EVENT [context] = top;
-
+                      
                       if (not previous_upt_event)
                         {
@@ -604,4 +663,5 @@
                                 // Have already update predictor
                                 reg_UPDATE_PREDICTION_TABLE [context][top]._state = UPDATE_PREDICTION_STATE_END;
+                                reg_UPT_UPDATE              [context] = new_update;
                                 break;
                               }
@@ -649,8 +709,9 @@
                           }
                         }
-                      reg_EVENT_SOURCE          [context] = EVENT_SOURCE_UPT;
+//                       reg_EVENT_SOURCE          [context] = EVENT_SOURCE_UPT;
                       
                       // else no update
                       
+                      reg_EVENT_IS_BRANCH       [context] = true;
                       reg_EVENT_DEPTH           [context] = depth;
                       reg_EVENT_ADDRESS_SRC     [context] = address_src; // delay_slot is compute in Context_State
@@ -675,4 +736,6 @@
 		}
 
+              log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_STATE     : %s",toString(reg_EVENT_STATE [context]).c_str());
+
 	      // In all case : update good_take
 	      reg_UPDATE_PREDICTION_TABLE [context][depth]._good_take    = good_take;
@@ -686,4 +749,5 @@
                 reg_UPDATE_PREDICTION_TABLE [context][depth]._address_dest = good_addr;
             }
+
 
  	// ===================================================================
@@ -779,67 +843,47 @@
                     
                     // Flush UPT
-                    Tdepth_t depth      = (_param->_have_port_depth)?PORT_READ(in_EVENT_DEPTH [i]):0;
-                    uint32_t top        = reg_UPT_TOP    [i];
-                    uint32_t bottom     = reg_UPT_BOTTOM [i];
-                    uint32_t new_update = ((top==0)?_param->_size_upt_queue[i]:top)-1; 
-//                     bool     empty      = reg_UPT_EMPTY [i];
-
+                    uint32_t bottom = reg_UPT_BOTTOM [i];
+
+                    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * bottom     : %d",bottom);
+
+//                     event_state_t event_state         = reg_EVENT_STATE [i];
+//                     bool          previous_update_ras = ((event_state == EVENT_STATE_MISS_FLUSH_UFPT_AND_UPT ) or
+//                                                          (event_state == EVENT_STATE_MISS_FLUSH_UPT          ) or
+//                                                          (event_state == EVENT_STATE_EVENT_FLUSH_UFPT_AND_UPT) or
+//                                                          (event_state == EVENT_STATE_EVENT_FLUSH_UPT));
+
+                    bool     find   = false; // have slot to update ???
+                    Tdepth_t top    = bottom;
+                    Tdepth_t update = bottom;
+                    bool     empty  = reg_UPT_EMPTY [i];
+
+                    // flush all slot, because this event is in head of rob
+                    for (uint32_t j=0; j<_param->_size_upt_queue[i]; ++j)
+                      {
+                        Tdepth_t x = (bottom+j)%_param->_size_upt_queue[i];
+                        
+                        if ((reg_UPDATE_PREDICTION_TABLE [i][x]._state != UPDATE_PREDICTION_STATE_END) and
+                            (reg_UPDATE_PREDICTION_TABLE [i][x]._state != UPDATE_PREDICTION_STATE_EMPTY))
+                          {
+                            find = true; // find a not empty slot
+                            reg_UPDATE_PREDICTION_TABLE [i][x]._state = UPDATE_PREDICTION_STATE_EVENT;
+                            reg_UPDATE_PREDICTION_TABLE [i][x]._retire_ok = false;
+                            update = x;
+                          }
+
+                        if (reg_UPDATE_PREDICTION_TABLE [i][x]._state != UPDATE_PREDICTION_STATE_EMPTY)
+                          top = x+1;
+                      }
+
+                    top = top%_param->_size_upt_queue[i];
+
+                    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * find       : %d",find);
                     log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * top        : %d",top);
-                    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * depth      : %d",depth);
-                    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * new_update : %d",new_update);
-
-                    event_state_t event_state         = reg_EVENT_STATE [i];
-                    bool          previous_update_ras = ((event_state == EVENT_STATE_MISS_FLUSH_UFPT_AND_UPT ) or
-                                                         (event_state == EVENT_STATE_MISS_FLUSH_UPT          ) or
-                                                         (event_state == EVENT_STATE_EVENT_FLUSH_UFPT_AND_UPT) or
-                                                         (event_state == EVENT_STATE_EVENT_FLUSH_UPT));
-
-                    bool     find = false; // have slot to update ???
-                    Tdepth_t depth_new = depth;
-
-                    // flush all slot after the event
-                    for (uint32_t j=(depth+1)%_param->_size_upt_queue[i];
-                         j!=top; 
-                         j=(j+1)%_param->_size_upt_queue[i])
-                      if ((reg_UPDATE_PREDICTION_TABLE [i][j]._state != UPDATE_PREDICTION_STATE_END) and
-                          (reg_UPDATE_PREDICTION_TABLE [i][j]._state != UPDATE_PREDICTION_STATE_EMPTY))
-                        {
-                          find = true;
-                          reg_UPDATE_PREDICTION_TABLE [i][j]._state = UPDATE_PREDICTION_STATE_EVENT;
-                          reg_UPDATE_PREDICTION_TABLE [i][j]._retire_ok = false;
-                        }
-                      else
-                        if (not find) // while state == end or empty
-                          depth_new ++;
-                    
-                    if ((reg_UPDATE_PREDICTION_TABLE [i][depth]._state != UPDATE_PREDICTION_STATE_END) and
-                        (reg_UPDATE_PREDICTION_TABLE [i][depth]._state != UPDATE_PREDICTION_STATE_EMPTY))
-                      {
-                        find = true;
-                        reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_EVENT;
-                        reg_UPDATE_PREDICTION_TABLE [i][depth]._retire_ok = false;
-
-                      }
-                    else
-                      // while state == end or empty
-                      depth = (depth_new+1)%_param->_size_upt_queue[i];
-
-                    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * find       : %d",find);
-                    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * depth_new  : %d",depth_new);
                     
                     // Test if have update slot
                     if (find)
                       {
-//                         // flush all slot after the event
-//                         for (uint32_t j=(depth+1)%_param->_size_upt_queue[i];
-//                              j!=top; 
-//                              j=(j+1)%_param->_size_upt_queue[i])
-//                           reg_UPDATE_PREDICTION_TABLE [i][j]._state = UPDATE_PREDICTION_STATE_EVENT;
-
-//                         reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_EVENT;
-                        
-                        // reg_UPT_BOTTOM    [i];
                         // TODO : special case : event is an exception on branch, also depth is not valid
-                        reg_UPT_TOP       [i] = depth; // depth is again valid
+                        reg_UPT_TOP       [i] = top; // depth is again valid
                         reg_UPT_TOP_EVENT [i] = top;
                         
@@ -847,12 +891,5 @@
                           reg_UPT_EMPTY [i] = true;
                       }
-
-                    bool     full       = ((depth == top) and (top == bottom) and not reg_UPT_EMPTY [i]);
-                    bool     update_ras = find and ((top != depth) or full);
-                    
-                    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * update_ras : %d",update_ras);
-                    
-                    if (not previous_update_ras and update_ras)
-                      reg_UPT_UPDATE [i]  = new_update;
+                    reg_UPT_UPDATE [i]  = update;
               
                     // new state :
@@ -862,20 +899,36 @@
                     //            * ok : nothing
                     //            * ko : flush upt
-                    reg_EVENT_VAL     [i] = true;
-                    reg_EVENT_UPT_PTR [i] = depth;
-
+                    reg_EVENT_VAL             [i] = find;
+                    reg_EVENT_IS_BRANCH       [i] = false;
+                    reg_EVENT_UPT_PTR         [i] = top;
+                    reg_EVENT_UPT_FULL        [i] = (not empty and (bottom == reg_UPT_TOP [i]));
+                    reg_EVENT_DEPTH           [i] = top;
+//                  reg_EVENT_ADDRESS_SRC     [i] = address_src; // delay_slot is compute in I_State
+//                  reg_EVENT_ADDRESS_DEST_VAL[i] = good_take;
+//                  reg_EVENT_ADDRESS_DEST    [i] = good_addr;
+
+                    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_UPT_BOTTOM                   : %d",reg_UPT_BOTTOM          [i]);
+                    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_UPT_TOP                      : %d",reg_UPT_TOP             [i]);
+                    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_UPT_EMPTY                    : %d",reg_UPT_EMPTY           [i]);
+
+                    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_VAL                    : %d",reg_EVENT_VAL           [i]);
+                    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_UPT_PTR                : %d",reg_EVENT_UPT_PTR       [i]);
+                    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_UPT_FULL               : %d",reg_EVENT_UPT_FULL      [i]);
                     log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_UFPT_NB_NEED_UPDATE          : %d",reg_UFPT_NB_NEED_UPDATE [i]);
-//                     if (reg_UFPT_NB_NEED_UPDATE [i] > 0)
+                    log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_UFPT_NB_UPDATE               : %d",reg_UFPT_NB_UPDATE      [i]);
+
                     if ( (reg_UFPT_NB_NEED_UPDATE [i] > 0) or
                          (reg_UFPT_NB_UPDATE      [i] > 0))
                       {
-                        if (update_ras)
+                        if (find)
                           {
-                            log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_EVENT_FLUSH_UFPT_AND_UPT (branch_complete - miss)",i);
+                            log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_EVENT_FLUSH_UFPT_AND_UPT (event - find)",i);
                             reg_EVENT_STATE [i] = EVENT_STATE_EVENT_FLUSH_UFPT_AND_UPT;
                           }
                         else
                           {
-                            log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_EVENT_FLUSH_UFPT (branch_complete - miss)",i);
+                            log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_EVENT_FLUSH_UFPT (event - not find)",i);
+//                          reg_EVENT_VAL   [i] = false;
+
                             reg_EVENT_STATE [i] = EVENT_STATE_EVENT_FLUSH_UFPT;
                           }                          
@@ -883,9 +936,8 @@
                     else
                       {
-//                         if (not previous_update_ras)
-                        if (update_ras)
+                        if (find)
                           {
                             // have ras prediction ?
-                            log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_EVENT_FLUSH_UPT (branch_complete - miss)",i);
+                            log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_EVENT_FLUSH_UPT (event - find)",i);
                             
                             reg_EVENT_STATE [i] = EVENT_STATE_EVENT_FLUSH_UPT;
@@ -894,5 +946,7 @@
                           {
                             // special case : nothing
-                            reg_EVENT_VAL     [i] = false;
+                            log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_EVENT_FLUSH_UPT (event - not find)",i);
+
+//                          reg_EVENT_VAL     [i] = false;
 
                             reg_EVENT_STATE [i] = EVENT_STATE_OK;
@@ -902,8 +956,134 @@
                     // else no update
                     
-                    reg_EVENT_DEPTH           [i] = depth;
-//                  reg_EVENT_ADDRESS_SRC     [i] = address_src; // delay_slot is compute in I_State
-//                  reg_EVENT_ADDRESS_DEST_VAL[i] = good_take;
-//                  reg_EVENT_ADDRESS_DEST    [i] = good_addr;
+//                     Tdepth_t depth      = (_param->_have_port_depth)?PORT_READ(in_EVENT_DEPTH [i]):0;
+//                     uint32_t top        = reg_UPT_TOP    [i];
+//                     uint32_t bottom     = reg_UPT_BOTTOM [i];
+//                     uint32_t new_update = ((top==0)?_param->_size_upt_queue[i]:top)-1; 
+// //                     bool     empty      = reg_UPT_EMPTY [i];
+
+//                     log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * top        : %d",top);
+//                     log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * depth      : %d",depth);
+//                     log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * new_update : %d",new_update);
+
+//                     event_state_t event_state         = reg_EVENT_STATE [i];
+//                     bool          previous_update_ras = ((event_state == EVENT_STATE_MISS_FLUSH_UFPT_AND_UPT ) or
+//                                                          (event_state == EVENT_STATE_MISS_FLUSH_UPT          ) or
+//                                                          (event_state == EVENT_STATE_EVENT_FLUSH_UFPT_AND_UPT) or
+//                                                          (event_state == EVENT_STATE_EVENT_FLUSH_UPT));
+
+//                     bool     find = false; // have slot to update ???
+//                     Tdepth_t depth_new = depth;
+
+//                     // flush all slot, because this event is in head of rob
+//                     for (uint32_t j=(depth+1)%_param->_size_upt_queue[i];
+//                          //uint32_t j=bottom;
+//                          j!=top; 
+//                          j=(j+1)%_param->_size_upt_queue[i])
+//                       if ((reg_UPDATE_PREDICTION_TABLE [i][j]._state != UPDATE_PREDICTION_STATE_END) and
+//                           (reg_UPDATE_PREDICTION_TABLE [i][j]._state != UPDATE_PREDICTION_STATE_EMPTY))
+//                         {
+//                           find = true;
+//                           reg_UPDATE_PREDICTION_TABLE [i][j]._state = UPDATE_PREDICTION_STATE_EVENT;
+//                           reg_UPDATE_PREDICTION_TABLE [i][j]._retire_ok = false;
+//                         }
+//                       else
+//                         if (not find) // while state == end or empty
+//                           depth_new ++;
+                    
+//                     if ((reg_UPDATE_PREDICTION_TABLE [i][depth]._state != UPDATE_PREDICTION_STATE_END) and
+//                         (reg_UPDATE_PREDICTION_TABLE [i][depth]._state != UPDATE_PREDICTION_STATE_EMPTY))
+//                       {
+//                         find = true;
+//                         reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_EVENT;
+//                         reg_UPDATE_PREDICTION_TABLE [i][depth]._retire_ok = false;
+
+//                       }
+//                     else
+//                       // while state == end or empty
+//                       depth = (depth_new+1)%_param->_size_upt_queue[i];
+
+//                     log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * find       : %d",find);
+//                     log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * depth_new  : %d",depth_new);
+                    
+//                     // Test if have update slot
+//                     if (find)
+//                       {
+// //                         // flush all slot after the event
+// //                         for (uint32_t j=(depth+1)%_param->_size_upt_queue[i];
+// //                              j!=top; 
+// //                              j=(j+1)%_param->_size_upt_queue[i])
+// //                           reg_UPDATE_PREDICTION_TABLE [i][j]._state = UPDATE_PREDICTION_STATE_EVENT;
+
+// //                         reg_UPDATE_PREDICTION_TABLE [i][depth]._state = UPDATE_PREDICTION_STATE_EVENT;
+                        
+//                         // reg_UPT_BOTTOM    [i];
+//                         // TODO : special case : event is an exception on branch, also depth is not valid
+//                         reg_UPT_TOP       [i] = depth; // depth is again valid
+//                         reg_UPT_TOP_EVENT [i] = top;
+                        
+//                         if (bottom == reg_UPT_TOP [i])
+//                           reg_UPT_EMPTY [i] = true;
+//                       }
+
+//                     bool     full       = ((depth == top) and (top == bottom) and not reg_UPT_EMPTY [i]);
+//                     bool     update_ras = find and ((top != depth) or full);
+                    
+//                     log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * update_ras : %d",update_ras);
+                    
+//                     if (not previous_update_ras and update_ras)
+//                       reg_UPT_UPDATE [i]  = new_update;
+              
+//                     // new state :
+//                     //   * test if ufpt is empty
+//                     //     * ok : flush upft and upt
+//                     //     * ko : test if have previous flush upt
+//                     //            * ok : nothing
+//                     //            * ko : flush upt
+//                     reg_EVENT_VAL     [i] = update_ras;
+//                     reg_EVENT_UPT_PTR [i] = depth;
+
+//                     log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_UFPT_NB_NEED_UPDATE          : %d",reg_UFPT_NB_NEED_UPDATE [i]);
+// //                     if (reg_UFPT_NB_NEED_UPDATE [i] > 0)
+//                     if ( (reg_UFPT_NB_NEED_UPDATE [i] > 0) or
+//                          (reg_UFPT_NB_UPDATE      [i] > 0))
+//                       {
+//                         if (update_ras)
+//                           {
+//                             log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_EVENT_FLUSH_UFPT_AND_UPT (branch_complete - miss)",i);
+//                             reg_EVENT_STATE [i] = EVENT_STATE_EVENT_FLUSH_UFPT_AND_UPT;
+//                           }
+//                         else
+//                           {
+//                             log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_EVENT_FLUSH_UFPT (branch_complete - miss)",i);
+// //                          reg_EVENT_VAL   [i] = false;
+
+//                             reg_EVENT_STATE [i] = EVENT_STATE_EVENT_FLUSH_UFPT;
+//                           }                          
+//                       }
+//                     else
+//                       {
+// //                         if (not previous_update_ras)
+//                         if (update_ras)
+//                           {
+//                             // have ras prediction ?
+//                             log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_EVENT_FLUSH_UPT (branch_complete - miss)",i);
+                            
+//                             reg_EVENT_STATE [i] = EVENT_STATE_EVENT_FLUSH_UPT;
+//                           }
+//                         else
+//                           {
+//                             // special case : nothing
+// //                          reg_EVENT_VAL     [i] = false;
+
+//                             reg_EVENT_STATE [i] = EVENT_STATE_OK;
+//                           }
+//                       }
+
+//                     // else no update
+                    
+//                     reg_EVENT_DEPTH           [i] = depth;
+// //                  reg_EVENT_ADDRESS_SRC     [i] = address_src; // delay_slot is compute in I_State
+// //                  reg_EVENT_ADDRESS_DEST_VAL[i] = good_take;
+// //                  reg_EVENT_ADDRESS_DEST    [i] = good_addr;
 
                     break;
@@ -994,6 +1174,7 @@
         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_VAL             : %d"  ,reg_EVENT_VAL             [i]);
         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_UPT_PTR         : %d"  ,reg_EVENT_UPT_PTR         [i]);
+        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_UPT_FULL        : %d"  ,reg_EVENT_UPT_FULL        [i]);
         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_STATE           : %s"  ,toString(reg_EVENT_STATE [i]).c_str());
-        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_SOURCE          : %s"  ,toString(reg_EVENT_SOURCE[i]).c_str());
+        log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_IS_BRANCH       : %d"  ,reg_EVENT_IS_BRANCH       [i]);
         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_DEPTH           : %d"  ,reg_EVENT_DEPTH           [i]);
         log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * reg_EVENT_ADDRESS_SRC     : %.8x (%.8x)",reg_EVENT_ADDRESS_SRC     [i],reg_EVENT_ADDRESS_SRC     [i]<<2);
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 111)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Prediction_unit_allocation.cpp	(revision 112)
@@ -45,5 +45,5 @@
 							 ,IN
 							 ,SOUTH,
-							 "Generalist interface"
+							 _("Generalist interface")
 #endif
 							 );
@@ -56,5 +56,5 @@
     {
       {
-	ALLOC1_INTERFACE("predict",IN,SOUTH,"Interface with ifetch unit",_param->_nb_context);
+ 	ALLOC1_INTERFACE_BEGIN("predict",IN,SOUTH,_("Interface with ifetch unit"),_param->_nb_context);
 	
 	ALLOC1_VALACK_IN ( in_PREDICT_VAL                        ,VAL);
@@ -68,8 +68,13 @@
 	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);
+
+ 	ALLOC1_INTERFACE_END(_param->_nb_context);
       }
       {
-	ALLOC2_INTERFACE("predict",IN,SOUTH,"Interface with ifetch unit",_param->_nb_context,_param->_nb_instruction[it1]);
+	ALLOC2_INTERFACE_BEGIN("predict",IN,SOUTH,_("Interface with ifetch unit"),_param->_nb_context,_param->_nb_instruction[it1]);
+
 	_ALLOC2_SIGNAL_OUT(out_PREDICT_INSTRUCTION_ENABLE         ,"instruction_enable"         ,Tcontrol_t         ,1,_param->_nb_context,_param->_nb_instruction[it1]);
+
+	ALLOC2_INTERFACE_END(_param->_nb_context,_param->_nb_instruction[it1]);
       }
     }
@@ -78,5 +83,5 @@
     {
       {
-	ALLOC2_INTERFACE("decod",IN,SOUTH,"Interface with decod unit",_param->_nb_decod_unit,_param->_nb_inst_decod[it1]);
+	ALLOC2_INTERFACE_BEGIN("decod",IN,SOUTH,_("Interface with decod unit"),_param->_nb_decod_unit,_param->_nb_inst_decod[it1]);
 	
 	_ALLOC2_VALACK_IN ( in_DECOD_VAL                        ,VAL,_param->_nb_decod_unit,_param->_nb_inst_decod[it1]);
@@ -91,4 +96,7 @@
 	_ALLOC2_SIGNAL_IN ( in_DECOD_ADDRESS_DEST               ,"address_dest"               ,Taddress_t         ,_param->_size_address         ,_param->_nb_decod_unit,_param->_nb_inst_decod[it1]);
 	_ALLOC2_SIGNAL_OUT(out_DECOD_CAN_CONTINUE               ,"can_continue"               ,Tcontrol_t         ,1                             ,_param->_nb_decod_unit,_param->_nb_inst_decod[it1]);
+
+
+	ALLOC2_INTERFACE_END(_param->_nb_decod_unit,_param->_nb_inst_decod[it1]);
       }
     }
@@ -96,5 +104,5 @@
     // ~~~~~[ Interface : "branch_complete" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("branch_complete", IN,SOUTH, "branch_complete", _param->_nb_inst_branch_complete);
+      ALLOC1_INTERFACE_BEGIN("branch_complete", IN,SOUTH, _("branch_complete"), _param->_nb_inst_branch_complete);
       
       ALLOC1_VALACK_IN ( in_BRANCH_COMPLETE_VAL            ,VAL);
@@ -108,9 +116,11 @@
 //       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);
+
+      ALLOC1_INTERFACE_END(_param->_nb_inst_branch_complete);
     }
 
     // ~~~~~[ Interface : "branch_event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("branch_event", IN,SOUTH, "branch_event", _param->_nb_context);
+      ALLOC1_INTERFACE_BEGIN("branch_event", IN,SOUTH, _("branch_event"), _param->_nb_context);
       
       ALLOC1_VALACK_OUT(out_BRANCH_EVENT_VAL              ,VAL);
@@ -122,9 +132,11 @@
       ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_DEST_VAL ,"address_dest_val",Tcontrol_t,1);
       ALLOC1_SIGNAL_OUT(out_BRANCH_EVENT_ADDRESS_DEST     ,"address_dest"    ,Taddress_t,_param->_size_address);
+
+      ALLOC1_INTERFACE_END(_param->_nb_context);
     }
 
     // ~~~~~[ Interface : "depth" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	      
     {
-      ALLOC1_INTERFACE("depth",OUT,SOUTH,"Interface with depth",_param->_nb_context);
+      ALLOC1_INTERFACE_BEGIN("depth",OUT,SOUTH,_("Interface with depth"),_param->_nb_context);
 
       ALLOC1_SIGNAL_OUT(out_DEPTH_VAL          ,"val"          ,Tcontrol_t,1);
@@ -133,9 +145,11 @@
       ALLOC1_SIGNAL_OUT(out_DEPTH_MAX          ,"max"          ,Tdepth_t  ,_param->_size_depth);
       ALLOC1_SIGNAL_OUT(out_DEPTH_FULL         ,"full"         ,Tcontrol_t,1);
+
+      ALLOC1_INTERFACE_END(_param->_nb_context);
     }
 
     // ~~~~~[ Interface : "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     {
-      ALLOC1_INTERFACE("event", IN,SOUTH,"event", _param->_nb_context);
+      ALLOC1_INTERFACE_BEGIN("event", IN,SOUTH,_("event"), _param->_nb_context);
 
       ALLOC1_VALACK_IN ( in_EVENT_VAL    ,VAL);
@@ -143,4 +157,6 @@
       ALLOC1_SIGNAL_IN ( in_EVENT_TYPE   ,"type" ,Tevent_type_t ,_param->_size_event_type );
       ALLOC1_SIGNAL_IN ( in_EVENT_DEPTH  ,"depth",Tdepth_t      ,_param->_size_depth      );
+
+      ALLOC1_INTERFACE_END(_param->_nb_context);
     }
 
@@ -421,5 +437,6 @@
 	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_DIRECTION",
 			           dest,"out_UPDATE_"+toString(i)+    "_DIRECTION_GOOD");
-	  
+	  COMPONENT_MAP(_component,src , "in_UPDATE_"+toString(i)+    "_PREDICTION_IFETCH",
+			           dest,"out_UPDATE_"+toString(i)+    "_PREDICTION_IFETCH");
 	}
     }
@@ -532,5 +549,5 @@
 			           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");
+			           dest,"out_UPDATE_"+toString(i)+    "_PREDICTION_IFETCH");
 	}
     }
@@ -656,5 +673,5 @@
 	  //in_UPDATE_UPT_RAS_FLUSH             - 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
+	  //in_UPDATE_UPT_PREDICTION_IFETCH     - component_map return_address_stack, direction
 	}
 
