Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/src/test.cpp	(revision 95)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/SelfTest/src/test.cpp	(revision 97)
@@ -94,7 +94,8 @@
   ALLOC1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_DEST          ,"out_BRANCH_EVENT_ADDRESS_DEST          ",Taddress_t         ,_param->_nb_context);
 												                         
-  ALLOC1_SC_SIGNAL( in_EVENT_STATE                    ," in_EVENT_STATE                    ",Tevent_state_t     ,_param->_nb_context);
-  ALLOC1_SC_SIGNAL( in_EVENT_TYPE                     ," in_EVENT_TYPE                     ",Tevent_type_t      ,_param->_nb_context);
-  ALLOC1_SC_SIGNAL( in_EVENT_DEPTH                    ," in_EVENT_DEPTH                    ",Tdepth_t           ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL( in_EVENT_VAL                          ," in_EVENT_VAL                          ",Tcontrol_t         ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL(out_EVENT_ACK                          ,"out_EVENT_ACK                          ",Tcontrol_t         ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL( in_EVENT_TYPE                         ," in_EVENT_TYPE                         ",Tevent_type_t      ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL( in_EVENT_DEPTH                        ," in_EVENT_DEPTH                        ",Tdepth_t           ,_param->_nb_context);
 
   ALLOC1_SC_SIGNAL(out_DEPTH_CURRENT                      ,"out_DEPTH_CURRENT                      ",Tdepth_t           ,_param->_nb_context);
@@ -160,5 +161,6 @@
   INSTANCE1_SC_SIGNAL(_Prediction_unit,out_BRANCH_EVENT_ADDRESS_DEST          ,_param->_nb_context);
 
-  INSTANCE1_SC_SIGNAL(_Prediction_unit, in_EVENT_STATE                        ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit, in_EVENT_VAL                          ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Prediction_unit,out_EVENT_ACK                          ,_param->_nb_context);
   INSTANCE1_SC_SIGNAL(_Prediction_unit, in_EVENT_TYPE                         ,_param->_nb_context);
   if (_param->_have_port_depth)
@@ -364,5 +366,6 @@
   DELETE1_SC_SIGNAL(out_BRANCH_EVENT_ADDRESS_DEST     ,_param->_nb_context);
 
-  DELETE1_SC_SIGNAL( in_EVENT_STATE                    ,_param->_nb_context);
+  DELETE1_SC_SIGNAL( in_EVENT_VAL                      ,_param->_nb_context);
+  DELETE1_SC_SIGNAL(out_EVENT_ACK                      ,_param->_nb_context);
   DELETE1_SC_SIGNAL( in_EVENT_TYPE                     ,_param->_nb_context);
   DELETE1_SC_SIGNAL( in_EVENT_DEPTH                    ,_param->_nb_context);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/Makefile.deps
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/Makefile.deps	(revision 95)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/Makefile.deps	(revision 97)
@@ -21,5 +21,5 @@
 
 Update_Prediction_Table_LIBRARY		= 	-lUpdate_Prediction_Table	\
-					$(Behavioural_LIBRARY)	
+					$(Behavioural_LIBRARY)
 
 Update_Prediction_Table_DIR_LIBRARY		=	-L$(Update_Prediction_Table_DIR)/lib	\
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/debug.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/debug.cfg	(revision 95)
+++ 	(revision )
@@ -1,11 +1,0 @@
-Update_Prediction_Table
-1	1	+1	# nb_context             
-4	4	*2	# size_upt_queue         [0] [nb_context]
-1	1	+1	# size_ufpt_queue        [0] [nb_context]
-32	32	*2	# size_address           
-4	4	*4	# nb_inst_predict        
-4	4	*4	# nb_inst_decod          
-4	4	*4	# nb_inst_branch_complete
-4	4	*4	# nb_inst_update         
-0	0	+1	# size_history           
-3	3	*2	# size_ras_index         [0] [nb_context]
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/src/test.cpp	(revision 95)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/SelfTest/src/test.cpp	(revision 97)
@@ -42,5 +42,5 @@
 
 #ifdef STATISTICS
-  morpheo::behavioural::Parameters_Statistics * _parameters_statistics = new morpheo::behavioural::Parameters_Statistics (5,50);
+  morpheo::behavioural::Parameters_Statistics * _parameters_statistics = new morpheo::behavioural::Parameters_Statistics (5,CYCLE_MAX);
 #endif
 
@@ -137,5 +137,6 @@
   ALLOC1_SC_SIGNAL(out_UPDATE_RAS_PREDICTION_IFETCH   ,"out_UPDATE_RAS_PREDICTION_IFETCH   ",Tcontrol_t         ,_param->_nb_inst_update);
 
-  ALLOC1_SC_SIGNAL( in_EVENT_STATE                    ," in_EVENT_STATE                    ",Tevent_state_t     ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL( in_EVENT_VAL                      ," in_EVENT_VAL                      ",Tcontrol_t         ,_param->_nb_context);
+  ALLOC1_SC_SIGNAL(out_EVENT_ACK                      ,"out_EVENT_ACK                      ",Tcontrol_t         ,_param->_nb_context);
   ALLOC1_SC_SIGNAL( in_EVENT_TYPE                     ," in_EVENT_TYPE                     ",Tevent_type_t      ,_param->_nb_context);
   ALLOC1_SC_SIGNAL( in_EVENT_DEPTH                    ," in_EVENT_DEPTH                    ",Tdepth_t           ,_param->_nb_context);
@@ -230,5 +231,6 @@
   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_STATE                    ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_EVENT_VAL                      ,_param->_nb_context);
+  INSTANCE1_SC_SIGNAL(_Update_Prediction_Table,out_EVENT_ACK                      ,_param->_nb_context);
   INSTANCE1_SC_SIGNAL(_Update_Prediction_Table, in_EVENT_TYPE                     ,_param->_nb_context);
   if (_param->_have_port_depth)
@@ -316,8 +318,6 @@
         in_UPDATE_ACK          [i]->write(0);
       for (uint32_t i=0; i<_param->_nb_context; ++i)
-        {
-        in_EVENT_STATE [i]->write(EVENT_STATE_NO_EVENT);
-        in_EVENT_TYPE  [i]->write(EVENT_TYPE_NONE     );
-        }
+        in_EVENT_VAL   [i]->write(0);
+
       //---------------------------------------------------------------------
       //---------------------------------------------------------------------
@@ -932,9 +932,9 @@
          
           SC_START(1);
-          in_EVENT_STATE [context]->write(EVENT_STATE_END            );
+          in_EVENT_VAL   [context]->write(1);
           in_EVENT_TYPE  [context]->write(EVENT_TYPE_MISS_SPECULATION);
 
           SC_START(1);
-          in_EVENT_STATE [context]->write(EVENT_STATE_NO_EVENT       );
+          in_EVENT_VAL   [context]->write(0);
           in_EVENT_TYPE  [context]->write(EVENT_TYPE_NONE            );
         }
@@ -1366,9 +1366,9 @@
          
           SC_START(1);
-          in_EVENT_STATE [context]->write(EVENT_STATE_END            );
+          in_EVENT_VAL   [context]->write(1);
           in_EVENT_TYPE  [context]->write(EVENT_TYPE_MISS_SPECULATION);
 
           SC_START(1);
-          in_EVENT_STATE [context]->write(EVENT_STATE_NO_EVENT       );
+          in_EVENT_VAL   [context]->write(0);
           in_EVENT_TYPE  [context]->write(EVENT_TYPE_NONE            );
         }
@@ -1974,9 +1974,9 @@
             
             SC_START(1);
-            in_EVENT_STATE [context]->write(EVENT_STATE_END            );
+            in_EVENT_VAL   [context]->write(1);
             in_EVENT_TYPE  [context]->write(EVENT_TYPE_MISS_SPECULATION);
             
             SC_START(1);
-            in_EVENT_STATE [context]->write(EVENT_STATE_NO_EVENT       );
+            in_EVENT_VAL   [context]->write(0);
             in_EVENT_TYPE  [context]->write(EVENT_TYPE_NONE            );
           }
@@ -2155,5 +2155,6 @@
   delete [] out_UPDATE_RAS_PREDICTION_IFETCH;
 
-  DELETE1_SC_SIGNAL( in_EVENT_STATE                    ,_param->_nb_context);
+  DELETE1_SC_SIGNAL( in_EVENT_VAL                      ,_param->_nb_context);
+  DELETE1_SC_SIGNAL(out_EVENT_ACK                      ,_param->_nb_context);
   DELETE1_SC_SIGNAL( in_EVENT_TYPE                     ,_param->_nb_context);
   DELETE1_SC_SIGNAL( in_EVENT_DEPTH                    ,_param->_nb_context);
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 95)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h	(revision 97)
@@ -52,10 +52,9 @@
   public    : Stat                           * _stat;
 
-  private   : counter_t                     ** _stat_nb_branch_hit       ; //[nb_context]
-  private   : counter_t                     ** _stat_nb_branch_miss      ; //[nb_context]
-  private   : counter_t                     ** _stat_nb_branch_unused    ; //[nb_context]
-  private   : counter_t                     ** _stat_queue_nb_cycle_empty; //[nb_context]
-  private   : counter_t                     ** _stat_queue_nb_cycle_full ; //[nb_context]
-  private   : counter_t                     ** _stat_queue_nb_elt        ; //[nb_context]
+  private   : counter_t                    *** _stat_nb_branch_hit            ; //[nb_context][MAX_BRANCH_CONDITION]
+  private   : counter_t                    *** _stat_nb_branch_miss           ; //[nb_context][MAX_BRANCH_CONDITION]
+  private   : counter_t                     ** _stat_nb_branch_unused         ; //[nb_context]
+  private   : counter_t                     ** _stat_ufpt_queue_nb_elt        ; //[nb_context]
+  private   : counter_t                     ** _stat_upt_queue_nb_elt         ; //[nb_context]
 
 #endif
@@ -143,5 +142,6 @@
 
     // ~~~~~[ Interface : "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  public    : SC_IN (Tevent_state_t     )  **  in_EVENT_STATE                    ; //[nb_context]
+  public    : SC_IN (Tcontrol_t         )  **  in_EVENT_VAL                      ; //[nb_context]
+  public    : SC_OUT(Tcontrol_t         )  ** out_EVENT_ACK                      ; //[nb_context]
   public    : SC_IN (Tevent_type_t      )  **  in_EVENT_TYPE                     ; //[nb_context]
   public    : SC_IN (Tdepth_t           )  **  in_EVENT_DEPTH                    ; //[nb_context]
@@ -197,4 +197,5 @@
   private   : Tdepth_t                      * internal_UPDATE_DEPTH                   ; //[nb_inst_update]
   private   : bool                          * internal_UPDATE_RAS                     ; //[nb_inst_update]
+  private   : Tcontrol_t                    * internal_EVENT_ACK                      ; //[nb_context]
 
 #endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table.cpp	(revision 95)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table.cpp	(revision 97)
@@ -76,5 +76,5 @@
     if (usage_is_set(_usage,USE_SYSTEMC))
       {
-
+        // Constant
 	for (uint32_t i=0; i<_param->_nb_inst_branch_complete; i++)
 	  {
@@ -82,4 +82,9 @@
 	    PORT_WRITE(out_BRANCH_COMPLETE_ACK [i], internal_BRANCH_COMPLETE_ACK [i]);
 	  }
+        for (uint32_t i=0; i<_param->_nb_context; ++i)
+          {
+            internal_EVENT_ACK [i] = 1;
+            PORT_WRITE(out_EVENT_ACK [i], internal_EVENT_ACK [i]);
+          }
 
 	log_printf(INFO,Update_Prediction_Table,FUNCTION,"Method - transition");
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 95)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_allocation.cpp	(revision 97)
@@ -151,5 +151,6 @@
       ALLOC1_INTERFACE("event", IN,SOUTH,"event", _param->_nb_context);
 
-      ALLOC1_SIGNAL_IN ( in_EVENT_STATE  ,"state",Tevent_state_t,_param->_size_event_state);
+      ALLOC1_VALACK_IN ( in_EVENT_VAL    ,VAL);
+      ALLOC1_VALACK_OUT(out_EVENT_ACK    ,ACK);
       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      );
@@ -183,4 +184,5 @@
     ALLOC1(internal_UPDATE_DEPTH                    ,Tdepth_t  ,_param->_nb_inst_update);
     ALLOC1(internal_UPDATE_RAS                      ,bool      ,_param->_nb_inst_update);
+    ALLOC1(internal_EVENT_ACK                       ,Tcontrol_t,_param->_nb_context);
 
     // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
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 95)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_deallocation.cpp	(revision 97)
@@ -111,5 +111,6 @@
 
         // ~~~~~[ Interface : "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-        DELETE1_SIGNAL( in_EVENT_STATE  ,_param->_nb_context,_param->_size_event_state);
+        DELETE1_SIGNAL( in_EVENT_VAL    ,_param->_nb_context,1);
+        DELETE1_SIGNAL(out_EVENT_ACK    ,_param->_nb_context,1);
         DELETE1_SIGNAL( in_EVENT_TYPE   ,_param->_nb_context,_param->_size_event_type );
         DELETE1_SIGNAL( in_EVENT_DEPTH  ,_param->_nb_context,_param->_size_depth      );
@@ -137,4 +138,5 @@
         DELETE1(internal_UPDATE_DEPTH                    ,_param->_nb_inst_update);
         DELETE1(internal_UPDATE_RAS                      ,_param->_nb_inst_update);
+        DELETE1(internal_EVENT_ACK                       ,_param->_nb_context);
         
         // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_branch_complete.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_branch_complete.cpp	(revision 95)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_genMealy_branch_complete.cpp	(revision 97)
@@ -67,6 +67,6 @@
               if (take != 1)
                 throw ERRORMORPHEO(FUNCTION,toString("Branch_complete[%d] (condition %s) : bad direction.",i,toString(condition).c_str()));
-              if (addr_dest != addr_good)
-                throw ERRORMORPHEO(FUNCTION,toString("Branch_complete[%d] (condition %s) : bad destination address.",i,toString(condition).c_str()));
+//               if (addr_dest != addr_good)
+//                 throw ERRORMORPHEO(FUNCTION,toString("Branch_complete[%d] (condition %s) : bad destination address.",i,toString(condition).c_str()));
 #endif
 
@@ -85,6 +85,6 @@
 
 #ifdef DEBUG_TEST
-              if (addr_dest != addr_good)
-                throw ERRORMORPHEO(FUNCTION,toString("Branch_complete[%d] (condition %s) : bad destination address.",i,toString(condition).c_str()));
+//               if (addr_dest != addr_good)
+//                 throw ERRORMORPHEO(FUNCTION,toString("Branch_complete[%d] (condition %s) : bad destination address.",i,toString(condition).c_str()));
 #endif
 
@@ -103,6 +103,6 @@
 
 #ifdef DEBUG_TEST
-              if (addr_dest != addr_good)
-                throw ERRORMORPHEO(FUNCTION,toString("Branch_complete[%d] (condition %s) : bad destination address.",i,toString(condition).c_str()));
+//               if (addr_dest != addr_good)
+//                 throw ERRORMORPHEO(FUNCTION,toString("Branch_complete[%d] (condition %s) : bad destination address.",i,toString(condition).c_str()));
 #endif
 
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_statistics_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_statistics_allocation.cpp	(revision 95)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_statistics_allocation.cpp	(revision 97)
@@ -8,4 +8,6 @@
 
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h"
+#include "Behavioural/include/Allocation.h"
+
 
 namespace morpheo {
@@ -28,21 +30,76 @@
 		      param_statistics);
 
-//     _stat_nb_branch_hit        = new counter_t * [_param->_nb_context];
-//     _stat_nb_branch_miss       = new counter_t * [_param->_nb_context];
-//     _stat_nb_branch_unused     = new counter_t * [_param->_nb_context];
-//     _stat_queue_nb_cycle_empty = new counter_t * [_param->_nb_context];
-//     _stat_queue_nb_cycle_full  = new counter_t * [_param->_nb_context];
-//     _stat_queue_nb_elt         = new counter_t * [_param->_nb_context];
-  
-//     for (uint32_t i=0; i<_param->_nb_context; ++i)
-//       {
-//         _stat_nb_branch_hit        [i] = _stat->create_counter("nb_branch_hit_"       +toString(i),"",toString(_("Branch hit speculation (context %d)"),i));
-//         _stat_nb_branch_miss       [i] = _stat->create_counter("nb_branch_miss_"      +toString(i),"",toString(_("Branch miss speculation (context %d)"),i));
-//         _stat_nb_branch_unused     [i] = _stat->create_counter("nb_branch_unused_"    +toString(i),"",toString(_("Branch unused, because an previous branch have miss speculation (context %d)"),i));
-//         _stat_queue_nb_cycle_empty [i] = _stat->create_counter("queue_nb_cycle_empty_"+toString(i),"",toString(_("Cycle number where the Update Prediction Table is empty (context %d)"),i));
-//         _stat_queue_nb_cycle_full  [i] = _stat->create_counter("queue_nb_cycle_full_" +toString(i),"",toString(_("Cycle number where the Update Prediction Table is full (%d elements) (context %d)"),_param->_size_queue[i],i));
-//         _stat_queue_nb_elt         [i] = _stat->create_counter("queue_nb_elt_"        +toString(i),"",toString(_("Average branchement by cycle in Update Prediction Table (context %d)"),i));
-//       }
-    
+    {
+      ALLOC2(_stat_nb_branch_hit        ,counter_t *,_param->_nb_context,MAX_BRANCH_CONDITION);
+      ALLOC2(_stat_nb_branch_miss       ,counter_t *,_param->_nb_context,MAX_BRANCH_CONDITION);
+      ALLOC1(_stat_nb_branch_unused     ,counter_t *,_param->_nb_context);
+      
+      for (uint32_t i=0; i<_param->_nb_context; ++i)
+        {
+          std::string sum_miss        = "0";
+          std::string sum_branchement = "0";
+
+          for (uint32_t j=0; j<MAX_BRANCH_CONDITION; ++j)
+            if (is_branch_condition_valid(j))
+              {
+                std::string nb_miss        = "nb_branch_miss_"+toString(i)+"_"+toString(j); 
+                std::string nb_branchement = "+ nb_branch_hit_"+toString(i)+"_"+toString(j)+" nb_branch_miss_"+toString(i)+"_"+toString(j);
+                _stat_nb_branch_hit  [i][j] = _stat->create_counter("nb_branch_hit_" +toString(i)+"_"+toString(j),"",toString(_("Branch hit  speculation, branch condition : %s (context %d)"),toString(static_cast<branch_condition_t>(j)).c_str(),i));
+                _stat_nb_branch_miss [i][j] = _stat->create_counter(nb_miss,"",toString(_("Branch miss speculation, branch condition : %s (context %d)"),toString(static_cast<branch_condition_t>(j)).c_str(),i));
+
+//                 _stat->create_expr_average("average_miss_"+toString(i)+"_"+toString(j),
+//                                            "nb_branch_miss_"+toString(i)+"_"+toString(j),
+//                                            nb_branchement,
+//                                            "miss/branchement",
+//                                            toString(_("Average miss by branchement, branch condition : %s (context %d)"),toString(static_cast<branch_condition_t>(j)).c_str(),i));
+
+                _stat->create_expr_percent("percent_miss_"+toString(i)+"_"+toString(j),
+                                           nb_miss,
+                                           nb_branchement,
+                                           toString(_("Percent miss by branchement, branch condition : %s (context %d)"),toString(static_cast<branch_condition_t>(j)).c_str(),i));
+
+                sum_miss        = "+ "+nb_miss       +" "+ sum_miss;
+                sum_branchement = "+ "+nb_branchement+" "+sum_branchement;
+              }
+
+//           _stat->create_expr_average("average_miss_"+toString(i),
+//                                      sum_miss,
+//                                      sum_branchement,
+//                                      "miss/branchement",
+//                                      toString(_("Average miss by branchement (context %d)"),i));
+
+          _stat->create_expr_percent("percent_miss_"+toString(i),
+                                     sum_miss,
+                                     sum_branchement,
+                                     toString(_("Percent miss by branchement (context %d)"),i));
+          
+          _stat_nb_branch_unused [i] = _stat->create_counter("nb_branch_unused_" +toString(i),"",toString(_("Branch unused (previous speculation) (context %d)"),i));
+        }
+    }
+
+    {
+      ALLOC1(_stat_ufpt_queue_nb_elt        ,counter_t *,_param->_nb_context);
+     
+      for (uint32_t i=0; i<_param->_nb_context; ++i)
+        {
+          _stat_ufpt_queue_nb_elt         [i] = _stat->create_counter("ufpt_queue_nb_elt_"+toString(i),"",toString(_("Branchement in Update Fetch Prediction Table (context %d)"),i));
+          
+          _stat->create_expr_average_by_cycle("average_occupation_ufpt_queue_"+toString(i),"ufpt_queue_nb_elt_"+toString(i), "", toString(_("Average instruction by cycle in Update Fetch Prediction Table (context %d)"),i));
+          _stat->create_expr_percent         ("percent_occupation_ufpt_queue_"+toString(i), "average_occupation_ufpt_queue_"+toString(i), toString(_param->_size_ufpt_queue[i]), toString(_("Percent occupation of Update Fetch Prediction Table (context %d)"),i));
+        }
+    }
+
+    {
+      ALLOC1(_stat_upt_queue_nb_elt        ,counter_t *,_param->_nb_context);
+     
+      for (uint32_t i=0; i<_param->_nb_context; ++i)
+        {
+          _stat_upt_queue_nb_elt         [i] = _stat->create_counter("upt_queue_nb_elt_"+toString(i),"",toString(_("Average branchement by cycle in Update Prediction Table (context %d)"),i));
+          
+          _stat->create_expr_average_by_cycle("average_occupation_upt_queue_"+toString(i),"upt_queue_nb_elt_"+toString(i), "", toString(_("Average instruction by cycle in Update Prediction Table (context %d)"),i));
+          _stat->create_expr_percent         ("percent_occupation_upt_queue_"+toString(i), "average_occupation_upt_queue_"+toString(i), toString(_param->_size_upt_queue[i]), toString(_("Percent occupation of Update Prediction Table (context %d)"),i));
+        }
+    }
+
     log_printf(FUNC,Update_Prediction_Table,FUNCTION,"End");
   };
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_statistics_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_statistics_deallocation.cpp	(revision 95)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_statistics_deallocation.cpp	(revision 97)
@@ -8,4 +8,5 @@
 
 #include "Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/include/Update_Prediction_Table.h"
+#include "Behavioural/include/Allocation.h"
 
 namespace morpheo {
@@ -27,10 +28,10 @@
     
     delete    _stat;
-//     delete [] _stat_nb_branch_hit       ;
-//     delete [] _stat_nb_branch_miss      ;
-//     delete [] _stat_nb_branch_unused    ;
-//     delete [] _stat_queue_nb_cycle_empty;
-//     delete [] _stat_queue_nb_cycle_full ;
-//     delete [] _stat_queue_nb_elt        ;
+
+    DELETE2(_stat_nb_branch_hit            ,_param->_nb_context,MAX_BRANCH_CONDITION);
+    DELETE2(_stat_nb_branch_miss           ,_param->_nb_context,MAX_BRANCH_CONDITION);
+    DELETE1(_stat_nb_branch_unused         ,_param->_nb_context);
+    DELETE1(_stat_ufpt_queue_nb_elt        ,_param->_nb_context);
+    DELETE1(_stat_upt_queue_nb_elt         ,_param->_nb_context);
     
     log_printf(FUNC,Update_Prediction_Table,FUNCTION,"End");
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp	(revision 95)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/Update_Prediction_Table/src/Update_Prediction_Table_transition.cpp	(revision 97)
@@ -472,4 +472,8 @@
 //                    bool have_event = ((reg_UPDATE_PREDICTION_TABLE [context][depth]._state == UPDATE_PREDICTION_STATE_KO) or
 //                                       (reg_UPDATE_PREDICTION_TABLE [context][depth]._state == UPDATE_PREDICTION_STATE_EVENT));
+#ifdef STATISTICS
+                      Tbranch_condition_t condition = reg_UPDATE_PREDICTION_TABLE [context][depth]._condition;
+                      bool ok     = (reg_UPDATE_PREDICTION_TABLE [context][depth]._state == UPDATE_PREDICTION_STATE_OK);
+#endif
                       bool ko     = (reg_UPDATE_PREDICTION_TABLE [context][depth]._state == UPDATE_PREDICTION_STATE_KO);
 
@@ -480,4 +484,9 @@
                           
                           reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_END_KO;
+
+#ifdef STATISTICS
+                          if (usage_is_set(_usage,USE_STATISTICS))
+                            (*_stat_nb_branch_miss [context][condition])++;
+#endif
                         }
                       else
@@ -486,4 +495,15 @@
                           
                           reg_UPDATE_PREDICTION_TABLE [context][depth]._state = UPDATE_PREDICTION_STATE_END_OK;
+
+
+#ifdef STATISTICS
+                          if (usage_is_set(_usage,USE_STATISTICS))
+                            {
+                              if (ok)
+                                (*_stat_nb_branch_hit    [context][condition]) ++;
+                              else
+                                (*_stat_nb_branch_unused [context]) ++;
+                            }
+#endif
                         }
                       
@@ -548,48 +568,38 @@
 	// ===================================================================
         for (uint32_t i=0; i<_param->_nb_context; ++i)
-          {
-            //----------------------------------------------------------------
-            // Cases
-            //----------------------------------------------------------------
-            //   * EVENT_TYPE_NONE               - nothing
-            //   * EVENT_TYPE_MISS_SPECULATION   
-            //     * EVENT_STATE_END             - Change state, reset pointer
-            //   * EVENT_TYPE_EXCEPTION          - 
-            //     * EVENT_STATE_EVENT           - Flush upft and upt
-            //     * EVENT_STATE_END             - Change state, reset pointer
-            //   * EVENT_TYPE_BRANCH_NO_ACCURATE - nothing : manage in decod and update
-            //   * EVENT_TYPE_SPR_ACCESS         - nothing
-            //   * EVENT_TYPE_MSYNC              - nothing
-            //   * EVENT_TYPE_PSYNC              - nothing
-            //   * EVENT_TYPE_CSYNC              - nothing
-
-            Tevent_state_t event_state = PORT_READ(in_EVENT_STATE [i]);
-            Tevent_type_t  event_type  = PORT_READ(in_EVENT_TYPE  [i]);
-//             Tdepth_t       depth       = PORT_READ(in_EVENT_DEPTH [i]);
+          if (PORT_READ(in_EVENT_VAL [i]) and internal_EVENT_ACK [i])
+            {
+              //----------------------------------------------------------------
+              // Cases
+              //----------------------------------------------------------------
+              //   * EVENT_TYPE_NONE               - nothing
+              //   * EVENT_TYPE_MISS_SPECULATION   - Change state, reset pointer
+              //   * EVENT_TYPE_EXCEPTION          - Flush upft and upt, Change state, reset pointer
+              //   * EVENT_TYPE_BRANCH_NO_ACCURATE - nothing : manage in decod and update
+              //   * EVENT_TYPE_SPR_ACCESS         - nothing
+              //   * EVENT_TYPE_MSYNC              - nothing
+              //   * EVENT_TYPE_PSYNC              - nothing
+              //   * EVENT_TYPE_CSYNC              - nothing
+              
+              Tevent_type_t  event_type  = PORT_READ(in_EVENT_TYPE  [i]);
+//            Tdepth_t       depth       = PORT_READ(in_EVENT_DEPTH [i]);
             
-            // Test if end of miss
-            if ((event_state == EVENT_STATE_END) and
-                (event_type  == EVENT_TYPE_MISS_SPECULATION))
-              {
-                log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * EVENT");
-                log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * state : EVENT_STATE_END");
-                log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * type  : EVENT_TYPE_MISS_SPECULATION");
-
-#ifdef DEBUG_TEST
-                if (reg_EVENT_STATE [i] != EVENT_STATE_WAIT_END_EVENT)
-                  throw ERRORMORPHEO(FUNCTION,_("Event : invalid event state."));
-#endif
-                
-                // Change state
-                log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_OK (event)",i);
-                
-                reg_EVENT_STATE [i] = EVENT_STATE_OK;
-
-//                 uint32_t bottom = reg_UPT_BOTTOM [i];
-
-//                 reg_UPT_TOP    [i] = bottom;
-//                 reg_UPT_UPDATE [i] = bottom;
-              }
-          }
+              // Test if end of miss
+              if (event_type  == EVENT_TYPE_MISS_SPECULATION)
+                {
+                  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"  * EVENT");
+                  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * type  : EVENT_TYPE_MISS_SPECULATION");
+                  
+#ifdef DEBUG_TEST
+                  if (reg_EVENT_STATE [i] != EVENT_STATE_WAIT_END_EVENT)
+                    throw ERRORMORPHEO(FUNCTION,_("Event : invalid event state."));
+#endif
+                  
+                  // Change state
+                  log_printf(TRACE,Update_Prediction_Table,FUNCTION,"    * EVENT [%d] <- EVENT_STATE_OK (event)",i);
+                  
+                  reg_EVENT_STATE [i] = EVENT_STATE_OK;
+                }
+            }
 
  	// ===================================================================
@@ -634,4 +644,17 @@
           }
 
+#ifdef STATISTICS
+        if (usage_is_set(_usage,USE_STATISTICS))
+          for (uint32_t i=0; i<_param->_nb_context; i++)
+            {
+              for (uint32_t j=0; j<_param->_size_ufpt_queue[i]; j++)
+                if (reg_UPDATE_FETCH_PREDICTION_TABLE [i][j]._state != UPDATE_FETCH_PREDICTION_STATE_EMPTY)
+                  (*_stat_ufpt_queue_nb_elt [i]) ++;
+              for (uint32_t j=0; j<_param->_size_upt_queue[i]; j++)
+                if (reg_UPDATE_PREDICTION_TABLE [i][j]._state != UPDATE_PREDICTION_STATE_EMPTY)
+                  (*_stat_upt_queue_nb_elt [i]) ++;
+            }
+#endif
+        
  	// ===================================================================
 	// =====[ PRINT ]=====================================================
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Prediction_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Prediction_unit.h	(revision 95)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/include/Prediction_unit.h	(revision 97)
@@ -115,5 +115,6 @@
 
     // ~~~~~[ Interface : "event" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  public    : SC_IN (Tevent_state_t     )  **  in_EVENT_STATE                    ; //[nb_context]
+  public    : SC_IN (Tcontrol_t         )  **  in_EVENT_VAL                      ; //[nb_context]
+  public    : SC_OUT(Tcontrol_t         )  ** out_EVENT_ACK                      ; //[nb_context]
   public    : SC_IN (Tevent_type_t      )  **  in_EVENT_TYPE                     ; //[nb_context]
   public    : SC_IN (Tdepth_t           )  **  in_EVENT_DEPTH                    ; //[nb_context]
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 95)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Prediction_unit_allocation.cpp	(revision 97)
@@ -136,5 +136,6 @@
       ALLOC1_INTERFACE("event", IN,SOUTH,"event", _param->_nb_context);
 
-      ALLOC1_SIGNAL_IN ( in_EVENT_STATE  ,"state",Tevent_state_t,_param->_size_event_state);
+      ALLOC1_VALACK_IN ( in_EVENT_VAL    ,VAL);
+      ALLOC1_VALACK_OUT(out_EVENT_ACK    ,ACK);
       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      );
@@ -711,5 +712,6 @@
 #endif
 
-	  PORT_MAP(_component,src , "in_EVENT_"+toString(i)+"_STATE",dest, "in_EVENT_"+toString(i)+"_STATE");
+	  PORT_MAP(_component,src , "in_EVENT_"+toString(i)+"_VAL"  ,dest, "in_EVENT_"+toString(i)+"_VAL"  );
+	  PORT_MAP(_component,src ,"out_EVENT_"+toString(i)+"_ACK"  ,dest,"out_EVENT_"+toString(i)+"_ACK"  );
 	  PORT_MAP(_component,src , "in_EVENT_"+toString(i)+"_TYPE" ,dest, "in_EVENT_"+toString(i)+"_TYPE" );
 	  if (_param->_have_port_depth)
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Prediction_unit_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Prediction_unit_deallocation.cpp	(revision 95)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Front_end/Front_end/Prediction_unit/src/Prediction_unit_deallocation.cpp	(revision 97)
@@ -71,5 +71,6 @@
         DELETE1_SIGNAL(out_BRANCH_EVENT_ADDRESS_DEST     ,_param->_nb_context,_param->_size_instruction_address);
 
-        DELETE1_SIGNAL( in_EVENT_STATE  ,_param->_nb_context,_param->_size_event_state);
+        DELETE1_SIGNAL( in_EVENT_VAL    ,_param->_nb_context,1);
+        DELETE1_SIGNAL(out_EVENT_ACK    ,_param->_nb_context,1);
         DELETE1_SIGNAL( in_EVENT_TYPE   ,_param->_nb_context,_param->_size_event_type );
         DELETE1_SIGNAL( in_EVENT_DEPTH  ,_param->_nb_context,_param->_size_depth      );
