Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/Makefile
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/Makefile	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/Makefile	(revision 4)
@@ -0,0 +1,23 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_MORPHEO			= ../../../../..
+
+#-----[ Library ]------------------------------------------
+LIBRARY				= $(DIR_LIB)/libMeta_Predictor_Glue.a
+
+
+#-----[ include ]------------------------------------------
+
+all				:
+				@$(MAKE) all_component
+
+include                         $(DIR_MORPHEO)/Behavioural/Makefile.defs
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Common
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Component
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/Makefile.deps
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/Makefile.deps	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/Makefile.deps	(revision 4)
@@ -0,0 +1,31 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+# DIR_MORPHEO must be defined
+
+ifndef Behavioural
+include 			$(DIR_MORPHEO)/Behavioural/Makefile.deps
+endif
+
+Meta_Predictor_Glue			= yes
+
+#-----[ Library ]------------------------------------------
+Meta_Predictor_Glue_LIBRARY		= 	-lMeta_Predictor_Glue	\
+					$(Behavioural_LIBRARY)	
+
+Meta_Predictor_Glue_DIR_LIBRARY		=	-L$(DIR_MORPHEO)/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/lib	\
+					$(Behavioural_DIR_LIBRARY)
+
+#-----[ Rules ]--------------------------------------------
+
+Meta_Predictor_Glue_library		: 
+				@$(MAKE) Behavioural_library
+				@$(MAKE) --directory=$(DIR_MORPHEO)/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue --makefile=Makefile 
+	
+Meta_Predictor_Glue_library_clean	: 
+				@$(MAKE) Behavioural_library_clean
+				@$(MAKE) --directory=$(DIR_MORPHEO)/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue --makefile=Makefile clean
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/Makefile
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/Makefile	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/Makefile	(revision 4)
@@ -0,0 +1,29 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_MORPHEO			= ../../../../../..
+
+LIBRARY				= $(Meta_Predictor_Glue_LIBRARY)
+
+DIR_LIBRARY			= $(Meta_Predictor_Glue_DIR_LIBRARY)
+
+#-----[ include ]------------------------------------------
+
+all				:
+				@$(MAKE) all_selftest
+
+library				: Meta_Predictor_Glue_library
+
+library_clean			: Meta_Predictor_Glue_library_clean
+
+include                         ../Makefile.deps
+include                         $(DIR_MORPHEO)/Behavioural/Makefile.defs
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Common
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Selftest
+include 			$(DIR_MORPHEO)/Behavioural/Makefile.Synthesis
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/configuration.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/configuration.cfg	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/configuration.cfg	(revision 4)
@@ -0,0 +1,16 @@
+Meta_Predictor_Glue
+0	1	+1	# have_meta_predictor               
+0	1	+1	# predictor_0_have_bht              
+4	4	+1	# predictor_0_bht_size_shifter      
+1	1	+1	# predictor_0_have_pht              
+2	2	+1	# predictor_0_pht_size_counter      
+1	1	+1	# predictor_1_have_bht              
+3	3	+1	# predictor_1_bht_size_shifter      
+0	1	+1	# predictor_1_have_pht              
+4	4	+1	# predictor_1_pht_size_counter      
+1	1	+1	# predictor_2_have_bht              
+2	2	+1	# predictor_2_bht_size_shifter      
+0	1	+1	# predictor_2_have_pht              
+4	4	+1	# predictor_2_pht_size_counter      
+1	1	+1	# nb_prediction                     
+1	1	+1	# nb_branch_complete                
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/include/test.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/include/test.h	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/include/test.h	(revision 4)
@@ -0,0 +1,28 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ * Test "RegisterFile"
+ */
+
+#ifdef SYSTEMC
+#include "systemc.h"
+#endif
+
+#include <string>
+#include <iostream>
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+
+using namespace std;
+using namespace morpheo;
+using namespace morpheo::behavioural;
+using namespace morpheo::behavioural::stage_1_ifetch;
+using namespace morpheo::behavioural::stage_1_ifetch::predictor;
+using namespace morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor;
+
+using namespace morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::meta_predictor_glue;
+
+void test    (string name,
+	      morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::meta_predictor_glue::Parameters param);
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/src/main.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/src/main.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/src/main.cpp	(revision 4)
@@ -0,0 +1,104 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/include/test.h"
+
+#define NB_PARAMS 15
+
+void usage (string exec)
+{
+  cerr << "<Usage> " << exec << " name_instance list_params" << endl
+       << "list_params is :" << endl
+       << " - have_meta_predictor                (bool    )" << endl
+       << " - predictor_0_have_bht               (bool    )" << endl
+       << " - predictor_0_bht_size_shifter       (uint32_t)" << endl
+       << " - predictor_0_have_pht               (bool    )" << endl
+       << " - predictor_0_pht_size_counter       (uint32_t)" << endl
+       << " - predictor_1_have_bht               (bool    )" << endl
+       << " - predictor_1_bht_size_shifter       (uint32_t)" << endl
+       << " - predictor_1_have_pht               (bool    )" << endl
+       << " - predictor_1_pht_size_counter       (uint32_t)" << endl
+       << " - predictor_2_have_bht               (bool    )" << endl
+       << " - predictor_2_bht_size_shifter       (uint32_t)" << endl
+       << " - predictor_2_have_pht               (bool    )" << endl
+       << " - predictor_2_pht_size_counter       (uint32_t)" << endl
+       << " - nb_prediction                      (uint32_t)" << endl
+       << " - nb_branch_complete                 (uint32_t)" << endl;
+
+  exit (1);
+}
+
+#ifndef SYSTEMC
+int main    (int argc, char * argv[])
+#else
+int sc_main (int argc, char * argv[])
+#endif
+{
+  if (argc != 2+NB_PARAMS)
+    usage (argv[0]);
+
+  const string   name      = argv[1];
+
+  const bool     have_meta_predictor               = atoi(argv[ 2]);
+
+  const bool     predictor_0_have_bht              = atoi(argv[ 3]);
+  const uint32_t predictor_0_bht_size_shifter      = atoi(argv[ 4]);
+  const bool     predictor_0_have_pht              = atoi(argv[ 5]);
+  const uint32_t predictor_0_pht_size_counter      = atoi(argv[ 6]);
+
+  const bool     predictor_1_have_bht              = atoi(argv[ 7]);
+  const uint32_t predictor_1_bht_size_shifter      = atoi(argv[ 8]);
+  const bool     predictor_1_have_pht              = atoi(argv[ 9]);
+  const uint32_t predictor_1_pht_size_counter      = atoi(argv[10]);
+
+  const bool     predictor_2_have_bht              = atoi(argv[11]);
+  const uint32_t predictor_2_bht_size_shifter      = atoi(argv[12]);
+  const bool     predictor_2_have_pht              = atoi(argv[13]);
+  const uint32_t predictor_2_pht_size_counter      = atoi(argv[14]);
+
+  const uint32_t nb_prediction                     = atoi(argv[15]);
+  const uint32_t nb_branch_complete                = atoi(argv[16]);
+
+  try 
+    {
+      morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::meta_predictor_glue::Parameters param (have_meta_predictor               ,
+													      predictor_0_have_bht              ,
+													      predictor_0_bht_size_shifter      ,
+													      predictor_0_have_pht              ,
+													      predictor_0_pht_size_counter      ,
+													      
+													      predictor_1_have_bht              ,
+													      predictor_1_bht_size_shifter      ,
+													      predictor_1_have_pht              ,
+													      predictor_1_pht_size_counter      ,
+													      
+													      predictor_2_have_bht              ,
+													      predictor_2_bht_size_shifter      ,
+													      predictor_2_have_pht              ,
+													      predictor_2_pht_size_counter      ,
+													      
+													      nb_prediction                     ,
+													      nb_branch_complete                );
+      
+      cout << param.print(1);
+      
+      test (name,param);
+    }
+  catch (morpheo::ErrorMorpheo & error)
+    {
+      cout << "<" << name << "> : " <<  error.what ();
+      exit (EXIT_FAILURE);
+    }
+  catch (...)
+    {
+      cerr << "<" << name << "> : This test must generate a error" << endl;
+      exit (EXIT_FAILURE);
+    }
+
+  return (EXIT_SUCCESS);
+}
+
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/src/test.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/src/test.cpp	(revision 4)
@@ -0,0 +1,397 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ * Test
+ */
+
+#define NB_ITERATION 1024
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/SelfTest/include/test.h"
+#include "Include/Test.h"
+
+void test (string name,
+	   morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::meta_predictor_glue::Parameters _param)
+{
+  cout << "<" << name << "> : Simulation SystemC" << endl;
+
+  Meta_Predictor_Glue * _Meta_Predictor_Glue = new Meta_Predictor_Glue (name.c_str(),
+#ifdef STATISTICS
+									morpheo::behavioural::Parameters_Statistics(5,50),
+#endif
+									_param);
+  
+#ifdef SYSTEMC
+  /*********************************************************************
+   * Déclarations des signaux
+   *********************************************************************/
+  sc_clock                         * CLOCK;
+
+    // Interface Predict
+  sc_signal<Tcontrol_t>           ** PREDICT_PREDICTOR_0_ACK                ;
+  sc_signal<Tcontrol_t>           ** PREDICT_PREDICTOR_1_ACK                ;
+  sc_signal<Tcontrol_t>           ** PREDICT_PREDICTOR_2_ACK                ;
+  sc_signal<Tcontrol_t>           ** PREDICT_ACK                            ;
+
+  sc_signal<Tbht_history_t>       ** PREDICT_PREDICTOR_0_BHT_HISTORY        ;
+  sc_signal<Tpht_history_t>       ** PREDICT_PREDICTOR_0_PHT_HISTORY        ;
+  sc_signal<Tbht_history_t>       ** PREDICT_PREDICTOR_1_BHT_HISTORY        ;
+  sc_signal<Tpht_history_t>       ** PREDICT_PREDICTOR_1_PHT_HISTORY        ;
+  sc_signal<Tbht_history_t>       ** PREDICT_PREDICTOR_2_BHT_HISTORY        ;
+  sc_signal<Tpht_history_t>       ** PREDICT_PREDICTOR_2_PHT_HISTORY        ;
+  sc_signal<Thistory_t>           ** PREDICT_HISTORY                        ;
+  sc_signal<Tcontrol_t>           ** PREDICT_DIRECTION                      ;
+
+    // Interface Branch_complete
+  sc_signal<Tcontrol_t>           ** BRANCH_COMPLETE_PREDICTOR_0_ACK        ;
+  sc_signal<Tcontrol_t>           ** BRANCH_COMPLETE_PREDICTOR_1_ACK        ;
+  sc_signal<Tcontrol_t>           ** BRANCH_COMPLETE_PREDICTOR_2_ACK        ;
+  sc_signal<Tcontrol_t>           ** BRANCH_COMPLETE_ACK                    ;
+
+  sc_signal<Tbht_history_t>       ** BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY;
+  sc_signal<Tpht_history_t>       ** BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY;
+  sc_signal<Tbht_history_t>       ** BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY;
+  sc_signal<Tpht_history_t>       ** BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY;
+  sc_signal<Tbht_history_t>       ** BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY;
+  sc_signal<Tpht_history_t>       ** BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY;
+  sc_signal<Thistory_t>           ** BRANCH_COMPLETE_HISTORY                ;
+
+  string rename;
+
+#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+  CLOCK                                  = new sc_clock ("clock", 1.0, 0.5);
+#endif  
+
+    // Interface Predict
+
+    PREDICT_PREDICTOR_0_ACK         = new sc_signal<Tcontrol_t>     * [_param._nb_prediction     ];
+    PREDICT_PREDICTOR_1_ACK         = new sc_signal<Tcontrol_t>     * [_param._nb_prediction     ];
+    PREDICT_PREDICTOR_2_ACK         = new sc_signal<Tcontrol_t>     * [_param._nb_prediction     ];
+    PREDICT_ACK                     = new sc_signal<Tcontrol_t>     * [_param._nb_prediction     ];
+    PREDICT_PREDICTOR_0_BHT_HISTORY = new sc_signal<Tbht_history_t> * [_param._nb_prediction     ];
+    PREDICT_PREDICTOR_0_PHT_HISTORY = new sc_signal<Tpht_history_t> * [_param._nb_prediction     ];
+    PREDICT_PREDICTOR_1_BHT_HISTORY = new sc_signal<Tbht_history_t> * [_param._nb_prediction     ];
+    PREDICT_PREDICTOR_1_PHT_HISTORY = new sc_signal<Tpht_history_t> * [_param._nb_prediction     ];
+    PREDICT_PREDICTOR_2_BHT_HISTORY = new sc_signal<Tbht_history_t> * [_param._nb_prediction     ];
+    PREDICT_PREDICTOR_2_PHT_HISTORY = new sc_signal<Tpht_history_t> * [_param._nb_prediction     ];
+    PREDICT_HISTORY                 = new sc_signal<Thistory_t>     * [_param._nb_prediction     ];
+    PREDICT_DIRECTION               = new sc_signal<Tcontrol_t>     * [_param._nb_prediction     ];
+
+    for (uint32_t i=0; i<_param._nb_prediction; i++)
+      {
+	rename = "PREDICT_PREDICTOR_0_ACK_"          +toString(i);
+	PREDICT_PREDICTOR_0_ACK                   [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
+	rename = "PREDICT_PREDICTOR_1_ACK_"          +toString(i);
+	PREDICT_PREDICTOR_1_ACK                   [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
+	rename = "PREDICT_PREDICTOR_2_ACK_"          +toString(i);
+	PREDICT_PREDICTOR_2_ACK                   [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
+	rename = "PREDICT_ACK_"                    +toString(i);
+	PREDICT_ACK                               [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
+	rename = "PREDICT_PREDICTOR_0_BHT_HISTORY_"+toString(i);
+	PREDICT_PREDICTOR_0_BHT_HISTORY           [i] = new sc_signal<Tbht_history_t> (rename.c_str());
+	rename = "PREDICT_PREDICTOR_0_PHT_HISTORY_"+toString(i);
+	PREDICT_PREDICTOR_0_PHT_HISTORY           [i] = new sc_signal<Tpht_history_t> (rename.c_str());
+	rename = "PREDICT_PREDICTOR_1_BHT_HISTORY_"+toString(i);
+	PREDICT_PREDICTOR_1_BHT_HISTORY           [i] = new sc_signal<Tbht_history_t> (rename.c_str());
+	rename = "PREDICT_PREDICTOR_1_PHT_HISTORY_"+toString(i);
+	PREDICT_PREDICTOR_1_PHT_HISTORY           [i] = new sc_signal<Tpht_history_t> (rename.c_str());
+	rename = "PREDICT_PREDICTOR_2_BHT_HISTORY_"+toString(i);
+	PREDICT_PREDICTOR_2_BHT_HISTORY           [i] = new sc_signal<Tbht_history_t> (rename.c_str());
+	rename = "PREDICT_PREDICTOR_2_PHT_HISTORY_"+toString(i);
+	PREDICT_PREDICTOR_2_PHT_HISTORY           [i] = new sc_signal<Tpht_history_t> (rename.c_str());
+	rename = "PREDICT_HISTORY_"                +toString(i);
+	PREDICT_HISTORY                           [i] = new sc_signal<Thistory_t>     (rename.c_str());
+    	rename = "PREDICT_DIRECTION_"              +toString(i);
+	PREDICT_DIRECTION                         [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
+      }
+
+    // Interface Branch_complete
+    
+    BRANCH_COMPLETE_PREDICTOR_0_ACK         = new sc_signal<Tcontrol_t>     * [_param._nb_branch_complete     ];
+    BRANCH_COMPLETE_PREDICTOR_1_ACK         = new sc_signal<Tcontrol_t>     * [_param._nb_branch_complete     ];
+    BRANCH_COMPLETE_PREDICTOR_2_ACK         = new sc_signal<Tcontrol_t>     * [_param._nb_branch_complete     ];
+    BRANCH_COMPLETE_ACK                     = new sc_signal<Tcontrol_t>     * [_param._nb_branch_complete     ];
+    BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY = new sc_signal<Tbht_history_t> * [_param._nb_branch_complete     ];
+    BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY = new sc_signal<Tpht_history_t> * [_param._nb_branch_complete     ];
+    BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY = new sc_signal<Tbht_history_t> * [_param._nb_branch_complete     ];
+    BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY = new sc_signal<Tpht_history_t> * [_param._nb_branch_complete     ];
+    BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY = new sc_signal<Tbht_history_t> * [_param._nb_branch_complete     ];
+    BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY = new sc_signal<Tpht_history_t> * [_param._nb_branch_complete     ];
+    BRANCH_COMPLETE_HISTORY                 = new sc_signal<Thistory_t>     * [_param._nb_branch_complete     ];
+
+    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+      {
+	rename = "BRANCH_COMPLETE_PREDICTOR_0_ACK_"          +toString(i);
+	BRANCH_COMPLETE_PREDICTOR_0_ACK                   [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
+	rename = "BRANCH_COMPLETE_PREDICTOR_1_ACK_"          +toString(i);
+	BRANCH_COMPLETE_PREDICTOR_1_ACK                   [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
+	rename = "BRANCH_COMPLETE_PREDICTOR_2_ACK_"          +toString(i);
+	BRANCH_COMPLETE_PREDICTOR_2_ACK                   [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
+	rename = "BRANCH_COMPLETE_ACK_"                    +toString(i);
+	BRANCH_COMPLETE_ACK                               [i] = new sc_signal<Tcontrol_t>     (rename.c_str());
+	rename = "BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY_"+toString(i);
+	BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY           [i] = new sc_signal<Tbht_history_t> (rename.c_str());
+	rename = "BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY_"+toString(i);
+	BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY           [i] = new sc_signal<Tpht_history_t> (rename.c_str());
+	rename = "BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY_"+toString(i);
+	BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY           [i] = new sc_signal<Tbht_history_t> (rename.c_str());
+	rename = "BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY_"+toString(i);
+	BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY           [i] = new sc_signal<Tpht_history_t> (rename.c_str());
+	rename = "BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY_"+toString(i);
+	BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY           [i] = new sc_signal<Tbht_history_t> (rename.c_str());
+	rename = "BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY_"+toString(i);
+	BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY           [i] = new sc_signal<Tpht_history_t> (rename.c_str());
+	rename = "BRANCH_COMPLETE_HISTORY_"                +toString(i);
+	BRANCH_COMPLETE_HISTORY                           [i] = new sc_signal<Thistory_t>     (rename.c_str());
+      }
+
+  /********************************************************
+   * Instanciation
+   ********************************************************/
+  
+  cout << "<" << name << "> Instanciation of _Meta_Predictor_Glue" << endl;
+  
+#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+  (*(_Meta_Predictor_Glue->in_CLOCK))        (*(CLOCK));
+#endif
+
+    // Interface Predict
+    for (uint32_t i=0; i<_param._nb_prediction; i++)
+      {
+	if (_param._have_meta_predictor)
+	  {
+	(*(_Meta_Predictor_Glue-> in_PREDICT_PREDICTOR_0_ACK                 [i])) (*(PREDICT_PREDICTOR_0_ACK                 [i]));
+	(*(_Meta_Predictor_Glue-> in_PREDICT_PREDICTOR_1_ACK                 [i])) (*(PREDICT_PREDICTOR_1_ACK                 [i]));
+	  }									      					      
+	(*(_Meta_Predictor_Glue-> in_PREDICT_PREDICTOR_2_ACK                 [i])) (*(PREDICT_PREDICTOR_2_ACK                 [i]));
+	(*(_Meta_Predictor_Glue->out_PREDICT_ACK                             [i])) (*(PREDICT_ACK                             [i]));
+	if (_param._have_meta_predictor)
+	  {									      					      
+	if (_param._predictor_0_have_bht)
+	(*(_Meta_Predictor_Glue-> in_PREDICT_PREDICTOR_0_BHT_HISTORY         [i])) (*(PREDICT_PREDICTOR_0_BHT_HISTORY         [i]));
+	if (_param._predictor_0_have_pht)
+	(*(_Meta_Predictor_Glue-> in_PREDICT_PREDICTOR_0_PHT_HISTORY         [i])) (*(PREDICT_PREDICTOR_0_PHT_HISTORY         [i]));
+	if (_param._predictor_1_have_bht)
+	(*(_Meta_Predictor_Glue-> in_PREDICT_PREDICTOR_1_BHT_HISTORY         [i])) (*(PREDICT_PREDICTOR_1_BHT_HISTORY         [i]));
+	if (_param._predictor_1_have_pht)
+	(*(_Meta_Predictor_Glue-> in_PREDICT_PREDICTOR_1_PHT_HISTORY         [i])) (*(PREDICT_PREDICTOR_1_PHT_HISTORY         [i]));
+	  }									      					      
+	if (_param._predictor_2_have_bht)
+	(*(_Meta_Predictor_Glue-> in_PREDICT_PREDICTOR_2_BHT_HISTORY         [i])) (*(PREDICT_PREDICTOR_2_BHT_HISTORY         [i]));
+	if (_param._predictor_2_have_pht)
+	(*(_Meta_Predictor_Glue-> in_PREDICT_PREDICTOR_2_PHT_HISTORY         [i])) (*(PREDICT_PREDICTOR_2_PHT_HISTORY         [i]));
+	(*(_Meta_Predictor_Glue->out_PREDICT_HISTORY                         [i])) (*(PREDICT_HISTORY                         [i]));
+	(*(_Meta_Predictor_Glue->out_PREDICT_DIRECTION                       [i])) (*(PREDICT_DIRECTION                       [i]));
+      }
+
+    // Interface Branch_complete
+    
+    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+      {
+	if (_param._have_meta_predictor)
+	  {
+	(*(_Meta_Predictor_Glue-> in_BRANCH_COMPLETE_PREDICTOR_0_ACK         [i])) (*(BRANCH_COMPLETE_PREDICTOR_0_ACK         [i]));
+	(*(_Meta_Predictor_Glue-> in_BRANCH_COMPLETE_PREDICTOR_1_ACK         [i])) (*(BRANCH_COMPLETE_PREDICTOR_1_ACK         [i]));
+	  }					
+	(*(_Meta_Predictor_Glue-> in_BRANCH_COMPLETE_PREDICTOR_2_ACK         [i])) (*(BRANCH_COMPLETE_PREDICTOR_2_ACK         [i]));
+	(*(_Meta_Predictor_Glue->out_BRANCH_COMPLETE_ACK                     [i])) (*(BRANCH_COMPLETE_ACK                     [i]));
+						
+	if (_param._have_meta_predictor)	
+	  {					
+	if (_param._predictor_0_have_bht)
+	(*(_Meta_Predictor_Glue->out_BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY [i])) (*(BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY [i]));
+	if (_param._predictor_0_have_pht)
+	(*(_Meta_Predictor_Glue->out_BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY [i])) (*(BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY [i]));
+	if (_param._predictor_1_have_bht)
+	(*(_Meta_Predictor_Glue->out_BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY [i])) (*(BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY [i]));
+	if (_param._predictor_1_have_pht)
+	(*(_Meta_Predictor_Glue->out_BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY [i])) (*(BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY [i]));
+	  }					
+	if (_param._predictor_2_have_bht)
+	(*(_Meta_Predictor_Glue->out_BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY [i])) (*(BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY [i]));
+	if (_param._predictor_2_have_pht)
+	(*(_Meta_Predictor_Glue->out_BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY [i])) (*(BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY [i]));
+	(*(_Meta_Predictor_Glue-> in_BRANCH_COMPLETE_HISTORY                 [i])) (*(BRANCH_COMPLETE_HISTORY                 [i]));
+      }
+
+  /********************************************************
+   * Simulation - Begin
+   ********************************************************/
+
+  cout << "<" << name << "> Start Simulation ............" << endl;
+  // Initialisation
+
+  const uint32_t seed = 0;
+//const uint32_t seed = static_cast<uint32_t>(time(NULL));
+
+  srand(seed);
+
+  sc_start(0);
+  _Meta_Predictor_Glue->vhdl_testbench_label("Initialisation");
+  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Initialisation" << endl;
+  
+  // No need initialisation
+
+  _Meta_Predictor_Glue->vhdl_testbench_label("Loop of Test");
+  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} Loop of Test" << endl;
+  
+  Tcontrol_t     predict_ack                             [_param._nb_prediction];
+  Thistory_t     predict_history                         [_param._nb_prediction];
+  Tcontrol_t     predict_direction                       [_param._nb_prediction];
+	        
+  Tcontrol_t     branch_complete_ack                     [_param._nb_branch_complete];
+  Tbht_history_t branch_complete_predictor_0_bht_history [_param._nb_branch_complete];
+  Tpht_history_t branch_complete_predictor_0_pht_history [_param._nb_branch_complete];
+  Tbht_history_t branch_complete_predictor_1_bht_history [_param._nb_branch_complete];
+  Tpht_history_t branch_complete_predictor_1_pht_history [_param._nb_branch_complete];
+  Tbht_history_t branch_complete_predictor_2_bht_history [_param._nb_branch_complete];
+  Tpht_history_t branch_complete_predictor_2_pht_history [_param._nb_branch_complete];
+
+  uint32_t shift_0 = 0;
+  uint32_t shift_1 = shift_0 + _param._predictor_0_bht_size_shifter;
+  uint32_t shift_2 = shift_1 + _param._predictor_0_pht_size_counter;
+  uint32_t shift_3 = shift_2 + _param._predictor_1_bht_size_shifter;
+  uint32_t shift_4 = shift_3 + _param._predictor_1_pht_size_counter;
+  uint32_t shift_5 = shift_4 + _param._predictor_2_bht_size_shifter;
+//uint32_t shift_5 = shift_5 + _param._predictor_2_pht_size_counter;
+
+  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
+    {
+      _Meta_Predictor_Glue->vhdl_testbench_label("Iteration "+toString(iteration));
+
+      for (uint32_t i=0; i<_param._nb_prediction; i++)
+	{
+	  Tcontrol_t     predictor_0_ack        , predictor_1_ack        , predictor_2_ack        ;
+	  Tpht_history_t predictor_0_pht_history, predictor_1_pht_history, predictor_2_pht_history;
+	  Tbht_history_t predictor_0_bht_history, predictor_1_bht_history, predictor_2_bht_history;
+
+	  predictor_0_ack             = not _param._have_meta_predictor or ((rand()%2) != 0);
+	  predictor_1_ack             = not _param._have_meta_predictor or ((rand()%2) != 0);
+	  predictor_2_ack             =                                    ((rand()%2) != 0);
+	  predict_ack             [i] = predictor_0_ack and predictor_1_ack and predictor_2_ack;
+
+	  PREDICT_PREDICTOR_0_ACK [i] ->write (predictor_0_ack);
+	  PREDICT_PREDICTOR_1_ACK [i] ->write (predictor_1_ack);
+	  PREDICT_PREDICTOR_2_ACK [i] ->write (predictor_2_ack);
+				      
+	  predictor_0_bht_history     = rand() % (_param._predictor_0_bht_size_shifter+1);
+	  predictor_0_pht_history     = rand() % (_param._predictor_0_pht_size_counter+1);
+	  predictor_1_bht_history     = rand() % (_param._predictor_1_bht_size_shifter+1);
+	  predictor_1_pht_history     = rand() % (_param._predictor_1_pht_size_counter+1);
+	  predictor_2_bht_history     = rand() % (_param._predictor_2_bht_size_shifter+1);
+	  predictor_2_pht_history     = rand() % (_param._predictor_2_pht_size_counter+1);
+				      
+	  predict_history         [i] = ( (predictor_0_bht_history << shift_0) |
+					  (predictor_0_pht_history << shift_1) |
+					  (predictor_1_bht_history << shift_2) |
+					  (predictor_1_pht_history << shift_3) |
+					  (predictor_2_bht_history << shift_4) |
+					  (predictor_2_pht_history << shift_5) );
+	  
+	  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} predict         [" << i << "]" << endl
+	       << "       _2_ " << predictor_2_bht_history << " - " << predictor_2_pht_history << endl
+	       << "     _/    " << endl
+	       << "    | |-1- " << predictor_1_bht_history << " - " << predictor_1_pht_history << endl
+	       << "  --| |    " << endl
+	       << "    |_|-0- " << predictor_0_bht_history << " - " << predictor_0_pht_history << endl;
+
+
+	  Tcontrol_t predict_direction_predictor_2;
+	  
+	  if (_param._predictor_2_have_pht)
+	    predict_direction_predictor_2 = (predictor_2_pht_history & (1<<(_param._predictor_2_pht_size_counter-1))) != 0;
+	  else
+	    predict_direction_predictor_2 = (predictor_2_bht_history & (1<<(_param._predictor_2_bht_size_shifter-1))) != 0;
+
+	  if (_param._have_meta_predictor == false)
+	    predict_direction       [i] = predict_direction_predictor_2;
+	  else
+	    if (predict_direction_predictor_2 == false)
+	      if (_param._predictor_0_have_pht)
+		predict_direction       [i] = (predictor_0_pht_history & (1<<(_param._predictor_0_pht_size_counter-1))) != 0;
+	      else
+		predict_direction       [i] = (predictor_0_bht_history & (1<<(_param._predictor_0_bht_size_shifter-1))) != 0;
+	    else
+	      if (_param._predictor_1_have_pht)
+		predict_direction       [i] = (predictor_1_pht_history & (1<<(_param._predictor_1_pht_size_counter-1))) != 0;
+	      else
+		predict_direction       [i] = (predictor_1_bht_history & (1<<(_param._predictor_1_bht_size_shifter-1))) != 0;
+
+	  PREDICT_PREDICTOR_0_BHT_HISTORY [i]->write(predictor_0_bht_history);
+	  PREDICT_PREDICTOR_0_PHT_HISTORY [i]->write(predictor_0_pht_history);
+	  PREDICT_PREDICTOR_1_BHT_HISTORY [i]->write(predictor_1_bht_history);
+	  PREDICT_PREDICTOR_1_PHT_HISTORY [i]->write(predictor_1_pht_history);
+	  PREDICT_PREDICTOR_2_BHT_HISTORY [i]->write(predictor_2_bht_history);
+	  PREDICT_PREDICTOR_2_PHT_HISTORY [i]->write(predictor_2_pht_history);
+	}
+
+      for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+	{
+	  Tcontrol_t     predictor_0_ack        , predictor_1_ack        , predictor_2_ack        ;
+
+	  predictor_0_ack                             = not _param._have_meta_predictor or ((rand()%2) != 0);
+	  predictor_1_ack                             = not _param._have_meta_predictor or ((rand()%2) != 0);
+	  predictor_2_ack                             =                                    ((rand()%2) != 0);
+	  branch_complete_ack                     [i] = predictor_0_ack and predictor_1_ack and predictor_2_ack;
+
+	  BRANCH_COMPLETE_PREDICTOR_0_ACK         [i] ->write (predictor_0_ack);
+	  BRANCH_COMPLETE_PREDICTOR_1_ACK         [i] ->write (predictor_1_ack);
+	  BRANCH_COMPLETE_PREDICTOR_2_ACK         [i] ->write (predictor_2_ack);
+
+	  branch_complete_predictor_0_bht_history [i] = rand() % (_param._predictor_0_bht_size_shifter+1);
+	  branch_complete_predictor_0_pht_history [i] = rand() % (_param._predictor_0_pht_size_counter+1);
+	  branch_complete_predictor_1_bht_history [i] = rand() % (_param._predictor_1_bht_size_shifter+1);
+	  branch_complete_predictor_1_pht_history [i] = rand() % (_param._predictor_1_pht_size_counter+1);
+	  branch_complete_predictor_2_bht_history [i] = rand() % (_param._predictor_2_bht_size_shifter+1);
+	  branch_complete_predictor_2_pht_history [i] = rand() % (_param._predictor_2_pht_size_counter+1);
+		
+	  BRANCH_COMPLETE_HISTORY                 [i]->write((branch_complete_predictor_0_bht_history [i] << shift_0) |
+							     (branch_complete_predictor_0_pht_history [i] << shift_1) |
+							     (branch_complete_predictor_1_bht_history [i] << shift_2) |
+							     (branch_complete_predictor_1_pht_history [i] << shift_3) |
+							     (branch_complete_predictor_2_bht_history [i] << shift_4) |
+							     (branch_complete_predictor_2_pht_history [i] << shift_5) );
+	}
+
+      sc_start(1);
+
+      for (uint32_t i=0; i<_param._nb_prediction; i++)
+	{
+	  TEST(Tcontrol_t    , PREDICT_ACK                             [i]->read(), predict_ack                             [i]);
+	  TEST(Tcontrol_t    , PREDICT_HISTORY                         [i]->read(), predict_history                         [i]);
+	  TEST(Tcontrol_t    , PREDICT_DIRECTION                       [i]->read(), predict_direction                       [i]);
+	}
+
+      for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+	{
+	  TEST(Tcontrol_t    , BRANCH_COMPLETE_ACK                     [i]->read(), branch_complete_ack                     [i]);
+
+	if (_param._have_meta_predictor)	
+	  {					
+	if (_param._predictor_0_have_bht)
+	  TEST(Tbht_history_t, BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY [i]->read(), branch_complete_predictor_0_bht_history [i]);
+	if (_param._predictor_0_have_pht)
+	  TEST(Tpht_history_t, BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY [i]->read(), branch_complete_predictor_0_pht_history [i]);
+	if (_param._predictor_1_have_bht)
+	  TEST(Tbht_history_t, BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY [i]->read(), branch_complete_predictor_1_bht_history [i]);
+	if (_param._predictor_1_have_pht)
+	  TEST(Tpht_history_t, BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY [i]->read(), branch_complete_predictor_1_pht_history [i]);
+	  }					
+	if (_param._predictor_2_have_bht)
+	  TEST(Tbht_history_t, BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY [i]->read(), branch_complete_predictor_2_bht_history [i]);
+	if (_param._predictor_2_have_pht)
+	  TEST(Tpht_history_t, BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY [i]->read(), branch_complete_predictor_2_pht_history [i]);
+	}
+    }
+
+  /********************************************************
+   * Simulation - End
+   ********************************************************/
+
+  cout << "<" << name << "> ............ Stop Simulation" << endl;
+
+#endif
+
+  delete _Meta_Predictor_Glue;
+}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/VERSION
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/VERSION	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/VERSION	(revision 4)
@@ -0,0 +1,1 @@
+v0.4
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h	(revision 4)
@@ -0,0 +1,162 @@
+#ifndef morpheo_behavioural_stage_1_ifetch_predictor_meta_predictor_meta_predictor_glue_Meta_Predictor_Glue_h
+#define morpheo_behavioural_stage_1_ifetch_predictor_meta_predictor_meta_predictor_glue_Meta_Predictor_Glue_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#ifdef SYSTEMC
+#include "systemc.h"
+#endif
+
+#include <iostream>
+#include "Include/ToString.h"
+#include "Include/Debug.h"
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Parameters.h"
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Types.h"
+#ifdef STATISTICS
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Statistics.h"
+#endif
+#ifdef VHDL
+#include "Behavioural/include/Vhdl.h"
+#endif
+#ifdef VHDL_TESTBENCH
+#include "Behavioural/include/Vhdl_Testbench.h"
+#endif
+
+using namespace std;
+
+namespace morpheo {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  class Meta_Predictor_Glue 
+#if SYSTEMC
+    : public sc_module
+#endif
+  {
+    // -----[ fields ]----------------------------------------------------
+    // Parameters
+  protected : const string     _name;
+
+  protected : const Parameters _param;
+//#ifdef STATISTICS
+//  protected : const morpheo::behavioural::Parameters_Statistics _param_statistics;
+//#endif
+
+#ifdef STATISTICS
+  private   : Statistics                     * _stat;
+#endif
+
+#ifdef VHDL_TESTBENCH
+  private   : Vhdl_Testbench                 * _vhdl_testbench;
+#endif
+
+#ifdef SYSTEMC
+    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    // Interface
+  public    : SC_CLOCK                      *  in_CLOCK                                  ;
+
+    // Interface Predict
+  public    : SC_IN (Tcontrol_t)           **  in_PREDICT_PREDICTOR_0_ACK                ;
+  public    : SC_IN (Tcontrol_t)           **  in_PREDICT_PREDICTOR_1_ACK                ;
+  public    : SC_IN (Tcontrol_t)           **  in_PREDICT_PREDICTOR_2_ACK                ;
+  public    : SC_OUT(Tcontrol_t)           ** out_PREDICT_ACK                            ;
+
+  public    : SC_IN (Tbht_history_t)       **  in_PREDICT_PREDICTOR_0_BHT_HISTORY        ;
+  public    : SC_IN (Tpht_history_t)       **  in_PREDICT_PREDICTOR_0_PHT_HISTORY        ;
+  public    : SC_IN (Tbht_history_t)       **  in_PREDICT_PREDICTOR_1_BHT_HISTORY        ;
+  public    : SC_IN (Tpht_history_t)       **  in_PREDICT_PREDICTOR_1_PHT_HISTORY        ;
+  public    : SC_IN (Tbht_history_t)       **  in_PREDICT_PREDICTOR_2_BHT_HISTORY        ;
+  public    : SC_IN (Tpht_history_t)       **  in_PREDICT_PREDICTOR_2_PHT_HISTORY        ;
+  public    : SC_OUT(Thistory_t)           ** out_PREDICT_HISTORY                        ;
+  public    : SC_OUT(Tcontrol_t)           ** out_PREDICT_DIRECTION                      ;
+
+    // Interface Branch_complete
+  public    : SC_IN (Tcontrol_t)           **  in_BRANCH_COMPLETE_PREDICTOR_0_ACK        ;
+  public    : SC_IN (Tcontrol_t)           **  in_BRANCH_COMPLETE_PREDICTOR_1_ACK        ;
+  public    : SC_IN (Tcontrol_t)           **  in_BRANCH_COMPLETE_PREDICTOR_2_ACK        ;
+  public    : SC_OUT(Tcontrol_t)           ** out_BRANCH_COMPLETE_ACK                    ;
+
+  public    : SC_OUT(Tbht_history_t)       ** out_BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY;
+  public    : SC_OUT(Tpht_history_t)       ** out_BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY;
+  public    : SC_OUT(Tbht_history_t)       ** out_BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY;
+  public    : SC_OUT(Tpht_history_t)       ** out_BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY;
+  public    : SC_OUT(Tbht_history_t)       ** out_BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY;
+  public    : SC_OUT(Tpht_history_t)       ** out_BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY;
+  public    : SC_IN (Thistory_t)           **  in_BRANCH_COMPLETE_HISTORY                ;
+
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#endif
+
+    // -----[ methods ]---------------------------------------------------
+
+#ifdef SYSTEMC
+    SC_HAS_PROCESS (Meta_Predictor_Glue);
+#endif
+  public  :          Meta_Predictor_Glue              (
+#ifdef SYSTEMC
+					      sc_module_name                              name,
+#else					       
+					      string                                      name,
+#endif					       
+#ifdef STATISTICS
+					      morpheo::behavioural::Parameters_Statistics param_statistics,
+#endif
+					      Parameters                                  param );
+					       
+  public  :          Meta_Predictor_Glue              (Parameters param );
+  public  :          ~Meta_Predictor_Glue             (void);
+					       
+#ifdef SYSTEMC				       
+  private : void     allocation                (void);
+  private : void     deallocation              (void);
+				
+#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+  public  : void     transition                       (void);
+#endif
+  public  : void     genMealy_predict_ack             (void);
+  public  : void     genMealy_predict_history         (void);
+  public  : void     genMealy_branch_complete_ack     (void);
+  public  : void     genMealy_branch_complete_history (void);
+
+#endif					       
+#ifdef STATISTICS
+  public  : string   statistics                (uint32_t depth);
+#endif
+					       
+#if VHDL				       
+  public  : void     vhdl                      (void);
+  private : void     vhdl_port                 (Vhdl & vhdl);
+  private : void     vhdl_declaration          (Vhdl & vhdl);
+  private : void     vhdl_body                 (Vhdl & vhdl);
+#endif					       
+					       
+#ifdef VHDL_TESTBENCH			       
+  private : void     vhdl_testbench_port       (void);
+  private : void     vhdl_testbench_transition (void);
+#endif
+  public  : void     vhdl_testbench_label      (string label);
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Parameters.h	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Parameters.h	(revision 4)
@@ -0,0 +1,82 @@
+#ifndef morpheo_behavioural_stage_1_ifetch_predictor_meta_predictor_meta_predictor_glue_Parameters_h
+#define morpheo_behavioural_stage_1_ifetch_predictor_meta_predictor_meta_predictor_glue_Parameters_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Include/Debug.h"
+#include "Behavioural/include/Parameters.h"
+#include <math.h>
+
+namespace morpheo {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  class Parameters : public morpheo::behavioural::Parameters
+  {
+    //-----[ fields ]------------------------------------------------------------
+  public : const bool     _have_meta_predictor               ;
+
+  public : const bool     _predictor_0_have_bht              ;
+  public : const uint32_t _predictor_0_bht_size_shifter      ;
+  public : const bool     _predictor_0_have_pht              ;
+  public : const uint32_t _predictor_0_pht_size_counter      ;
+
+  public : const bool     _predictor_1_have_bht              ;
+  public : const uint32_t _predictor_1_bht_size_shifter      ;
+  public : const bool     _predictor_1_have_pht              ;
+  public : const uint32_t _predictor_1_pht_size_counter      ;
+
+  public : const bool     _predictor_2_have_bht              ;
+  public : const uint32_t _predictor_2_bht_size_shifter      ;
+  public : const bool     _predictor_2_have_pht              ;
+  public : const uint32_t _predictor_2_pht_size_counter      ;
+
+  public : const uint32_t _nb_prediction                     ;
+  public : const uint32_t _nb_branch_complete                ;
+
+  public : const uint32_t _size_history                      ;
+
+    //-----[ methods ]-----------------------------------------------------------
+  public : Parameters  (bool     have_meta_predictor               ,
+			bool     predictor_0_have_bht              ,
+			uint32_t predictor_0_bht_size_shifter      ,
+			bool     predictor_0_have_pht              ,
+			uint32_t predictor_0_pht_size_counter      ,
+			bool     predictor_1_have_bht              ,
+			uint32_t predictor_1_bht_size_shifter      ,
+			bool     predictor_1_have_pht              ,
+			uint32_t predictor_1_pht_size_counter      ,
+			bool     predictor_2_have_bht              ,
+			uint32_t predictor_2_bht_size_shifter      ,
+			bool     predictor_2_have_pht              ,
+			uint32_t predictor_2_pht_size_counter      ,
+			uint32_t nb_prediction                     ,
+			uint32_t nb_branch_complete                );
+  public : Parameters  (Parameters & param) ;
+  public : ~Parameters () ;
+
+  public : string msg_error (void);
+
+  public :        string   print      (uint32_t depth);
+  public : friend ostream& operator<< (ostream& output_stream,
+				       morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::meta_predictor_glue::Parameters & x);
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Statistics.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Statistics.h	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Statistics.h	(revision 4)
@@ -0,0 +1,59 @@
+#ifdef STATISTICS
+#ifndef morpheo_behavioural_stage_1_ifetch_predictor_meta_predictor_meta_predictor_glue_Statistics_h
+#define morpheo_behavioural_stage_1_ifetch_predictor_meta_predictor_meta_predictor_glue_Statistics_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Include/Debug.h"
+#include "Behavioural/include/Statistics.h"
+#include "Behavioural/include/Parameters_Statistics.h"
+//#include "Behavioural/Generic/Group/include/Statistics.h"
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Parameters.h"
+
+//using namespace morpheo::behavioural::generic::group;
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  class Statistics : public morpheo::behavioural::Statistics
+  {
+    // -----[ fields ]----------------------------------------------------
+  private  : const Parameters                                   _parameters;
+
+    // -----[ methods ]---------------------------------------------------
+  public   : Statistics  (string                                      name                       ,
+			  morpheo::behavioural::Parameters_Statistics parameters_statistics      ,
+			  Parameters                                  parameters
+			  );
+//public   : Statistics  (Statistics & stat);
+  public   : ~Statistics () ;
+    
+  public   : string   print_body (uint32_t depth);
+  public   : string   print      (uint32_t depth);
+  public   : void     add        ();
+
+  public   : friend ostream& operator<< (ostream& output_stream,
+					 const Statistics & x);
+
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo
+
+#endif
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Types.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Types.h	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Types.h	(revision 4)
@@ -0,0 +1,34 @@
+#ifdef SYSTEMC
+#ifndef morpheo_behavioural_stage_1_ifetch_predictor_meta_predictor_meta_predictor_glue_Type_h
+#define morpheo_behavioural_stage_1_ifetch_predictor_meta_predictor_meta_predictor_glue_Type_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Include/Types.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+  typedef uint32_t Thistory_t;
+  typedef uint32_t Tbht_history_t;
+  typedef uint32_t Tpht_history_t;
+  
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue.cpp	(revision 4)
@@ -0,0 +1,261 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+#ifdef SYSTEMC
+  Meta_Predictor_Glue::Meta_Predictor_Glue (sc_module_name name,
+#else
+  Meta_Predictor_Glue::Meta_Predictor_Glue (string name,
+#endif
+#ifdef STATISTICS
+			      morpheo::behavioural::Parameters_Statistics             param_statistics,
+#endif
+			      morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::meta_predictor_glue::Parameters param ):
+			      _name              (name)
+			      ,_param            (param)
+// #ifdef STATISTICS
+// 			      ,_param_statistics (param_statistics)
+// #endif
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"Meta_Predictor_Glue","Begin");
+
+#ifdef STATISTICS
+    log_printf(INFO,Meta_Predictor_Glue,"Meta_Predictor_Glue","Allocation of statistics");
+
+    // Allocation of statistics
+    _stat = new Statistics (static_cast<string>(_name),
+			    param_statistics          ,
+			    param);
+#endif
+
+#ifdef VHDL_TESTBENCH
+    // Creation of a testbench
+    //  -> port
+    //  -> clock's signals
+    log_printf(INFO,Meta_Predictor_Glue,"Meta_Predictor_Glue","Creation of a testbench");
+    _vhdl_testbench = new Vhdl_Testbench (_name);
+    vhdl_testbench_port           ();
+    _vhdl_testbench->set_clock    ("in_CLOCK",false);
+#endif
+
+#ifdef VHDL
+    // generate the vhdl
+    log_printf(INFO,Meta_Predictor_Glue,"Meta_Predictor_Glue","VHDL's generation");
+    vhdl();
+#endif
+
+#ifdef SYSTEMC
+    log_printf(INFO,Meta_Predictor_Glue,"Meta_Predictor_Glue","Allocation");
+    allocation ();
+
+#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+    log_printf(INFO,Meta_Predictor_Glue,"Meta_Predictor_Glue","method - transition");
+
+    SC_METHOD (transition);
+    dont_initialize ();
+    sensitive_pos << *(in_CLOCK);
+#endif
+
+    log_printf(INFO,Meta_Predictor_Glue,"Meta_Predictor_Glue","method - genMealy_predict_ack");
+    SC_METHOD (genMealy_predict_ack);
+    dont_initialize ();
+    for (uint32_t i=0; i<_param._nb_prediction; i++)
+      {
+	sensitive << *(in_PREDICT_PREDICTOR_2_ACK [i]);
+	
+	if (_param._have_meta_predictor)
+	  {
+	    sensitive << *(in_PREDICT_PREDICTOR_0_ACK [i])
+		      << *(in_PREDICT_PREDICTOR_1_ACK [i]);
+	  }			           
+      }
+
+#ifdef SYSTEMCASS_SPECIFIC
+    // List dependency information
+    for (uint32_t i=0; i<_param._nb_prediction; i++)
+      {
+	(*(out_PREDICT_ACK [i])) (*(in_PREDICT_PREDICTOR_2_ACK [i]));
+	
+	if (_param._have_meta_predictor)
+	  {
+	(*(out_PREDICT_ACK [i])) (*(in_PREDICT_PREDICTOR_0_ACK [i]));
+	(*(out_PREDICT_ACK [i])) (*(in_PREDICT_PREDICTOR_1_ACK [i]));
+	  }			           
+      }
+#endif    
+
+    log_printf(INFO,Meta_Predictor_Glue,"Meta_Predictor_Glue","method - genMealy_predict_history");
+    SC_METHOD (genMealy_predict_history);
+    dont_initialize ();
+    for (uint32_t i=0; i<_param._nb_prediction; i++)
+      {
+	if (_param._predictor_2_have_bht)
+	sensitive << *(in_PREDICT_PREDICTOR_2_BHT_HISTORY [i]);
+	if (_param._predictor_2_have_pht)
+	sensitive << *(in_PREDICT_PREDICTOR_2_PHT_HISTORY [i]);
+
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_1_have_bht)
+	sensitive << *(in_PREDICT_PREDICTOR_1_BHT_HISTORY [i]);
+	if (_param._predictor_1_have_pht)
+	sensitive << *(in_PREDICT_PREDICTOR_1_PHT_HISTORY [i]);
+
+	if (_param._predictor_0_have_bht)
+	sensitive << *(in_PREDICT_PREDICTOR_0_BHT_HISTORY [i]);
+	if (_param._predictor_0_have_pht)
+	sensitive << *(in_PREDICT_PREDICTOR_0_PHT_HISTORY [i]);
+	  }			           
+      }
+
+#ifdef SYSTEMCASS_SPECIFIC
+    // List dependency information
+    for (uint32_t i=0; i<_param._nb_prediction; i++)
+      {
+	if (_param._predictor_2_have_bht)
+	(*(out_PREDICT_HISTORY    [i])) (*(in_PREDICT_PREDICTOR_2_BHT_HISTORY [i]));
+	if (_param._predictor_2_have_pht)
+	(*(out_PREDICT_HISTORY    [i])) (*(in_PREDICT_PREDICTOR_2_PHT_HISTORY [i]));
+
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_1_have_bht)
+	(*(out_PREDICT_HISTORY    [i])) (*(in_PREDICT_PREDICTOR_1_BHT_HISTORY [i]));
+	if (_param._predictor_1_have_pht)
+	(*(out_PREDICT_HISTORY    [i])) (*(in_PREDICT_PREDICTOR_1_PHT_HISTORY [i]));
+
+	if (_param._predictor_0_have_bht)
+	(*(out_PREDICT_HISTORY    [i])) (*(in_PREDICT_PREDICTOR_0_BHT_HISTORY [i]));
+	if (_param._predictor_0_have_pht)
+	(*(out_PREDICT_HISTORY    [i])) (*(in_PREDICT_PREDICTOR_0_PHT_HISTORY [i]));
+	  }			           
+
+	if (_param._predictor_2_have_bht)
+	(*(out_PREDICT_DIRECTION  [i])) (*(in_PREDICT_PREDICTOR_2_BHT_HISTORY [i]));
+	if (_param._predictor_2_have_pht)
+	(*(out_PREDICT_DIRECTION  [i])) (*(in_PREDICT_PREDICTOR_2_PHT_HISTORY [i]));
+
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_1_have_bht)
+	(*(out_PREDICT_DIRECTION  [i])) (*(in_PREDICT_PREDICTOR_1_BHT_HISTORY [i]));
+	if (_param._predictor_1_have_pht)
+	(*(out_PREDICT_DIRECTION  [i])) (*(in_PREDICT_PREDICTOR_1_PHT_HISTORY [i]));
+
+	if (_param._predictor_0_have_bht)
+	(*(out_PREDICT_DIRECTION  [i])) (*(in_PREDICT_PREDICTOR_0_BHT_HISTORY [i]));
+	if (_param._predictor_0_have_pht)
+	(*(out_PREDICT_DIRECTION  [i])) (*(in_PREDICT_PREDICTOR_0_PHT_HISTORY [i]));
+	  }			           
+      }
+#endif    
+
+    log_printf(INFO,Meta_Predictor_Glue,"Meta_Predictor_Glue","method - genMealy_branch_complete_ack");
+    SC_METHOD (genMealy_branch_complete_ack);
+    dont_initialize ();
+    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+      {
+	sensitive << *(in_BRANCH_COMPLETE_PREDICTOR_2_ACK [i]);
+	
+	if (_param._have_meta_predictor)
+	  {
+	    sensitive << *(in_BRANCH_COMPLETE_PREDICTOR_0_ACK [i])
+		      << *(in_BRANCH_COMPLETE_PREDICTOR_1_ACK [i]);
+	  }			           
+      }
+
+#ifdef SYSTEMCASS_SPECIFIC
+    // List dependency information
+    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+      {
+	(*(out_BRANCH_COMPLETE_ACK [i])) (*(in_BRANCH_COMPLETE_PREDICTOR_2_ACK [i]));
+	
+	if (_param._have_meta_predictor)
+	  {
+	(*(out_BRANCH_COMPLETE_ACK [i])) (*(in_BRANCH_COMPLETE_PREDICTOR_0_ACK [i]));
+	(*(out_BRANCH_COMPLETE_ACK [i])) (*(in_BRANCH_COMPLETE_PREDICTOR_1_ACK [i]));
+	  }			           
+      }
+#endif    
+
+    log_printf(INFO,Meta_Predictor_Glue,"Meta_Predictor_Glue","method - genMealy_branch_complete_history");
+    SC_METHOD (genMealy_branch_complete_history);
+    dont_initialize ();
+    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+      {
+	sensitive << *(in_BRANCH_COMPLETE_HISTORY [i]);
+      }
+
+#ifdef SYSTEMCASS_SPECIFIC
+    // List dependency information
+    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+      {
+	if (_param._predictor_2_have_bht)
+	 (*(out_BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY [i])) (*( in_BRANCH_COMPLETE_HISTORY    [i]));
+	if (_param._predictor_2_have_pht)
+	 (*(out_BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY [i])) (*( in_BRANCH_COMPLETE_HISTORY    [i]));
+		
+	if (_param._have_meta_predictor)
+	  {
+	    if (_param._predictor_1_have_bht)
+	 (*(out_BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY [i])) (*( in_BRANCH_COMPLETE_HISTORY    [i]));
+	    if (_param._predictor_1_have_pht)
+	 (*(out_BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY [i])) (*( in_BRANCH_COMPLETE_HISTORY    [i]));
+													   
+	    if (_param._predictor_0_have_bht)
+	 (*(out_BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY [i])) (*( in_BRANCH_COMPLETE_HISTORY    [i]));
+	    if (_param._predictor_0_have_pht)
+	 (*(out_BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY [i])) (*( in_BRANCH_COMPLETE_HISTORY    [i]));
+	  }			           
+      }
+#endif    
+
+#endif
+    log_printf(FUNC,Meta_Predictor_Glue,"Meta_Predictor_Glue","End");
+  };
+  
+  Meta_Predictor_Glue::~Meta_Predictor_Glue (void)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"~Meta_Predictor_Glue","Begin");
+
+#ifdef VHDL_TESTBENCH
+    log_printf(INFO,Meta_Predictor_Glue,"~Meta_Predictor_Glue","Generate Testbench");
+    // generate the test bench
+    _vhdl_testbench->generate_file();
+    delete _vhdl_testbench;
+#endif
+
+#ifdef STATISTICS
+    log_printf(INFO,Meta_Predictor_Glue,"~Meta_Predictor_Glue","Generate Statistics");
+    _stat->generate_file(statistics(0));
+    
+    delete _stat;
+#endif
+
+#ifdef SYSTEMC
+    log_printf(INFO,Meta_Predictor_Glue,"~Meta_Predictor_Glue","Dealocation");
+    deallocation ();
+#endif
+
+    log_printf(FUNC,Meta_Predictor_Glue,"~Meta_Predictor_Glue","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_allocation.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_allocation.cpp	(revision 4)
@@ -0,0 +1,203 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  void Meta_Predictor_Glue::allocation (void)
+  {
+    string rename;
+
+    log_printf(FUNC,Meta_Predictor_Glue,"allocation","Begin");
+
+#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+    in_CLOCK  = new SC_CLOCK           ("in_CLOCK");
+#endif
+
+    // Interface Predict
+
+    if (_param._have_meta_predictor)
+      {
+     in_PREDICT_PREDICTOR_0_ACK         = new SC_IN (Tcontrol_t)     * [_param._nb_prediction     ];
+     in_PREDICT_PREDICTOR_1_ACK         = new SC_IN (Tcontrol_t)     * [_param._nb_prediction     ];
+      }			           
+     in_PREDICT_PREDICTOR_2_ACK         = new SC_IN (Tcontrol_t)     * [_param._nb_prediction     ];
+    out_PREDICT_ACK                     = new SC_OUT(Tcontrol_t)     * [_param._nb_prediction     ];
+    if (_param._have_meta_predictor)
+      {
+    if (_param._predictor_0_have_bht)
+     in_PREDICT_PREDICTOR_0_BHT_HISTORY = new SC_IN (Tbht_history_t) * [_param._nb_prediction     ];
+    if (_param._predictor_0_have_pht)
+     in_PREDICT_PREDICTOR_0_PHT_HISTORY = new SC_IN (Tpht_history_t) * [_param._nb_prediction     ];
+    if (_param._predictor_1_have_bht)
+     in_PREDICT_PREDICTOR_1_BHT_HISTORY = new SC_IN (Tbht_history_t) * [_param._nb_prediction     ];
+    if (_param._predictor_1_have_pht)
+     in_PREDICT_PREDICTOR_1_PHT_HISTORY = new SC_IN (Tpht_history_t) * [_param._nb_prediction     ];
+      }
+    if (_param._predictor_2_have_bht)
+     in_PREDICT_PREDICTOR_2_BHT_HISTORY = new SC_IN (Tbht_history_t) * [_param._nb_prediction     ];
+    if (_param._predictor_2_have_pht)
+     in_PREDICT_PREDICTOR_2_PHT_HISTORY = new SC_IN (Tpht_history_t) * [_param._nb_prediction     ];
+    out_PREDICT_HISTORY                 = new SC_OUT(Thistory_t)     * [_param._nb_prediction     ];
+    out_PREDICT_DIRECTION               = new SC_OUT(Tcontrol_t)     * [_param._nb_prediction     ];
+
+    for (uint32_t i=0; i<_param._nb_prediction; i++)
+      {
+	if (_param._have_meta_predictor)
+	  {
+	rename = " in_PREDICT_PREDICTOR_0_ACK_"          +toString(i);
+	 in_PREDICT_PREDICTOR_0_ACK                   [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
+	
+	rename = " in_PREDICT_PREDICTOR_1_ACK_"          +toString(i);
+	 in_PREDICT_PREDICTOR_1_ACK                   [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
+	  }
+	rename = " in_PREDICT_PREDICTOR_2_ACK_"          +toString(i);
+	 in_PREDICT_PREDICTOR_2_ACK                   [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
+	
+	rename = "out_PREDICT_ACK_"                    +toString(i);
+	out_PREDICT_ACK                               [i] = new SC_OUT(Tcontrol_t)     (rename.c_str());
+
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_0_have_bht)
+	  {
+	rename = " in_PREDICT_PREDICTOR_0_BHT_HISTORY_"+toString(i);
+	 in_PREDICT_PREDICTOR_0_BHT_HISTORY           [i] = new SC_IN (Tbht_history_t) (rename.c_str());
+	  }
+	if (_param._predictor_0_have_pht)
+	  {
+	rename = " in_PREDICT_PREDICTOR_0_PHT_HISTORY_"+toString(i);
+	 in_PREDICT_PREDICTOR_0_PHT_HISTORY           [i] = new SC_IN (Tpht_history_t) (rename.c_str());
+	  }
+	if (_param._predictor_1_have_bht)
+	  {
+	rename = " in_PREDICT_PREDICTOR_1_BHT_HISTORY_"+toString(i);
+	 in_PREDICT_PREDICTOR_1_BHT_HISTORY           [i] = new SC_IN (Tbht_history_t) (rename.c_str());
+	  }
+	if (_param._predictor_1_have_pht)
+	  {
+	rename = " in_PREDICT_PREDICTOR_1_PHT_HISTORY_"+toString(i);
+	 in_PREDICT_PREDICTOR_1_PHT_HISTORY           [i] = new SC_IN (Tpht_history_t) (rename.c_str());
+	  }
+	  }
+	if (_param._predictor_2_have_bht)
+	  {
+	rename = " in_PREDICT_PREDICTOR_2_BHT_HISTORY_"+toString(i);
+	 in_PREDICT_PREDICTOR_2_BHT_HISTORY           [i] = new SC_IN (Tbht_history_t) (rename.c_str());
+	  }
+	if (_param._predictor_2_have_pht)
+	  {
+	rename = " in_PREDICT_PREDICTOR_2_PHT_HISTORY_"+toString(i);
+	 in_PREDICT_PREDICTOR_2_PHT_HISTORY           [i] = new SC_IN (Tpht_history_t) (rename.c_str());
+	  }
+	rename = "out_PREDICT_HISTORY_"                +toString(i);
+	out_PREDICT_HISTORY                           [i] = new SC_OUT(Thistory_t)     (rename.c_str());
+
+    	rename = "out_PREDICT_DIRECTION_"              +toString(i);
+	out_PREDICT_DIRECTION                         [i] = new SC_OUT(Tcontrol_t)     (rename.c_str());
+      }
+
+    // Interface Branch_complete
+    
+    if (_param._have_meta_predictor)
+      {
+     in_BRANCH_COMPLETE_PREDICTOR_0_ACK         = new SC_IN (Tcontrol_t)     * [_param._nb_branch_complete     ];
+     in_BRANCH_COMPLETE_PREDICTOR_1_ACK         = new SC_IN (Tcontrol_t)     * [_param._nb_branch_complete     ];
+      }			           
+     in_BRANCH_COMPLETE_PREDICTOR_2_ACK         = new SC_IN (Tcontrol_t)     * [_param._nb_branch_complete     ];
+    out_BRANCH_COMPLETE_ACK                     = new SC_OUT(Tcontrol_t)     * [_param._nb_branch_complete     ];
+    if (_param._have_meta_predictor)
+      {
+    if (_param._predictor_0_have_bht)
+    out_BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY = new SC_OUT(Tbht_history_t) * [_param._nb_branch_complete     ];
+    if (_param._predictor_0_have_pht)
+    out_BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY = new SC_OUT(Tpht_history_t) * [_param._nb_branch_complete     ];
+    if (_param._predictor_1_have_bht)
+    out_BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY = new SC_OUT(Tbht_history_t) * [_param._nb_branch_complete     ];
+    if (_param._predictor_1_have_pht)
+    out_BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY = new SC_OUT(Tpht_history_t) * [_param._nb_branch_complete     ];
+      }
+    if (_param._predictor_2_have_bht)
+    out_BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY = new SC_OUT(Tbht_history_t) * [_param._nb_branch_complete     ];
+    if (_param._predictor_2_have_pht)
+    out_BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY = new SC_OUT(Tpht_history_t) * [_param._nb_branch_complete     ];
+     in_BRANCH_COMPLETE_HISTORY                 = new SC_IN (Thistory_t)     * [_param._nb_branch_complete     ];
+
+    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+      {
+	if (_param._have_meta_predictor)
+	  {
+	rename = " in_BRANCH_COMPLETE_PREDICTOR_0_ACK_"          +toString(i);
+	 in_BRANCH_COMPLETE_PREDICTOR_0_ACK                   [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
+	
+	rename = " in_BRANCH_COMPLETE_PREDICTOR_1_ACK_"          +toString(i);
+	 in_BRANCH_COMPLETE_PREDICTOR_1_ACK                   [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
+	  }
+	rename = " in_BRANCH_COMPLETE_PREDICTOR_2_ACK_"          +toString(i);
+	 in_BRANCH_COMPLETE_PREDICTOR_2_ACK                   [i] = new SC_IN (Tcontrol_t)     (rename.c_str());
+	
+	rename = "out_BRANCH_COMPLETE_ACK_"                    +toString(i);
+	out_BRANCH_COMPLETE_ACK                               [i] = new SC_OUT(Tcontrol_t)     (rename.c_str());
+
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_0_have_bht)
+	  {
+	rename = "out_BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY_"+toString(i);
+	out_BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY           [i] = new SC_OUT(Tbht_history_t) (rename.c_str());
+	  }
+	if (_param._predictor_0_have_pht)
+	  {
+	rename = "out_BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY_"+toString(i);
+	out_BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY           [i] = new SC_OUT(Tpht_history_t) (rename.c_str());
+	  }
+	if (_param._predictor_1_have_bht)
+	  {
+	rename = "out_BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY_"+toString(i);
+	out_BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY           [i] = new SC_OUT(Tbht_history_t) (rename.c_str());
+	  }
+	if (_param._predictor_1_have_pht)
+	  {
+	rename = "out_BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY_"+toString(i);
+	out_BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY           [i] = new SC_OUT(Tpht_history_t) (rename.c_str());
+	  }
+	  }
+	if (_param._predictor_2_have_bht)
+	  {
+	rename = "out_BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY_"+toString(i);
+	out_BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY           [i] = new SC_OUT(Tbht_history_t) (rename.c_str());
+	  }
+	if (_param._predictor_2_have_pht)
+	  {
+	rename = "out_BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY_"+toString(i);
+	out_BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY           [i] = new SC_OUT(Tpht_history_t) (rename.c_str());
+	  }
+	rename = " in_BRANCH_COMPLETE_HISTORY_"                +toString(i);
+	 in_BRANCH_COMPLETE_HISTORY                           [i] = new SC_IN (Thistory_t)     (rename.c_str());
+      }
+
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    log_printf(FUNC,Meta_Predictor_Glue,"allocation","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_deallocation.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_deallocation.cpp	(revision 4)
@@ -0,0 +1,146 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  void Meta_Predictor_Glue::deallocation (void)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"deallocation","Begin");
+
+#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+    delete in_CLOCK;
+#endif
+
+    // Interface Predict
+    for (uint32_t i=0; i<_param._nb_prediction; i++)
+      {
+	if (_param._have_meta_predictor)
+	{
+	delete  in_PREDICT_PREDICTOR_0_ACK                   [i];
+	delete  in_PREDICT_PREDICTOR_1_ACK                   [i];
+	}
+	delete  in_PREDICT_PREDICTOR_2_ACK                   [i];
+	delete out_PREDICT_ACK                               [i];
+	if (_param._have_meta_predictor)
+	{
+	if (_param._predictor_0_have_bht)
+	delete  in_PREDICT_PREDICTOR_0_BHT_HISTORY           [i];
+	if (_param._predictor_0_have_pht)
+	delete  in_PREDICT_PREDICTOR_0_PHT_HISTORY           [i];
+	if (_param._predictor_1_have_bht)
+	delete  in_PREDICT_PREDICTOR_1_BHT_HISTORY           [i];
+	if (_param._predictor_1_have_pht)
+	delete  in_PREDICT_PREDICTOR_1_PHT_HISTORY           [i];
+	}
+	if (_param._predictor_2_have_bht)
+	delete  in_PREDICT_PREDICTOR_2_BHT_HISTORY           [i];
+	if (_param._predictor_2_have_pht)
+	delete  in_PREDICT_PREDICTOR_2_PHT_HISTORY           [i];
+	delete out_PREDICT_HISTORY                           [i];
+	delete out_PREDICT_DIRECTION                         [i];
+      }
+
+    if (_param._have_meta_predictor)
+    {
+    delete  in_PREDICT_PREDICTOR_0_ACK;
+    delete  in_PREDICT_PREDICTOR_1_ACK;
+    }			           
+    delete  in_PREDICT_PREDICTOR_2_ACK;
+    delete out_PREDICT_ACK            ;
+    if (_param._have_meta_predictor)
+    {
+    if (_param._predictor_0_have_bht)
+    delete  in_PREDICT_PREDICTOR_0_BHT_HISTORY;
+    if (_param._predictor_0_have_pht)
+    delete  in_PREDICT_PREDICTOR_0_PHT_HISTORY;
+    if (_param._predictor_1_have_bht)
+    delete  in_PREDICT_PREDICTOR_1_BHT_HISTORY;
+    if (_param._predictor_1_have_pht)
+    delete  in_PREDICT_PREDICTOR_1_PHT_HISTORY ;
+    }
+    if (_param._predictor_2_have_bht)
+    delete  in_PREDICT_PREDICTOR_2_BHT_HISTORY ;
+    if (_param._predictor_2_have_pht)
+    delete  in_PREDICT_PREDICTOR_2_PHT_HISTORY ;
+    delete out_PREDICT_HISTORY                 ;
+    delete out_PREDICT_DIRECTION               ;
+
+    // Interface Branch_complete
+    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+      {
+	if (_param._have_meta_predictor)
+	{
+	delete  in_BRANCH_COMPLETE_PREDICTOR_0_ACK                   [i];
+	delete  in_BRANCH_COMPLETE_PREDICTOR_1_ACK                   [i];
+	}
+	delete  in_BRANCH_COMPLETE_PREDICTOR_2_ACK                   [i];
+	delete out_BRANCH_COMPLETE_ACK                               [i];
+ 
+	if (_param._have_meta_predictor)
+	{
+	if (_param._predictor_0_have_bht)
+	delete out_BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY           [i];
+	if (_param._predictor_0_have_pht)
+	delete out_BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY           [i];
+	if (_param._predictor_1_have_bht)
+	delete out_BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY           [i];
+	if (_param._predictor_1_have_pht)
+	delete out_BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY           [i];
+	}
+	if (_param._predictor_2_have_bht)
+	delete out_BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY           [i];
+	if (_param._predictor_2_have_pht)
+	delete out_BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY           [i];
+	delete  in_BRANCH_COMPLETE_HISTORY                           [i];
+      }
+
+    if (_param._have_meta_predictor)
+    {
+    delete  in_BRANCH_COMPLETE_PREDICTOR_0_ACK         ;
+    delete  in_BRANCH_COMPLETE_PREDICTOR_1_ACK         ;
+    }			           
+    delete  in_BRANCH_COMPLETE_PREDICTOR_2_ACK         ;
+    delete out_BRANCH_COMPLETE_ACK                     ;
+    if (_param._have_meta_predictor)
+    {
+    if (_param._predictor_0_have_bht)
+    delete out_BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY ;
+    if (_param._predictor_0_have_pht)
+    delete out_BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY ;
+    if (_param._predictor_1_have_bht)
+    delete out_BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY ;
+    if (_param._predictor_1_have_pht)
+    delete out_BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY ;
+    }
+    if (_param._predictor_2_have_bht)
+    delete out_BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY ;
+    if (_param._predictor_2_have_pht)
+    delete out_BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY ;
+    delete  in_BRANCH_COMPLETE_HISTORY                 ;
+
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    log_printf(FUNC,Meta_Predictor_Glue,"deallocation","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_branch_complete_ack.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_branch_complete_ack.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_branch_complete_ack.cpp	(revision 4)
@@ -0,0 +1,40 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+  void Meta_Predictor_Glue::genMealy_branch_complete_ack (void)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"genMealy_branch_complete_ack","Begin");
+    
+    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+      {
+	Tcontrol_t predictor_0_ack =  not _param._have_meta_predictor or PORT_READ(in_BRANCH_COMPLETE_PREDICTOR_0_ACK [i]);
+	Tcontrol_t predictor_1_ack =  not _param._have_meta_predictor or PORT_READ(in_BRANCH_COMPLETE_PREDICTOR_1_ACK [i]);
+	Tcontrol_t predictor_2_ack =                                     PORT_READ(in_BRANCH_COMPLETE_PREDICTOR_2_ACK [i]);
+
+	PORT_WRITE(out_BRANCH_COMPLETE_ACK [i], predictor_0_ack and predictor_1_ack and predictor_2_ack);
+      }
+
+    log_printf(FUNC,Meta_Predictor_Glue,"genMealy_branch_complete_ack","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_branch_complete_history.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_branch_complete_history.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_branch_complete_history.cpp	(revision 4)
@@ -0,0 +1,73 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+#include "Include/BitManipulation.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+  void Meta_Predictor_Glue::genMealy_branch_complete_history (void)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"genMealy_branch_complete_history","Begin");
+    
+    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+      {
+	Thistory_t     history = PORT_READ(in_BRANCH_COMPLETE_HISTORY [i]);
+
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_0_have_bht)
+	  {
+	PORT_WRITE(out_BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY [i], history & gen_mask<Tbht_history_t>(_param._predictor_0_bht_size_shifter));
+	history >>= _param._predictor_0_bht_size_shifter;
+	  }
+	if (_param._predictor_0_have_pht)
+	  {
+	PORT_WRITE(out_BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY [i], history & gen_mask<Tpht_history_t>(_param._predictor_0_pht_size_counter));
+	history >>= _param._predictor_0_pht_size_counter;
+	  }
+
+	if (_param._predictor_1_have_bht)
+	  {
+	PORT_WRITE(out_BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY [i], history & gen_mask<Tbht_history_t>(_param._predictor_1_bht_size_shifter));
+	history >>= _param._predictor_1_bht_size_shifter;
+	  }
+	if (_param._predictor_1_have_pht)
+	  {
+	PORT_WRITE(out_BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY [i], history & gen_mask<Tpht_history_t>(_param._predictor_1_pht_size_counter));
+	history >>= _param._predictor_1_pht_size_counter;
+	  }
+	  }
+
+	if (_param._predictor_2_have_bht)
+	  {
+	PORT_WRITE(out_BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY [i], history & gen_mask<Tbht_history_t>(_param._predictor_2_bht_size_shifter));
+	history >>= _param._predictor_2_bht_size_shifter;
+	  }
+	if (_param._predictor_2_have_pht)
+	  {
+	PORT_WRITE(out_BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY [i], history & gen_mask<Tpht_history_t>(_param._predictor_2_pht_size_counter));
+	history >>= _param._predictor_2_pht_size_counter;
+	  }
+      }
+
+    log_printf(FUNC,Meta_Predictor_Glue,"genMealy_branch_complete_history","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_predict_ack.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_predict_ack.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_predict_ack.cpp	(revision 4)
@@ -0,0 +1,41 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  void Meta_Predictor_Glue::genMealy_predict_ack (void)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"genMealy_predict_ack","Begin");
+    
+    for (uint32_t i=0; i<_param._nb_prediction; i++)
+      {
+	Tcontrol_t predictor_0_ack =  not _param._have_meta_predictor or PORT_READ(in_PREDICT_PREDICTOR_0_ACK [i]);
+	Tcontrol_t predictor_1_ack =  not _param._have_meta_predictor or PORT_READ(in_PREDICT_PREDICTOR_1_ACK [i]);
+	Tcontrol_t predictor_2_ack =                                     PORT_READ(in_PREDICT_PREDICTOR_2_ACK [i]);
+
+	PORT_WRITE(out_PREDICT_ACK [i], predictor_0_ack and predictor_1_ack and predictor_2_ack);
+      }
+
+    log_printf(FUNC,Meta_Predictor_Glue,"genMealy_predict_ack","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_predict_history.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_predict_history.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_genMealy_predict_history.cpp	(revision 4)
@@ -0,0 +1,102 @@
+#ifdef SYSTEMC
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  void Meta_Predictor_Glue::genMealy_predict_history (void)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"genMealy_predict_history","Begin");
+    
+    for (uint32_t i=0; i<_param._nb_prediction; i++)
+      {
+	Thistory_t     history = 0;
+	Tpht_history_t predictor_0_pht_history  =0, predictor_1_pht_history  =0, predictor_2_pht_history  =0;
+	Tbht_history_t predictor_0_bht_history  =0, predictor_1_bht_history  =0, predictor_2_bht_history  =0;
+	Tcontrol_t     predictor_0_pht_direction=0, predictor_1_pht_direction=0, predictor_2_pht_direction=0;
+	Tcontrol_t     predictor_0_bht_direction=0, predictor_1_bht_direction=0, predictor_2_bht_direction=0;
+	Tcontrol_t     predictor_0_direction,     predictor_1_direction,     predictor_2_direction;
+	Tcontrol_t     predictor_direction;
+
+	if (_param._predictor_2_have_pht)
+	  {
+	predictor_2_pht_history   = PORT_READ(in_PREDICT_PREDICTOR_2_PHT_HISTORY [i]);
+	predictor_2_pht_direction = predictor_2_pht_history >> (_param._predictor_2_pht_size_counter-1);
+	history                   = (history << _param._predictor_2_pht_size_counter) | predictor_2_pht_history;
+	  }
+	if (_param._predictor_2_have_bht)
+	  {
+	predictor_2_bht_history   = PORT_READ(in_PREDICT_PREDICTOR_2_BHT_HISTORY [i]);
+	predictor_2_bht_direction = predictor_2_bht_history >> (_param._predictor_2_bht_size_shifter-1);
+	history                   = (history << _param._predictor_2_bht_size_shifter) | predictor_2_bht_history;
+	  }
+
+	predictor_2_direction = (_param._predictor_2_have_pht==true)?predictor_2_pht_direction:predictor_2_bht_direction;
+
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_1_have_pht)
+	  {
+	predictor_1_pht_history   = PORT_READ(in_PREDICT_PREDICTOR_1_PHT_HISTORY [i]);
+	predictor_1_pht_direction = predictor_1_pht_history >> (_param._predictor_1_pht_size_counter-1);
+	history                   = (history << _param._predictor_1_pht_size_counter) | predictor_1_pht_history;
+	  }
+	if (_param._predictor_1_have_bht)
+	  {
+	predictor_1_bht_history   = PORT_READ(in_PREDICT_PREDICTOR_1_BHT_HISTORY [i]);
+	predictor_1_bht_direction = predictor_1_bht_history >> (_param._predictor_1_bht_size_shifter-1);
+	history                   = (history << _param._predictor_1_bht_size_shifter) | predictor_1_bht_history;
+	  }
+	if (_param._predictor_0_have_pht)
+	  {
+	predictor_0_pht_history   = PORT_READ(in_PREDICT_PREDICTOR_0_PHT_HISTORY [i]);
+	predictor_0_pht_direction = predictor_0_pht_history >> (_param._predictor_0_pht_size_counter-1);
+	history                   = (history << _param._predictor_0_pht_size_counter) | predictor_0_pht_history;
+	  }
+	if (_param._predictor_0_have_bht)
+	  {
+	predictor_0_bht_history   = PORT_READ(in_PREDICT_PREDICTOR_0_BHT_HISTORY [i]);
+	predictor_0_bht_direction = predictor_0_bht_history >> (_param._predictor_0_bht_size_shifter-1);
+	history                   = (history << _param._predictor_0_bht_size_shifter) | predictor_0_bht_history;
+	  }
+
+	predictor_0_direction = (_param._predictor_0_have_pht==true)?predictor_0_pht_direction:predictor_0_bht_direction;
+	predictor_1_direction = (_param._predictor_1_have_pht==true)?predictor_1_pht_direction:predictor_1_bht_direction;
+
+	// Meta predictor : take direction of prediction_2 and select the good predictor.
+	predictor_direction   = (predictor_2_direction==0)?predictor_0_direction:predictor_1_direction;
+	
+	log_printf(TRACE,Meta_Predictor_Glue,"genMealy_predict_history","predict_direction = %d - predictor(_0 %d, _1 %d, _2 %d)",predictor_direction,predictor_0_direction,predictor_1_direction,predictor_2_direction);
+	  }
+	else
+	  {
+	predictor_direction   =  predictor_2_direction;
+	log_printf(TRACE,Meta_Predictor_Glue,"genMealy_predict_history","predict_direction = %d - predictor_2 %d",predictor_direction,predictor_2_direction);
+	  }
+
+	PORT_WRITE(out_PREDICT_DIRECTION [i], predictor_direction);
+	PORT_WRITE(out_PREDICT_HISTORY   [i], history            );
+      }
+
+    log_printf(FUNC,Meta_Predictor_Glue,"genMealy_predict_history","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_statistics.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_statistics.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_statistics.cpp	(revision 4)
@@ -0,0 +1,37 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  string Meta_Predictor_Glue::statistics (uint32_t depth)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"statistics","Begin");
+
+    string txt = _stat->print(depth);
+    
+    log_printf(FUNC,Meta_Predictor_Glue,"statistics","End");
+
+    return txt;
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_transition.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_transition.cpp	(revision 4)
@@ -0,0 +1,43 @@
+#ifdef SYSTEMC
+#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  void Meta_Predictor_Glue::transition (void)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"transition","Begin");
+
+#ifdef STATISTICS
+    _stat->add();
+#endif    
+
+#ifdef VHDL_TESTBENCH
+    vhdl_testbench_transition ();
+#endif
+
+    log_printf(FUNC,Meta_Predictor_Glue,"transition","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl.cpp	(revision 4)
@@ -0,0 +1,41 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+#include "Behavioural/include/Vhdl.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  void Meta_Predictor_Glue::vhdl (void)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"vhdl","Begin");
+    Vhdl vhdl (_name);
+
+    vhdl.set_library_work (_name + "_Pack");
+
+    vhdl_port        (vhdl);
+    vhdl_declaration (vhdl);
+    vhdl_body        (vhdl);
+
+    vhdl.generate_file();
+    log_printf(FUNC,Meta_Predictor_Glue,"vhdl","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_body.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_body.cpp	(revision 4)
@@ -0,0 +1,137 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  void Meta_Predictor_Glue::vhdl_body (Vhdl & vhdl)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"vhdl_body","Begin");
+    vhdl.set_body ("");
+    vhdl.set_body (" -- predict");
+    
+    for (uint32_t i=0; i<_param._nb_prediction; i++)
+      {
+	string meta_predictor_ack =  (_param._have_meta_predictor==true)?("in_PREDICT_PREDICTOR_0_ACK_"+toString(i)+" and in_PREDICT_PREDICTOR_1_ACK_"+toString(i)):"'1'";
+
+	vhdl.set_body ("out_PREDICT_ACK_"+toString(i)+"         <= "+meta_predictor_ack+" and "+"in_PREDICT_PREDICTOR_2_ACK_"+toString(i)+";");
+
+	uint32_t index=_param._size_history;
+
+
+	if (_param._predictor_2_have_pht)
+	  {
+	vhdl.set_body ("out_PREDICT_HISTORY_"+toString(i)+std_logic_range(index-1,index-_param._predictor_2_pht_size_counter)+" <= in_PREDICT_PREDICTOR_2_PHT_HISTORY_"+toString(i)+";");
+	index-= _param._predictor_2_pht_size_counter;
+	  }
+	if (_param._predictor_2_have_bht)
+	  {
+	vhdl.set_body ("out_PREDICT_HISTORY_"+toString(i)+std_logic_range(index-1,index-_param._predictor_2_bht_size_shifter)+" <= in_PREDICT_PREDICTOR_2_BHT_HISTORY_"+toString(i)+";");
+	index-= _param._predictor_2_bht_size_shifter;
+	  }
+
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_1_have_pht)
+	  {
+	vhdl.set_body ("out_PREDICT_HISTORY_"+toString(i)+std_logic_range(index-1,index-_param._predictor_1_pht_size_counter)+" <= in_PREDICT_PREDICTOR_1_PHT_HISTORY_"+toString(i)+";");
+	index-= _param._predictor_1_pht_size_counter;
+	  }
+	if (_param._predictor_1_have_bht)
+	  {
+	vhdl.set_body ("out_PREDICT_HISTORY_"+toString(i)+std_logic_range(index-1,index-_param._predictor_1_bht_size_shifter)+" <= in_PREDICT_PREDICTOR_1_BHT_HISTORY_"+toString(i)+";");
+	index-= _param._predictor_1_bht_size_shifter;
+	  }
+
+ 	if (_param._predictor_0_have_pht)
+	  {
+	vhdl.set_body ("out_PREDICT_HISTORY_"+toString(i)+std_logic_range(index-1,index-_param._predictor_0_pht_size_counter)+" <= in_PREDICT_PREDICTOR_0_PHT_HISTORY_"+toString(i)+";");
+	index-= _param._predictor_0_pht_size_counter;
+	  }
+	if (_param._predictor_0_have_bht)
+	  {
+	vhdl.set_body ("out_PREDICT_HISTORY_"+toString(i)+std_logic_range(index-1,index-_param._predictor_0_bht_size_shifter)+" <= in_PREDICT_PREDICTOR_0_BHT_HISTORY_"+toString(i)+";");
+	index-= _param._predictor_0_bht_size_shifter;
+	  }
+	  }
+
+	// direction of prediction
+	vhdl.set_body ("");
+	if (_param._have_meta_predictor)
+	  vhdl.set_body ("out_PREDICT_DIRECTION_"+toString(i)+"   <= predictor_0_direction_"+toString(i)+" when predictor_2_direction_"+toString(i)+"='0' else predictor_1_direction_"+toString(i)+";");
+	else
+	  vhdl.set_body ("out_PREDICT_DIRECTION_"+toString(i)+"   <= predictor_2_direction_"+toString(i)+";");
+      }
+
+    // Interface - branch_complete
+
+    vhdl.set_body ("");
+    vhdl.set_body (" -- branch_complete");
+    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+      {
+	string meta_predictor_ack =  (_param._have_meta_predictor==true)?("in_BRANCH_COMPLETE_PREDICTOR_0_ACK_"+toString(i)+" and in_BRANCH_COMPLETE_PREDICTOR_1_ACK_"+toString(i)):"'1'";
+
+	vhdl.set_body ("out_BRANCH_COMPLETE_ACK_"+toString(i)+" <= "+meta_predictor_ack+" and "+"in_BRANCH_COMPLETE_PREDICTOR_2_ACK_"+toString(i)+";");
+
+	uint32_t index=_param._size_history;
+
+	if (_param._predictor_2_have_pht)
+	  {
+	vhdl.set_body ("out_BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY_"+toString(i)+" <= in_BRANCH_COMPLETE_HISTORY_"+toString(i)+std_logic_range(index-1,index-_param._predictor_2_pht_size_counter)+";");
+	index-= _param._predictor_2_pht_size_counter;
+	  }
+	if (_param._predictor_2_have_bht)
+	  {
+	vhdl.set_body ("out_BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY_"+toString(i)+" <= in_BRANCH_COMPLETE_HISTORY_"+toString(i)+std_logic_range(index-1,index-_param._predictor_2_bht_size_shifter)+";");
+	index-= _param._predictor_2_bht_size_shifter;
+	  }
+
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_1_have_pht)
+	  {
+	vhdl.set_body ("out_BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY_"+toString(i)+" <= in_BRANCH_COMPLETE_HISTORY_"+toString(i)+std_logic_range(index-1,index-_param._predictor_1_pht_size_counter)+";");
+	index-= _param._predictor_1_pht_size_counter;
+	  }
+	if (_param._predictor_1_have_bht)
+	  {
+	vhdl.set_body ("out_BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY_"+toString(i)+" <= in_BRANCH_COMPLETE_HISTORY_"+toString(i)+std_logic_range(index-1,index-_param._predictor_1_bht_size_shifter)+";");
+	index-= _param._predictor_1_bht_size_shifter;
+	  }
+
+	if (_param._predictor_0_have_pht)
+	  {
+	vhdl.set_body ("out_BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY_"+toString(i)+" <= in_BRANCH_COMPLETE_HISTORY_"+toString(i)+std_logic_range(index-1,index-_param._predictor_0_pht_size_counter)+";");
+	index-= _param._predictor_0_pht_size_counter;
+	  }
+	if (_param._predictor_0_have_bht)
+	  {
+	vhdl.set_body ("out_BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY_"+toString(i)+" <= in_BRANCH_COMPLETE_HISTORY_"+toString(i)+std_logic_range(index-1,index-_param._predictor_0_bht_size_shifter)+";");
+	index-= _param._predictor_0_bht_size_shifter;
+	  }
+	  }
+      }
+
+    log_printf(FUNC,Meta_Predictor_Glue,"vhdl_body","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_declaration.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_declaration.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_declaration.cpp	(revision 4)
@@ -0,0 +1,52 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  void Meta_Predictor_Glue::vhdl_declaration (Vhdl & vhdl)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"vhdl_declaration","Begin");
+
+    for (uint32_t i=0; i<_param._nb_prediction; i++)
+      {
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_0_have_pht)
+	  vhdl.set_alias ("predictor_0_direction_"+toString(i),std_logic(1), "in_PREDICT_PREDICTOR_0_PHT_HISTORY_"+toString(i),std_logic_range(_param._predictor_0_pht_size_counter-1,_param._predictor_0_pht_size_counter-1));
+	else
+	  vhdl.set_alias ("predictor_0_direction_"+toString(i),std_logic(1), "in_PREDICT_PREDICTOR_0_BHT_HISTORY_"+toString(i),std_logic_range(_param._predictor_0_bht_size_shifter-1,_param._predictor_0_bht_size_shifter-1));
+	if (_param._predictor_1_have_pht)
+	  vhdl.set_alias ("predictor_1_direction_"+toString(i),std_logic(1), "in_PREDICT_PREDICTOR_1_PHT_HISTORY_"+toString(i),std_logic_range(_param._predictor_1_pht_size_counter-1,_param._predictor_1_pht_size_counter-1));
+	else
+	  vhdl.set_alias ("predictor_1_direction_"+toString(i),std_logic(1), "in_PREDICT_PREDICTOR_1_BHT_HISTORY_"+toString(i),std_logic_range(_param._predictor_1_bht_size_shifter-1,_param._predictor_1_bht_size_shifter-1));
+	  }
+
+	if (_param._predictor_2_have_pht)
+	  vhdl.set_alias ("predictor_2_direction_"+toString(i),std_logic(1), "in_PREDICT_PREDICTOR_2_PHT_HISTORY_"+toString(i),std_logic_range(_param._predictor_2_pht_size_counter-1,_param._predictor_2_pht_size_counter-1));
+	else
+	  vhdl.set_alias ("predictor_2_direction_"+toString(i),std_logic(1), "in_PREDICT_PREDICTOR_2_BHT_HISTORY_"+toString(i),std_logic_range(_param._predictor_2_bht_size_shifter-1,_param._predictor_2_bht_size_shifter-1));
+      }
+    log_printf(FUNC,Meta_Predictor_Glue,"vhdl_declaration","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_port.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_port.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_port.cpp	(revision 4)
@@ -0,0 +1,92 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  void Meta_Predictor_Glue::vhdl_port (Vhdl & vhdl)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"vhdl_port","Begin");
+
+    for (uint32_t i=0; i<_param._nb_prediction; i++)
+      {
+	if (_param._have_meta_predictor)
+	  {
+	vhdl.set_port (" in_PREDICT_PREDICTOR_0_ACK_"+toString(i)+"                ", IN, 1);
+	vhdl.set_port (" in_PREDICT_PREDICTOR_1_ACK_"+toString(i)+"                ", IN, 1);
+	  }
+	vhdl.set_port (" in_PREDICT_PREDICTOR_2_ACK_"+toString(i)+"                ", IN, 1);
+	vhdl.set_port ("out_PREDICT_ACK_"+toString(i)+"                            ",OUT, 1);
+
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_0_have_bht)
+	vhdl.set_port (" in_PREDICT_PREDICTOR_0_BHT_HISTORY_"+toString(i)+"        ", IN,_param._predictor_0_bht_size_shifter);
+	if (_param._predictor_0_have_pht)
+	vhdl.set_port (" in_PREDICT_PREDICTOR_0_PHT_HISTORY_"+toString(i)+"        ", IN,_param._predictor_0_pht_size_counter);
+	if (_param._predictor_1_have_bht)
+	vhdl.set_port (" in_PREDICT_PREDICTOR_1_BHT_HISTORY_"+toString(i)+"        ", IN,_param._predictor_1_bht_size_shifter);
+	if (_param._predictor_1_have_pht)
+	vhdl.set_port (" in_PREDICT_PREDICTOR_1_PHT_HISTORY_"+toString(i)+"        ", IN,_param._predictor_1_pht_size_counter);
+	  }
+	if (_param._predictor_2_have_bht)
+	vhdl.set_port (" in_PREDICT_PREDICTOR_2_BHT_HISTORY_"+toString(i)+"        ", IN,_param._predictor_2_bht_size_shifter);
+	if (_param._predictor_2_have_pht)
+	vhdl.set_port (" in_PREDICT_PREDICTOR_2_PHT_HISTORY_"+toString(i)+"        ", IN,_param._predictor_2_pht_size_counter);
+
+	vhdl.set_port ("out_PREDICT_HISTORY_"+toString(i)+"                        ",OUT,_param._size_history);
+	vhdl.set_port ("out_PREDICT_DIRECTION_"+toString(i)+"                      ",OUT,1);
+      }
+
+    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+      {
+	if (_param._have_meta_predictor)
+	  {
+	vhdl.set_port (" in_BRANCH_COMPLETE_PREDICTOR_0_ACK_"+toString(i)+"        ", IN, 1);
+	vhdl.set_port (" in_BRANCH_COMPLETE_PREDICTOR_1_ACK_"+toString(i)+"        ", IN, 1);
+	  }
+	vhdl.set_port (" in_BRANCH_COMPLETE_PREDICTOR_2_ACK_"+toString(i)+"        ", IN, 1);
+	vhdl.set_port ("out_BRANCH_COMPLETE_ACK_"+toString(i)+"                    ",OUT, 1);
+
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_0_have_bht)
+	vhdl.set_port ("out_BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY_"+toString(i)+"",OUT,_param._predictor_0_bht_size_shifter);
+	if (_param._predictor_0_have_pht)
+	vhdl.set_port ("out_BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY_"+toString(i)+"",OUT,_param._predictor_0_pht_size_counter);
+	if (_param._predictor_1_have_bht)
+	vhdl.set_port ("out_BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY_"+toString(i)+"",OUT,_param._predictor_1_bht_size_shifter);
+	if (_param._predictor_1_have_pht)
+	vhdl.set_port ("out_BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY_"+toString(i)+"",OUT,_param._predictor_1_pht_size_counter);
+	  }
+	if (_param._predictor_2_have_bht)
+	vhdl.set_port ("out_BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY_"+toString(i)+"",OUT,_param._predictor_2_bht_size_shifter);
+	if (_param._predictor_2_have_pht)
+	vhdl.set_port ("out_BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY_"+toString(i)+"",OUT,_param._predictor_2_pht_size_counter);
+
+	vhdl.set_port (" in_BRANCH_COMPLETE_HISTORY_"+toString(i)+"                ", IN,_param._size_history);
+      }
+
+    log_printf(FUNC,Meta_Predictor_Glue,"vhdl_port","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_testbench_label.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_testbench_label.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_testbench_label.cpp	(revision 4)
@@ -0,0 +1,35 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  void Meta_Predictor_Glue::vhdl_testbench_label (string label)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"vhdl_testbench_label","Begin");
+
+#ifdef VHDL_TESTBENCH
+    _vhdl_testbench->add_label(label);
+#endif
+    
+    log_printf(FUNC,Meta_Predictor_Glue,"vhdl_testbench_label","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_testbench_port.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_testbench_port.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_testbench_port.cpp	(revision 4)
@@ -0,0 +1,92 @@
+#ifdef VHDL_TESTBENCH
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  void Meta_Predictor_Glue::vhdl_testbench_port ()
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"vhdl_testbench_port","Begin");
+
+    for (uint32_t i=0; i<_param._nb_prediction; i++)
+      {
+	if (_param._have_meta_predictor)
+	  {
+	_vhdl_testbench->set_port (" in_PREDICT_PREDICTOR_0_ACK_"+toString(i)+"                ", IN, 1);
+	_vhdl_testbench->set_port (" in_PREDICT_PREDICTOR_1_ACK_"+toString(i)+"                ", IN, 1);
+	  }
+	_vhdl_testbench->set_port (" in_PREDICT_PREDICTOR_2_ACK_"+toString(i)+"                ", IN, 1);
+	_vhdl_testbench->set_port ("out_PREDICT_ACK_"+toString(i)+"                            ",OUT, 1);
+
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_0_have_bht)
+	_vhdl_testbench->set_port (" in_PREDICT_PREDICTOR_0_BHT_HISTORY_"+toString(i)+"        ", IN,_param._predictor_0_bht_size_shifter);
+	if (_param._predictor_0_have_pht)
+	_vhdl_testbench->set_port (" in_PREDICT_PREDICTOR_0_PHT_HISTORY_"+toString(i)+"        ", IN,_param._predictor_0_pht_size_counter);
+	if (_param._predictor_1_have_bht)
+	_vhdl_testbench->set_port (" in_PREDICT_PREDICTOR_1_BHT_HISTORY_"+toString(i)+"        ", IN,_param._predictor_1_bht_size_shifter);
+	if (_param._predictor_1_have_pht)
+	_vhdl_testbench->set_port (" in_PREDICT_PREDICTOR_1_PHT_HISTORY_"+toString(i)+"        ", IN,_param._predictor_1_pht_size_counter);
+	  }
+	if (_param._predictor_2_have_bht)
+	_vhdl_testbench->set_port (" in_PREDICT_PREDICTOR_2_BHT_HISTORY_"+toString(i)+"        ", IN,_param._predictor_2_bht_size_shifter);
+	if (_param._predictor_2_have_pht)
+	_vhdl_testbench->set_port (" in_PREDICT_PREDICTOR_2_PHT_HISTORY_"+toString(i)+"        ", IN,_param._predictor_2_pht_size_counter);
+
+	_vhdl_testbench->set_port ("out_PREDICT_HISTORY_"+toString(i)+"                        ",OUT,_param._size_history);
+	_vhdl_testbench->set_port ("out_PREDICT_DIRECTION_"+toString(i)+"                      ",OUT,1);
+      }
+
+    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+      {
+	if (_param._have_meta_predictor)
+	  {
+	_vhdl_testbench->set_port (" in_BRANCH_COMPLETE_PREDICTOR_0_ACK_"+toString(i)+"        ", IN, 1);
+	_vhdl_testbench->set_port (" in_BRANCH_COMPLETE_PREDICTOR_1_ACK_"+toString(i)+"        ", IN, 1);
+	  }
+	_vhdl_testbench->set_port (" in_BRANCH_COMPLETE_PREDICTOR_2_ACK_"+toString(i)+"        ", IN, 1);
+	_vhdl_testbench->set_port ("out_BRANCH_COMPLETE_ACK_"+toString(i)+"                    ",OUT, 1);
+
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_0_have_bht)
+	_vhdl_testbench->set_port ("out_BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY_"+toString(i)+"",OUT,_param._predictor_0_bht_size_shifter);
+	if (_param._predictor_0_have_pht)
+	_vhdl_testbench->set_port ("out_BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY_"+toString(i)+"",OUT,_param._predictor_0_pht_size_counter);
+	if (_param._predictor_1_have_bht)
+	_vhdl_testbench->set_port ("out_BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY_"+toString(i)+"",OUT,_param._predictor_1_bht_size_shifter);
+	if (_param._predictor_1_have_pht)
+	_vhdl_testbench->set_port ("out_BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY_"+toString(i)+"",OUT,_param._predictor_1_pht_size_counter);
+	  }
+	if (_param._predictor_2_have_bht)
+	_vhdl_testbench->set_port ("out_BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY_"+toString(i)+"",OUT,_param._predictor_2_bht_size_shifter);
+	if (_param._predictor_2_have_pht)
+	_vhdl_testbench->set_port ("out_BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY_"+toString(i)+"",OUT,_param._predictor_2_pht_size_counter);
+
+	_vhdl_testbench->set_port (" in_BRANCH_COMPLETE_HISTORY_"+toString(i)+"                ", IN,_param._size_history);
+      }
+
+    log_printf(FUNC,Meta_Predictor_Glue,"vhdl_testbench_port","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_testbench_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_testbench_transition.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Meta_Predictor_Glue_vhdl_testbench_transition.cpp	(revision 4)
@@ -0,0 +1,106 @@
+#ifdef VHDL_TESTBENCH
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Meta_Predictor_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  void Meta_Predictor_Glue::vhdl_testbench_transition ()
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"vhdl_testbench_transition","Begin");
+
+    // Evaluation before read the ouput signal
+    sc_start(0);
+
+    // In order with file Meta_Predictor_Glue_vhdl_testbench_port.cpp
+    // Warning : if a output depend of a subcomponent, take directly the port of subcomponent
+    // (because we have no control on the ordonnancer's policy)
+
+    for (uint32_t i=0; i<_param._nb_prediction; i++)
+      {
+	if (_param._have_meta_predictor)
+	  {
+	_vhdl_testbench->add_input (PORT_READ( in_PREDICT_PREDICTOR_0_ACK [i]));
+	_vhdl_testbench->add_input (PORT_READ( in_PREDICT_PREDICTOR_1_ACK [i]));
+	  }
+	_vhdl_testbench->add_input (PORT_READ( in_PREDICT_PREDICTOR_2_ACK [i]));
+	_vhdl_testbench->add_output(PORT_READ(out_PREDICT_ACK [i]));
+
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_0_have_bht)
+	_vhdl_testbench->add_input (PORT_READ( in_PREDICT_PREDICTOR_0_BHT_HISTORY [i]));
+	if (_param._predictor_0_have_pht)
+	_vhdl_testbench->add_input (PORT_READ( in_PREDICT_PREDICTOR_0_PHT_HISTORY [i]));
+	if (_param._predictor_1_have_bht)
+	_vhdl_testbench->add_input (PORT_READ( in_PREDICT_PREDICTOR_1_BHT_HISTORY [i]));
+	if (_param._predictor_1_have_pht)
+	_vhdl_testbench->add_input (PORT_READ( in_PREDICT_PREDICTOR_1_PHT_HISTORY [i]));
+	  }
+	if (_param._predictor_2_have_bht)
+	_vhdl_testbench->add_input (PORT_READ( in_PREDICT_PREDICTOR_2_BHT_HISTORY [i]));
+	if (_param._predictor_2_have_pht)
+	_vhdl_testbench->add_input (PORT_READ( in_PREDICT_PREDICTOR_2_PHT_HISTORY [i]));
+
+	_vhdl_testbench->add_output(PORT_READ(out_PREDICT_HISTORY [i]));
+	_vhdl_testbench->add_output(PORT_READ(out_PREDICT_DIRECTION [i]));
+      }
+
+    for (uint32_t i=0; i<_param._nb_branch_complete; i++)
+      {
+	if (_param._have_meta_predictor)
+	  {
+	_vhdl_testbench->add_input (PORT_READ( in_BRANCH_COMPLETE_PREDICTOR_0_ACK [i]));
+	_vhdl_testbench->add_input (PORT_READ( in_BRANCH_COMPLETE_PREDICTOR_1_ACK [i]));
+	  }
+	_vhdl_testbench->add_input (PORT_READ( in_BRANCH_COMPLETE_PREDICTOR_2_ACK [i]));
+	_vhdl_testbench->add_output(PORT_READ(out_BRANCH_COMPLETE_ACK [i]));
+
+	if (_param._have_meta_predictor)
+	  {
+	if (_param._predictor_0_have_bht)
+	_vhdl_testbench->add_output(PORT_READ(out_BRANCH_COMPLETE_PREDICTOR_0_BHT_HISTORY [i]));
+	if (_param._predictor_0_have_pht)
+	_vhdl_testbench->add_output(PORT_READ(out_BRANCH_COMPLETE_PREDICTOR_0_PHT_HISTORY [i]));
+	if (_param._predictor_1_have_bht)
+	_vhdl_testbench->add_output(PORT_READ(out_BRANCH_COMPLETE_PREDICTOR_1_BHT_HISTORY [i]));
+	if (_param._predictor_1_have_pht)
+	_vhdl_testbench->add_output(PORT_READ(out_BRANCH_COMPLETE_PREDICTOR_1_PHT_HISTORY [i]));
+	  }
+	if (_param._predictor_2_have_bht)
+	_vhdl_testbench->add_output(PORT_READ(out_BRANCH_COMPLETE_PREDICTOR_2_BHT_HISTORY [i]));
+	if (_param._predictor_2_have_pht)
+	_vhdl_testbench->add_output(PORT_READ(out_BRANCH_COMPLETE_PREDICTOR_2_PHT_HISTORY [i]));
+
+	_vhdl_testbench->add_input (PORT_READ( in_BRANCH_COMPLETE_HISTORY [i]));
+      }
+    
+    // add_test :
+    //  - True  : the cycle must be compare with the output of systemC
+    //  - False : no test
+    _vhdl_testbench->add_test(true);
+
+    _vhdl_testbench->new_cycle (); // always at the end
+
+    log_printf(FUNC,Meta_Predictor_Glue,"vhdl_testbench_transition","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Parameters.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Parameters.cpp	(revision 4)
@@ -0,0 +1,102 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Parameters.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  Parameters::Parameters (bool     have_meta_predictor               ,
+			  bool     predictor_0_have_bht              ,
+			  uint32_t predictor_0_bht_size_shifter      ,
+			  bool     predictor_0_have_pht              ,
+			  uint32_t predictor_0_pht_size_counter      ,
+			  bool     predictor_1_have_bht              ,
+			  uint32_t predictor_1_bht_size_shifter      ,
+			  bool     predictor_1_have_pht              ,
+			  uint32_t predictor_1_pht_size_counter      ,
+			  bool     predictor_2_have_bht              ,
+			  uint32_t predictor_2_bht_size_shifter      ,
+			  bool     predictor_2_have_pht              ,
+			  uint32_t predictor_2_pht_size_counter      ,
+			  uint32_t nb_prediction                     ,
+			  uint32_t nb_branch_complete                ) :
+    _have_meta_predictor                (have_meta_predictor               ),
+    
+    _predictor_0_have_bht               ((have_meta_predictor==false)?false:predictor_0_have_bht              ),
+    _predictor_0_bht_size_shifter       ((_predictor_0_have_bht==false)?0:predictor_0_bht_size_shifter      ),
+    _predictor_0_have_pht               ((have_meta_predictor==false)?false:predictor_0_have_pht              ),
+    _predictor_0_pht_size_counter       ((_predictor_0_have_pht==false)?0:predictor_0_pht_size_counter      ),
+
+    _predictor_1_have_bht               ((have_meta_predictor==false)?false:predictor_1_have_bht              ),
+    _predictor_1_bht_size_shifter       ((_predictor_1_have_bht==false)?0:predictor_1_bht_size_shifter      ),
+    _predictor_1_have_pht               ((have_meta_predictor==false)?false:predictor_1_have_pht              ),
+    _predictor_1_pht_size_counter       ((_predictor_1_have_pht==false)?0:predictor_1_pht_size_counter      ),
+
+    _predictor_2_have_bht               (predictor_2_have_bht              ),
+    _predictor_2_bht_size_shifter       ((_predictor_2_have_bht==false)?0:predictor_2_bht_size_shifter      ),
+    _predictor_2_have_pht               (predictor_2_have_pht              ),
+    _predictor_2_pht_size_counter       ((_predictor_2_have_pht==false)?0:predictor_2_pht_size_counter      ),
+
+    _nb_prediction                      (nb_prediction                     ),
+    _nb_branch_complete                 (nb_branch_complete                ),
+
+    _size_history                       (_predictor_0_bht_size_shifter + _predictor_0_pht_size_counter +
+					 _predictor_1_bht_size_shifter + _predictor_1_pht_size_counter +
+					 _predictor_2_bht_size_shifter + _predictor_2_pht_size_counter )
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"Parameters","Begin");
+    test();
+    log_printf(FUNC,Meta_Predictor_Glue,"Parameters","End");
+  };
+  
+  Parameters::Parameters (Parameters & param):
+    _have_meta_predictor                (param._have_meta_predictor                ),
+
+    _predictor_0_have_bht               (param._predictor_0_have_bht               ),
+    _predictor_0_bht_size_shifter       (param._predictor_0_bht_size_shifter       ),
+    _predictor_0_have_pht               (param._predictor_0_have_pht               ),
+    _predictor_0_pht_size_counter       (param._predictor_0_pht_size_counter       ),
+
+    _predictor_1_have_bht               (param._predictor_1_have_bht               ),
+    _predictor_1_bht_size_shifter       (param._predictor_1_bht_size_shifter       ),
+    _predictor_1_have_pht               (param._predictor_1_have_pht               ),
+    _predictor_1_pht_size_counter       (param._predictor_1_pht_size_counter       ),
+
+    _predictor_2_have_bht               (param._predictor_2_have_bht               ),
+    _predictor_2_bht_size_shifter       (param._predictor_2_bht_size_shifter       ),
+    _predictor_2_have_pht               (param._predictor_2_have_pht               ),
+    _predictor_2_pht_size_counter       (param._predictor_2_pht_size_counter       ),
+
+    _nb_prediction                      (param._nb_prediction                      ),
+    _nb_branch_complete                 (param._nb_branch_complete                 ),
+
+    _size_history                       (param._size_history                       )
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"Parameters","Begin");
+    test();
+    log_printf(FUNC,Meta_Predictor_Glue,"Parameters","End");
+  };
+
+  Parameters::~Parameters () 
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"~Parameters","Begin");
+    log_printf(FUNC,Meta_Predictor_Glue,"~Parameters","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Parameters_msg_error.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Parameters_msg_error.cpp	(revision 4)
@@ -0,0 +1,51 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Parameters.h"
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Types.h"
+#include <sstream>
+using namespace std;
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  string Parameters::msg_error(void)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"msg_error","Begin");
+
+    string msg = "";
+
+    // note : size_shifter and size_counter is set at 0 if not need
+    if ((8*sizeof(Thistory_t)) < _size_history)
+      {
+        msg += "  - type \"Thistory_t\" is too little to the total size of history (shifter's size and counter's size)\n";
+        msg +=  "    * predictor_0_bht_size_shifter    : " + toString(_predictor_0_bht_size_shifter) + "\n";
+        msg +=  "    * predictor_0_pht_size_counter    : " + toString(_predictor_0_pht_size_counter) + "\n";
+        msg +=  "    * predictor_1_bht_size_shifter    : " + toString(_predictor_1_bht_size_shifter) + "\n";
+        msg +=  "    * predictor_1_pht_size_counter    : " + toString(_predictor_1_pht_size_counter) + "\n";
+        msg +=  "    * predictor_2_bht_size_shifter    : " + toString(_predictor_2_bht_size_shifter) + "\n";
+        msg +=  "    * predictor_2_pht_size_counter    : " + toString(_predictor_2_pht_size_counter) + "\n";
+	msg +=  "    * Thistory_t                (bits): " + toString(8*(sizeof(Thistory_t))) + "\n";
+      }
+
+    return msg;
+
+    log_printf(FUNC,Meta_Predictor_Glue,"msg_error","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Parameters_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Parameters_print.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Parameters_print.cpp	(revision 4)
@@ -0,0 +1,99 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Parameters.h"
+#include "Behavioural/include/XML.h"
+using namespace std;
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  string Parameters::print (uint32_t depth)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"print","Begin");
+
+    XML xml ("meta_predictor_glue");
+
+    xml.balise_open("meta_predictor_glue");
+
+    xml.  singleton_begin("have_meta_predictor               ");               
+    xml.    attribut("value",toString(_have_meta_predictor               ));
+    xml.  singleton_end();
+
+    xml.  singleton_begin("predictor_0_have_bht              ");        	
+    xml.    attribut("value",toString(_predictor_0_have_bht              ));
+    xml.  singleton_end();
+    xml.  singleton_begin("predictor_0_bht_size_shifter      ");	
+    xml.    attribut("value",toString(_predictor_0_bht_size_shifter      ));
+    xml.  singleton_end();
+    xml.  singleton_begin("predictor_0_have_pht              ");              
+    xml.    attribut("value",toString(_predictor_0_have_pht              ));
+    xml.  singleton_end();
+    xml.  singleton_begin("predictor_0_pht_size_counter      ");      
+    xml.    attribut("value",toString(_predictor_0_pht_size_counter      ));
+    xml.  singleton_end();
+
+    xml.  singleton_begin("predictor_1_have_bht              ");        	
+    xml.    attribut("value",toString(_predictor_1_have_bht              ));
+    xml.  singleton_end();
+    xml.  singleton_begin("predictor_1_bht_size_shifter      ");	
+    xml.    attribut("value",toString(_predictor_1_bht_size_shifter      ));
+    xml.  singleton_end();
+    xml.  singleton_begin("predictor_1_have_pht              ");              
+    xml.    attribut("value",toString(_predictor_1_have_pht              ));
+    xml.  singleton_end();
+    xml.  singleton_begin("predictor_1_pht_size_counter      ");      
+    xml.    attribut("value",toString(_predictor_1_pht_size_counter      ));
+    xml.  singleton_end();
+    
+    xml.  singleton_begin("predictor_2_have_bht              ");        	
+    xml.    attribut("value",toString(_predictor_2_have_bht              ));
+    xml.  singleton_end();
+    xml.  singleton_begin("predictor_2_bht_size_shifter      ");	
+    xml.    attribut("value",toString(_predictor_2_bht_size_shifter      ));
+    xml.  singleton_end();
+    xml.  singleton_begin("predictor_2_have_pht              ");              
+    xml.    attribut("value",toString(_predictor_2_have_pht              ));
+    xml.  singleton_end();
+    xml.  singleton_begin("predictor_2_pht_size_counter      ");      
+    xml.    attribut("value",toString(_predictor_2_pht_size_counter      ));
+    xml.  singleton_end();
+        
+    xml.  singleton_begin("nb_prediction                     ");                     
+    xml.    attribut("value",toString(_nb_prediction                     ));
+    xml.  singleton_end();
+    xml.  singleton_begin("nb_branch_complete                ");                
+    xml.    attribut("value",toString(_nb_branch_complete                ));
+    xml.  singleton_end();
+
+    xml.balise_close();
+
+    log_printf(FUNC,Meta_Predictor_Glue,"print","End");
+    
+    return xml.get_body(depth);
+  };
+
+  ostream& operator<< (ostream& output_stream ,
+		       morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::meta_predictor_glue::Parameters & x)
+  {
+    output_stream << x.print(0);
+    
+    return output_stream;
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Statistics.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Statistics.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Statistics.cpp	(revision 4)
@@ -0,0 +1,44 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Statistics.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  Statistics::Statistics (string                                      name                       ,
+			  morpheo::behavioural::Parameters_Statistics parameters_statistics      ,
+			  Parameters                                  parameters
+			  ) :
+    morpheo::behavioural::Statistics(name                  ,
+				     parameters_statistics ),
+    _parameters(parameters)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"Statistics","Begin");
+    log_printf(FUNC,Meta_Predictor_Glue,"Statistics","End");
+  };
+  
+  Statistics::~Statistics () 
+  { 
+    log_printf(FUNC,Meta_Predictor_Glue,"~Statistics","Begin");
+    log_printf(FUNC,Meta_Predictor_Glue,"~Statistics","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Statistics_add.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Statistics_add.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Statistics_add.cpp	(revision 4)
@@ -0,0 +1,35 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Statistics.h"
+
+#include <sstream>
+using namespace std;
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  void Statistics::add ()
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"add","Begin");
+    log_printf(FUNC,Meta_Predictor_Glue,"add","End");
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Statistics_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Statistics_print.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Statistics_print.cpp	(revision 4)
@@ -0,0 +1,53 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Statistics.h"
+
+#include <sstream>
+using namespace std;
+
+namespace morpheo {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  string Statistics::print (uint32_t depth)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"print","Begin");
+
+    string        tab = string(depth,'\t');
+    ostringstream msg;
+
+    msg << tab << "<meta_predictor_glue name=\"" << _name << "\" >" << endl
+        << print_body(depth+1) << endl
+	<< tab << "</meta_predictor_glue>" << endl;
+    
+    log_printf(FUNC,Meta_Predictor_Glue,"print","End");
+
+    return msg.str();
+  };
+
+  ostream& operator<< (ostream& output_stream ,
+		       morpheo::behavioural::stage_1_ifetch::predictor::meta_predictor::meta_predictor_glue::Statistics & x)
+  {
+    output_stream << x.print(0);
+
+    return output_stream;
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Statistics_print_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Statistics_print_body.cpp	(revision 4)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/src/Statistics_print_body.cpp	(revision 4)
@@ -0,0 +1,43 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Stage_1_Ifetch/Predictor/Meta_Predictor/Meta_Predictor_Glue/include/Statistics.h"
+
+#include <sstream>
+using namespace std;
+
+namespace morpheo                    {
+namespace behavioural {
+namespace stage_1_ifetch {
+namespace predictor {
+namespace meta_predictor {
+namespace meta_predictor_glue {
+
+
+  string Statistics::print_body (uint32_t depth)
+  {
+    log_printf(FUNC,Meta_Predictor_Glue,"print_body","Begin");
+
+    string        tab = string(depth,'\t');
+    ostringstream msg;
+
+    msg << tab << "";
+    
+    log_printf(FUNC,Meta_Predictor_Glue,"print_body","End");
+
+    return msg.str();
+  };
+
+}; // end namespace meta_predictor_glue
+}; // end namespace meta_predictor
+}; // end namespace predictor
+}; // end namespace stage_1_ifetch
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
