Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Makefile
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Makefile	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Makefile	(revision 60)
@@ -0,0 +1,24 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_COMPONENT			= ./
+include				$(DIR_COMPONENT)/Makefile.defs
+
+#-----[ Library ]------------------------------------------
+LIBRARY				= $(DIR_LIB)/libRegister_unit.a
+
+
+#-----[ include ]------------------------------------------
+
+all				:
+				@$(MAKE) all_component
+
+include                         $(DIR_MORPHEO)/Behavioural/Makefile.flags
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Common
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Component
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Makefile.defs
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Makefile.defs	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Makefile.defs	(revision 60)
@@ -0,0 +1,11 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_COMPONENT_MORPHEO		= ../../../../..
+DIR_MORPHEO			= $(DIR_COMPONENT)/$(DIR_COMPONENT_MORPHEO)
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Makefile.deps
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Makefile.deps	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Makefile.deps	(revision 60)
@@ -0,0 +1,52 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+# DIR_MORPHEO must be defined
+
+Register_unit			= yes
+
+
+ifndef RegisterFile
+include				$(DIR_MORPHEO)/Behavioural/Generic/RegisterFile/Makefile.deps
+endif
+ifndef Register_unit_Glue
+include 			$(DIR_MORPHEO)/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/Makefile.deps
+endif
+ifndef Behavioural
+include 			$(DIR_MORPHEO)/Behavioural/Makefile.deps
+endif
+
+#-----[ Library ]------------------------------------------
+Register_unit_LIBRARY		= 	-lRegister_unit				\
+					$(RegisterFile_LIBRARY)			\
+					$(Register_unit_Glue_LIBRARY)		\
+					$(Behavioural_LIBRARY)	
+
+Register_unit_DIR_LIBRARY	=	-L$(DIR_MORPHEO)/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/lib	\
+					$(RegisterFile_DIR_LIBRARY)		\
+					$(Register_unit_Glue_DIR_LIBRARY)	\
+					$(Behavioural_DIR_LIBRARY)
+
+Register_unit_DEPENDENCIES	=	RegisterFile_library			\
+					Register_unit_Glue_library 		\
+					Behavioural_library
+
+Register_unit_CLEAN        	=	RegisterFile_library_clean		\
+					Register_unit_Glue_library_clean 	\
+					Behavioural_library_clean
+
+#-----[ Rules ]--------------------------------------------
+
+.NOTPARALLEL			: Register_unit_library Register_unit_library_clean	
+
+Register_unit_library		: $(Register_unit_DEPENDENCIES)
+				@\
+				$(MAKE) --directory=$(DIR_MORPHEO)/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit --makefile=Makefile;
+
+Register_unit_library_clean	: $(Register_unit_CLEAN)
+				@\
+				$(MAKE) --directory=$(DIR_MORPHEO)/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit --makefile=Makefile clean;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/Makefile
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/Makefile	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/Makefile	(revision 60)
@@ -0,0 +1,24 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_COMPONENT			= ./
+include				$(DIR_COMPONENT)/Makefile.defs
+
+#-----[ Library ]------------------------------------------
+LIBRARY				= $(DIR_LIB)/libRegister_unit_Glue.a
+
+
+#-----[ include ]------------------------------------------
+
+all				:
+				@$(MAKE) all_component
+
+include                         $(DIR_MORPHEO)/Behavioural/Makefile.flags
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Common
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Component
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/Makefile.defs
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/Makefile.defs	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/Makefile.defs	(revision 60)
@@ -0,0 +1,11 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_COMPONENT_MORPHEO		= ../../../../../..
+DIR_MORPHEO			= $(DIR_COMPONENT)/$(DIR_COMPONENT_MORPHEO)
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/Makefile.deps
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/Makefile.deps	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/Makefile.deps	(revision 60)
@@ -0,0 +1,33 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+# DIR_MORPHEO must be defined
+
+Register_unit_Glue			= yes
+
+ifndef Behavioural
+include 			$(DIR_MORPHEO)/Behavioural/Makefile.deps
+endif
+
+#-----[ Library ]------------------------------------------
+Register_unit_Glue_LIBRARY		= 	-lRegister_unit_Glue	\
+					$(Behavioural_LIBRARY)	
+
+Register_unit_Glue_DIR_LIBRARY		=	-L$(DIR_MORPHEO)/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/lib	\
+					$(Behavioural_DIR_LIBRARY)
+
+#-----[ Rules ]--------------------------------------------
+
+Register_unit_Glue_library		: 
+				@\
+				$(MAKE) Behavioural_library; \
+				$(MAKE) --directory=$(DIR_MORPHEO)/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue --makefile=Makefile;
+	
+Register_unit_Glue_library_clean	: 
+				@\
+				$(MAKE) Behavioural_library_clean; \
+				$(MAKE) --directory=$(DIR_MORPHEO)/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue --makefile=Makefile clean;
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/Makefile
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/Makefile	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/Makefile	(revision 60)
@@ -0,0 +1,30 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_COMPONENT			= ../
+include				$(DIR_COMPONENT)/Makefile.defs
+
+LIBRARY				= $(Register_unit_Glue_LIBRARY)
+
+DIR_LIBRARY			= $(Register_unit_Glue_DIR_LIBRARY)
+
+#-----[ include ]------------------------------------------
+
+all				:
+				@$(MAKE) all_selftest
+
+library				: Register_unit_Glue_library
+
+library_clean			: Register_unit_Glue_library_clean
+
+include                         ../Makefile.deps
+include                         $(DIR_MORPHEO)/Behavioural/Makefile.flags
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Common
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Selftest
+include 			$(DIR_MORPHEO)/Behavioural/Makefile.Synthesis
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/configuration.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/configuration.cfg	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/configuration.cfg	(revision 60)
@@ -0,0 +1,16 @@
+Register_unit_Glue
+4	4	*4	#nb_ooo_engine    
+32	32	*2	#size_general_data
+2	2	+1	#size_special_data
+2	8	*4	#nb_gpr_read      
+2	8	*4	#nb_spr_read          
+1	4	*4	#nb_gpr_write     
+1	4	*4	#nb_spr_write     
+1	1	*2	#_nb_inst_insert_rob  [0]     
+2	2	*2	#_nb_inst_insert_rob  [1]     
+4	4	*2	#_nb_inst_insert_rob  [2]     
+8	8	*2	#_nb_inst_insert_rob  [3]     
+1	1	*2	#_nb_inst_retire_rob  [0]     
+2	2	*2	#_nb_inst_retire_rob  [1]     
+4	4	*2	#_nb_inst_retire_rob  [2]     
+8	8	*2	#_nb_inst_retire_rob  [3]     
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/include/test.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/include/test.h	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/include/test.h	(revision 60)
@@ -0,0 +1,62 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ * Test "RegisterFile"
+ */
+
+#ifdef SYSTEMC
+#include "systemc.h"
+#endif
+
+#include <string>
+#include <iostream>
+#include <sys/time.h>
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+using namespace std;
+using namespace morpheo;
+using namespace morpheo::behavioural;
+using namespace morpheo::behavioural::core;
+using namespace morpheo::behavioural::core::multi_execute_loop;
+using namespace morpheo::behavioural::core::multi_execute_loop::execute_loop;
+using namespace morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit;
+
+using namespace morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue;
+
+void test    (string name,
+	      morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Parameters * param);
+
+class Time 
+{
+private : timeval time_begin;
+// private : timeval time_end;
+  
+public  : Time ()
+  {
+    gettimeofday(&time_begin     ,NULL);
+  };
+
+public  : ~Time ()
+  {
+    cout << *this;
+  };
+
+public  : friend ostream& operator<< (ostream& output_stream,
+				      const Time & x)
+  {
+    timeval time_end;
+    
+    gettimeofday(&time_end       ,NULL);
+    
+    uint32_t nb_cycles = static_cast<uint32_t>(sc_simulation_time());
+
+    double average = static_cast<double>(nb_cycles) / static_cast<double>(time_end.tv_sec-x.time_begin.tv_sec);
+    
+    output_stream << nb_cycles << "\t(" << average << " cycles / seconds )" << endl;
+
+    return output_stream;
+  }
+};
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/mkf.info
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/mkf.info	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/mkf.info	(revision 60)
@@ -0,0 +1,81 @@
+
+# Register_unit_Glue_0
+target_dep	all	Register_unit_Glue_0.ngc
+target_dep	Register_unit_Glue_0.ngc	Register_unit_Glue_0.prj
+target_dep	Register_unit_Glue_0.prj	Register_unit_Glue_0.vhdl Register_unit_Glue_0_Pack.vhdl
+
+# Register_unit_Glue_1
+target_dep	all	Register_unit_Glue_1.ngc
+target_dep	Register_unit_Glue_1.ngc	Register_unit_Glue_1.prj
+target_dep	Register_unit_Glue_1.prj	Register_unit_Glue_1.vhdl Register_unit_Glue_10.vhdl Register_unit_Glue_10_Pack.vhdl Register_unit_Glue_11.vhdl Register_unit_Glue_11_Pack.vhdl Register_unit_Glue_12.vhdl Register_unit_Glue_12_Pack.vhdl Register_unit_Glue_13.vhdl Register_unit_Glue_13_Pack.vhdl Register_unit_Glue_14.vhdl Register_unit_Glue_14_Pack.vhdl Register_unit_Glue_15.vhdl Register_unit_Glue_15_Pack.vhdl Register_unit_Glue_1_Pack.vhdl
+
+# Register_unit_Glue_10
+target_dep	all	Register_unit_Glue_10.ngc
+target_dep	Register_unit_Glue_10.ngc	Register_unit_Glue_10.prj
+target_dep	Register_unit_Glue_10.prj	Register_unit_Glue_10.vhdl Register_unit_Glue_10_Pack.vhdl
+
+# Register_unit_Glue_11
+target_dep	all	Register_unit_Glue_11.ngc
+target_dep	Register_unit_Glue_11.ngc	Register_unit_Glue_11.prj
+target_dep	Register_unit_Glue_11.prj	Register_unit_Glue_11.vhdl Register_unit_Glue_11_Pack.vhdl
+
+# Register_unit_Glue_12
+target_dep	all	Register_unit_Glue_12.ngc
+target_dep	Register_unit_Glue_12.ngc	Register_unit_Glue_12.prj
+target_dep	Register_unit_Glue_12.prj	Register_unit_Glue_12.vhdl Register_unit_Glue_12_Pack.vhdl
+
+# Register_unit_Glue_13
+target_dep	all	Register_unit_Glue_13.ngc
+target_dep	Register_unit_Glue_13.ngc	Register_unit_Glue_13.prj
+target_dep	Register_unit_Glue_13.prj	Register_unit_Glue_13.vhdl Register_unit_Glue_13_Pack.vhdl
+
+# Register_unit_Glue_14
+target_dep	all	Register_unit_Glue_14.ngc
+target_dep	Register_unit_Glue_14.ngc	Register_unit_Glue_14.prj
+target_dep	Register_unit_Glue_14.prj	Register_unit_Glue_14.vhdl Register_unit_Glue_14_Pack.vhdl
+
+# Register_unit_Glue_15
+target_dep	all	Register_unit_Glue_15.ngc
+target_dep	Register_unit_Glue_15.ngc	Register_unit_Glue_15.prj
+target_dep	Register_unit_Glue_15.prj	Register_unit_Glue_15.vhdl Register_unit_Glue_15_Pack.vhdl
+
+# Register_unit_Glue_2
+target_dep	all	Register_unit_Glue_2.ngc
+target_dep	Register_unit_Glue_2.ngc	Register_unit_Glue_2.prj
+target_dep	Register_unit_Glue_2.prj	Register_unit_Glue_2.vhdl Register_unit_Glue_2_Pack.vhdl
+
+# Register_unit_Glue_3
+target_dep	all	Register_unit_Glue_3.ngc
+target_dep	Register_unit_Glue_3.ngc	Register_unit_Glue_3.prj
+target_dep	Register_unit_Glue_3.prj	Register_unit_Glue_3.vhdl Register_unit_Glue_3_Pack.vhdl
+
+# Register_unit_Glue_4
+target_dep	all	Register_unit_Glue_4.ngc
+target_dep	Register_unit_Glue_4.ngc	Register_unit_Glue_4.prj
+target_dep	Register_unit_Glue_4.prj	Register_unit_Glue_4.vhdl Register_unit_Glue_4_Pack.vhdl
+
+# Register_unit_Glue_5
+target_dep	all	Register_unit_Glue_5.ngc
+target_dep	Register_unit_Glue_5.ngc	Register_unit_Glue_5.prj
+target_dep	Register_unit_Glue_5.prj	Register_unit_Glue_5.vhdl Register_unit_Glue_5_Pack.vhdl
+
+# Register_unit_Glue_6
+target_dep	all	Register_unit_Glue_6.ngc
+target_dep	Register_unit_Glue_6.ngc	Register_unit_Glue_6.prj
+target_dep	Register_unit_Glue_6.prj	Register_unit_Glue_6.vhdl Register_unit_Glue_6_Pack.vhdl
+
+# Register_unit_Glue_7
+target_dep	all	Register_unit_Glue_7.ngc
+target_dep	Register_unit_Glue_7.ngc	Register_unit_Glue_7.prj
+target_dep	Register_unit_Glue_7.prj	Register_unit_Glue_7.vhdl Register_unit_Glue_7_Pack.vhdl
+
+# Register_unit_Glue_8
+target_dep	all	Register_unit_Glue_8.ngc
+target_dep	Register_unit_Glue_8.ngc	Register_unit_Glue_8.prj
+target_dep	Register_unit_Glue_8.prj	Register_unit_Glue_8.vhdl Register_unit_Glue_8_Pack.vhdl
+
+# Register_unit_Glue_9
+target_dep	all	Register_unit_Glue_9.ngc
+target_dep	Register_unit_Glue_9.ngc	Register_unit_Glue_9.prj
+target_dep	Register_unit_Glue_9.prj	Register_unit_Glue_9.vhdl Register_unit_Glue_9_Pack.vhdl
+
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/src/main.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/src/main.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/src/main.cpp	(revision 60)
@@ -0,0 +1,95 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/include/test.h"
+
+#define NB_PARAMS 7
+
+void usage (int argc, char * argv[])
+{
+  cerr << "<Usage> " << argv[0] << " name_instance list_params" << endl
+       << "list_params is :" << endl
+       << " - nb_ooo_engine                             (uint32_t)" << endl
+       << " - size_general_data                         (uint32_t)" << endl
+       << " - size_special_data                         (uint32_t)" << endl
+       << " - nb_gpr_read                               (uint32_t)" << endl
+       << " - nb_spr_read                               (uint32_t)" << endl
+       << " - nb_gpr_write                              (uint32_t)" << endl
+       << " - nb_spr_write                              (uint32_t)" << endl
+       << " - nb_inst_insert_rob        [nb_ooo_engine] (uint32_t)" << endl 
+       << " - nb_inst_retire_rob        [nb_ooo_engine] (uint32_t)" << endl 
+       << "" << endl;
+  
+  for (int i=0; i<argc; i++)
+    cerr << argv[i] << " ";
+  cerr << 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 (argc, argv);
+
+  uint32_t     x = 1;
+
+  string       name                 =      argv[x++];
+  uint32_t    _nb_ooo_engine        = atoi(argv[x++]);
+  uint32_t    _size_general_data    = atoi(argv[x++]);
+  uint32_t    _size_special_data    = atoi(argv[x++]);
+  uint32_t    _nb_gpr_read          = atoi(argv[x++]);
+  uint32_t    _nb_spr_read          = atoi(argv[x++]);    
+  uint32_t    _nb_gpr_write         = atoi(argv[x++]);
+  uint32_t    _nb_spr_write         = atoi(argv[x++]);
+
+  if (argc != 2+NB_PARAMS+static_cast<int>(2*_nb_ooo_engine))
+    usage (argc, argv);
+  
+  uint32_t  * _nb_inst_insert_rob = new uint32_t [_nb_ooo_engine];
+  uint32_t  * _nb_inst_retire_rob = new uint32_t [_nb_ooo_engine];
+
+  for (uint32_t i=0; i<_nb_ooo_engine; i++)
+    _nb_inst_insert_rob  [i] = atoi(argv[x++]);
+  for (uint32_t i=0; i<_nb_ooo_engine; i++)
+    _nb_inst_retire_rob  [i] = atoi(argv[x++]);
+
+  try 
+    {
+      morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Parameters * param = new morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Parameters
+	(_nb_ooo_engine    ,
+	 _size_general_data,
+	 _size_special_data,
+	 _nb_gpr_read      ,
+	 _nb_spr_read      ,
+	 _nb_gpr_write     ,
+	 _nb_spr_write     ,
+	 _nb_inst_insert_rob,
+	 _nb_inst_retire_rob);
+      
+      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/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/src/test.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/src/test.cpp	(revision 60)
@@ -0,0 +1,975 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ * Test
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/SelfTest/include/test.h"
+#include "Common/include/Test.h"
+
+#define NB_ITERATION  128
+#define CYCLE_MAX     (128*NB_ITERATION)
+
+#define LABEL(str)                                                                       \
+{                                                                                        \
+  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} " << str << endl; \
+} while(0)
+
+static uint32_t cycle = 0;
+
+#define SC_START(cycle_offset)                                          \
+do                                                                      \
+{                                                                       \
+/*cout << "SC_START (begin)" << endl;*/                                 \
+                                                                        \
+  uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \
+  if (cycle_current != cycle)                                           \
+    {                                                                   \
+      cycle = cycle_current;                                            \
+      cout << "##########[ cycle "<< cycle << " ]" << endl;             \
+    }                                                                   \
+                                                                        \
+  if (cycle_current > CYCLE_MAX)                                        \
+    {                                                                   \
+      TEST_KO("Maximal cycles Reached");                                \
+    }                                                                   \
+  sc_start(cycle_offset);                                               \
+/*cout << "SC_START (end  )" << endl;*/                                 \
+} while(0)
+
+void test (string name,
+	   morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Parameters * _param)
+{
+  cout << "<" << name << "> : Simulation SystemC" << endl;
+
+#ifdef STATISTICS
+  morpheo::behavioural::Parameters_Statistics * _parameters_statistics = new morpheo::behavioural::Parameters_Statistics (5,50);
+#endif
+
+  Register_unit_Glue * _Register_unit_Glue = new Register_unit_Glue (name.c_str(),
+#ifdef STATISTICS
+					     _parameters_statistics,
+#endif
+					     _param);
+  
+#ifdef SYSTEMC
+  /*********************************************************************
+   * Déclarations des signaux
+   *********************************************************************/
+  sc_clock                         *  in_CLOCK;
+  sc_signal<Tcontrol_t>            *  in_NRESET;
+  sc_signal<Tcontrol_t>            * out_CONST_0;
+  sc_signal<Tcontrol_t>            * out_CONST_1;
+
+  sc_signal<Tcontrol_t        >   **  in_GPR_READ_VAL              ;
+  sc_signal<Tcontrol_t        >   ** out_GPR_READ_ACK              ;
+  sc_signal<Tcontext_t        >   **  in_GPR_READ_OOO_ENGINE_ID    ;
+  sc_signal<Tgeneral_data_t   >   ** out_GPR_READ_DATA             ;
+  sc_signal<Tcontrol_t        >   ** out_GPR_READ_DATA_VAL         ;
+  sc_signal<Tcontrol_t        >  *** out_GPR_READ_REGISTERFILE_VAL ;
+  sc_signal<Tcontrol_t        >  ***  in_GPR_READ_REGISTERFILE_ACK ;
+  sc_signal<Tgeneral_data_t   >  ***  in_GPR_READ_REGISTERFILE_DATA;
+  sc_signal<Tcontrol_t        >  *** out_GPR_READ_STATUS_VAL       ;
+  sc_signal<Tcontrol_t        >  ***  in_GPR_READ_STATUS_ACK       ;
+  sc_signal<Tcontrol_t        >  ***  in_GPR_READ_STATUS_DATA_VAL  ;
+
+  sc_signal<Tcontrol_t        >   **  in_SPR_READ_VAL              ;
+  sc_signal<Tcontrol_t        >   ** out_SPR_READ_ACK              ;
+  sc_signal<Tcontext_t        >   **  in_SPR_READ_OOO_ENGINE_ID    ;
+  sc_signal<Tspecial_data_t   >   ** out_SPR_READ_DATA             ;
+  sc_signal<Tcontrol_t        >   ** out_SPR_READ_DATA_VAL         ;
+  sc_signal<Tcontrol_t        >  *** out_SPR_READ_REGISTERFILE_VAL ;
+  sc_signal<Tcontrol_t        >  ***  in_SPR_READ_REGISTERFILE_ACK ;
+  sc_signal<Tspecial_data_t   >  ***  in_SPR_READ_REGISTERFILE_DATA;
+  sc_signal<Tcontrol_t        >  *** out_SPR_READ_STATUS_VAL       ;
+  sc_signal<Tcontrol_t        >  ***  in_SPR_READ_STATUS_ACK       ;
+  sc_signal<Tcontrol_t        >  ***  in_SPR_READ_STATUS_DATA_VAL  ;
+
+  sc_signal<Tcontrol_t        >   **  in_GPR_WRITE_VAL             ;
+  sc_signal<Tcontrol_t        >   ** out_GPR_WRITE_ACK             ;
+  sc_signal<Tcontext_t        >   **  in_GPR_WRITE_OOO_ENGINE_ID   ;
+  sc_signal<Tcontrol_t        >  *** out_GPR_WRITE_REGISTERFILE_VAL;
+  sc_signal<Tcontrol_t        >  ***  in_GPR_WRITE_REGISTERFILE_ACK;
+  sc_signal<Tcontrol_t        >  *** out_GPR_WRITE_STATUS_VAL      ;
+  sc_signal<Tcontrol_t        >  ***  in_GPR_WRITE_STATUS_ACK      ;
+  
+  sc_signal<Tcontrol_t        >   **  in_SPR_WRITE_VAL             ;
+  sc_signal<Tcontrol_t        >   ** out_SPR_WRITE_ACK             ;
+  sc_signal<Tcontext_t        >   **  in_SPR_WRITE_OOO_ENGINE_ID   ;
+  sc_signal<Tcontrol_t        >  *** out_SPR_WRITE_REGISTERFILE_VAL;
+  sc_signal<Tcontrol_t        >  ***  in_SPR_WRITE_REGISTERFILE_ACK;
+  sc_signal<Tcontrol_t        >  *** out_SPR_WRITE_STATUS_VAL      ;
+  sc_signal<Tcontrol_t        >  ***  in_SPR_WRITE_STATUS_ACK      ;
+
+  sc_signal<Tcontrol_t        >  ***  in_INSERT_ROB_VAL                       ;
+  sc_signal<Tcontrol_t        >  *** out_INSERT_ROB_ACK                       ;
+  sc_signal<Tcontrol_t        >  ***  in_INSERT_ROB_RD_USE                    ;
+  sc_signal<Tcontrol_t        >  ***  in_INSERT_ROB_RE_USE                    ;
+  sc_signal<Tcontrol_t        >  *** out_INSERT_ROB_GPR_STATUS_VAL            ;
+  sc_signal<Tcontrol_t        >  ***  in_INSERT_ROB_GPR_STATUS_ACK            ;
+  sc_signal<Tcontrol_t        >  *** out_INSERT_ROB_SPR_STATUS_VAL            ;
+  sc_signal<Tcontrol_t        >  ***  in_INSERT_ROB_SPR_STATUS_ACK            ;
+
+  sc_signal<Tcontrol_t        >  ***  in_RETIRE_ROB_VAL                       ;
+  sc_signal<Tcontrol_t        >  *** out_RETIRE_ROB_ACK                       ;
+  sc_signal<Tcontrol_t        >  ***  in_RETIRE_ROB_RD_OLD_USE                ; 
+  sc_signal<Tcontrol_t        >  ***  in_RETIRE_ROB_RD_NEW_USE                ;
+  sc_signal<Tcontrol_t        >  ***  in_RETIRE_ROB_RE_OLD_USE                ; 
+  sc_signal<Tcontrol_t        >  ***  in_RETIRE_ROB_RE_NEW_USE                ;
+  sc_signal<Tcontrol_t        >  *** out_RETIRE_ROB_GPR_STATUS_NEW_VAL        ;
+  sc_signal<Tcontrol_t        >  ***  in_RETIRE_ROB_GPR_STATUS_NEW_ACK        ;
+  sc_signal<Tcontrol_t        >  *** out_RETIRE_ROB_GPR_STATUS_OLD_VAL        ;
+  sc_signal<Tcontrol_t        >  ***  in_RETIRE_ROB_GPR_STATUS_OLD_ACK        ;
+  sc_signal<Tcontrol_t        >  *** out_RETIRE_ROB_SPR_STATUS_NEW_VAL        ;
+  sc_signal<Tcontrol_t        >  ***  in_RETIRE_ROB_SPR_STATUS_NEW_ACK        ;
+  sc_signal<Tcontrol_t        >  *** out_RETIRE_ROB_SPR_STATUS_OLD_VAL        ;
+  sc_signal<Tcontrol_t        >  ***  in_RETIRE_ROB_SPR_STATUS_OLD_ACK        ;
+
+  string rename;
+
+   in_CLOCK                               = new sc_clock ("clock", 1.0, 0.5);
+   in_NRESET                              = new sc_signal<Tcontrol_t> ("NRESET");
+  out_CONST_0                             = new sc_signal<Tcontrol_t> ("CONST_0");
+  out_CONST_1                             = new sc_signal<Tcontrol_t> ("CONST_1");
+
+    // ~~~~~[ Interface "gpr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+   in_GPR_READ_VAL               = new sc_signal<Tcontrol_t     >   * [_param->_nb_gpr_read];
+  out_GPR_READ_ACK               = new sc_signal<Tcontrol_t     >   * [_param->_nb_gpr_read];
+   in_GPR_READ_OOO_ENGINE_ID     = new sc_signal<Tcontext_t     >   * [_param->_nb_gpr_read];
+  out_GPR_READ_DATA              = new sc_signal<Tgeneral_data_t>   * [_param->_nb_gpr_read];
+  out_GPR_READ_DATA_VAL          = new sc_signal<Tcontrol_t     >   * [_param->_nb_gpr_read];
+  out_GPR_READ_REGISTERFILE_VAL  = new sc_signal<Tcontrol_t     >  ** [_param->_nb_ooo_engine];
+   in_GPR_READ_REGISTERFILE_ACK  = new sc_signal<Tcontrol_t     >  ** [_param->_nb_ooo_engine];
+   in_GPR_READ_REGISTERFILE_DATA = new sc_signal<Tgeneral_data_t>  ** [_param->_nb_ooo_engine];
+  out_GPR_READ_STATUS_VAL        = new sc_signal<Tcontrol_t     >  ** [_param->_nb_ooo_engine];
+   in_GPR_READ_STATUS_ACK        = new sc_signal<Tcontrol_t     >  ** [_param->_nb_ooo_engine];
+   in_GPR_READ_STATUS_DATA_VAL   = new sc_signal<Tcontrol_t     >  ** [_param->_nb_ooo_engine];
+
+   for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+     {
+       out_GPR_READ_REGISTERFILE_VAL  [i] = new sc_signal<Tcontrol_t     >  * [_param->_nb_gpr_read];
+        in_GPR_READ_REGISTERFILE_ACK  [i] = new sc_signal<Tcontrol_t     >  * [_param->_nb_gpr_read];
+        in_GPR_READ_REGISTERFILE_DATA [i] = new sc_signal<Tgeneral_data_t>  * [_param->_nb_gpr_read];
+       out_GPR_READ_STATUS_VAL        [i] = new sc_signal<Tcontrol_t     >  * [_param->_nb_gpr_read];
+        in_GPR_READ_STATUS_ACK        [i] = new sc_signal<Tcontrol_t     >  * [_param->_nb_gpr_read];
+        in_GPR_READ_STATUS_DATA_VAL   [i] = new sc_signal<Tcontrol_t     >  * [_param->_nb_gpr_read];
+     }
+
+   for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+     {
+        in_GPR_READ_VAL           [j] =  new sc_signal<Tcontrol_t     > (rename.c_str());
+       out_GPR_READ_ACK           [j] =  new sc_signal<Tcontrol_t     > (rename.c_str());
+        in_GPR_READ_OOO_ENGINE_ID [j] =  new sc_signal<Tcontext_t     > (rename.c_str());
+       out_GPR_READ_DATA          [j] =  new sc_signal<Tgeneral_data_t> (rename.c_str());
+       out_GPR_READ_DATA_VAL      [j] =  new sc_signal<Tcontrol_t     > (rename.c_str());
+
+       for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	 {
+	     out_GPR_READ_REGISTERFILE_VAL  [i][j] = new sc_signal<Tcontrol_t     > (rename.c_str());
+	      in_GPR_READ_REGISTERFILE_ACK  [i][j] = new sc_signal<Tcontrol_t     > (rename.c_str());
+	      in_GPR_READ_REGISTERFILE_DATA [i][j] = new sc_signal<Tgeneral_data_t> (rename.c_str());
+	     out_GPR_READ_STATUS_VAL        [i][j] = new sc_signal<Tcontrol_t     > (rename.c_str());
+	      in_GPR_READ_STATUS_ACK        [i][j] = new sc_signal<Tcontrol_t     > (rename.c_str());
+	      in_GPR_READ_STATUS_DATA_VAL   [i][j] = new sc_signal<Tcontrol_t     > (rename.c_str());
+	 }
+     }
+
+    // ~~~~~[ Interface "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+   in_SPR_READ_VAL               = new sc_signal<Tcontrol_t     >  * [_param->_nb_spr_read];
+  out_SPR_READ_ACK               = new sc_signal<Tcontrol_t     >  * [_param->_nb_spr_read];
+   in_SPR_READ_OOO_ENGINE_ID     = new sc_signal<Tcontext_t     >  * [_param->_nb_spr_read];
+  out_SPR_READ_DATA              = new sc_signal<Tspecial_data_t>  * [_param->_nb_spr_read];
+  out_SPR_READ_DATA_VAL          = new sc_signal<Tcontrol_t     >  * [_param->_nb_spr_read];
+  out_SPR_READ_REGISTERFILE_VAL  = new sc_signal<Tcontrol_t     > ** [_param->_nb_ooo_engine];
+   in_SPR_READ_REGISTERFILE_ACK  = new sc_signal<Tcontrol_t     > ** [_param->_nb_ooo_engine];
+   in_SPR_READ_REGISTERFILE_DATA = new sc_signal<Tspecial_data_t> ** [_param->_nb_ooo_engine];
+  out_SPR_READ_STATUS_VAL        = new sc_signal<Tcontrol_t     > ** [_param->_nb_ooo_engine];
+   in_SPR_READ_STATUS_ACK        = new sc_signal<Tcontrol_t     > ** [_param->_nb_ooo_engine];
+   in_SPR_READ_STATUS_DATA_VAL   = new sc_signal<Tcontrol_t     > ** [_param->_nb_ooo_engine];
+
+   for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+     {
+       out_SPR_READ_REGISTERFILE_VAL  [i] = new sc_signal<Tcontrol_t     > * [_param->_nb_spr_read];
+        in_SPR_READ_REGISTERFILE_ACK  [i] = new sc_signal<Tcontrol_t     > * [_param->_nb_spr_read];
+        in_SPR_READ_REGISTERFILE_DATA [i] = new sc_signal<Tspecial_data_t> * [_param->_nb_spr_read];
+       out_SPR_READ_STATUS_VAL        [i] = new sc_signal<Tcontrol_t     > * [_param->_nb_spr_read];
+        in_SPR_READ_STATUS_ACK        [i] = new sc_signal<Tcontrol_t     > * [_param->_nb_spr_read];
+        in_SPR_READ_STATUS_DATA_VAL   [i] = new sc_signal<Tcontrol_t     > * [_param->_nb_spr_read];
+     }
+
+   for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+     {
+        in_SPR_READ_VAL           [j] = new sc_signal<Tcontrol_t     > (rename.c_str());
+       out_SPR_READ_ACK           [j] = new sc_signal<Tcontrol_t     > (rename.c_str());
+        in_SPR_READ_OOO_ENGINE_ID [j] = new sc_signal<Tcontext_t     > (rename.c_str());
+       out_SPR_READ_DATA          [j] = new sc_signal<Tspecial_data_t> (rename.c_str());
+       out_SPR_READ_DATA_VAL      [j] = new sc_signal<Tcontrol_t     > (rename.c_str());
+
+       for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	 {
+	     out_SPR_READ_REGISTERFILE_VAL  [i][j] = new sc_signal<Tcontrol_t     > (rename.c_str());
+	      in_SPR_READ_REGISTERFILE_ACK  [i][j] = new sc_signal<Tcontrol_t     > (rename.c_str());
+	      in_SPR_READ_REGISTERFILE_DATA [i][j] = new sc_signal<Tspecial_data_t> (rename.c_str());
+	     out_SPR_READ_STATUS_VAL        [i][j] = new sc_signal<Tcontrol_t     > (rename.c_str());
+	      in_SPR_READ_STATUS_ACK        [i][j] = new sc_signal<Tcontrol_t     > (rename.c_str());
+	      in_SPR_READ_STATUS_DATA_VAL   [i][j] = new sc_signal<Tcontrol_t     > (rename.c_str());
+	 }
+     }
+
+    // ~~~~~[ Interface "gpr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+   in_GPR_WRITE_VAL               = new sc_signal<Tcontrol_t>  * [_param->_nb_gpr_write];
+  out_GPR_WRITE_ACK               = new sc_signal<Tcontrol_t>  * [_param->_nb_gpr_write];
+   in_GPR_WRITE_OOO_ENGINE_ID     = new sc_signal<Tcontext_t>  * [_param->_nb_gpr_write];
+  out_GPR_WRITE_REGISTERFILE_VAL  = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+   in_GPR_WRITE_REGISTERFILE_ACK  = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+  out_GPR_WRITE_STATUS_VAL        = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+   in_GPR_WRITE_STATUS_ACK        = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+
+   for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+     {
+       out_GPR_WRITE_REGISTERFILE_VAL  [i] = new sc_signal<Tcontrol_t> * [_param->_nb_gpr_write];
+        in_GPR_WRITE_REGISTERFILE_ACK  [i] = new sc_signal<Tcontrol_t> * [_param->_nb_gpr_write];
+       out_GPR_WRITE_STATUS_VAL        [i] = new sc_signal<Tcontrol_t> * [_param->_nb_gpr_write];
+        in_GPR_WRITE_STATUS_ACK        [i] = new sc_signal<Tcontrol_t> * [_param->_nb_gpr_write];
+     }
+
+   for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+     {
+        in_GPR_WRITE_VAL           [j] = new sc_signal<Tcontrol_t> (rename.c_str());
+       out_GPR_WRITE_ACK           [j] = new sc_signal<Tcontrol_t> (rename.c_str());
+        in_GPR_WRITE_OOO_ENGINE_ID [j] = new sc_signal<Tcontext_t> (rename.c_str());
+
+       for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	 {
+	     out_GPR_WRITE_REGISTERFILE_VAL  [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());;
+	      in_GPR_WRITE_REGISTERFILE_ACK  [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());;
+	     out_GPR_WRITE_STATUS_VAL        [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());;
+	      in_GPR_WRITE_STATUS_ACK        [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());;
+	 }
+     }
+
+    // ~~~~~[ Interface "spr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+   in_SPR_WRITE_VAL               = new sc_signal<Tcontrol_t>   * [_param->_nb_spr_write];
+  out_SPR_WRITE_ACK               = new sc_signal<Tcontrol_t>   * [_param->_nb_spr_write];
+   in_SPR_WRITE_OOO_ENGINE_ID     = new sc_signal<Tcontext_t>   * [_param->_nb_spr_write];
+  out_SPR_WRITE_REGISTERFILE_VAL  = new sc_signal<Tcontrol_t>  ** [_param->_nb_ooo_engine];
+   in_SPR_WRITE_REGISTERFILE_ACK  = new sc_signal<Tcontrol_t>  ** [_param->_nb_ooo_engine];
+  out_SPR_WRITE_STATUS_VAL        = new sc_signal<Tcontrol_t>  ** [_param->_nb_ooo_engine];
+   in_SPR_WRITE_STATUS_ACK        = new sc_signal<Tcontrol_t>  ** [_param->_nb_ooo_engine];
+
+   for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+     {
+       out_SPR_WRITE_REGISTERFILE_VAL  [i] = new sc_signal<Tcontrol_t> * [_param->_nb_spr_write];
+        in_SPR_WRITE_REGISTERFILE_ACK  [i] = new sc_signal<Tcontrol_t> * [_param->_nb_spr_write];
+       out_SPR_WRITE_STATUS_VAL        [i] = new sc_signal<Tcontrol_t> * [_param->_nb_spr_write];
+        in_SPR_WRITE_STATUS_ACK        [i] = new sc_signal<Tcontrol_t> * [_param->_nb_spr_write];
+     }
+
+   for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+     {
+        in_SPR_WRITE_VAL           [j] = new sc_signal<Tcontrol_t> (rename.c_str());
+       out_SPR_WRITE_ACK           [j] = new sc_signal<Tcontrol_t> (rename.c_str());
+        in_SPR_WRITE_OOO_ENGINE_ID [j] = new sc_signal<Tcontext_t> (rename.c_str());
+
+       for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	 {
+	     out_SPR_WRITE_REGISTERFILE_VAL  [i][j] = new sc_signal<Tcontrol_t>  (rename.c_str());
+	      in_SPR_WRITE_REGISTERFILE_ACK  [i][j] = new sc_signal<Tcontrol_t>  (rename.c_str());
+	     out_SPR_WRITE_STATUS_VAL        [i][j] = new sc_signal<Tcontrol_t>  (rename.c_str());
+	      in_SPR_WRITE_STATUS_ACK        [i][j] = new sc_signal<Tcontrol_t>  (rename.c_str());
+	 }
+     }
+
+   // ~~~~~[ Interface "insert_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    in_INSERT_ROB_VAL                  = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+   out_INSERT_ROB_ACK                  = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+    in_INSERT_ROB_RD_USE               = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+    in_INSERT_ROB_RE_USE               = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+   out_INSERT_ROB_GPR_STATUS_VAL       = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+    in_INSERT_ROB_GPR_STATUS_ACK       = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+   out_INSERT_ROB_SPR_STATUS_VAL       = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+    in_INSERT_ROB_SPR_STATUS_ACK       = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_insert_rob [i];
+
+	in_INSERT_ROB_VAL                  [i] = new sc_signal<Tcontrol_t> * [x];
+       out_INSERT_ROB_ACK                  [i] = new sc_signal<Tcontrol_t> * [x];
+	in_INSERT_ROB_RD_USE               [i] = new sc_signal<Tcontrol_t> * [x];
+	in_INSERT_ROB_RE_USE               [i] = new sc_signal<Tcontrol_t> * [x];
+       out_INSERT_ROB_GPR_STATUS_VAL       [i] = new sc_signal<Tcontrol_t> * [x];
+	in_INSERT_ROB_GPR_STATUS_ACK       [i] = new sc_signal<Tcontrol_t> * [x];
+       out_INSERT_ROB_SPR_STATUS_VAL       [i] = new sc_signal<Tcontrol_t> * [x];
+	in_INSERT_ROB_SPR_STATUS_ACK       [i] = new sc_signal<Tcontrol_t> * [x];
+
+	for (uint32_t j=0; j<x; j++)
+	  {
+	       in_INSERT_ROB_VAL                  [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	      out_INSERT_ROB_ACK                  [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	       in_INSERT_ROB_RD_USE               [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	       in_INSERT_ROB_RE_USE               [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	      out_INSERT_ROB_GPR_STATUS_VAL       [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	       in_INSERT_ROB_GPR_STATUS_ACK       [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	      out_INSERT_ROB_SPR_STATUS_VAL       [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	       in_INSERT_ROB_SPR_STATUS_ACK       [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	  }
+      }
+
+    // ~~~~~[ Interface "retire_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    in_RETIRE_ROB_VAL                      = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+   out_RETIRE_ROB_ACK                      = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RD_OLD_USE               = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RD_NEW_USE               = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RE_OLD_USE               = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RE_NEW_USE               = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+   out_RETIRE_ROB_GPR_STATUS_OLD_VAL       = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+   out_RETIRE_ROB_GPR_STATUS_NEW_VAL       = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_GPR_STATUS_OLD_ACK       = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_GPR_STATUS_NEW_ACK       = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+   out_RETIRE_ROB_SPR_STATUS_OLD_VAL       = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+   out_RETIRE_ROB_SPR_STATUS_NEW_VAL       = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_SPR_STATUS_OLD_ACK       = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_SPR_STATUS_NEW_ACK       = new sc_signal<Tcontrol_t> ** [_param->_nb_ooo_engine];
+
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_retire_rob [i];
+
+	 in_RETIRE_ROB_VAL                      [i] = new sc_signal<Tcontrol_t> * [x];
+	out_RETIRE_ROB_ACK                      [i] = new sc_signal<Tcontrol_t> * [x];
+	 in_RETIRE_ROB_RD_OLD_USE               [i] = new sc_signal<Tcontrol_t> * [x];
+	 in_RETIRE_ROB_RD_NEW_USE               [i] = new sc_signal<Tcontrol_t> * [x];
+	 in_RETIRE_ROB_RE_OLD_USE               [i] = new sc_signal<Tcontrol_t> * [x];
+	 in_RETIRE_ROB_RE_NEW_USE               [i] = new sc_signal<Tcontrol_t> * [x];
+	out_RETIRE_ROB_GPR_STATUS_OLD_VAL       [i] = new sc_signal<Tcontrol_t> * [x];
+	out_RETIRE_ROB_GPR_STATUS_NEW_VAL       [i] = new sc_signal<Tcontrol_t> * [x];
+	 in_RETIRE_ROB_GPR_STATUS_OLD_ACK       [i] = new sc_signal<Tcontrol_t> * [x];
+	 in_RETIRE_ROB_GPR_STATUS_NEW_ACK       [i] = new sc_signal<Tcontrol_t> * [x];
+	out_RETIRE_ROB_SPR_STATUS_OLD_VAL       [i] = new sc_signal<Tcontrol_t> * [x];
+	out_RETIRE_ROB_SPR_STATUS_NEW_VAL       [i] = new sc_signal<Tcontrol_t> * [x];
+	 in_RETIRE_ROB_SPR_STATUS_OLD_ACK       [i] = new sc_signal<Tcontrol_t> * [x];
+	 in_RETIRE_ROB_SPR_STATUS_NEW_ACK       [i] = new sc_signal<Tcontrol_t> * [x];
+    
+	for (uint32_t j=0; j<x; j++)
+	  {
+	       in_RETIRE_ROB_VAL                      [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	      out_RETIRE_ROB_ACK                      [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	       in_RETIRE_ROB_RD_OLD_USE               [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	       in_RETIRE_ROB_RD_NEW_USE               [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	       in_RETIRE_ROB_RE_OLD_USE               [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	       in_RETIRE_ROB_RE_NEW_USE               [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	      out_RETIRE_ROB_GPR_STATUS_OLD_VAL       [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	       in_RETIRE_ROB_GPR_STATUS_OLD_ACK       [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	      out_RETIRE_ROB_GPR_STATUS_NEW_VAL       [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	       in_RETIRE_ROB_GPR_STATUS_NEW_ACK       [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	      out_RETIRE_ROB_SPR_STATUS_OLD_VAL       [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	       in_RETIRE_ROB_SPR_STATUS_OLD_ACK       [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	      out_RETIRE_ROB_SPR_STATUS_NEW_VAL       [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	       in_RETIRE_ROB_SPR_STATUS_NEW_ACK       [i][j] = new sc_signal<Tcontrol_t> (rename.c_str());
+	    }
+      }
+   
+
+  
+  /********************************************************
+   * Instanciation
+   ********************************************************/
+  
+  cout << "<" << name << "> Instanciation of _Register_unit_Glue" << endl;
+  
+  (*(_Register_unit_Glue-> in_CLOCK  ))       (*( in_CLOCK  ));
+  (*(_Register_unit_Glue-> in_NRESET ))       (*( in_NRESET ));
+  (*(_Register_unit_Glue->out_CONST_0))       (*(out_CONST_0));
+  (*(_Register_unit_Glue->out_CONST_1))       (*(out_CONST_1));
+
+   for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+     {
+       (*(_Register_unit_Glue-> in_GPR_READ_VAL           [j]))(*( in_GPR_READ_VAL           [j]));
+       (*(_Register_unit_Glue->out_GPR_READ_ACK           [j]))(*(out_GPR_READ_ACK           [j]));
+       if (_param->_have_port_ooo_engine_id == true)
+       (*(_Register_unit_Glue-> in_GPR_READ_OOO_ENGINE_ID [j]))(*( in_GPR_READ_OOO_ENGINE_ID [j]));
+       (*(_Register_unit_Glue->out_GPR_READ_DATA          [j]))(*(out_GPR_READ_DATA          [j]));
+       (*(_Register_unit_Glue->out_GPR_READ_DATA_VAL      [j]))(*(out_GPR_READ_DATA_VAL      [j]));
+
+       for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	 {
+	   (*(_Register_unit_Glue->out_GPR_READ_REGISTERFILE_VAL  [i][j]))(*(out_GPR_READ_REGISTERFILE_VAL  [i][j]));
+	   (*(_Register_unit_Glue-> in_GPR_READ_REGISTERFILE_ACK  [i][j]))(*( in_GPR_READ_REGISTERFILE_ACK  [i][j]));
+	   (*(_Register_unit_Glue-> in_GPR_READ_REGISTERFILE_DATA [i][j]))(*( in_GPR_READ_REGISTERFILE_DATA [i][j]));
+	   (*(_Register_unit_Glue->out_GPR_READ_STATUS_VAL        [i][j]))(*(out_GPR_READ_STATUS_VAL        [i][j]));
+	   (*(_Register_unit_Glue-> in_GPR_READ_STATUS_ACK        [i][j]))(*( in_GPR_READ_STATUS_ACK        [i][j]));
+	   (*(_Register_unit_Glue-> in_GPR_READ_STATUS_DATA_VAL   [i][j]))(*( in_GPR_READ_STATUS_DATA_VAL   [i][j]));
+	 }
+     }
+
+   for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+     {
+       (*(_Register_unit_Glue-> in_SPR_READ_VAL           [j]))(*( in_SPR_READ_VAL           [j]));
+       (*(_Register_unit_Glue->out_SPR_READ_ACK           [j]))(*(out_SPR_READ_ACK           [j]));
+       if (_param->_have_port_ooo_engine_id == true)
+       (*(_Register_unit_Glue-> in_SPR_READ_OOO_ENGINE_ID [j]))(*( in_SPR_READ_OOO_ENGINE_ID [j]));
+       (*(_Register_unit_Glue->out_SPR_READ_DATA          [j]))(*(out_SPR_READ_DATA          [j]));
+       (*(_Register_unit_Glue->out_SPR_READ_DATA_VAL      [j]))(*(out_SPR_READ_DATA_VAL      [j]));
+
+       for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	 {
+	   (*(_Register_unit_Glue->out_SPR_READ_REGISTERFILE_VAL  [i][j]))(*(out_SPR_READ_REGISTERFILE_VAL  [i][j]));
+	   (*(_Register_unit_Glue-> in_SPR_READ_REGISTERFILE_ACK  [i][j]))(*( in_SPR_READ_REGISTERFILE_ACK  [i][j]));
+	   (*(_Register_unit_Glue-> in_SPR_READ_REGISTERFILE_DATA [i][j]))(*( in_SPR_READ_REGISTERFILE_DATA [i][j]));
+	   (*(_Register_unit_Glue->out_SPR_READ_STATUS_VAL        [i][j]))(*(out_SPR_READ_STATUS_VAL        [i][j]));
+	   (*(_Register_unit_Glue-> in_SPR_READ_STATUS_ACK        [i][j]))(*( in_SPR_READ_STATUS_ACK        [i][j]));
+	   (*(_Register_unit_Glue-> in_SPR_READ_STATUS_DATA_VAL   [i][j]))(*( in_SPR_READ_STATUS_DATA_VAL   [i][j]));
+	 }
+     }
+
+   for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+     {
+       (*(_Register_unit_Glue-> in_GPR_WRITE_VAL           [j]))(*( in_GPR_WRITE_VAL           [j]));
+       (*(_Register_unit_Glue->out_GPR_WRITE_ACK           [j]))(*(out_GPR_WRITE_ACK           [j]));
+       if (_param->_have_port_ooo_engine_id == true)
+       (*(_Register_unit_Glue-> in_GPR_WRITE_OOO_ENGINE_ID [j]))(*( in_GPR_WRITE_OOO_ENGINE_ID [j]));
+
+       for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	 {
+	   (*(_Register_unit_Glue->out_GPR_WRITE_REGISTERFILE_VAL  [i][j]))(*(out_GPR_WRITE_REGISTERFILE_VAL  [i][j]));
+	   (*(_Register_unit_Glue-> in_GPR_WRITE_REGISTERFILE_ACK  [i][j]))(*( in_GPR_WRITE_REGISTERFILE_ACK  [i][j]));
+	   (*(_Register_unit_Glue->out_GPR_WRITE_STATUS_VAL        [i][j]))(*(out_GPR_WRITE_STATUS_VAL        [i][j]));
+	   (*(_Register_unit_Glue-> in_GPR_WRITE_STATUS_ACK        [i][j]))(*( in_GPR_WRITE_STATUS_ACK        [i][j]));
+	 }
+     }
+
+   for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+     {
+       (*(_Register_unit_Glue-> in_SPR_WRITE_VAL           [j]))(*( in_SPR_WRITE_VAL           [j]));
+       (*(_Register_unit_Glue->out_SPR_WRITE_ACK           [j]))(*(out_SPR_WRITE_ACK           [j]));
+       if (_param->_have_port_ooo_engine_id == true)
+       (*(_Register_unit_Glue-> in_SPR_WRITE_OOO_ENGINE_ID [j]))(*( in_SPR_WRITE_OOO_ENGINE_ID [j]));
+
+       for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	 {
+	   (*(_Register_unit_Glue->out_SPR_WRITE_REGISTERFILE_VAL  [i][j]))(*(out_SPR_WRITE_REGISTERFILE_VAL  [i][j]));
+	   (*(_Register_unit_Glue-> in_SPR_WRITE_REGISTERFILE_ACK  [i][j]))(*( in_SPR_WRITE_REGISTERFILE_ACK  [i][j]));
+	   (*(_Register_unit_Glue->out_SPR_WRITE_STATUS_VAL        [i][j]))(*(out_SPR_WRITE_STATUS_VAL        [i][j]));
+	   (*(_Register_unit_Glue-> in_SPR_WRITE_STATUS_ACK        [i][j]))(*( in_SPR_WRITE_STATUS_ACK        [i][j]));
+	 }
+     }
+
+   // ~~~~~[ Interface "insert_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_insert_rob [i];
+
+	for (uint32_t j=0; j<x; j++)
+	  {
+	    (*(_Register_unit_Glue-> in_INSERT_ROB_VAL            [i][j]))  (*( in_INSERT_ROB_VAL            [i][j]));
+	    (*(_Register_unit_Glue->out_INSERT_ROB_ACK            [i][j]))  (*(out_INSERT_ROB_ACK            [i][j]));
+	    (*(_Register_unit_Glue-> in_INSERT_ROB_RD_USE         [i][j]))  (*( in_INSERT_ROB_RD_USE         [i][j]));
+	    (*(_Register_unit_Glue-> in_INSERT_ROB_RE_USE         [i][j]))  (*( in_INSERT_ROB_RE_USE         [i][j]));
+	    (*(_Register_unit_Glue->out_INSERT_ROB_GPR_STATUS_VAL [i][j]))  (*(out_INSERT_ROB_GPR_STATUS_VAL [i][j]));
+	    (*(_Register_unit_Glue-> in_INSERT_ROB_GPR_STATUS_ACK [i][j]))  (*( in_INSERT_ROB_GPR_STATUS_ACK [i][j]));
+	    (*(_Register_unit_Glue->out_INSERT_ROB_SPR_STATUS_VAL [i][j]))  (*(out_INSERT_ROB_SPR_STATUS_VAL [i][j]));
+	    (*(_Register_unit_Glue-> in_INSERT_ROB_SPR_STATUS_ACK [i][j]))  (*( in_INSERT_ROB_SPR_STATUS_ACK [i][j]));
+	  }
+      }
+
+    // ~~~~~[ Interface "retire_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_retire_rob [i];
+
+	for (uint32_t j=0; j<x; j++)
+	  {
+	    (*(_Register_unit_Glue-> in_RETIRE_ROB_VAL                [i][j]))(*( in_RETIRE_ROB_VAL                [i][j]));
+	    (*(_Register_unit_Glue->out_RETIRE_ROB_ACK                [i][j]))(*(out_RETIRE_ROB_ACK                [i][j]));
+	    (*(_Register_unit_Glue-> in_RETIRE_ROB_RD_OLD_USE         [i][j]))(*( in_RETIRE_ROB_RD_OLD_USE         [i][j]));
+	    (*(_Register_unit_Glue-> in_RETIRE_ROB_RD_NEW_USE         [i][j]))(*( in_RETIRE_ROB_RD_NEW_USE         [i][j]));
+	    (*(_Register_unit_Glue-> in_RETIRE_ROB_RE_OLD_USE         [i][j]))(*( in_RETIRE_ROB_RE_OLD_USE         [i][j]));
+	    (*(_Register_unit_Glue-> in_RETIRE_ROB_RE_NEW_USE         [i][j]))(*( in_RETIRE_ROB_RE_NEW_USE         [i][j]));
+	    (*(_Register_unit_Glue->out_RETIRE_ROB_GPR_STATUS_OLD_VAL [i][j]))(*(out_RETIRE_ROB_GPR_STATUS_OLD_VAL [i][j]));
+	    (*(_Register_unit_Glue-> in_RETIRE_ROB_GPR_STATUS_OLD_ACK [i][j]))(*( in_RETIRE_ROB_GPR_STATUS_OLD_ACK [i][j]));
+	    (*(_Register_unit_Glue->out_RETIRE_ROB_GPR_STATUS_NEW_VAL [i][j]))(*(out_RETIRE_ROB_GPR_STATUS_NEW_VAL [i][j]));
+	    (*(_Register_unit_Glue-> in_RETIRE_ROB_GPR_STATUS_NEW_ACK [i][j]))(*( in_RETIRE_ROB_GPR_STATUS_NEW_ACK [i][j]));
+	    (*(_Register_unit_Glue->out_RETIRE_ROB_SPR_STATUS_OLD_VAL [i][j]))(*(out_RETIRE_ROB_SPR_STATUS_OLD_VAL [i][j]));
+	    (*(_Register_unit_Glue-> in_RETIRE_ROB_SPR_STATUS_OLD_ACK [i][j]))(*( in_RETIRE_ROB_SPR_STATUS_OLD_ACK [i][j]));
+	    (*(_Register_unit_Glue->out_RETIRE_ROB_SPR_STATUS_NEW_VAL [i][j]))(*(out_RETIRE_ROB_SPR_STATUS_NEW_VAL [i][j]));
+	    (*(_Register_unit_Glue-> in_RETIRE_ROB_SPR_STATUS_NEW_ACK [i][j]))(*( in_RETIRE_ROB_SPR_STATUS_NEW_ACK [i][j]));
+	    }
+      }
+   
+  cout << "<" << name << "> Start Simulation ............" << endl;
+  Time * _time = new Time();
+
+  /********************************************************
+   * Simulation - Begin
+   ********************************************************/
+
+  // Initialisation
+  const bool     test_read   = true;
+  const bool     test_write  = true;
+  const bool     test_insert = true;
+  const bool     test_retire = true;
+
+  const  int32_t percent_transaction = 75;
+
+  const uint32_t seed = 0;
+//const uint32_t seed = static_cast<uint32_t>(time(NULL));
+
+  srand(seed);
+
+  Tcontext_t      context;
+  Tcontrol_t      gpr_read_ack              [_param->_nb_gpr_read];
+  Tgeneral_data_t gpr_read_data             [_param->_nb_gpr_read];
+  Tcontrol_t      gpr_read_data_val         [_param->_nb_gpr_read];
+  Tcontrol_t      gpr_read_registerfile_val [_param->_nb_ooo_engine][_param->_nb_gpr_read];
+  Tcontrol_t      gpr_read_status_val       [_param->_nb_ooo_engine][_param->_nb_gpr_read];
+
+  Tcontrol_t      gpr_write_ack              [_param->_nb_gpr_write];
+  Tcontrol_t      gpr_write_registerfile_val [_param->_nb_ooo_engine][_param->_nb_gpr_write];
+  Tcontrol_t      gpr_write_status_val       [_param->_nb_ooo_engine][_param->_nb_gpr_write];
+
+  Tcontrol_t      spr_read_ack              [_param->_nb_spr_read];
+  Tspecial_data_t spr_read_data             [_param->_nb_spr_read];
+  Tcontrol_t      spr_read_data_val         [_param->_nb_spr_read];
+  Tcontrol_t      spr_read_registerfile_val [_param->_nb_ooo_engine][_param->_nb_spr_read];
+  Tcontrol_t      spr_read_status_val       [_param->_nb_ooo_engine][_param->_nb_spr_read];
+
+  Tcontrol_t      spr_write_ack              [_param->_nb_spr_write];
+  Tcontrol_t      spr_write_registerfile_val [_param->_nb_ooo_engine][_param->_nb_spr_write];
+  Tcontrol_t      spr_write_status_val       [_param->_nb_ooo_engine][_param->_nb_spr_write];
+
+  uint32_t        max_nb_inst_retire_rob = 0;
+
+  for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+    if (_param->_nb_inst_retire_rob [i] > max_nb_inst_retire_rob)
+      max_nb_inst_retire_rob = _param->_nb_inst_retire_rob [i];
+
+  Tcontrol_t      retire_rob_ack                [_param->_nb_ooo_engine][max_nb_inst_retire_rob];
+  Tcontrol_t      retire_rob_gpr_status_new_val [_param->_nb_ooo_engine][max_nb_inst_retire_rob];
+  Tcontrol_t      retire_rob_gpr_status_old_val [_param->_nb_ooo_engine][max_nb_inst_retire_rob];
+  Tcontrol_t      retire_rob_spr_status_new_val [_param->_nb_ooo_engine][max_nb_inst_retire_rob];
+  Tcontrol_t      retire_rob_spr_status_old_val [_param->_nb_ooo_engine][max_nb_inst_retire_rob];
+
+  uint32_t        max_nb_inst_insert_rob = 0;
+
+  for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+    if (_param->_nb_inst_insert_rob [i] > max_nb_inst_insert_rob)
+      max_nb_inst_insert_rob = _param->_nb_inst_insert_rob [i];
+
+  Tcontrol_t      insert_rob_ack            [_param->_nb_ooo_engine][max_nb_inst_insert_rob];
+  Tcontrol_t      insert_rob_gpr_status_val [_param->_nb_ooo_engine][max_nb_inst_insert_rob];
+  Tcontrol_t      insert_rob_spr_status_val [_param->_nb_ooo_engine][max_nb_inst_insert_rob];
+
+  SC_START(0);
+  LABEL("Initialisation");
+
+  in_NRESET->write(0);
+  SC_START(5);
+  in_NRESET->write(1);
+
+  LABEL("Loop of Test");
+
+  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
+    {
+      LABEL("Iteration "+toString(iteration));
+
+      if (test_read == true)
+	{
+	  for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+	    {
+	      context = (rand())%_param->_nb_ooo_engine;
+	      Tcontrol_t      val = (rand()%100)<=percent_transaction;
+	      
+	      LABEL("GPR_READ  ["+toString(j)+"] : "+toString(val)+" - " +toString(static_cast<uint32_t>(context)));
+	      
+	      in_GPR_READ_VAL           [j] ->write(val);
+	      in_GPR_READ_OOO_ENGINE_ID [j] ->write(context);
+	      
+	      for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+		{
+		  Tcontrol_t      registerfile_ack  = (rand()%100)<=percent_transaction  ;
+		  Tgeneral_data_t registerfile_data = (rand()%_param->_size_general_data);
+		  Tcontrol_t      status_ack        = (rand()%100)<=percent_transaction  ;
+		  Tcontrol_t      status_data_val   = (rand()%100)<=percent_transaction  ;
+		  
+		  in_GPR_READ_REGISTERFILE_ACK  [i][j]->write(registerfile_ack );
+		  in_GPR_READ_REGISTERFILE_DATA [i][j]->write(registerfile_data);
+		  in_GPR_READ_STATUS_ACK        [i][j]->write(status_ack       );
+		  in_GPR_READ_STATUS_DATA_VAL   [i][j]->write(status_data_val  );
+		  
+		  if (i == context)
+		    {
+		      gpr_read_registerfile_val [i][j] = val and status_ack      ;
+		      gpr_read_status_val       [i][j] = val and registerfile_ack;
+		      
+		      gpr_read_ack      [j] = registerfile_ack and status_ack;
+		      gpr_read_data     [j] = registerfile_data;
+		      gpr_read_data_val [j] = status_data_val;
+		    }
+		  else
+		    {
+		      gpr_read_registerfile_val [i][j] = 0;
+		      gpr_read_status_val       [i][j] = 0;
+		    }
+		}
+	    }
+
+	  for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+	    {
+	      context = (rand())%_param->_nb_ooo_engine;
+	      Tcontrol_t      val = (rand()%100)<=percent_transaction;
+	      
+	      LABEL("SPR_READ  ["+toString(j)+"] : "+toString(val)+" - " +toString(static_cast<uint32_t>(context)));
+	      
+	      in_SPR_READ_VAL           [j] ->write(val);
+	      in_SPR_READ_OOO_ENGINE_ID [j] ->write(context);
+	      
+	      for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+		{
+		  Tcontrol_t      registerfile_ack  = (rand()%100)<=percent_transaction  ;
+		  Tspecial_data_t registerfile_data = (rand()%_param->_size_special_data);
+		  Tcontrol_t      status_ack        = (rand()%100)<=percent_transaction  ;
+		  Tcontrol_t      status_data_val   = (rand()%100)<=percent_transaction  ;
+		  
+		  in_SPR_READ_REGISTERFILE_ACK  [i][j]->write(registerfile_ack );
+		  in_SPR_READ_REGISTERFILE_DATA [i][j]->write(registerfile_data);
+		  in_SPR_READ_STATUS_ACK        [i][j]->write(status_ack       );
+		  in_SPR_READ_STATUS_DATA_VAL   [i][j]->write(status_data_val  );
+		  
+		  if (i == context)
+		    {
+		      spr_read_registerfile_val [i][j] = val and status_ack      ;
+		      spr_read_status_val       [i][j] = val and registerfile_ack;
+		      
+		      spr_read_ack      [j] = registerfile_ack and status_ack;
+		      spr_read_data     [j] = registerfile_data;
+		      spr_read_data_val [j] = status_data_val;
+		    }
+		  else
+		    {
+		      spr_read_registerfile_val [i][j] = 0;
+		      spr_read_status_val       [i][j] = 0;
+		    }
+		  
+		}
+	    }
+	}
+
+      if (test_write == true)
+	{
+	  for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+	    {
+	      context = (rand())%_param->_nb_ooo_engine;
+	      Tcontrol_t      val = (rand()%100)<=percent_transaction;
+	      
+	      LABEL("GPR_WRITE ["+toString(j)+"] : "+toString(val)+" - " +toString(static_cast<uint32_t>(context)));
+	      
+	      in_GPR_WRITE_VAL           [j] ->write(val);
+	      in_GPR_WRITE_OOO_ENGINE_ID [j] ->write(context);
+	      
+	      for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+		{
+		  Tcontrol_t      registerfile_ack  = (rand()%100)<=percent_transaction  ;
+		  Tcontrol_t      status_ack        = (rand()%100)<=percent_transaction  ;
+		  
+		  in_GPR_WRITE_REGISTERFILE_ACK  [i][j]->write(registerfile_ack );
+		  in_GPR_WRITE_STATUS_ACK        [i][j]->write(status_ack       );
+		  
+		  
+		  if (i == context)
+		    {
+		      gpr_write_registerfile_val [i][j] = val and status_ack      ;
+		      gpr_write_status_val       [i][j] = val and registerfile_ack;
+		      
+		      gpr_write_ack      [j] = registerfile_ack and status_ack;
+		    }
+		  else
+		    {
+		      gpr_write_registerfile_val [i][j] = 0;
+		      gpr_write_status_val       [i][j] = 0;
+		    }
+		  
+		}
+	    }
+	  
+	  for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+	    {
+	      context = (rand())%_param->_nb_ooo_engine;
+	      Tcontrol_t      val = (rand()%100)<=percent_transaction;
+	      
+	      LABEL("SPR_WRITE ["+toString(j)+"] : "+toString(val)+" - " +toString(static_cast<uint32_t>(context)));
+	      
+	      in_SPR_WRITE_VAL           [j] ->write(val);
+	      in_SPR_WRITE_OOO_ENGINE_ID [j] ->write(context);
+	      
+	      for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+		{
+		  Tcontrol_t      registerfile_ack  = (rand()%100)<=percent_transaction  ;
+		  Tcontrol_t      status_ack        = (rand()%100)<=percent_transaction  ;
+		  
+		  in_SPR_WRITE_REGISTERFILE_ACK  [i][j]->write(registerfile_ack );
+		  in_SPR_WRITE_STATUS_ACK        [i][j]->write(status_ack       );
+		  
+		  
+		  if (i == context)
+		    {
+		      spr_write_registerfile_val [i][j] = val and status_ack      ;
+		      spr_write_status_val       [i][j] = val and registerfile_ack;
+		      
+		      spr_write_ack      [j] = registerfile_ack and status_ack;
+		    }
+		  else
+		    {
+		      spr_write_registerfile_val [i][j] = 0;
+		      spr_write_status_val       [i][j] = 0;
+		    }
+		}
+	    }
+	}
+      
+      if (test_retire == true)
+	{
+	  for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	    {
+	      uint32_t x = _param->_nb_inst_retire_rob [i];
+
+	      for (uint32_t j=0; j<x; j++)
+		{
+		Tcontrol_t val                = (rand()%100)<=percent_transaction;
+		Tcontrol_t rd_old_use         = (rand()%100)<=percent_transaction; 
+		Tcontrol_t rd_new_use         = (rand()%100)<=percent_transaction;
+		Tcontrol_t re_old_use         = (rand()%100)<=percent_transaction; 
+		Tcontrol_t re_new_use         = (rand()%100)<=percent_transaction;
+		Tcontrol_t gpr_status_old_ack = (rand()%100)<=percent_transaction;
+		Tcontrol_t gpr_status_new_ack = (rand()%100)<=percent_transaction;
+		Tcontrol_t spr_status_old_ack = (rand()%100)<=percent_transaction;
+		Tcontrol_t spr_status_new_ack = (rand()%100)<=percent_transaction;
+		  
+		in_RETIRE_ROB_VAL                [i][j]->write(val               );
+		in_RETIRE_ROB_RD_OLD_USE         [i][j]->write(rd_old_use        ); 
+		in_RETIRE_ROB_RD_NEW_USE         [i][j]->write(rd_new_use        );
+		in_RETIRE_ROB_RE_OLD_USE         [i][j]->write(re_old_use        ); 
+		in_RETIRE_ROB_RE_NEW_USE         [i][j]->write(re_new_use        );
+		in_RETIRE_ROB_GPR_STATUS_OLD_ACK [i][j]->write(gpr_status_old_ack);
+		in_RETIRE_ROB_GPR_STATUS_NEW_ACK [i][j]->write(gpr_status_new_ack);
+		in_RETIRE_ROB_SPR_STATUS_OLD_ACK [i][j]->write(spr_status_old_ack);
+		in_RETIRE_ROB_SPR_STATUS_NEW_ACK [i][j]->write(spr_status_new_ack);
+		
+		retire_rob_ack                [i][j] = (gpr_status_new_ack and
+							gpr_status_old_ack and
+							spr_status_new_ack and
+							spr_status_old_ack);
+
+
+		retire_rob_gpr_status_old_val [i][j] = val and rd_old_use                        and gpr_status_new_ack and spr_status_old_ack and spr_status_new_ack;
+		retire_rob_gpr_status_new_val [i][j] = val and rd_new_use and gpr_status_old_ack                        and spr_status_old_ack and spr_status_new_ack;
+		retire_rob_spr_status_old_val [i][j] = val and re_old_use and gpr_status_old_ack and gpr_status_new_ack                        and spr_status_new_ack;
+		retire_rob_spr_status_new_val [i][j] = val and re_new_use and gpr_status_old_ack and gpr_status_new_ack and spr_status_old_ack                       ;
+		}
+	    }
+	}
+
+      if (test_insert == true)
+	{
+	  for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	    {
+	      uint32_t x = _param->_nb_inst_insert_rob [i];
+
+	      for (uint32_t j=0; j<x; j++)
+		{
+		Tcontrol_t val            = (rand()%100)<=percent_transaction;
+		Tcontrol_t rd_use         = (rand()%100)<=percent_transaction; 
+		Tcontrol_t re_use         = (rand()%100)<=percent_transaction; 
+		Tcontrol_t gpr_status_ack = (rand()%100)<=percent_transaction;
+		Tcontrol_t spr_status_ack = (rand()%100)<=percent_transaction;
+		  
+		in_INSERT_ROB_VAL            [i][j]->write(val               );
+		in_INSERT_ROB_RD_USE         [i][j]->write(rd_use        ); 
+		in_INSERT_ROB_RE_USE         [i][j]->write(re_use        ); 
+		in_INSERT_ROB_GPR_STATUS_ACK [i][j]->write(gpr_status_ack);
+		in_INSERT_ROB_SPR_STATUS_ACK [i][j]->write(spr_status_ack);
+		
+		insert_rob_ack                [i][j] = (gpr_status_ack and
+							spr_status_ack);
+
+
+		insert_rob_gpr_status_val [i][j] = val and rd_use                    and spr_status_ack;
+		insert_rob_spr_status_val [i][j] = val and re_use and gpr_status_ack                   ;
+		}
+	    }
+	}
+
+      SC_START(0);
+
+      // Test
+      TEST(Tcontrol_t, out_CONST_0->read() , 0);
+      TEST(Tcontrol_t, out_CONST_1->read() , 1);
+      
+      if (test_read == true)
+	{
+	  for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+	    {
+	      TEST(Tcontrol_t     , out_GPR_READ_ACK           [j]->read(), gpr_read_ack     [j]);
+	      TEST(Tgeneral_data_t, out_GPR_READ_DATA          [j]->read(), gpr_read_data    [j]);
+	      TEST(Tcontrol_t     , out_GPR_READ_DATA_VAL      [j]->read(), gpr_read_data_val[j]);
+	      
+	      for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+		{
+		  TEST(Tcontrol_t, out_GPR_READ_REGISTERFILE_VAL  [i][j]->read(), gpr_read_registerfile_val [i][j]);
+		  TEST(Tcontrol_t, out_GPR_READ_STATUS_VAL        [i][j]->read(), gpr_read_status_val       [i][j]);
+		}
+	    }
+	  for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+	    {
+	      TEST(Tcontrol_t     , out_SPR_READ_ACK           [j]->read(), spr_read_ack     [j]);
+	      TEST(Tspecial_data_t, out_SPR_READ_DATA          [j]->read(), spr_read_data    [j]);
+	      TEST(Tcontrol_t     , out_SPR_READ_DATA_VAL      [j]->read(), spr_read_data_val[j]);
+	      
+	      for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+		{
+		  TEST(Tcontrol_t, out_SPR_READ_REGISTERFILE_VAL  [i][j]->read(), spr_read_registerfile_val [i][j]);
+		  TEST(Tcontrol_t, out_SPR_READ_STATUS_VAL        [i][j]->read(), spr_read_status_val       [i][j]);
+		}
+	    }
+	}
+      
+      if (test_write == true)
+	{
+	  for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+	    {
+	      TEST(Tcontrol_t     , out_GPR_WRITE_ACK           [j]->read(), gpr_write_ack     [j]);
+	      
+	      for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+		{
+		  TEST(Tcontrol_t, out_GPR_WRITE_REGISTERFILE_VAL  [i][j]->read(), gpr_write_registerfile_val [i][j]);
+		  TEST(Tcontrol_t, out_GPR_WRITE_STATUS_VAL        [i][j]->read(), gpr_write_status_val       [i][j]);
+		}
+	    }
+	  for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+	    {
+	      TEST(Tcontrol_t     , out_SPR_WRITE_ACK           [j]->read(), spr_write_ack     [j]);
+	      
+	      for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+		{
+		  TEST(Tcontrol_t, out_SPR_WRITE_REGISTERFILE_VAL  [i][j]->read(), spr_write_registerfile_val [i][j]);
+		  TEST(Tcontrol_t, out_SPR_WRITE_STATUS_VAL        [i][j]->read(), spr_write_status_val       [i][j]);
+		}
+	    }
+	}
+
+
+      if (test_retire == true)
+	{
+	  for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	    {
+	      uint32_t x = _param->_nb_inst_retire_rob [i];
+
+	      for (uint32_t j=0; j<x; j++)
+		{
+		  TEST(Tcontrol_t, out_RETIRE_ROB_ACK                [i][j]->read(), retire_rob_ack                [i][j]);
+		  TEST(Tcontrol_t, out_RETIRE_ROB_GPR_STATUS_OLD_VAL [i][j]->read(), retire_rob_gpr_status_old_val [i][j]);
+		  TEST(Tcontrol_t, out_RETIRE_ROB_GPR_STATUS_NEW_VAL [i][j]->read(), retire_rob_gpr_status_new_val [i][j]);
+		  TEST(Tcontrol_t, out_RETIRE_ROB_SPR_STATUS_OLD_VAL [i][j]->read(), retire_rob_spr_status_old_val [i][j]);
+		  TEST(Tcontrol_t, out_RETIRE_ROB_SPR_STATUS_NEW_VAL [i][j]->read(), retire_rob_spr_status_new_val [i][j]);
+		}
+	    }
+	}
+
+      if (test_insert == true)
+	{
+	  for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	    {
+	      uint32_t x = _param->_nb_inst_insert_rob [i];
+
+	      for (uint32_t j=0; j<x; j++)
+		{
+		  TEST(Tcontrol_t, out_INSERT_ROB_ACK            [i][j]->read(), insert_rob_ack            [i][j]);
+		  TEST(Tcontrol_t, out_INSERT_ROB_GPR_STATUS_VAL [i][j]->read(), insert_rob_gpr_status_val [i][j]);
+		  TEST(Tcontrol_t, out_INSERT_ROB_SPR_STATUS_VAL [i][j]->read(), insert_rob_spr_status_val [i][j]);
+		}
+	    }
+	}
+
+
+      SC_START(1);
+    }
+
+  /********************************************************
+   * Simulation - End
+   ********************************************************/
+
+  TEST_OK ("End of Simulation");
+  delete _time;
+  cout << "<" << name << "> ............ Stop Simulation" << endl;
+
+  delete in_CLOCK;
+  delete in_NRESET;
+  delete []  in_GPR_READ_VAL               ;
+  delete [] out_GPR_READ_ACK               ;
+  delete []  in_GPR_READ_OOO_ENGINE_ID     ;
+  delete [] out_GPR_READ_DATA              ;
+  delete [] out_GPR_READ_DATA_VAL          ;
+  delete [] out_GPR_READ_REGISTERFILE_VAL  ;
+  delete []  in_GPR_READ_REGISTERFILE_ACK  ;
+  delete []  in_GPR_READ_REGISTERFILE_DATA ;
+  delete [] out_GPR_READ_STATUS_VAL        ;
+  delete []  in_GPR_READ_STATUS_ACK        ;
+  delete []  in_GPR_READ_STATUS_DATA_VAL   ;
+  delete []  in_SPR_READ_VAL               ;
+  delete [] out_SPR_READ_ACK               ;
+  delete []  in_SPR_READ_OOO_ENGINE_ID     ;
+  delete [] out_SPR_READ_DATA              ;
+  delete [] out_SPR_READ_DATA_VAL          ;
+  delete [] out_SPR_READ_REGISTERFILE_VAL  ;
+  delete []  in_SPR_READ_REGISTERFILE_ACK  ;
+  delete []  in_SPR_READ_REGISTERFILE_DATA ;
+  delete [] out_SPR_READ_STATUS_VAL        ;
+  delete []  in_SPR_READ_STATUS_ACK        ;
+  delete []  in_SPR_READ_STATUS_DATA_VAL   ;
+  delete []  in_GPR_WRITE_VAL               ;
+  delete [] out_GPR_WRITE_ACK               ;
+  delete []  in_GPR_WRITE_OOO_ENGINE_ID     ;
+  delete [] out_GPR_WRITE_REGISTERFILE_VAL  ;
+  delete []  in_GPR_WRITE_REGISTERFILE_ACK  ;
+  delete [] out_GPR_WRITE_STATUS_VAL        ;
+  delete []  in_GPR_WRITE_STATUS_ACK        ;
+  delete []  in_SPR_WRITE_VAL               ;
+  delete [] out_SPR_WRITE_ACK               ;
+  delete []  in_SPR_WRITE_OOO_ENGINE_ID     ;
+  delete [] out_SPR_WRITE_REGISTERFILE_VAL  ;
+  delete []  in_SPR_WRITE_REGISTERFILE_ACK  ;
+  delete [] out_SPR_WRITE_STATUS_VAL        ;
+  delete []  in_SPR_WRITE_STATUS_ACK        ;
+  delete []  in_INSERT_ROB_VAL                  ;
+  delete [] out_INSERT_ROB_ACK                  ;
+  delete []  in_INSERT_ROB_RD_USE               ;
+  delete []  in_INSERT_ROB_RE_USE               ;
+  delete [] out_INSERT_ROB_GPR_STATUS_VAL       ;
+  delete []  in_INSERT_ROB_GPR_STATUS_ACK       ;
+  delete [] out_INSERT_ROB_SPR_STATUS_VAL       ;
+  delete []  in_INSERT_ROB_SPR_STATUS_ACK       ;
+  delete []  in_RETIRE_ROB_VAL                      ;
+  delete [] out_RETIRE_ROB_ACK                      ;
+  delete []  in_RETIRE_ROB_RD_OLD_USE               ;
+  delete []  in_RETIRE_ROB_RD_NEW_USE               ;
+  delete []  in_RETIRE_ROB_RE_OLD_USE               ;
+  delete []  in_RETIRE_ROB_RE_NEW_USE               ;
+  delete [] out_RETIRE_ROB_GPR_STATUS_OLD_VAL       ;
+  delete [] out_RETIRE_ROB_GPR_STATUS_NEW_VAL       ;
+  delete []  in_RETIRE_ROB_GPR_STATUS_OLD_ACK       ;
+  delete []  in_RETIRE_ROB_GPR_STATUS_NEW_ACK       ;
+  delete [] out_RETIRE_ROB_SPR_STATUS_OLD_VAL       ;
+  delete [] out_RETIRE_ROB_SPR_STATUS_NEW_VAL       ;
+  delete []  in_RETIRE_ROB_SPR_STATUS_OLD_ACK       ;
+  delete []  in_RETIRE_ROB_SPR_STATUS_NEW_ACK       ;
+
+#endif
+
+  delete _Register_unit_Glue;
+#ifdef STATISTICS
+  delete _parameters_statistics;
+#endif
+}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/VERSION
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/VERSION	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/VERSION	(revision 60)
@@ -0,0 +1,4 @@
+v0.6
+
+0.5 modif vhdl_port et vhdl_testbench_port -> ajout d'une macro
+0.6 ajout de la documentation
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/Makefile
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/Makefile	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/Makefile	(revision 60)
@@ -0,0 +1,19 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_COMPONENT			= ../
+include				$(DIR_COMPONENT)/Makefile.defs
+
+#-----[ include ]------------------------------------------
+
+all				:
+				$(MAKE) all_documentation
+
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Common
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Documentation
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/Register_unit_Glue.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/Register_unit_Glue.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/Register_unit_Glue.tex	(revision 60)
@@ -0,0 +1,38 @@
+\documentclass[10pt,a4paper,twocolumn]{article}
+
+\def\dirdoc{tex}
+\def\dirschema{eps}
+
+% Package de variables d'environnement : Titre, command etc ...
+\usepackage{../../../../../../../Behavioural/doc/sty/doc-style}
+\usepackage{sty/header}
+
+
+%------------------------------------------------------------------------------
+% Début document
+%------------------------------------------------------------------------------
+
+\pagestyle{empty}
+
+\begin{document}
+
+% Créez une page de titre
+\maketitle
+\thispagestyle{empty}
+
+%Table des matières et des figures
+%\tableofcontents
+%\newpage
+%\listoffigures
+
+%------------------------------------------------------------------------------
+% Ajout du corps du documents
+%------------------------------------------------------------------------------
+
+\input{tex/root}
+
+%------------------------------------------------------------------------------
+% Fin d'ajout du corps du document
+%------------------------------------------------------------------------------
+
+\end{document}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/sty/header.sty
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/sty/header.sty	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/sty/header.sty	(revision 60)
@@ -0,0 +1,12 @@
+\def\review{YYYY/MM/DD}
+%\def\review{\number\day/\number\month/\number\year\xspace}
+
+\title{Register_unit_Glue}
+ 
+\author{}
+
+\affiliation{}
+
+\email{}
+
+\date{\review}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/01_introduction.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/01_introduction.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/01_introduction.tex	(revision 60)
@@ -0,0 +1,1 @@
+\Section{Introduction}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/02_features.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/02_features.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/02_features.tex	(revision 60)
@@ -0,0 +1,1 @@
+\Section{Features}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/03_description.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/03_description.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/03_description.tex	(revision 60)
@@ -0,0 +1,1 @@
+\Section{Functional Description}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/04_pinout.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/04_pinout.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/04_pinout.tex	(revision 60)
@@ -0,0 +1,1 @@
+\Section{Pin out}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/05_parameters.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/05_parameters.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/05_parameters.tex	(revision 60)
@@ -0,0 +1,1 @@
+\Section{Parameters}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/06_performance.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/06_performance.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/06_performance.tex	(revision 60)
@@ -0,0 +1,1 @@
+\Section{Performance}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/07_details.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/07_details.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/07_details.tex	(revision 60)
@@ -0,0 +1,1 @@
+\Section{Details}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/08_history.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/08_history.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/08_history.tex	(revision 60)
@@ -0,0 +1,10 @@
+\Section{Revision History}
+
+\begin{tabular}{|c|c|c|}
+\hline
+Revision Date & By  & Modifications\\
+\hline
+\hline
+yyyy/mm/dd    & xxx & Initial document \\
+\hline
+\end{tabular}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/root.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/root.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/doc/tex/root.tex	(revision 60)
@@ -0,0 +1,8 @@
+\input{\dirdoc/01_introduction}
+\input{\dirdoc/02_features}
+\input{\dirdoc/03_description}
+\input{\dirdoc/04_pinout}
+\input{\dirdoc/05_parameters}
+\input{\dirdoc/06_performance}
+\input{\dirdoc/07_details}
+\input{\dirdoc/08_history}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Parameters.h	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Parameters.h	(revision 60)
@@ -0,0 +1,68 @@
+#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_register_unit_register_unit_glue_Parameters_h
+#define morpheo_behavioural_core_multi_execute_loop_execute_loop_register_unit_register_unit_glue_Parameters_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Common/include/Debug.h"
+#include "Behavioural/include/Parameters.h"
+#include <math.h>
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+  class Parameters : public morpheo::behavioural::Parameters
+  {
+    //-----[ fields ]------------------------------------------------------------
+  public : const uint32_t    _nb_ooo_engine        ;
+  public : const uint32_t    _size_general_data    ;
+  public : const uint32_t    _size_special_data    ;
+  public : const uint32_t    _nb_gpr_read          ;
+  public : const uint32_t    _nb_spr_read          ;    
+  public : const uint32_t    _nb_gpr_write         ;
+  public : const uint32_t    _nb_spr_write         ;
+  public : const uint32_t  * _nb_inst_insert_rob   ;
+  public : const uint32_t  * _nb_inst_retire_rob   ;
+
+  public : const bool        _have_port_ooo_engine_id;
+    
+    //-----[ methods ]-----------------------------------------------------------
+  public : Parameters  (const uint32_t   nb_ooo_engine        ,
+			const uint32_t   size_general_data    ,
+			const uint32_t   size_special_data    ,
+			const uint32_t   nb_gpr_read          ,
+			const uint32_t   nb_spr_read          ,    
+			const uint32_t   nb_gpr_write         ,
+			const uint32_t   nb_spr_write         ,
+			const uint32_t * nb_inst_insert_rob   ,
+			const uint32_t * nb_inst_retire_rob   );
+  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::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Parameters & x);
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h	(revision 60)
@@ -0,0 +1,220 @@
+#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_register_unit_register_unit_glue_Register_unit_Glue_h
+#define morpheo_behavioural_core_multi_execute_loop_execute_loop_register_unit_register_unit_glue_Register_unit_Glue_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#ifdef SYSTEMC
+#include "systemc.h"
+#endif
+
+#include <iostream>
+#include "Common/include/ToString.h"
+#include "Common/include/Debug.h"
+#include "Behavioural/include/Types.h"
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Parameters.h"
+#ifdef STATISTICS
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Statistics.h"
+#endif
+#include "Behavioural/include/Component.h"
+#ifdef VHDL
+#include "Behavioural/include/Vhdl.h"
+#endif
+#include "Behavioural/include/Usage.h"
+
+using namespace std;
+
+namespace morpheo {
+namespace behavioural {
+
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+  class Register_unit_Glue 
+#if SYSTEMC
+    : public sc_module
+#endif
+  {
+    // -----[ fields ]----------------------------------------------------
+    // Parameters
+  protected : const string       _name;
+  protected : const Parameters * _param;
+  private   : const Tusage_t     _usage;
+
+//#ifdef STATISTICS
+//  protected : const morpheo::behavioural::Parameters_Statistics * _param_statistics;
+//#endif
+
+#ifdef STATISTICS
+  private   : Statistics                     * _stat;
+#endif
+
+  public    : Component                      * _component;
+  private   : Interfaces                     * _interfaces;
+
+#ifdef SYSTEMC
+    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    // Interface
+  public    : SC_CLOCK                      *  in_CLOCK  ;
+  public    : SC_IN (Tcontrol_t)            *  in_NRESET ;
+  public    : SC_OUT(Tcontrol_t        )    * out_CONST_0;
+  public    : SC_OUT(Tcontrol_t        )    * out_CONST_1;
+
+    // ~~~~~[ Interface "gpr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t        )   **  in_GPR_READ_VAL              ;
+  public    : SC_OUT(Tcontrol_t        )   ** out_GPR_READ_ACK              ;
+  public    : SC_IN (Tcontext_t        )   **  in_GPR_READ_OOO_ENGINE_ID    ;
+  public    : SC_OUT(Tgeneral_data_t   )   ** out_GPR_READ_DATA             ;
+  public    : SC_OUT(Tcontrol_t        )   ** out_GPR_READ_DATA_VAL         ;
+
+  public    : SC_OUT(Tcontrol_t        )  *** out_GPR_READ_REGISTERFILE_VAL ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_GPR_READ_REGISTERFILE_ACK ;
+  public    : SC_IN (Tgeneral_data_t   )  ***  in_GPR_READ_REGISTERFILE_DATA;
+
+  public    : SC_OUT(Tcontrol_t        )  *** out_GPR_READ_STATUS_VAL       ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_GPR_READ_STATUS_ACK       ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_GPR_READ_STATUS_DATA_VAL  ;
+
+    // ~~~~~[ Interface "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t        )   **  in_SPR_READ_VAL              ;
+  public    : SC_OUT(Tcontrol_t        )   ** out_SPR_READ_ACK              ;
+  public    : SC_IN (Tcontext_t        )   **  in_SPR_READ_OOO_ENGINE_ID    ;
+  public    : SC_OUT(Tspecial_data_t   )   ** out_SPR_READ_DATA             ;
+  public    : SC_OUT(Tcontrol_t        )   ** out_SPR_READ_DATA_VAL         ;
+
+  public    : SC_OUT(Tcontrol_t        )  *** out_SPR_READ_REGISTERFILE_VAL ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_SPR_READ_REGISTERFILE_ACK ;
+  public    : SC_IN (Tspecial_data_t   )  ***  in_SPR_READ_REGISTERFILE_DATA;
+
+  public    : SC_OUT(Tcontrol_t        )  *** out_SPR_READ_STATUS_VAL       ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_SPR_READ_STATUS_ACK       ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_SPR_READ_STATUS_DATA_VAL  ;
+
+    // ~~~~~[ Interface "gpr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t        )   **  in_GPR_WRITE_VAL             ;
+  public    : SC_OUT(Tcontrol_t        )   ** out_GPR_WRITE_ACK             ;
+  public    : SC_IN (Tcontext_t        )   **  in_GPR_WRITE_OOO_ENGINE_ID   ;
+
+  public    : SC_OUT(Tcontrol_t        )  *** out_GPR_WRITE_REGISTERFILE_VAL;
+  public    : SC_IN (Tcontrol_t        )  ***  in_GPR_WRITE_REGISTERFILE_ACK;
+
+  public    : SC_OUT(Tcontrol_t        )  *** out_GPR_WRITE_STATUS_VAL      ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_GPR_WRITE_STATUS_ACK      ;
+    
+    // ~~~~~[ Interface "spr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t        )   **  in_SPR_WRITE_VAL             ;
+  public    : SC_OUT(Tcontrol_t        )   ** out_SPR_WRITE_ACK             ;
+  public    : SC_IN (Tcontext_t        )   **  in_SPR_WRITE_OOO_ENGINE_ID   ;
+
+  public    : SC_OUT(Tcontrol_t        )  *** out_SPR_WRITE_REGISTERFILE_VAL;
+  public    : SC_IN (Tcontrol_t        )  ***  in_SPR_WRITE_REGISTERFILE_ACK;
+
+  public    : SC_OUT(Tcontrol_t        )  *** out_SPR_WRITE_STATUS_VAL      ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_SPR_WRITE_STATUS_ACK      ;
+
+    // ~~~~~[ Interface "insert_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_VAL                       ;
+  public    : SC_OUT(Tcontrol_t        )  *** out_INSERT_ROB_ACK                       ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_RD_USE                    ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_RE_USE                    ;
+
+  public    : SC_OUT(Tcontrol_t        )  *** out_INSERT_ROB_GPR_STATUS_VAL            ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_GPR_STATUS_ACK            ;
+
+  public    : SC_OUT(Tcontrol_t        )  *** out_INSERT_ROB_SPR_STATUS_VAL            ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_SPR_STATUS_ACK            ;
+
+    // ~~~~~[ Interface "retire_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_VAL                       ;
+  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_ROB_ACK                       ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RD_OLD_USE                ; 
+  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RD_NEW_USE                ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RE_OLD_USE                ; 
+  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RE_NEW_USE                ;
+
+  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_ROB_GPR_STATUS_NEW_VAL        ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_GPR_STATUS_NEW_ACK        ;
+  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_ROB_GPR_STATUS_OLD_VAL        ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_GPR_STATUS_OLD_ACK        ;
+
+  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_ROB_SPR_STATUS_NEW_VAL        ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_SPR_STATUS_NEW_ACK        ;
+  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_ROB_SPR_STATUS_OLD_VAL        ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_SPR_STATUS_OLD_ACK        ;
+
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#endif
+
+    // -----[ methods ]---------------------------------------------------
+
+#ifdef SYSTEMC
+    SC_HAS_PROCESS (Register_unit_Glue);
+#endif
+  public  :          Register_unit_Glue              
+  (
+#ifdef SYSTEMC
+   sc_module_name                                name,
+#else					       
+   string                                        name,
+#endif					       
+#ifdef STATISTICS
+   morpheo::behavioural::Parameters_Statistics * param_statistics,
+#endif
+   Parameters                                  * param,
+   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   );
+  public  :          ~Register_unit_Glue             (void);
+					       
+  private : void     allocation                (void);
+  private : void     deallocation              (void);
+					       
+#ifdef SYSTEMC				       
+//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+  public  : void     transition                (void);
+  public  : void     genMealy_gpr_write        (void);
+  public  : void     genMealy_gpr_read         (void);
+  public  : void     genMealy_spr_write        (void);
+  public  : void     genMealy_spr_read         (void);
+  public  : void     genMealy_insert           (void);
+  public  : void     genMealy_retire           (void);
+
+//#endif
+#endif					       
+#ifdef STATISTICS
+  public  : string   statistics                (uint32_t depth);
+#endif
+					       
+#if VHDL				       
+  public  : void     vhdl                      (void);
+  private : void     vhdl_declaration          (Vhdl * & vhdl);
+  private : void     vhdl_body                 (Vhdl * & vhdl);
+#endif					       
+					       
+#ifdef VHDL_TESTBENCH			       
+  private : void     vhdl_testbench_transition (void);
+#endif
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Statistics.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Statistics.h	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Statistics.h	(revision 60)
@@ -0,0 +1,61 @@
+#ifdef STATISTICS
+#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_register_unit_register_unit_glue_Statistics_h
+#define morpheo_behavioural_core_multi_execute_loop_execute_loop_register_unit_register_unit_glue_Statistics_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Common/include/Debug.h"
+#include "Behavioural/include/Statistics.h"
+#include "Behavioural/include/Parameters_Statistics.h"
+//#include "Behavioural/Generic/Group/include/Statistics.h"
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Parameters.h"
+
+//using namespace morpheo::behavioural::generic::group;
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_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 register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo
+
+#endif
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Parameters.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Parameters.cpp	(revision 60)
@@ -0,0 +1,80 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Parameters.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::Parameters"
+  Parameters::Parameters (const uint32_t   nb_ooo_engine        ,
+			  const uint32_t   size_general_data    ,
+			  const uint32_t   size_special_data    ,
+			  const uint32_t   nb_gpr_read          ,
+			  const uint32_t   nb_spr_read          ,    
+			  const uint32_t   nb_gpr_write         ,
+			  const uint32_t   nb_spr_write         ,
+			  const uint32_t * nb_inst_insert_rob   ,
+			  const uint32_t * nb_inst_retire_rob   ):
+    _nb_ooo_engine        (nb_ooo_engine    ),
+    _size_general_data    (size_general_data),
+    _size_special_data    (size_special_data),
+    _nb_gpr_read          (nb_gpr_read      ),
+    _nb_spr_read          (nb_spr_read      ),    
+    _nb_gpr_write         (nb_gpr_write     ),
+    _nb_spr_write         (nb_spr_write     ),
+    _nb_inst_insert_rob   (nb_inst_insert_rob),
+    _nb_inst_retire_rob   (nb_inst_retire_rob),
+    _have_port_ooo_engine_id (nb_ooo_engine>1)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+    test();
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+  
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::Parameters (copy)"
+  Parameters::Parameters (Parameters & param):
+    _nb_ooo_engine        (param._nb_ooo_engine    ),
+    _size_general_data    (param._size_general_data),
+    _size_special_data    (param._size_special_data),
+    _nb_gpr_read          (param._nb_gpr_read      ),
+    _nb_spr_read          (param._nb_spr_read      ),    
+    _nb_gpr_write         (param._nb_gpr_write     ),
+    _nb_spr_write         (param._nb_spr_write     ),
+    _nb_inst_insert_rob   (param._nb_inst_insert_rob),
+    _nb_inst_retire_rob   (param._nb_inst_retire_rob),
+    _have_port_ooo_engine_id (param._have_port_ooo_engine_id)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+    test();
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::~Parameters"
+  Parameters::~Parameters () 
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Parameters_msg_error.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Parameters_msg_error.cpp	(revision 60)
@@ -0,0 +1,42 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Types.h"
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Parameters.h"
+#include <sstream>
+using namespace std;
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::msg_error"
+  string Parameters::msg_error(void)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    string msg = "";
+
+    return msg;
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Parameters_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Parameters_print.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Parameters_print.cpp	(revision 60)
@@ -0,0 +1,76 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Parameters.h"
+#include "Behavioural/include/XML.h"
+using namespace std;
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::print"
+  string Parameters::print (uint32_t depth)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    XML xml ("register_unit_glue");
+
+    xml.balise_open("register_unit_glue");
+    xml.singleton_begin("nb_ooo_engine    "); xml.attribut("value",toString(_nb_ooo_engine    )); xml.singleton_end();
+    xml.singleton_begin("size_general_data"); xml.attribut("value",toString(_size_general_data)); xml.singleton_end();
+    xml.singleton_begin("size_special_data"); xml.attribut("value",toString(_size_special_data)); xml.singleton_end();
+    xml.singleton_begin("nb_gpr_read      "); xml.attribut("value",toString(_nb_gpr_read      )); xml.singleton_end();
+    xml.singleton_begin("nb_spr_read      "); xml.attribut("value",toString(_nb_spr_read      )); xml.singleton_end();
+    xml.singleton_begin("nb_gpr_write     "); xml.attribut("value",toString(_nb_gpr_write     )); xml.singleton_end();
+    xml.singleton_begin("nb_spr_write     "); xml.attribut("value",toString(_nb_spr_write     )); xml.singleton_end();
+
+    xml. balise_open("multi_ooo_engine");
+    for (uint32_t i=0; i<_nb_ooo_engine; i++)
+      {
+	xml.  balise_open_begin("ooo_engine");
+	xml.   attribut("id", toString(i));
+	xml.  balise_open_end();
+	xml.   singleton_begin("nb_inst_insert_rob "); xml.attribut("value",toString(_nb_inst_insert_rob  [i])); xml.singleton_end();
+	xml.   singleton_begin("nb_inst_retire_rob "); xml.attribut("value",toString(_nb_inst_retire_rob  [i])); xml.singleton_end();
+	xml.  balise_close();
+      }
+    xml. balise_close();
+    xml.balise_close();
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+    
+    return xml.get_body(depth);
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::operator<<"
+  ostream& operator<< (ostream& output_stream ,
+		       morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Parameters & x)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    output_stream << x.print(0);
+    
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+
+    return output_stream;
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue.cpp	(revision 60)
@@ -0,0 +1,417 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::Register_unit_Glue"
+  Register_unit_Glue::Register_unit_Glue 
+  (
+#ifdef SYSTEMC
+   sc_module_name name,
+#else
+   string name,
+#endif
+#ifdef STATISTICS
+   morpheo::behavioural::Parameters_Statistics * param_statistics,
+#endif
+   morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Parameters * param,
+   morpheo::behavioural::Tusage_t usage
+   ):
+    _name              (name)
+    ,_param            (param)
+    ,_usage            (usage)
+// #ifdef STATISTICS
+// 			      ,_param_statistics (param_statistics)
+// #endif
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    log_printf(INFO,Register_unit_Glue,FUNCTION,"Allocation");
+    allocation ();
+
+#ifdef STATISTICS
+    log_printf(INFO,Register_unit_Glue,FUNCTION,"Allocation of statistics");
+
+    // Allocation of statistics
+    _stat = new Statistics (static_cast<string>(_name),
+			    param_statistics          ,
+			    param);
+#endif
+
+#ifdef VHDL
+    // generate the vhdl
+    log_printf(INFO,Register_unit_Glue,FUNCTION,"Generate the vhdl");
+
+    vhdl();
+#endif
+
+#ifdef SYSTEMC
+    // Constant
+
+    PORT_WRITE(out_CONST_0 ,0);
+    PORT_WRITE(out_CONST_1 ,1);
+
+//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+
+    log_printf(INFO,Register_unit_Glue,FUNCTION,"Method - transition");
+
+    SC_METHOD (transition);
+    dont_initialize ();
+    sensitive_pos << *(in_CLOCK);
+//#endif
+
+#ifdef SYSTEMCASS_SPECIFIC
+    // List dependency information
+#endif    
+
+    log_printf(INFO,Register_unit_Glue,FUNCTION,"Method - genMealy_gpr_read");
+
+    SC_METHOD (genMealy_gpr_read);
+    dont_initialize ();
+    sensitive_neg << *(in_CLOCK);
+    for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+      {
+	sensitive << *(in_GPR_READ_VAL           [j]);
+	if (_param->_have_port_ooo_engine_id == true)
+	  sensitive << *(in_GPR_READ_OOO_ENGINE_ID [j]);
+
+	for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	  sensitive << *(in_GPR_READ_REGISTERFILE_ACK  [i][j])
+		    << *(in_GPR_READ_REGISTERFILE_DATA [i][j])
+		    << *(in_GPR_READ_STATUS_ACK        [i][j])
+		    << *(in_GPR_READ_STATUS_DATA_VAL   [i][j]);
+      }
+//#endif
+
+#ifdef SYSTEMCASS_SPECIFIC
+    // List dependency information
+    for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+      {
+	if (_param->_have_port_ooo_engine_id == true)
+	  {
+	    (*(out_GPR_READ_ACK                  [j])) (*( in_GPR_READ_OOO_ENGINE_ID        [j]));
+	    (*(out_GPR_READ_DATA_VAL             [j])) (*( in_GPR_READ_OOO_ENGINE_ID        [j]));
+	    (*(out_GPR_READ_DATA                 [j])) (*( in_GPR_READ_OOO_ENGINE_ID        [j]));
+	  }
+	for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	  {
+	    (*(out_GPR_READ_ACK                  [j])) (*( in_GPR_READ_REGISTERFILE_ACK  [i][j]));
+	    (*(out_GPR_READ_ACK                  [j])) (*( in_GPR_READ_STATUS_ACK        [i][j]));
+	    (*(out_GPR_READ_DATA                 [j])) (*( in_GPR_READ_REGISTERFILE_DATA [i][j]));
+	    (*(out_GPR_READ_DATA_VAL             [j])) (*( in_GPR_READ_STATUS_DATA_VAL   [i][j]));	
+
+	    (*(out_GPR_READ_REGISTERFILE_VAL  [i][j])) (*( in_GPR_READ_VAL                  [j]));
+	    (*(out_GPR_READ_REGISTERFILE_VAL  [i][j])) (*( in_GPR_READ_STATUS_ACK        [i][j]));
+	    if (_param->_have_port_ooo_engine_id == true)
+	    (*(out_GPR_READ_REGISTERFILE_VAL  [i][j])) (*( in_GPR_READ_OOO_ENGINE_ID        [j]));
+
+	    (*(out_GPR_READ_STATUS_VAL        [i][j])) (*( in_GPR_READ_VAL                  [j]));
+	    (*(out_GPR_READ_STATUS_VAL        [i][j])) (*( in_GPR_READ_REGISTERFILE_ACK  [i][j]));
+	    if (_param->_have_port_ooo_engine_id == true)
+	    (*(out_GPR_READ_STATUS_VAL        [i][j])) (*( in_GPR_READ_OOO_ENGINE_ID        [j]));
+	  }
+      }
+#endif    
+
+    log_printf(INFO,Register_unit_Glue,FUNCTION,"Method - genMealy_gpr_write");
+
+    SC_METHOD (genMealy_gpr_write);
+    dont_initialize ();
+    sensitive_neg << *(in_CLOCK);
+    for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+      {
+	sensitive << *(in_GPR_WRITE_VAL           [j]);
+	if (_param->_have_port_ooo_engine_id == true)
+	  sensitive << *(in_GPR_WRITE_OOO_ENGINE_ID [j]);
+
+	for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	  sensitive << *(in_GPR_WRITE_REGISTERFILE_ACK  [i][j])
+		    << *(in_GPR_WRITE_STATUS_ACK        [i][j]);
+      }
+//#endif
+
+#ifdef SYSTEMCASS_SPECIFIC
+    // List dependency information
+    for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+      {
+	if (_param->_have_port_ooo_engine_id == true)
+	(*(out_GPR_WRITE_ACK                  [j])) (*( in_GPR_WRITE_OOO_ENGINE_ID        [j]));
+		    
+	for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	  {
+	    (*(out_GPR_WRITE_ACK                  [j])) (*( in_GPR_WRITE_REGISTERFILE_ACK  [i][j]));
+	    (*(out_GPR_WRITE_ACK                  [j])) (*( in_GPR_WRITE_STATUS_ACK        [i][j]));
+
+	    (*(out_GPR_WRITE_REGISTERFILE_VAL  [i][j])) (*( in_GPR_WRITE_VAL                  [j]));
+	    (*(out_GPR_WRITE_REGISTERFILE_VAL  [i][j])) (*( in_GPR_WRITE_STATUS_ACK        [i][j]));
+	    if (_param->_have_port_ooo_engine_id == true)
+	    (*(out_GPR_WRITE_REGISTERFILE_VAL  [i][j])) (*( in_GPR_WRITE_OOO_ENGINE_ID        [j]));
+	    
+	    (*(out_GPR_WRITE_STATUS_VAL        [i][j])) (*( in_GPR_WRITE_VAL                  [j]));
+	    (*(out_GPR_WRITE_STATUS_VAL        [i][j])) (*( in_GPR_WRITE_REGISTERFILE_ACK  [i][j]));
+	    if (_param->_have_port_ooo_engine_id == true)
+	    (*(out_GPR_WRITE_STATUS_VAL        [i][j])) (*( in_GPR_WRITE_OOO_ENGINE_ID        [j]));
+	  }
+      }
+#endif    
+
+//     log_printf(INFO,Register_unit_Glue,FUNCTION,"Method - genMealy_gpr_write_status");
+
+//     SC_METHOD (genMealy_gpr_write_status);
+//     dont_initialize ();
+//     sensitive_neg << *(in_CLOCK);
+//     for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+//       {
+// 	sensitive << *(in_GPR_WRITE_VAL           [j]);
+// 	if (_param->_have_port_ooo_engine_id == true)
+// 	  sensitive << *(in_GPR_WRITE_OOO_ENGINE_ID [j]);
+
+// 	for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+// 	  sensitive << *(in_GPR_WRITE_REGISTERFILE_ACK  [i][j]);
+//       }
+// //#endif
+
+// #ifdef SYSTEMCASS_SPECIFIC
+//     // List dependency information
+//     for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+//       {
+// 	for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+// 	  {
+// 	    (*(out_GPR_WRITE_STATUS_VAL        [i][j])) (*( in_GPR_WRITE_VAL                  [j]));
+// 	    (*(out_GPR_WRITE_STATUS_VAL        [i][j])) (*( in_GPR_WRITE_REGISTERFILE_ACK  [i][j]));
+// 	    if (_param->_have_port_ooo_engine_id == true)
+// 	    (*(out_GPR_WRITE_STATUS_VAL        [i][j])) (*( in_GPR_WRITE_OOO_ENGINE_ID        [j]));
+// 	  }
+//       }
+// #endif    
+
+    log_printf(INFO,Register_unit_Glue,FUNCTION,"Method - genMealy_spr_read");
+
+    SC_METHOD (genMealy_spr_read);
+    dont_initialize ();
+    sensitive_neg << *(in_CLOCK);
+    for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+      {
+	sensitive << *(in_SPR_READ_VAL           [j]);
+	if (_param->_have_port_ooo_engine_id == true)
+	  sensitive << *(in_SPR_READ_OOO_ENGINE_ID [j]);
+
+	for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	  sensitive << *(in_SPR_READ_REGISTERFILE_ACK  [i][j])
+		    << *(in_SPR_READ_REGISTERFILE_DATA [i][j])
+		    << *(in_SPR_READ_STATUS_ACK        [i][j])
+		    << *(in_SPR_READ_STATUS_DATA_VAL   [i][j]);
+      }
+//#endif
+
+#ifdef SYSTEMCASS_SPECIFIC
+    // List dependency information
+    for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+      {
+	if (_param->_have_port_ooo_engine_id == true)
+	  {
+	    (*(out_SPR_READ_ACK                  [j])) (*( in_SPR_READ_OOO_ENGINE_ID        [j]));
+	    (*(out_SPR_READ_DATA_VAL             [j])) (*( in_SPR_READ_OOO_ENGINE_ID        [j]));
+	    (*(out_SPR_READ_DATA                 [j])) (*( in_SPR_READ_OOO_ENGINE_ID        [j]));
+	  }
+	for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	  {
+	    (*(out_SPR_READ_ACK                  [j])) (*( in_SPR_READ_REGISTERFILE_ACK  [i][j]));
+	    (*(out_SPR_READ_ACK                  [j])) (*( in_SPR_READ_STATUS_ACK        [i][j]));
+	    (*(out_SPR_READ_DATA                 [j])) (*( in_SPR_READ_REGISTERFILE_DATA [i][j]));
+	    (*(out_SPR_READ_DATA_VAL             [j])) (*( in_SPR_READ_STATUS_DATA_VAL   [i][j]));	
+
+	    (*(out_SPR_READ_REGISTERFILE_VAL  [i][j])) (*( in_SPR_READ_VAL                  [j]));
+	    (*(out_SPR_READ_REGISTERFILE_VAL  [i][j])) (*( in_SPR_READ_STATUS_ACK        [i][j]));
+	    if (_param->_have_port_ooo_engine_id == true)
+	    (*(out_SPR_READ_REGISTERFILE_VAL  [i][j])) (*( in_SPR_READ_OOO_ENGINE_ID        [j]));
+	    
+	    (*(out_SPR_READ_STATUS_VAL        [i][j])) (*( in_SPR_READ_VAL                  [j]));
+	    (*(out_SPR_READ_STATUS_VAL        [i][j])) (*( in_SPR_READ_REGISTERFILE_ACK  [i][j]));
+	    if (_param->_have_port_ooo_engine_id == true)
+	    (*(out_SPR_READ_STATUS_VAL        [i][j])) (*( in_SPR_READ_OOO_ENGINE_ID        [j]));
+	  }
+      }
+#endif    
+
+    log_printf(INFO,Register_unit_Glue,FUNCTION,"Method - genMealy_spr_write");
+
+    SC_METHOD (genMealy_spr_write);
+    dont_initialize ();
+    sensitive_neg << *(in_CLOCK);
+    for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+      {
+	sensitive << *(in_SPR_WRITE_VAL           [j]);
+	if (_param->_have_port_ooo_engine_id == true)
+	  sensitive << *(in_SPR_WRITE_OOO_ENGINE_ID [j]);
+
+	for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	  sensitive << *(in_SPR_WRITE_REGISTERFILE_ACK  [i][j])
+		    << *(in_SPR_WRITE_STATUS_ACK        [i][j]);
+      }
+//#endif
+
+#ifdef SYSTEMCASS_SPECIFIC
+    // List dependency information
+    for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+      {
+	if (_param->_have_port_ooo_engine_id == true)
+	(*(out_SPR_WRITE_ACK                  [j])) (*( in_SPR_WRITE_OOO_ENGINE_ID        [j]));
+		    
+	for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	  {
+	    (*(out_SPR_WRITE_ACK                  [j])) (*( in_SPR_WRITE_REGISTERFILE_ACK  [i][j]));
+	    (*(out_SPR_WRITE_ACK                  [j])) (*( in_SPR_WRITE_STATUS_ACK        [i][j]));
+
+	    (*(out_SPR_WRITE_REGISTERFILE_VAL  [i][j])) (*( in_SPR_WRITE_VAL                  [j]));
+	    (*(out_SPR_WRITE_REGISTERFILE_VAL  [i][j])) (*( in_SPR_WRITE_STATUS_ACK        [i][j]));
+	    if (_param->_have_port_ooo_engine_id == true)
+	    (*(out_SPR_WRITE_REGISTERFILE_VAL  [i][j])) (*( in_SPR_WRITE_OOO_ENGINE_ID        [j]));
+	    
+	    (*(out_SPR_WRITE_STATUS_VAL        [i][j])) (*( in_SPR_WRITE_VAL                  [j]));
+	    (*(out_SPR_WRITE_STATUS_VAL        [i][j])) (*( in_SPR_WRITE_REGISTERFILE_ACK  [i][j]));
+	    if (_param->_have_port_ooo_engine_id == true)
+	    (*(out_SPR_WRITE_STATUS_VAL        [i][j])) (*( in_SPR_WRITE_OOO_ENGINE_ID        [j]));
+	  }
+      }
+#endif    
+
+    log_printf(INFO,Register_unit_Glue,FUNCTION,"Method - genMealy_insert");
+
+    SC_METHOD (genMealy_insert);
+    dont_initialize ();
+    sensitive_neg << *(in_CLOCK);
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_insert_rob [i];
+	for (uint32_t j=0; j<x; j++)
+	  sensitive << *( in_INSERT_ROB_VAL            [i][j])
+		    << *( in_INSERT_ROB_RD_USE         [i][j]) 
+		    << *( in_INSERT_ROB_RE_USE         [i][j]) 
+		    << *( in_INSERT_ROB_GPR_STATUS_ACK [i][j])
+		    << *( in_INSERT_ROB_SPR_STATUS_ACK [i][j]);
+      }
+#ifdef SYSTEMCASS_SPECIFIC
+    // List dependency information
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_insert_rob [i];
+	for (uint32_t j=0; j<x; j++)
+	  {
+	    (*(out_INSERT_ROB_ACK            [i][j]))(*( in_INSERT_ROB_GPR_STATUS_ACK [i][j]));
+	    (*(out_INSERT_ROB_ACK            [i][j]))(*( in_INSERT_ROB_SPR_STATUS_ACK [i][j]));
+
+	    (*(out_INSERT_ROB_GPR_STATUS_VAL [i][j]))(*( in_INSERT_ROB_VAL            [i][j]));
+	    (*(out_INSERT_ROB_GPR_STATUS_VAL [i][j]))(*( in_INSERT_ROB_RD_USE         [i][j])); 
+	    (*(out_INSERT_ROB_GPR_STATUS_VAL [i][j]))(*( in_INSERT_ROB_SPR_STATUS_ACK [i][j]));
+
+	    (*(out_INSERT_ROB_SPR_STATUS_VAL [i][j]))(*( in_INSERT_ROB_VAL            [i][j])); 
+	    (*(out_INSERT_ROB_SPR_STATUS_VAL [i][j]))(*( in_INSERT_ROB_RE_USE         [i][j]));
+	    (*(out_INSERT_ROB_SPR_STATUS_VAL [i][j]))(*( in_INSERT_ROB_GPR_STATUS_ACK [i][j]));
+	  }
+      }
+#endif    
+
+    log_printf(INFO,Register_unit_Glue,FUNCTION,"Method - genMealy_retire");
+
+    SC_METHOD (genMealy_retire);
+    dont_initialize ();
+    sensitive_neg << *(in_CLOCK);
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_retire_rob [i];
+	for (uint32_t j=0; j<x; j++)
+	  sensitive << *( in_RETIRE_ROB_VAL                [i][j])
+		    << *( in_RETIRE_ROB_RD_OLD_USE         [i][j]) 
+		    << *( in_RETIRE_ROB_RD_NEW_USE         [i][j])
+		    << *( in_RETIRE_ROB_RE_OLD_USE         [i][j]) 
+		    << *( in_RETIRE_ROB_RE_NEW_USE         [i][j])
+		    << *( in_RETIRE_ROB_GPR_STATUS_NEW_ACK [i][j])
+		    << *( in_RETIRE_ROB_GPR_STATUS_OLD_ACK [i][j])
+		    << *( in_RETIRE_ROB_SPR_STATUS_NEW_ACK [i][j])
+		    << *( in_RETIRE_ROB_SPR_STATUS_OLD_ACK [i][j]);
+      }
+#ifdef SYSTEMCASS_SPECIFIC
+    // List dependency information
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_retire_rob [i];
+	for (uint32_t j=0; j<x; j++)
+	  {
+	    (*(out_RETIRE_ROB_ACK                [i][j]))(*( in_RETIRE_ROB_GPR_STATUS_NEW_ACK [i][j]));
+	    (*(out_RETIRE_ROB_ACK                [i][j]))(*( in_RETIRE_ROB_GPR_STATUS_OLD_ACK [i][j]));
+	    (*(out_RETIRE_ROB_ACK                [i][j]))(*( in_RETIRE_ROB_SPR_STATUS_NEW_ACK [i][j]));
+	    (*(out_RETIRE_ROB_ACK                [i][j]))(*( in_RETIRE_ROB_SPR_STATUS_OLD_ACK [i][j]));
+
+	    (*(out_RETIRE_ROB_GPR_STATUS_OLD_VAL [i][j]))(*( in_RETIRE_ROB_VAL                [i][j]));
+	    (*(out_RETIRE_ROB_GPR_STATUS_OLD_VAL [i][j]))(*( in_RETIRE_ROB_RD_OLD_USE         [i][j])); 
+	    (*(out_RETIRE_ROB_GPR_STATUS_OLD_VAL [i][j]))(*( in_RETIRE_ROB_GPR_STATUS_NEW_ACK [i][j]));
+	    (*(out_RETIRE_ROB_GPR_STATUS_OLD_VAL [i][j]))(*( in_RETIRE_ROB_SPR_STATUS_NEW_ACK [i][j]));
+	    (*(out_RETIRE_ROB_GPR_STATUS_OLD_VAL [i][j]))(*( in_RETIRE_ROB_SPR_STATUS_OLD_ACK [i][j]));
+
+	    (*(out_RETIRE_ROB_GPR_STATUS_NEW_VAL [i][j]))(*( in_RETIRE_ROB_VAL                [i][j])); 
+	    (*(out_RETIRE_ROB_GPR_STATUS_NEW_VAL [i][j]))(*( in_RETIRE_ROB_RD_NEW_USE         [i][j]));
+	    (*(out_RETIRE_ROB_GPR_STATUS_NEW_VAL [i][j]))(*( in_RETIRE_ROB_GPR_STATUS_OLD_ACK [i][j]));
+	    (*(out_RETIRE_ROB_GPR_STATUS_NEW_VAL [i][j]))(*( in_RETIRE_ROB_SPR_STATUS_NEW_ACK [i][j]));
+	    (*(out_RETIRE_ROB_GPR_STATUS_NEW_VAL [i][j]))(*( in_RETIRE_ROB_SPR_STATUS_OLD_ACK [i][j]));
+
+	    (*(out_RETIRE_ROB_SPR_STATUS_OLD_VAL [i][j]))(*( in_RETIRE_ROB_VAL                [i][j])); 
+	    (*(out_RETIRE_ROB_SPR_STATUS_OLD_VAL [i][j]))(*( in_RETIRE_ROB_RE_OLD_USE         [i][j]));
+	    (*(out_RETIRE_ROB_SPR_STATUS_OLD_VAL [i][j]))(*( in_RETIRE_ROB_GPR_STATUS_NEW_ACK [i][j]));
+	    (*(out_RETIRE_ROB_SPR_STATUS_OLD_VAL [i][j]))(*( in_RETIRE_ROB_GPR_STATUS_OLD_ACK [i][j]));
+	    (*(out_RETIRE_ROB_SPR_STATUS_OLD_VAL [i][j]))(*( in_RETIRE_ROB_SPR_STATUS_NEW_ACK [i][j]));
+
+	    (*(out_RETIRE_ROB_SPR_STATUS_NEW_VAL [i][j]))(*( in_RETIRE_ROB_VAL                [i][j])); 
+	    (*(out_RETIRE_ROB_SPR_STATUS_NEW_VAL [i][j]))(*( in_RETIRE_ROB_RE_NEW_USE         [i][j]));
+	    (*(out_RETIRE_ROB_SPR_STATUS_NEW_VAL [i][j]))(*( in_RETIRE_ROB_GPR_STATUS_NEW_ACK [i][j]));
+	    (*(out_RETIRE_ROB_SPR_STATUS_NEW_VAL [i][j]))(*( in_RETIRE_ROB_GPR_STATUS_OLD_ACK [i][j]));
+	    (*(out_RETIRE_ROB_SPR_STATUS_NEW_VAL [i][j]))(*( in_RETIRE_ROB_SPR_STATUS_OLD_ACK [i][j]));
+	  }
+      }
+#endif    
+
+#endif
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+  
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::~Register_unit_Glue"
+  Register_unit_Glue::~Register_unit_Glue (void)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+#ifdef STATISTICS
+    log_printf(INFO,Register_unit_Glue,FUNCTION,"Generate Statistics file");
+
+    _stat->generate_file(statistics(0));
+    delete _stat;
+#endif
+
+    log_printf(INFO,Register_unit_Glue,FUNCTION,"Deallocation");
+    deallocation ();
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_allocation.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_allocation.cpp	(revision 60)
@@ -0,0 +1,524 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::allocation"
+  void Register_unit_Glue::allocation (void)
+  {
+    string rename;
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    _component   = new Component ();
+
+    Entity * entity = _component->set_entity (_name       
+					      ,"Register_unit_Glue"
+#ifdef POSITION
+					      ,COMBINATORY 
+#endif
+					      );
+
+    _interfaces = entity->set_interfaces();
+
+    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    Interface * interface = _interfaces->set_interface(""
+#ifdef POSITION
+						       ,IN
+						       ,SOUTH,
+						       "Generalist interface"
+#endif
+						       );
+    
+     in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_NO);
+     in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_NO);
+    out_CONST_0      = interface->set_signal_out <Tcontrol_t> ("const_0",1);
+    out_CONST_1      = interface->set_signal_out <Tcontrol_t> ("const_1",1);
+
+    // ~~~~~[ Interface "gpr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+   in_GPR_READ_VAL               = new SC_IN (Tcontrol_t        )   * [_param->_nb_gpr_read];
+  out_GPR_READ_ACK               = new SC_OUT(Tcontrol_t        )   * [_param->_nb_gpr_read];
+  if (_param->_have_port_ooo_engine_id == true)
+   in_GPR_READ_OOO_ENGINE_ID     = new SC_IN (Tcontext_t        )   * [_param->_nb_gpr_read];
+  out_GPR_READ_DATA              = new SC_OUT(Tgeneral_data_t   )   * [_param->_nb_gpr_read];
+  out_GPR_READ_DATA_VAL          = new SC_OUT(Tcontrol_t        )   * [_param->_nb_gpr_read];
+
+  out_GPR_READ_REGISTERFILE_VAL  = new SC_OUT(Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+   in_GPR_READ_REGISTERFILE_ACK  = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+   in_GPR_READ_REGISTERFILE_DATA = new SC_IN (Tgeneral_data_t   )  ** [_param->_nb_ooo_engine];
+
+  out_GPR_READ_STATUS_VAL        = new SC_OUT(Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+   in_GPR_READ_STATUS_ACK        = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+   in_GPR_READ_STATUS_DATA_VAL   = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+
+   for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+     {
+       out_GPR_READ_REGISTERFILE_VAL  [i] = new SC_OUT(Tcontrol_t        )  * [_param->_nb_gpr_read];
+        in_GPR_READ_REGISTERFILE_ACK  [i] = new SC_IN (Tcontrol_t        )  * [_param->_nb_gpr_read];
+        in_GPR_READ_REGISTERFILE_DATA [i] = new SC_IN (Tgeneral_data_t   )  * [_param->_nb_gpr_read];
+
+       out_GPR_READ_STATUS_VAL        [i] = new SC_OUT(Tcontrol_t        )  * [_param->_nb_gpr_read];
+        in_GPR_READ_STATUS_ACK        [i] = new SC_IN (Tcontrol_t        )  * [_param->_nb_gpr_read];
+        in_GPR_READ_STATUS_DATA_VAL   [i] = new SC_IN (Tcontrol_t        )  * [_param->_nb_gpr_read];
+     }
+
+   for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+     {
+       Interface_fifo * interface = _interfaces->set_interface("gpr_read_"+toString(j)
+#ifdef POSITION
+							  ,IN
+							  ,NORTH,
+							  "Interface to read generalist register"
+#endif
+							  );
+      
+        in_GPR_READ_VAL           [j] = interface->set_signal_valack_in  (VAL);
+       out_GPR_READ_ACK           [j] = interface->set_signal_valack_out (ACK);
+       if (_param->_have_port_ooo_engine_id == true)
+        in_GPR_READ_OOO_ENGINE_ID [j] = interface->set_signal_in <Tcontext_t     > ("ooo_engine_id", log2(_param->_nb_ooo_engine));
+       out_GPR_READ_DATA          [j] = interface->set_signal_out<Tgeneral_data_t> ("data"         , _param->_size_general_data);
+       out_GPR_READ_DATA_VAL      [j] = interface->set_signal_out<Tcontrol_t     > ("data_val"     , 1);
+
+       for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	 {
+	   {
+	     Interface_fifo * interface = _interfaces->set_interface("gpr_read_registerfile_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								,IN
+								,NORTH,
+								"Interface to read generalist register - from/to register file"
+#endif
+								);
+	     
+	     out_GPR_READ_REGISTERFILE_VAL  [i][j] = interface->set_signal_valack_out (VAL);
+	      in_GPR_READ_REGISTERFILE_ACK  [i][j] = interface->set_signal_valack_in  (ACK);
+	      in_GPR_READ_REGISTERFILE_DATA [i][j] = interface->set_signal_in <Tgeneral_data_t> ("data"         , _param->_size_general_data);
+	   }
+	   {
+	     Interface_fifo * interface = _interfaces->set_interface("gpr_read_status_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								,IN
+								,NORTH,
+								"Interface to read generalist register - from/to status"
+#endif
+								);
+
+
+	     out_GPR_READ_STATUS_VAL        [i][j] = interface->set_signal_valack_out (VAL);
+	      in_GPR_READ_STATUS_ACK        [i][j] = interface->set_signal_valack_in  (ACK);
+	      in_GPR_READ_STATUS_DATA_VAL   [i][j] = interface->set_signal_in <Tcontrol_t     > ("data_val"     , 1);
+	   }
+	 }
+     }
+
+    // ~~~~~[ Interface "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+   in_SPR_READ_VAL               = new SC_IN (Tcontrol_t        )   * [_param->_nb_spr_read];
+  out_SPR_READ_ACK               = new SC_OUT(Tcontrol_t        )   * [_param->_nb_spr_read];
+  if (_param->_have_port_ooo_engine_id == true)
+   in_SPR_READ_OOO_ENGINE_ID     = new SC_IN (Tcontext_t        )   * [_param->_nb_spr_read];
+  out_SPR_READ_DATA              = new SC_OUT(Tspecial_data_t   )   * [_param->_nb_spr_read];
+  out_SPR_READ_DATA_VAL          = new SC_OUT(Tcontrol_t        )   * [_param->_nb_spr_read];
+
+  out_SPR_READ_REGISTERFILE_VAL  = new SC_OUT(Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+   in_SPR_READ_REGISTERFILE_ACK  = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+   in_SPR_READ_REGISTERFILE_DATA = new SC_IN (Tspecial_data_t   )  ** [_param->_nb_ooo_engine];
+
+  out_SPR_READ_STATUS_VAL        = new SC_OUT(Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+   in_SPR_READ_STATUS_ACK        = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+   in_SPR_READ_STATUS_DATA_VAL   = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+
+   for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+     {
+       out_SPR_READ_REGISTERFILE_VAL  [i] = new SC_OUT(Tcontrol_t        )  * [_param->_nb_spr_read];
+        in_SPR_READ_REGISTERFILE_ACK  [i] = new SC_IN (Tcontrol_t        )  * [_param->_nb_spr_read];
+        in_SPR_READ_REGISTERFILE_DATA [i] = new SC_IN (Tspecial_data_t   )  * [_param->_nb_spr_read];
+
+       out_SPR_READ_STATUS_VAL        [i] = new SC_OUT(Tcontrol_t        )  * [_param->_nb_spr_read];
+        in_SPR_READ_STATUS_ACK        [i] = new SC_IN (Tcontrol_t        )  * [_param->_nb_spr_read];
+        in_SPR_READ_STATUS_DATA_VAL   [i] = new SC_IN (Tcontrol_t        )  * [_param->_nb_spr_read];
+     }
+
+   for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+     {
+       Interface_fifo * interface = _interfaces->set_interface("spr_read_"+toString(j)
+#ifdef POSITION
+							  ,IN
+							  ,NORTH,
+							  "Interface to read special register"
+#endif
+							  );
+      
+        in_SPR_READ_VAL           [j] = interface->set_signal_valack_in  (VAL);
+       out_SPR_READ_ACK           [j] = interface->set_signal_valack_out (ACK);
+       if (_param->_have_port_ooo_engine_id == true)
+        in_SPR_READ_OOO_ENGINE_ID [j] = interface->set_signal_in <Tcontext_t     > ("ooo_engine_id", log2(_param->_nb_ooo_engine));
+       out_SPR_READ_DATA          [j] = interface->set_signal_out<Tspecial_data_t> ("data"         , _param->_size_special_data);
+       out_SPR_READ_DATA_VAL      [j] = interface->set_signal_out<Tcontrol_t     > ("data_val"     , 1);
+
+       for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	 {
+	   {
+	     Interface_fifo * interface = _interfaces->set_interface("spr_read_registerfile_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								,IN
+								,NORTH,
+								"Interface to read special register - from/to register file"
+#endif
+								);
+	     
+	     out_SPR_READ_REGISTERFILE_VAL  [i][j] = interface->set_signal_valack_out (VAL);
+	      in_SPR_READ_REGISTERFILE_ACK  [i][j] = interface->set_signal_valack_in  (ACK);
+	      in_SPR_READ_REGISTERFILE_DATA [i][j] = interface->set_signal_in <Tspecial_data_t> ("data"         , _param->_size_special_data);
+	   }
+	   {
+	     Interface_fifo * interface = _interfaces->set_interface("spr_read_status_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								,IN
+								,NORTH,
+								"Interface to read special register - from/to status"
+#endif
+								);
+
+
+	     out_SPR_READ_STATUS_VAL        [i][j] = interface->set_signal_valack_out (VAL);
+	      in_SPR_READ_STATUS_ACK        [i][j] = interface->set_signal_valack_in  (ACK);
+	      in_SPR_READ_STATUS_DATA_VAL   [i][j] = interface->set_signal_in <Tcontrol_t     > ("data_val"     , 1);
+	   }
+	 }
+     }
+
+    // ~~~~~[ Interface "gpr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+   in_GPR_WRITE_VAL               = new SC_IN (Tcontrol_t        )   * [_param->_nb_gpr_write];
+  out_GPR_WRITE_ACK               = new SC_OUT(Tcontrol_t        )   * [_param->_nb_gpr_write];
+  if (_param->_have_port_ooo_engine_id == true) 
+  in_GPR_WRITE_OOO_ENGINE_ID     = new SC_IN (Tcontext_t        )   * [_param->_nb_gpr_write];
+
+  out_GPR_WRITE_REGISTERFILE_VAL  = new SC_OUT(Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+   in_GPR_WRITE_REGISTERFILE_ACK  = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+
+  out_GPR_WRITE_STATUS_VAL        = new SC_OUT(Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+   in_GPR_WRITE_STATUS_ACK        = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+
+   for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+     {
+       out_GPR_WRITE_REGISTERFILE_VAL  [i] = new SC_OUT(Tcontrol_t        )  * [_param->_nb_gpr_write];
+        in_GPR_WRITE_REGISTERFILE_ACK  [i] = new SC_IN (Tcontrol_t        )  * [_param->_nb_gpr_write];
+
+       out_GPR_WRITE_STATUS_VAL        [i] = new SC_OUT(Tcontrol_t        )  * [_param->_nb_gpr_write];
+        in_GPR_WRITE_STATUS_ACK        [i] = new SC_IN (Tcontrol_t        )  * [_param->_nb_gpr_write];
+     }
+
+   for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+     {
+       Interface_fifo * interface = _interfaces->set_interface("gpr_write_"+toString(j)
+#ifdef POSITION
+							  ,IN
+							  ,NORTH,
+							  "Interface to write generalist register"
+#endif
+							  );
+      
+        in_GPR_WRITE_VAL           [j] = interface->set_signal_valack_in  (VAL);
+       out_GPR_WRITE_ACK           [j] = interface->set_signal_valack_out (ACK);
+       if (_param->_have_port_ooo_engine_id == true)
+        in_GPR_WRITE_OOO_ENGINE_ID [j] = interface->set_signal_in <Tcontext_t     > ("ooo_engine_id", log2(_param->_nb_ooo_engine));
+
+       for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	 {
+	   {
+	     Interface_fifo * interface = _interfaces->set_interface("gpr_write_registerfile_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								,IN
+								,NORTH,
+								"Interface to write generalist register - from/to register file"
+#endif
+								);
+	     
+	     out_GPR_WRITE_REGISTERFILE_VAL  [i][j] = interface->set_signal_valack_out (VAL);
+	      in_GPR_WRITE_REGISTERFILE_ACK  [i][j] = interface->set_signal_valack_in  (ACK);
+	   }
+	   {
+	     Interface_fifo * interface = _interfaces->set_interface("gpr_write_status_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								,IN
+								,NORTH,
+								"Interface to write generalist register - from/to status"
+#endif
+								);
+
+
+	     out_GPR_WRITE_STATUS_VAL        [i][j] = interface->set_signal_valack_out (VAL);
+	      in_GPR_WRITE_STATUS_ACK        [i][j] = interface->set_signal_valack_in  (ACK);
+	   }
+	 }
+     }
+
+    // ~~~~~[ Interface "spr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+   in_SPR_WRITE_VAL               = new SC_IN (Tcontrol_t        )   * [_param->_nb_spr_write];
+  out_SPR_WRITE_ACK               = new SC_OUT(Tcontrol_t        )   * [_param->_nb_spr_write];
+  if (_param->_have_port_ooo_engine_id == true) 
+   in_SPR_WRITE_OOO_ENGINE_ID     = new SC_IN (Tcontext_t        )   * [_param->_nb_spr_write];
+
+  out_SPR_WRITE_REGISTERFILE_VAL  = new SC_OUT(Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+   in_SPR_WRITE_REGISTERFILE_ACK  = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+
+  out_SPR_WRITE_STATUS_VAL        = new SC_OUT(Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+   in_SPR_WRITE_STATUS_ACK        = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+
+   for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+     {
+       out_SPR_WRITE_REGISTERFILE_VAL  [i] = new SC_OUT(Tcontrol_t        )  * [_param->_nb_spr_write];
+        in_SPR_WRITE_REGISTERFILE_ACK  [i] = new SC_IN (Tcontrol_t        )  * [_param->_nb_spr_write];
+
+       out_SPR_WRITE_STATUS_VAL        [i] = new SC_OUT(Tcontrol_t        )  * [_param->_nb_spr_write];
+        in_SPR_WRITE_STATUS_ACK        [i] = new SC_IN (Tcontrol_t        )  * [_param->_nb_spr_write];
+     }
+
+   for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+     {
+       Interface_fifo * interface = _interfaces->set_interface("spr_write_"+toString(j)
+#ifdef POSITION
+							  ,IN
+							  ,NORTH,
+							  "Interface to write special register"
+#endif
+							  );
+      
+        in_SPR_WRITE_VAL           [j] = interface->set_signal_valack_in  (VAL);
+       out_SPR_WRITE_ACK           [j] = interface->set_signal_valack_out (ACK);
+       if (_param->_have_port_ooo_engine_id == true)
+        in_SPR_WRITE_OOO_ENGINE_ID [j] = interface->set_signal_in <Tcontext_t     > ("ooo_engine_id", log2(_param->_nb_ooo_engine));
+
+       for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	 {
+	   {
+	     Interface_fifo * interface = _interfaces->set_interface("spr_write_registerfile_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								,IN
+								,NORTH,
+								"Interface to write special register - from/to register file"
+#endif
+								);
+	     
+	     out_SPR_WRITE_REGISTERFILE_VAL  [i][j] = interface->set_signal_valack_out (VAL);
+	      in_SPR_WRITE_REGISTERFILE_ACK  [i][j] = interface->set_signal_valack_in  (ACK);
+	   }
+	   {
+	     Interface_fifo * interface = _interfaces->set_interface("spr_write_status_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								,IN
+								,NORTH,
+								"Interface to write special register - from/to status"
+#endif
+								);
+
+
+	     out_SPR_WRITE_STATUS_VAL        [i][j] = interface->set_signal_valack_out (VAL);
+	      in_SPR_WRITE_STATUS_ACK        [i][j] = interface->set_signal_valack_in  (ACK);
+	   }
+	 }
+     }
+
+   // ~~~~~[ Interface "insert_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    in_INSERT_ROB_VAL                  = new SC_IN (Tcontrol_t) ** [_param->_nb_ooo_engine];
+   out_INSERT_ROB_ACK                  = new SC_OUT(Tcontrol_t) ** [_param->_nb_ooo_engine];
+    in_INSERT_ROB_RD_USE               = new SC_IN (Tcontrol_t) ** [_param->_nb_ooo_engine];
+    in_INSERT_ROB_RE_USE               = new SC_IN (Tcontrol_t) ** [_param->_nb_ooo_engine];
+   out_INSERT_ROB_GPR_STATUS_VAL       = new SC_OUT(Tcontrol_t) ** [_param->_nb_ooo_engine];
+    in_INSERT_ROB_GPR_STATUS_ACK       = new SC_IN (Tcontrol_t) ** [_param->_nb_ooo_engine];
+   out_INSERT_ROB_SPR_STATUS_VAL       = new SC_OUT(Tcontrol_t) ** [_param->_nb_ooo_engine];
+    in_INSERT_ROB_SPR_STATUS_ACK       = new SC_IN (Tcontrol_t) ** [_param->_nb_ooo_engine];
+
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_insert_rob [i];
+
+	in_INSERT_ROB_VAL                  [i] = new SC_IN (Tcontrol_t) * [x];
+       out_INSERT_ROB_ACK                  [i] = new SC_OUT(Tcontrol_t) * [x];
+	in_INSERT_ROB_RD_USE               [i] = new SC_IN (Tcontrol_t) * [x];
+	in_INSERT_ROB_RE_USE               [i] = new SC_IN (Tcontrol_t) * [x];
+       out_INSERT_ROB_GPR_STATUS_VAL       [i] = new SC_OUT(Tcontrol_t) * [x];
+	in_INSERT_ROB_GPR_STATUS_ACK       [i] = new SC_IN (Tcontrol_t) * [x];
+       out_INSERT_ROB_SPR_STATUS_VAL       [i] = new SC_OUT(Tcontrol_t) * [x];
+	in_INSERT_ROB_SPR_STATUS_ACK       [i] = new SC_IN (Tcontrol_t) * [x];
+
+	for (uint32_t j=0; j<x; j++)
+	  {
+	    {
+	      Interface_fifo * interface = _interfaces->set_interface("insert_rob_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								      ,IN
+								      ,WEST
+								      ,"Interface to update status (insert)"
+#endif
+								      );
+
+	       in_INSERT_ROB_VAL                  [i][j] = interface->set_signal_valack_in (VAL);
+	      out_INSERT_ROB_ACK                  [i][j] = interface->set_signal_valack_out(ACK);
+	       in_INSERT_ROB_RD_USE               [i][j] = interface->set_signal_in <Tcontrol_t> ("rd_use", 1);
+	       in_INSERT_ROB_RE_USE               [i][j] = interface->set_signal_in <Tcontrol_t> ("re_use", 1);
+	    }
+	    {
+	      Interface_fifo * interface = _interfaces->set_interface("insert_rob_gpr_status_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								      ,IN
+								      ,EAST
+								      ,"Interface to update status (insert)"
+#endif
+								      );
+
+	      out_INSERT_ROB_GPR_STATUS_VAL       [i][j] = interface->set_signal_valack_out(VAL);
+	       in_INSERT_ROB_GPR_STATUS_ACK       [i][j] = interface->set_signal_valack_in (ACK);
+	    }
+	    {
+	      Interface_fifo * interface = _interfaces->set_interface("insert_rob_spr_status_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								      ,IN
+								      ,EAST
+								      ,"Interface to update status (insert)"
+#endif
+								      );
+
+	      out_INSERT_ROB_SPR_STATUS_VAL       [i][j] = interface->set_signal_valack_out(VAL);
+	       in_INSERT_ROB_SPR_STATUS_ACK       [i][j] = interface->set_signal_valack_in (ACK);
+	    }
+	  }
+      }
+
+    // ~~~~~[ Interface "retire_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    in_RETIRE_ROB_VAL                      = new SC_IN (Tcontrol_t) ** [_param->_nb_ooo_engine];
+   out_RETIRE_ROB_ACK                      = new SC_OUT(Tcontrol_t) ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RD_OLD_USE               = new SC_IN (Tcontrol_t) ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RD_NEW_USE               = new SC_IN (Tcontrol_t) ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RE_OLD_USE               = new SC_IN (Tcontrol_t) ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RE_NEW_USE               = new SC_IN (Tcontrol_t) ** [_param->_nb_ooo_engine];
+   out_RETIRE_ROB_GPR_STATUS_OLD_VAL       = new SC_OUT(Tcontrol_t) ** [_param->_nb_ooo_engine];
+   out_RETIRE_ROB_GPR_STATUS_NEW_VAL       = new SC_OUT(Tcontrol_t) ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_GPR_STATUS_OLD_ACK       = new SC_IN (Tcontrol_t) ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_GPR_STATUS_NEW_ACK       = new SC_IN (Tcontrol_t) ** [_param->_nb_ooo_engine];
+   out_RETIRE_ROB_SPR_STATUS_OLD_VAL       = new SC_OUT(Tcontrol_t) ** [_param->_nb_ooo_engine];
+   out_RETIRE_ROB_SPR_STATUS_NEW_VAL       = new SC_OUT(Tcontrol_t) ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_SPR_STATUS_OLD_ACK       = new SC_IN (Tcontrol_t) ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_SPR_STATUS_NEW_ACK       = new SC_IN (Tcontrol_t) ** [_param->_nb_ooo_engine];
+
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_retire_rob [i];
+
+	 in_RETIRE_ROB_VAL                      [i] = new SC_IN (Tcontrol_t) * [x];
+	out_RETIRE_ROB_ACK                      [i] = new SC_OUT(Tcontrol_t) * [x];
+	 in_RETIRE_ROB_RD_OLD_USE               [i] = new SC_IN (Tcontrol_t) * [x];
+	 in_RETIRE_ROB_RD_NEW_USE               [i] = new SC_IN (Tcontrol_t) * [x];
+	 in_RETIRE_ROB_RE_OLD_USE               [i] = new SC_IN (Tcontrol_t) * [x];
+	 in_RETIRE_ROB_RE_NEW_USE               [i] = new SC_IN (Tcontrol_t) * [x];
+	out_RETIRE_ROB_GPR_STATUS_OLD_VAL       [i] = new SC_OUT(Tcontrol_t) * [x];
+	out_RETIRE_ROB_GPR_STATUS_NEW_VAL       [i] = new SC_OUT(Tcontrol_t) * [x];
+	 in_RETIRE_ROB_GPR_STATUS_OLD_ACK       [i] = new SC_IN (Tcontrol_t) * [x];
+	 in_RETIRE_ROB_GPR_STATUS_NEW_ACK       [i] = new SC_IN (Tcontrol_t) * [x];
+	out_RETIRE_ROB_SPR_STATUS_OLD_VAL       [i] = new SC_OUT(Tcontrol_t) * [x];
+	out_RETIRE_ROB_SPR_STATUS_NEW_VAL       [i] = new SC_OUT(Tcontrol_t) * [x];
+	 in_RETIRE_ROB_SPR_STATUS_OLD_ACK       [i] = new SC_IN (Tcontrol_t) * [x];
+	 in_RETIRE_ROB_SPR_STATUS_NEW_ACK       [i] = new SC_IN (Tcontrol_t) * [x];
+    
+	for (uint32_t j=0; j<x; j++)
+	  {
+	    {
+	      Interface_fifo * interface = _interfaces->set_interface("retire_rob_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								      ,IN
+								      ,WEST
+								      ,"Interface to update status (retire)"
+#endif
+								      );
+
+	       in_RETIRE_ROB_VAL                      [i][j] = interface->set_signal_valack_in (VAL);
+	      out_RETIRE_ROB_ACK                      [i][j] = interface->set_signal_valack_out(ACK);
+	       in_RETIRE_ROB_RD_OLD_USE               [i][j] = interface->set_signal_in <Tcontrol_t> ("rd_old_use", 1);
+	       in_RETIRE_ROB_RD_NEW_USE               [i][j] = interface->set_signal_in <Tcontrol_t> ("rd_new_use", 1);
+	       in_RETIRE_ROB_RE_OLD_USE               [i][j] = interface->set_signal_in <Tcontrol_t> ("re_old_use", 1);
+	       in_RETIRE_ROB_RE_NEW_USE               [i][j] = interface->set_signal_in <Tcontrol_t> ("re_new_use", 1);
+	    }
+	    {
+	      Interface_fifo * interface = _interfaces->set_interface("retire_rob_gpr_status_old_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								      ,IN
+								      ,EAST
+								      ,"Interface to update status (retire)"
+#endif
+								      );
+
+	      out_RETIRE_ROB_GPR_STATUS_OLD_VAL [i][j] = interface->set_signal_valack_out(VAL);
+	       in_RETIRE_ROB_GPR_STATUS_OLD_ACK [i][j] = interface->set_signal_valack_in (ACK);
+	    }
+	    {
+	      Interface_fifo * interface = _interfaces->set_interface("retire_rob_gpr_status_new_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								      ,IN
+								      ,EAST
+								      ,"Interface to update status (retire)"
+#endif
+								      );
+
+	      out_RETIRE_ROB_GPR_STATUS_NEW_VAL [i][j] = interface->set_signal_valack_out(VAL);
+	       in_RETIRE_ROB_GPR_STATUS_NEW_ACK [i][j] = interface->set_signal_valack_in (ACK);
+	    }
+	    {
+	      Interface_fifo * interface = _interfaces->set_interface("retire_rob_spr_status_old_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								      ,IN
+								      ,EAST
+								      ,"Interface to update status (retire)"
+#endif
+								      );
+
+	      out_RETIRE_ROB_SPR_STATUS_OLD_VAL [i][j] = interface->set_signal_valack_out(VAL);
+	       in_RETIRE_ROB_SPR_STATUS_OLD_ACK [i][j] = interface->set_signal_valack_in (ACK);
+	    }
+	    {
+	      Interface_fifo * interface = _interfaces->set_interface("retire_rob_spr_status_new_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								      ,IN
+								      ,EAST
+								      ,"Interface to update status (retire)"
+#endif
+								      );
+
+	      out_RETIRE_ROB_SPR_STATUS_NEW_VAL [i][j] = interface->set_signal_valack_out(VAL);
+	       in_RETIRE_ROB_SPR_STATUS_NEW_ACK [i][j] = interface->set_signal_valack_in (ACK);
+	    }
+	  }
+      }
+
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+#ifdef POSITION
+    _component->generate_file();
+#endif
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_deallocation.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_deallocation.cpp	(revision 60)
@@ -0,0 +1,127 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::deallocation"
+  void Register_unit_Glue::deallocation (void)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+    delete    in_CLOCK ;
+//#endif
+    delete    in_NRESET;
+
+    // ~~~~~[ Interface "gpr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    delete []  in_GPR_READ_VAL               ;
+    delete [] out_GPR_READ_ACK               ;
+    if (_param->_have_port_ooo_engine_id == true)
+    delete []  in_GPR_READ_OOO_ENGINE_ID     ;
+    delete [] out_GPR_READ_DATA              ;
+    delete [] out_GPR_READ_DATA_VAL          ;
+
+    delete [] out_GPR_READ_REGISTERFILE_VAL  ;
+    delete []  in_GPR_READ_REGISTERFILE_ACK  ;
+    delete []  in_GPR_READ_REGISTERFILE_DATA ;
+
+    delete [] out_GPR_READ_STATUS_VAL        ;
+    delete []  in_GPR_READ_STATUS_ACK        ;
+    delete []  in_GPR_READ_STATUS_DATA_VAL   ;
+
+
+    // ~~~~~[ Interface "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    delete []  in_SPR_READ_VAL               ;
+    delete [] out_SPR_READ_ACK               ;
+    if (_param->_have_port_ooo_engine_id == true)
+    delete []  in_SPR_READ_OOO_ENGINE_ID     ;
+    delete [] out_SPR_READ_DATA              ;
+    delete [] out_SPR_READ_DATA_VAL          ;
+
+    delete [] out_SPR_READ_REGISTERFILE_VAL  ;
+    delete []  in_SPR_READ_REGISTERFILE_ACK  ;
+    delete []  in_SPR_READ_REGISTERFILE_DATA ;
+
+    delete [] out_SPR_READ_STATUS_VAL        ;
+    delete []  in_SPR_READ_STATUS_ACK        ;
+    delete []  in_SPR_READ_STATUS_DATA_VAL   ;
+
+    // ~~~~~[ Interface "gpr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    delete []  in_GPR_WRITE_VAL               ;
+    delete [] out_GPR_WRITE_ACK               ;
+    if (_param->_have_port_ooo_engine_id == true)
+    delete []  in_GPR_WRITE_OOO_ENGINE_ID     ;
+
+    delete [] out_GPR_WRITE_REGISTERFILE_VAL  ;
+    delete []  in_GPR_WRITE_REGISTERFILE_ACK  ;
+
+    delete [] out_GPR_WRITE_STATUS_VAL        ;
+    delete []  in_GPR_WRITE_STATUS_ACK        ;
+
+    // ~~~~~[ Interface "spr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    delete []  in_SPR_WRITE_VAL               ;
+    delete [] out_SPR_WRITE_ACK               ;
+    if (_param->_have_port_ooo_engine_id == true)
+    delete []  in_SPR_WRITE_OOO_ENGINE_ID     ;
+
+    delete [] out_SPR_WRITE_REGISTERFILE_VAL  ;
+    delete []  in_SPR_WRITE_REGISTERFILE_ACK  ;
+
+    delete [] out_SPR_WRITE_STATUS_VAL        ;
+    delete []  in_SPR_WRITE_STATUS_ACK        ;
+
+    // ~~~~~[ Interface "insert_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    delete []  in_INSERT_ROB_VAL                  ;
+    delete [] out_INSERT_ROB_ACK                  ;
+    delete []  in_INSERT_ROB_RD_USE               ;
+    delete []  in_INSERT_ROB_RE_USE               ;
+    delete [] out_INSERT_ROB_GPR_STATUS_VAL       ;
+    delete []  in_INSERT_ROB_GPR_STATUS_ACK       ;
+    delete [] out_INSERT_ROB_SPR_STATUS_VAL       ;
+    delete []  in_INSERT_ROB_SPR_STATUS_ACK       ;
+
+    // ~~~~~[ Interface "retire_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    delete []  in_RETIRE_ROB_VAL                      ;
+    delete [] out_RETIRE_ROB_ACK                      ;
+    delete []  in_RETIRE_ROB_RD_OLD_USE               ;
+    delete []  in_RETIRE_ROB_RD_NEW_USE               ;
+    delete []  in_RETIRE_ROB_RE_OLD_USE               ;
+    delete []  in_RETIRE_ROB_RE_NEW_USE               ;
+    delete [] out_RETIRE_ROB_GPR_STATUS_OLD_VAL       ;
+    delete [] out_RETIRE_ROB_GPR_STATUS_NEW_VAL       ;
+    delete []  in_RETIRE_ROB_GPR_STATUS_OLD_ACK       ;
+    delete []  in_RETIRE_ROB_GPR_STATUS_NEW_ACK       ;
+    delete [] out_RETIRE_ROB_SPR_STATUS_OLD_VAL       ;
+    delete [] out_RETIRE_ROB_SPR_STATUS_NEW_VAL       ;
+    delete []  in_RETIRE_ROB_SPR_STATUS_OLD_ACK       ;
+    delete []  in_RETIRE_ROB_SPR_STATUS_NEW_ACK       ;
+
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    delete _component;
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_gpr_read.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_gpr_read.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_gpr_read.cpp	(revision 60)
@@ -0,0 +1,62 @@
+#ifdef SYSTEMC
+//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::genMealy_gpr_read"
+  void Register_unit_Glue::genMealy_gpr_read (void)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+      {
+	Tcontext_t ooo_engine_id    = (_param->_have_port_ooo_engine_id == true)?PORT_READ(in_GPR_READ_OOO_ENGINE_ID[j]):0;
+	Tcontrol_t val              = PORT_READ(in_GPR_READ_VAL [j]);
+	Tcontrol_t registerfile_ack = PORT_READ(in_GPR_READ_REGISTERFILE_ACK [ooo_engine_id][j]);
+	Tcontrol_t status_ack       = PORT_READ(in_GPR_READ_STATUS_ACK       [ooo_engine_id][j]);
+
+	// multiplexor
+	PORT_WRITE(out_GPR_READ_ACK      [j], registerfile_ack and status_ack);
+	PORT_WRITE(out_GPR_READ_DATA     [j], PORT_READ(in_GPR_READ_REGISTERFILE_DATA[ooo_engine_id][j]));
+	PORT_WRITE(out_GPR_READ_DATA_VAL [j], PORT_READ(in_GPR_READ_STATUS_DATA_VAL  [ooo_engine_id][j]));
+    
+	Tcontrol_t registerfile_val = val and registerfile_ack;
+	Tcontrol_t status_val       = val and status_ack;
+
+	for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	  {
+	    Tcontrol_t id = (i == ooo_engine_id)?1:0;
+	    PORT_WRITE(out_GPR_READ_REGISTERFILE_VAL [i][j], (id and status_val));
+	    PORT_WRITE(out_GPR_READ_STATUS_VAL       [i][j], (id and registerfile_val));
+	  }
+      }
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
+//#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_gpr_write.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_gpr_write.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_gpr_write.cpp	(revision 60)
@@ -0,0 +1,60 @@
+#ifdef SYSTEMC
+//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::genMealy_gpr_write"
+  void Register_unit_Glue::genMealy_gpr_write (void)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+      {
+	Tcontext_t ooo_engine_id    = (_param->_have_port_ooo_engine_id == true)?PORT_READ(in_GPR_WRITE_OOO_ENGINE_ID[j]):0;
+	Tcontrol_t val              = PORT_READ(in_GPR_WRITE_VAL [j]);
+	Tcontrol_t registerfile_ack = PORT_READ(in_GPR_WRITE_REGISTERFILE_ACK [ooo_engine_id][j]);
+	Tcontrol_t status_ack       = PORT_READ(in_GPR_WRITE_STATUS_ACK       [ooo_engine_id][j]);
+
+	// multiplexor
+	PORT_WRITE(out_GPR_WRITE_ACK [j],registerfile_ack and status_ack);
+
+	Tcontrol_t registerfile_val = val and registerfile_ack;
+	Tcontrol_t status_val       = val and status_ack;
+	
+	for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	  {
+	    Tcontrol_t id = (i == ooo_engine_id)?1:0;
+	    PORT_WRITE(out_GPR_WRITE_REGISTERFILE_VAL [i][j], (id and status_val));
+	    PORT_WRITE(out_GPR_WRITE_STATUS_VAL       [i][j], (id and registerfile_val));
+	  }
+      }
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
+//#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_insert.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_insert.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_insert.cpp	(revision 60)
@@ -0,0 +1,57 @@
+#ifdef SYSTEMC
+//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::genMealy_insert"
+  void Register_unit_Glue::genMealy_insert (void)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_insert_rob [i];
+
+	for (uint32_t j=0; j<x; j++)
+	  {
+	    Tcontrol_t val = PORT_READ(in_INSERT_ROB_VAL [i][j]);
+	    Tcontrol_t gpr_use = PORT_READ(in_INSERT_ROB_RD_USE [i][j]);
+	    Tcontrol_t spr_use = PORT_READ(in_INSERT_ROB_RE_USE [i][j]);
+	    Tcontrol_t gpr_ack = PORT_READ(in_INSERT_ROB_GPR_STATUS_ACK [i][j]);
+	    Tcontrol_t spr_ack = PORT_READ(in_INSERT_ROB_SPR_STATUS_ACK [i][j]);
+	    
+	    PORT_WRITE(out_INSERT_ROB_ACK [i][j], gpr_ack and spr_ack);	    
+	    PORT_WRITE(out_INSERT_ROB_GPR_STATUS_VAL [i][j], val and gpr_use and spr_ack);
+	    PORT_WRITE(out_INSERT_ROB_SPR_STATUS_VAL [i][j], val and spr_use and gpr_ack);
+	  }
+      }
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
+//#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_retire.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_retire.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_retire.cpp	(revision 60)
@@ -0,0 +1,71 @@
+#ifdef SYSTEMC
+//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::genMealy_retire"
+  void Register_unit_Glue::genMealy_retire (void)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_retire_rob [i];
+
+	for (uint32_t j=0; j<x; j++)
+	  {
+	    Tcontrol_t val         = PORT_READ(in_RETIRE_ROB_VAL        [i][j]);
+	    Tcontrol_t gpr_old_use = PORT_READ(in_RETIRE_ROB_RD_OLD_USE [i][j]);
+	    Tcontrol_t gpr_new_use = PORT_READ(in_RETIRE_ROB_RD_NEW_USE [i][j]);
+	    Tcontrol_t spr_old_use = PORT_READ(in_RETIRE_ROB_RE_OLD_USE [i][j]);
+	    Tcontrol_t spr_new_use = PORT_READ(in_RETIRE_ROB_RE_NEW_USE [i][j]);
+	    Tcontrol_t gpr_old_ack = PORT_READ(in_RETIRE_ROB_GPR_STATUS_OLD_ACK [i][j]);
+	    Tcontrol_t gpr_new_ack = PORT_READ(in_RETIRE_ROB_GPR_STATUS_NEW_ACK [i][j]);
+	    Tcontrol_t spr_old_ack = PORT_READ(in_RETIRE_ROB_SPR_STATUS_OLD_ACK [i][j]);
+	    Tcontrol_t spr_new_ack = PORT_READ(in_RETIRE_ROB_SPR_STATUS_NEW_ACK [i][j]);
+
+	    PORT_WRITE(out_RETIRE_ROB_ACK [i][j], (gpr_old_ack and
+						   gpr_new_ack and 
+						   spr_old_ack and
+						   spr_new_ack));
+
+	    PORT_WRITE(out_RETIRE_ROB_GPR_STATUS_OLD_VAL [i][j],
+		       val and gpr_old_use                 and gpr_new_ack and spr_old_ack and spr_new_ack);
+	    PORT_WRITE(out_RETIRE_ROB_GPR_STATUS_NEW_VAL [i][j],
+		       val and gpr_new_use and gpr_old_ack                 and spr_old_ack and spr_new_ack);
+	    PORT_WRITE(out_RETIRE_ROB_SPR_STATUS_OLD_VAL [i][j],
+		       val and spr_old_use and gpr_old_ack and gpr_new_ack                 and spr_new_ack);
+	    PORT_WRITE(out_RETIRE_ROB_SPR_STATUS_NEW_VAL [i][j],
+		       val and spr_new_use and gpr_old_ack and gpr_new_ack and spr_old_ack                );
+	  }
+      }
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
+//#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_spr_read.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_spr_read.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_spr_read.cpp	(revision 60)
@@ -0,0 +1,76 @@
+#ifdef SYSTEMC
+//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::genMealy_spr_read"
+  void Register_unit_Glue::genMealy_spr_read (void)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+      {
+	Tcontext_t ooo_engine_id;
+	
+	if (_param->_have_port_ooo_engine_id == true)
+	  ooo_engine_id = PORT_READ(in_SPR_READ_OOO_ENGINE_ID        [j]);
+	else
+	  ooo_engine_id = 0;
+
+	Tcontrol_t registerfile_ack = PORT_READ(in_SPR_READ_REGISTERFILE_ACK [ooo_engine_id][j]);
+	Tcontrol_t status_ack       = PORT_READ(in_SPR_READ_STATUS_ACK       [ooo_engine_id][j]);
+
+	// multiplexor
+	PORT_WRITE(out_SPR_READ_ACK      [j], registerfile_ack and status_ack);
+	PORT_WRITE(out_SPR_READ_DATA     [j], PORT_READ(in_SPR_READ_REGISTERFILE_DATA[ooo_engine_id][j]));
+	PORT_WRITE(out_SPR_READ_DATA_VAL [j], PORT_READ(in_SPR_READ_STATUS_DATA_VAL  [ooo_engine_id][j]));
+    
+	for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	  {
+	    Tcontrol_t registerfile_val;
+	    Tcontrol_t status_val;
+	    if (i == ooo_engine_id)
+	      {
+		registerfile_val = PORT_READ(in_SPR_READ_VAL [j]);
+		status_val       = PORT_READ(in_SPR_READ_VAL [j]);
+	      }
+	    else
+	      {
+		registerfile_val = 0;
+		status_val       = 0;
+	      }
+	    
+	    PORT_WRITE(out_SPR_READ_REGISTERFILE_VAL  [i][j], registerfile_val and status_ack      );
+	    PORT_WRITE(out_SPR_READ_STATUS_VAL        [i][j], status_val       and registerfile_ack);
+	  }
+      }
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
+//#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_spr_write.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_spr_write.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_genMealy_spr_write.cpp	(revision 60)
@@ -0,0 +1,73 @@
+#ifdef SYSTEMC
+//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::genMealy_spr_write"
+  void Register_unit_Glue::genMealy_spr_write (void)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+      {
+	Tcontext_t ooo_engine_id;
+	if (_param->_have_port_ooo_engine_id == true)
+	  ooo_engine_id = PORT_READ(in_SPR_WRITE_OOO_ENGINE_ID        [j]);
+	else
+	  ooo_engine_id = 0;
+
+	Tcontrol_t registerfile_ack = PORT_READ(in_SPR_WRITE_REGISTERFILE_ACK [ooo_engine_id][j]);
+	Tcontrol_t status_ack       = PORT_READ(in_SPR_WRITE_STATUS_ACK       [ooo_engine_id][j]);
+
+	// multiplexor
+	PORT_WRITE(out_SPR_WRITE_ACK      [j],registerfile_ack and status_ack);
+
+	for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	  {
+	    Tcontrol_t registerfile_val;
+	    Tcontrol_t status_val;
+	    if (i == ooo_engine_id)
+	      {
+		registerfile_val = PORT_READ(in_SPR_WRITE_VAL [j]);
+		status_val       = PORT_READ(in_SPR_WRITE_VAL [j]);
+	      }
+	    else
+	      {
+		registerfile_val = 0;
+		status_val       = 0;
+	      }
+	    
+	    PORT_WRITE(out_SPR_WRITE_REGISTERFILE_VAL  [i][j], registerfile_val and status_ack      );
+	    PORT_WRITE(out_SPR_WRITE_STATUS_VAL        [i][j], status_val       and registerfile_ack);
+	  }
+      }
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
+//#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_statistics.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_statistics.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_statistics.cpp	(revision 60)
@@ -0,0 +1,41 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::statistics"
+  string Register_unit_Glue::statistics (uint32_t depth)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    string txt = _stat->print(depth);
+    
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+
+    return txt;
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_transition.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_transition.cpp	(revision 60)
@@ -0,0 +1,47 @@
+#ifdef SYSTEMC
+//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::transition"
+  void Register_unit_Glue::transition (void)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+#ifdef STATISTICS
+    _stat->add();
+#endif    
+
+#ifdef VHDL_TESTBENCH
+    vhdl_testbench_transition ();
+#endif
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
+//#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_vhdl.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_vhdl.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_vhdl.cpp	(revision 60)
@@ -0,0 +1,50 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+#include "Behavioural/include/Vhdl.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::vhdl"
+  void Register_unit_Glue::vhdl (void)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    Vhdl * vhdl = new Vhdl (_name);
+
+    _interfaces->set_port(vhdl);
+    _component->vhdl_instance(vhdl);
+
+    vhdl_declaration (vhdl);
+    vhdl_body        (vhdl);
+
+    vhdl->generate_file();
+
+    delete vhdl;
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_vhdl_body.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_vhdl_body.cpp	(revision 60)
@@ -0,0 +1,327 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::vhdl_body"
+  void Register_unit_Glue::vhdl_body (Vhdl * & vhdl)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    vhdl->set_body("out_CONST_0 <= '0';");
+    vhdl->set_body("out_CONST_1 <= '1';");
+
+    //-----------------------------------
+    // GPR_READ
+    //-----------------------------------
+
+    vhdl->set_body ("");
+    for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+      {
+	vhdl->set_body ("out_GPR_READ_"+toString(j)+"_ACK <=");
+	for (uint32_t i=_param->_nb_ooo_engine-1; i>=1; i--)
+	  {
+	    vhdl->set_body ("\tin_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK and in_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_ACK when in_GPR_READ_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else");
+	  }
+	vhdl->set_body ("\tin_GPR_READ_REGISTERFILE_0_"+toString(j)+"_ACK and in_GPR_READ_STATUS_0_"+toString(j)+"_ACK;");
+      }
+
+    vhdl->set_body ("");
+    for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+      {
+	vhdl->set_body ("out_GPR_READ_"+toString(j)+"_DATA <=");
+	for (uint32_t i=_param->_nb_ooo_engine-1; i>=1; i--)
+	  {
+	    vhdl->set_body ("\tin_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_DATA when in_GPR_READ_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else");
+	  }
+	vhdl->set_body ("\tin_GPR_READ_REGISTERFILE_0_"+toString(j)+"_DATA;");
+      }
+
+    vhdl->set_body ("");
+    for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+      {
+	vhdl->set_body ("out_GPR_READ_"+toString(j)+"_DATA_VAL <=");
+	for (uint32_t i=_param->_nb_ooo_engine-1; i>=1; i--)
+	  {
+	    vhdl->set_body ("\tin_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_DATA_VAL when in_GPR_READ_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else");
+	  }
+	vhdl->set_body ("\tin_GPR_READ_STATUS_0_"+toString(j)+"_DATA_VAL;");
+      }
+
+    if (_param->_have_port_ooo_engine_id == true)
+      {
+	vhdl->set_body ("");
+	for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+	  {
+	    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	      {
+		vhdl->set_body ("out_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL <= in_GPR_READ_"+toString(j)+"_VAL and in_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_ACK when in_GPR_READ_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else '0';");
+	      }
+	  }
+	
+	vhdl->set_body ("");
+	for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+	  {
+	    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	      {
+		vhdl->set_body ("out_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_VAL <= in_GPR_READ_"+toString(j)+"_VAL and in_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK when in_GPR_READ_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else '0';");
+	      }
+	  }
+      }
+    else
+      {
+	for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+	  vhdl->set_body ("out_GPR_READ_REGISTERFILE_0_"+toString(j)+"_VAL <= in_GPR_READ_"+toString(j)+"_VAL and in_GPR_READ_STATUS_0_"+toString(j)+"_ACK;");
+	for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+	  vhdl->set_body ("out_GPR_READ_STATUS_0_"+toString(j)+"_VAL <= in_GPR_READ_"+toString(j)+"_VAL and in_GPR_READ_REGISTERFILE_0_"+toString(j)+"_ACK;");
+      }
+
+    //-----------------------------------
+    // GPR_WRITE
+    //-----------------------------------
+
+    vhdl->set_body ("");
+    for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+      {
+	vhdl->set_body ("out_GPR_WRITE_"+toString(j)+"_ACK <=");
+	for (uint32_t i=_param->_nb_ooo_engine-1; i>=1; i--)
+	  {
+	    vhdl->set_body ("\tin_GPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK and in_GPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_ACK when in_GPR_WRITE_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else");
+	  }
+	vhdl->set_body ("\tin_GPR_WRITE_REGISTERFILE_0_"+toString(j)+"_ACK and in_GPR_WRITE_STATUS_0_"+toString(j)+"_ACK;");
+      }
+
+    if (_param->_have_port_ooo_engine_id == true)
+      {
+	vhdl->set_body ("");
+	for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+	  {
+	    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	      {
+		vhdl->set_body ("out_GPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL <= in_GPR_WRITE_"+toString(j)+"_VAL and in_GPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_ACK when in_GPR_WRITE_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else '0';");
+	      }
+	  }
+	
+	vhdl->set_body ("");
+	for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+	  {
+	    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	      {
+		vhdl->set_body ("out_GPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_VAL <= in_GPR_WRITE_"+toString(j)+"_VAL and in_GPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK when in_GPR_WRITE_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else '0';");
+	      }
+	  }
+      }
+    else
+      {
+	for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+	  vhdl->set_body ("out_GPR_WRITE_REGISTERFILE_0_"+toString(j)+"_VAL <= in_GPR_WRITE_"+toString(j)+"_VAL and in_GPR_WRITE_STATUS_0_"+toString(j)+"_ACK;");
+	for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+	  vhdl->set_body ("out_GPR_WRITE_STATUS_0_"+toString(j)+"_VAL <= in_GPR_WRITE_"+toString(j)+"_VAL and in_GPR_WRITE_REGISTERFILE_0_"+toString(j)+"_ACK;");
+      }
+
+    //-----------------------------------
+    // SPR_READ
+    //-----------------------------------
+
+    vhdl->set_body ("");
+    for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+      {
+	vhdl->set_body ("out_SPR_READ_"+toString(j)+"_ACK <=");
+	for (uint32_t i=_param->_nb_ooo_engine-1; i>=1; i--)
+	  {
+	    vhdl->set_body ("\tin_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK and in_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_ACK when in_SPR_READ_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else");
+	  }
+	vhdl->set_body ("\tin_SPR_READ_REGISTERFILE_0_"+toString(j)+"_ACK and in_SPR_READ_STATUS_0_"+toString(j)+"_ACK;");
+      }
+
+    vhdl->set_body ("");
+    for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+      {
+	vhdl->set_body ("out_SPR_READ_"+toString(j)+"_DATA <=");
+	for (uint32_t i=_param->_nb_ooo_engine-1; i>=1; i--)
+	  {
+	    vhdl->set_body ("\tin_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_DATA when in_SPR_READ_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else");
+	  }
+	vhdl->set_body ("\tin_SPR_READ_REGISTERFILE_0_"+toString(j)+"_DATA;");
+      }
+
+    vhdl->set_body ("");
+    for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+      {
+	vhdl->set_body ("out_SPR_READ_"+toString(j)+"_DATA_VAL <=");
+	for (uint32_t i=_param->_nb_ooo_engine-1; i>=1; i--)
+	  {
+	    vhdl->set_body ("\tin_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_DATA_VAL when in_SPR_READ_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else");
+	  }
+	vhdl->set_body ("\tin_SPR_READ_STATUS_0_"+toString(j)+"_DATA_VAL;");
+      }
+
+    if (_param->_have_port_ooo_engine_id == true)
+      {
+	vhdl->set_body ("");
+	for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+	  {
+	    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	      {
+		vhdl->set_body ("out_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL <= in_SPR_READ_"+toString(j)+"_VAL and in_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_ACK when in_SPR_READ_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else '0';");
+	      }
+	  }
+	
+	vhdl->set_body ("");
+	for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+	  {
+	    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	      {
+		vhdl->set_body ("out_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_VAL <= in_SPR_READ_"+toString(j)+"_VAL and in_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK when in_SPR_READ_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else '0';");
+	      }
+	  }
+      }
+    else
+      {
+	for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+	  vhdl->set_body ("out_SPR_READ_REGISTERFILE_0_"+toString(j)+"_VAL <= in_SPR_READ_"+toString(j)+"_VAL and in_SPR_READ_STATUS_0_"+toString(j)+"_ACK;");
+	for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+	  vhdl->set_body ("out_SPR_READ_STATUS_0_"+toString(j)+"_VAL <= in_SPR_READ_"+toString(j)+"_VAL and in_SPR_READ_REGISTERFILE_0_"+toString(j)+"_ACK;");
+      }
+
+    //-----------------------------------
+    // SPR_WRITE
+    //-----------------------------------
+
+    vhdl->set_body ("");
+    for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+      {
+	vhdl->set_body ("out_SPR_WRITE_"+toString(j)+"_ACK <=");
+	for (uint32_t i=_param->_nb_ooo_engine-1; i>=1; i--)
+	  {
+	    vhdl->set_body ("\tin_SPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK and in_SPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_ACK when in_SPR_WRITE_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else");
+	  }
+	vhdl->set_body ("\tin_SPR_WRITE_REGISTERFILE_0_"+toString(j)+"_ACK and in_SPR_WRITE_STATUS_0_"+toString(j)+"_ACK;");
+      }
+
+    if (_param->_have_port_ooo_engine_id == true)
+      {
+	vhdl->set_body ("");
+	for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+	  {
+	    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	      {
+		vhdl->set_body ("out_SPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL <= in_SPR_WRITE_"+toString(j)+"_VAL and in_SPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_ACK when in_SPR_WRITE_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else '0';");
+	      }
+	  }
+	
+	vhdl->set_body ("");
+	for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+	  {
+	    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	      {
+		vhdl->set_body ("out_SPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_VAL <= in_SPR_WRITE_"+toString(j)+"_VAL and in_SPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK when in_SPR_WRITE_"+toString(j)+"_OOO_ENGINE_ID = "+std_logic_conv(log2(_param->_nb_ooo_engine),i)+" else '0';");
+	      }
+	  }
+      }
+    else
+      {
+	for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+	  vhdl->set_body ("out_SPR_WRITE_REGISTERFILE_0_"+toString(j)+"_VAL <= in_SPR_WRITE_"+toString(j)+"_VAL and in_SPR_WRITE_STATUS_0_"+toString(j)+"_ACK;");
+	for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+	  vhdl->set_body ("out_SPR_WRITE_STATUS_0_"+toString(j)+"_VAL <= in_SPR_WRITE_"+toString(j)+"_VAL and in_SPR_WRITE_REGISTERFILE_0_"+toString(j)+"_ACK;");
+      }
+
+
+    //-----------------------------------
+    // INSERT_ROB
+    //-----------------------------------
+
+    vhdl->set_body ("");
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_insert_rob [i];
+	for (uint32_t j=0; j<x; j++)
+	  {
+	    vhdl->set_body ("out_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_ACK <=");
+	    vhdl->set_body ("\tin_INSERT_ROB_GPR_STATUS_"+toString(i)+"_"+toString(j)+"_ACK and");
+	    vhdl->set_body ("\tin_INSERT_ROB_SPR_STATUS_"+toString(i)+"_"+toString(j)+"_ACK;");
+
+	    vhdl->set_body ("out_INSERT_ROB_GPR_STATUS_"+toString(i)+"_"+toString(j)+"_VAL <=");
+	    vhdl->set_body ("\tin_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_VAL            and");
+	    vhdl->set_body ("\tin_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_RD_USE         and");
+	    vhdl->set_body ("\tin_INSERT_ROB_SPR_STATUS_"+toString(i)+"_"+toString(j)+"_ACK;");
+
+	    vhdl->set_body ("out_INSERT_ROB_SPR_STATUS_"+toString(i)+"_"+toString(j)+"_VAL <=");
+	    vhdl->set_body ("\tin_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_VAL            and");
+	    vhdl->set_body ("\tin_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_RE_USE         and");
+	    vhdl->set_body ("\tin_INSERT_ROB_GPR_STATUS_"+toString(i)+"_"+toString(j)+"_ACK;");
+	  }
+      }
+
+    //-----------------------------------
+    // RETIRE_ROB
+    //-----------------------------------
+    vhdl->set_body ("");
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_retire_rob [i];
+	for (uint32_t j=0; j<x; j++)
+	  {
+	    vhdl->set_body ("out_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_ACK <=");
+	    vhdl->set_body ("\tin_RETIRE_ROB_GPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_GPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_SPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_SPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK;");
+
+	    vhdl->set_body ("out_RETIRE_ROB_GPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_VAL <=");
+	    vhdl->set_body ("\tin_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_VAL                and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RD_OLD_USE         and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_GPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_SPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_SPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK;");
+
+	    vhdl->set_body ("out_RETIRE_ROB_GPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_VAL <=");
+	    vhdl->set_body ("\tin_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_VAL                and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RD_NEW_USE         and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_GPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_SPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_SPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK;");
+
+	    vhdl->set_body ("out_RETIRE_ROB_SPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_VAL <=");
+	    vhdl->set_body ("\tin_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_VAL                and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RE_OLD_USE         and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_GPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_GPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_SPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK;");
+
+	    vhdl->set_body ("out_RETIRE_ROB_SPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_VAL <=");
+	    vhdl->set_body ("\tin_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_VAL                and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RE_NEW_USE         and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_GPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_GPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK and");
+	    vhdl->set_body ("\tin_RETIRE_ROB_SPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK;");
+	  }
+      }
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_vhdl_declaration.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_vhdl_declaration.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_vhdl_declaration.cpp	(revision 60)
@@ -0,0 +1,36 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::vhdl_declaration"
+  void Register_unit_Glue::vhdl_declaration (Vhdl * & vhdl)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_vhdl_testbench_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_vhdl_testbench_transition.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Register_unit_Glue_vhdl_testbench_transition.cpp	(revision 60)
@@ -0,0 +1,42 @@
+#ifdef VHDL_TESTBENCH
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::vhdl_testbench_transition"
+  void Register_unit_Glue::vhdl_testbench_transition ()
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    // Evaluation before read the ouput signal
+//     sc_start(0);
+
+    _interfaces->testbench();
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Statistics.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Statistics.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Statistics.cpp	(revision 60)
@@ -0,0 +1,50 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Statistics.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::Statistics"
+  Statistics::Statistics (string                                        name                       ,
+			  morpheo::behavioural::Parameters_Statistics * parameters_statistics      ,
+			  Parameters                                  * parameters
+			  ) :
+    morpheo::behavioural::Statistics(name                  ,
+				     parameters_statistics ),
+    _parameters(parameters)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+  
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::~Statistics"
+  Statistics::~Statistics () 
+  { 
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Statistics_add.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Statistics_add.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Statistics_add.cpp	(revision 60)
@@ -0,0 +1,39 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Statistics.h"
+
+#include <sstream>
+using namespace std;
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::add"
+  void Statistics::add ()
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Statistics_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Statistics_print.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Statistics_print.cpp	(revision 60)
@@ -0,0 +1,63 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Statistics.h"
+
+#include <sstream>
+using namespace std;
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::print"
+  string Statistics::print (uint32_t depth)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    string        tab = string(depth,'\t');
+    ostringstream msg;
+
+    msg << tab << "<register_unit_glue name=\"" << _name << "\" >" << endl
+        << print_body(depth+1) << endl
+	<< tab << "</register_unit_glue>" << endl;
+    
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+
+    return msg.str();
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::operator<<"
+  ostream& operator<< (ostream& output_stream ,
+		       morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Statistics & x)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    output_stream << x.print(0);
+
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+
+    return output_stream;
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Statistics_print_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Statistics_print_body.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/src/Statistics_print_body.cpp	(revision 60)
@@ -0,0 +1,47 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Statistics.h"
+
+#include <sstream>
+using namespace std;
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+namespace register_unit_glue {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit_Glue::print_body"
+  string Statistics::print_body (uint32_t depth)
+  {
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"Begin");
+
+    string        tab = string(depth,'\t');
+    ostringstream msg;
+
+    msg << tab << "";
+    
+    log_printf(FUNC,Register_unit_Glue,FUNCTION,"End");
+
+    return msg.str();
+  };
+
+}; // end namespace register_unit_glue
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/Makefile
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/Makefile	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/Makefile	(revision 60)
@@ -0,0 +1,30 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_COMPONENT			= ../
+include				$(DIR_COMPONENT)/Makefile.defs
+
+LIBRARY				= $(Register_unit_LIBRARY)
+
+DIR_LIBRARY			= $(Register_unit_DIR_LIBRARY)
+
+#-----[ include ]------------------------------------------
+
+all				:
+				@$(MAKE) all_selftest
+
+library				: Register_unit_library
+
+library_clean			: Register_unit_library_clean
+
+include                         ../Makefile.deps
+include                         $(DIR_MORPHEO)/Behavioural/Makefile.flags
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Common
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Selftest
+include 			$(DIR_MORPHEO)/Behavioural/Makefile.Synthesis
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/configuration.cfg
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/configuration.cfg	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/configuration.cfg	(revision 60)
@@ -0,0 +1,18 @@
+Register_unit
+1	1	*2	#_nb_ooo_engine            
+32	32	*2	#_size_general_data        
+32	32	*2	#_size_special_data        
+1	1	*2	#_nb_gpr_read              
+1	1	*2	#_nb_gpr_write             
+1	1	*2	#_nb_gpr_bank              
+1	1	*2	#_nb_gpr_port_read_by_bank 
+1	1	*2	#_nb_gpr_port_write_by_bank
+1	1	*2	#_nb_spr_read              
+1	1	*2	#_nb_spr_write             
+1	1	*2	#_nb_spr_bank              
+1	1	*2	#_nb_spr_port_read_by_bank 
+1	1	*2	#_nb_spr_port_write_by_bank
+32	32	*2	#_nb_general_register [0]     
+32	32 	*2	#_nb_special_register [0]     
+1	1	*2	#_nb_inst_insert_rob  [0]     
+1	1	*2	#_nb_inst_retire_rob  [0]     
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/configuration.cfg.save
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/configuration.cfg.save	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/configuration.cfg.save	(revision 60)
@@ -0,0 +1,30 @@
+Register_unit
+4	4	*2	#_nb_ooo_engine            
+32	32	*2	#_size_general_data        
+2	2	*2	#_size_special_data        
+8	8	*2	#_nb_gpr_read              
+4	4	*2	#_nb_gpr_write             
+2	2	*2	#_nb_gpr_bank              
+4	4	*2	#_nb_gpr_port_read_by_bank 
+2	2	*2	#_nb_gpr_port_write_by_bank
+8	8	*2	#_nb_spr_read              
+4	4	*2	#_nb_spr_write             
+2	2	*2	#_nb_spr_bank              
+4	4	*2	#_nb_spr_port_read_by_bank 
+2	2	*2	#_nb_spr_port_write_by_bank
+32	32	*2	#_nb_general_register [0]     
+64	64	*2	#_nb_general_register [1]     
+128	128	*2	#_nb_general_register [2]     
+256	256	*2	#_nb_general_register [3]     
+32	32 	*2	#_nb_special_register [0]     
+64	64 	*2	#_nb_special_register [1]     
+128	128	*2	#_nb_special_register [2]     
+256	256	*2	#_nb_special_register [3]     
+1	1	*2	#_nb_inst_insert_rob  [0]     
+2	2	*2	#_nb_inst_insert_rob  [1]     
+4	4	*2	#_nb_inst_insert_rob  [2]     
+8	8	*2	#_nb_inst_insert_rob  [3]     
+1	1	*2	#_nb_inst_retire_rob  [0]     
+2	2	*2	#_nb_inst_retire_rob  [1]     
+4	4	*2	#_nb_inst_retire_rob  [2]     
+8	8	*2	#_nb_inst_retire_rob  [3]     
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/include/test.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/include/test.h	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/include/test.h	(revision 60)
@@ -0,0 +1,61 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ * Test "RegisterFile"
+ */
+
+#ifdef SYSTEMC
+#include "systemc.h"
+#endif
+
+#include <string>
+#include <iostream>
+#include <sys/time.h>
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h"
+
+using namespace std;
+using namespace morpheo;
+using namespace morpheo::behavioural;
+using namespace morpheo::behavioural::core;
+using namespace morpheo::behavioural::core::multi_execute_loop;
+using namespace morpheo::behavioural::core::multi_execute_loop::execute_loop;
+
+using namespace morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit;
+
+void test    (string name,
+	      morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::Parameters * param);
+
+class Time 
+{
+private : timeval time_begin;
+// private : timeval time_end;
+  
+public  : Time ()
+  {
+    gettimeofday(&time_begin     ,NULL);
+  };
+
+public  : ~Time ()
+  {
+    cout << *this;
+  };
+
+public  : friend ostream& operator<< (ostream& output_stream,
+				      const Time & x)
+  {
+    timeval time_end;
+    
+    gettimeofday(&time_end       ,NULL);
+    
+    uint32_t nb_cycles = static_cast<uint32_t>(sc_simulation_time());
+
+    double average = static_cast<double>(nb_cycles) / static_cast<double>(time_end.tv_sec-x.time_begin.tv_sec);
+    
+    output_stream << nb_cycles << "\t(" << average << " cycles / seconds )" << endl;
+
+    return output_stream;
+  }
+};
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/src/main.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/src/main.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/src/main.cpp	(revision 60)
@@ -0,0 +1,125 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/include/test.h"
+
+#define NB_PARAMS 13
+
+void usage (int argc, char * argv[])
+{
+  cerr << "<Usage> " << argv[0] << " name_instance list_params" << endl
+       << "list_params is :" << endl
+       << " - nb_ooo_engine                             (uint32_t)" << endl
+       << " - size_general_data                         (uint32_t)" << endl
+       << " - size_special_data                         (uint32_t)" << endl
+       << " - nb_gpr_read                               (uint32_t)" << endl
+       << " - nb_gpr_write                              (uint32_t)" << endl
+       << " - nb_gpr_bank                               (uint32_t)" << endl
+       << " - nb_gpr_port_read_by_bank                  (uint32_t)" << endl
+       << " - nb_gpr_port_write_by_bank                 (uint32_t)" << endl
+       << " - nb_spr_read                               (uint32_t)" << endl
+       << " - nb_spr_write                              (uint32_t)" << endl
+       << " - nb_spr_bank                               (uint32_t)" << endl
+       << " - nb_spr_port_read_by_bank                  (uint32_t)" << endl
+       << " - nb_spr_port_write_by_bank                 (uint32_t)" << endl
+       << " - nb_general_register       [nb_ooo_engine] (uint32_t)" << endl 
+       << " - nb_special_register       [nb_ooo_engine] (uint32_t)" << endl 
+       << " - nb_inst_insert_rob        [nb_ooo_engine] (uint32_t)" << endl 
+       << " - nb_inst_retire_rob        [nb_ooo_engine] (uint32_t)" << endl 
+       << "" << endl;
+
+  for (int i=0; i<argc; i++)
+    cerr << argv[i] << " ";
+  cerr << 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 (argc, argv);
+
+  const string   name      = argv[1];
+//const uint32_t size_data = atoi(argv[2]);
+//const uint32_t nb_port   = atoi(argv[3]);
+  uint32_t    _nb_ooo_engine             = atoi(argv[ 2]);
+  uint32_t    _size_general_data         = atoi(argv[ 3]);
+  uint32_t    _size_special_data         = atoi(argv[ 4]);
+  uint32_t    _nb_gpr_read               = atoi(argv[ 5]);
+  uint32_t    _nb_gpr_write              = atoi(argv[ 6]);
+  uint32_t    _nb_gpr_bank               = atoi(argv[ 7]);
+  uint32_t    _nb_gpr_port_read_by_bank  = atoi(argv[ 8]);
+  uint32_t    _nb_gpr_port_write_by_bank = atoi(argv[ 9]);
+  uint32_t    _nb_spr_read               = atoi(argv[10]);
+  uint32_t    _nb_spr_write              = atoi(argv[11]);
+  uint32_t    _nb_spr_bank               = atoi(argv[12]);
+  uint32_t    _nb_spr_port_read_by_bank  = atoi(argv[13]);
+  uint32_t    _nb_spr_port_write_by_bank = atoi(argv[14]);
+  
+  if (argc != 2+NB_PARAMS+static_cast<int>(4*_nb_ooo_engine))
+    usage (argc, argv);
+  
+  uint32_t  * _nb_general_register       = new uint32_t [_nb_ooo_engine];
+  uint32_t  * _nb_special_register       = new uint32_t [_nb_ooo_engine];
+  uint32_t  * _nb_inst_insert_rob        = new uint32_t [_nb_ooo_engine];
+  uint32_t  * _nb_inst_retire_rob        = new uint32_t [_nb_ooo_engine];
+
+  uint32_t    x = 15;
+
+  for (uint32_t i=0; i<_nb_ooo_engine; i++)
+    _nb_general_register [i] = atoi(argv[x++]);
+  for (uint32_t i=0; i<_nb_ooo_engine; i++)
+    _nb_special_register [i] = atoi(argv[x++]);
+  for (uint32_t i=0; i<_nb_ooo_engine; i++)
+    _nb_inst_insert_rob  [i] = atoi(argv[x++]);
+  for (uint32_t i=0; i<_nb_ooo_engine; i++)
+    _nb_inst_retire_rob  [i] = atoi(argv[x++]);
+  
+  try 
+    {
+      morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::Parameters * param = new morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::Parameters
+	(_nb_ooo_engine             ,
+	 _size_general_data         ,
+	 _size_special_data         ,
+	 _nb_gpr_read               ,
+	 _nb_gpr_write              ,
+	 _nb_gpr_bank               ,
+	 _nb_gpr_port_read_by_bank  ,
+	 _nb_gpr_port_write_by_bank ,
+	 _nb_spr_read               ,
+	 _nb_spr_write              ,
+	 _nb_spr_bank               ,
+	 _nb_spr_port_read_by_bank  ,
+	 _nb_spr_port_write_by_bank ,
+	 _nb_general_register       ,
+	 _nb_special_register       ,
+	 _nb_inst_insert_rob        ,
+	 _nb_inst_retire_rob        );
+      
+      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/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/src/test.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/src/test.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/src/test.cpp	(revision 60)
@@ -0,0 +1,416 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ * Test
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/SelfTest/include/test.h"
+#include "Common/include/Test.h"
+
+#define NB_ITERATION  1
+#define CYCLE_MAX     (128*NB_ITERATION)
+
+#define LABEL(str)                                                                       \
+{                                                                                        \
+  cout << "{"+toString(static_cast<uint32_t>(sc_simulation_time()))+"} " << str << endl; \
+} while(0)
+
+static uint32_t cycle = 0;
+
+#define SC_START(cycle_offset)                                          \
+do                                                                      \
+{                                                                       \
+/*cout << "SC_START (begin)" << endl;*/                                 \
+                                                                        \
+  uint32_t cycle_current = static_cast<uint32_t>(sc_simulation_time()); \
+  if (cycle_current != cycle)                                           \
+    {                                                                   \
+      cycle = cycle_current;                                            \
+      cout << "##########[ cycle "<< cycle << " ]" << endl;             \
+    }                                                                   \
+                                                                        \
+  if (cycle_current > CYCLE_MAX)                                        \
+    {                                                                   \
+      TEST_KO("Maximal cycles Reached");                                \
+    }                                                                   \
+  sc_start(cycle_offset);                                               \
+/*cout << "SC_START (end  )" << endl;*/                                 \
+} while(0)
+
+void test (string name,
+	   morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::Parameters * _param)
+{
+  cout << "<" << name << "> : Simulation SystemC" << endl;
+
+#ifdef STATISTICS
+  morpheo::behavioural::Parameters_Statistics * _parameters_statistics = new morpheo::behavioural::Parameters_Statistics (5,50);
+#endif
+
+  Register_unit * _Register_unit = new Register_unit (name.c_str(),
+#ifdef STATISTICS
+					     _parameters_statistics,
+#endif
+					     _param);
+  
+#ifdef SYSTEMC
+  /*********************************************************************
+   * Déclarations des signaux
+   *********************************************************************/
+  sc_clock                               * in_CLOCK;
+  sc_signal<Tcontrol_t>                  * in_NRESET;
+
+    // ~~~~~[ Interface "gpr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  sc_signal<Tcontrol_t        >   **  in_GPR_READ_VAL                 ;
+  sc_signal<Tcontrol_t        >   ** out_GPR_READ_ACK                 ;
+  sc_signal<Tcontext_t        >   **  in_GPR_READ_OOO_ENGINE_ID       ;
+  sc_signal<Tgeneral_address_t>   **  in_GPR_READ_NUM_REG             ;
+  sc_signal<Tgeneral_data_t   >   ** out_GPR_READ_DATA                ;
+  sc_signal<Tcontrol_t        >   ** out_GPR_READ_DATA_VAL            ;
+
+    // ~~~~~[ Interface "gpr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  sc_signal<Tcontrol_t        >   **  in_GPR_WRITE_VAL                ;
+  sc_signal<Tcontrol_t        >   ** out_GPR_WRITE_ACK                ;
+  sc_signal<Tcontext_t        >   **  in_GPR_WRITE_OOO_ENGINE_ID      ;
+  sc_signal<Tgeneral_address_t>   **  in_GPR_WRITE_NUM_REG            ;
+  sc_signal<Tgeneral_data_t   >   **  in_GPR_WRITE_DATA               ;
+
+    // ~~~~~[ Interface "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  sc_signal<Tcontrol_t        >   **  in_SPR_READ_VAL                 ;
+  sc_signal<Tcontrol_t        >   ** out_SPR_READ_ACK                 ;
+  sc_signal<Tcontext_t        >   **  in_SPR_READ_OOO_ENGINE_ID       ;
+  sc_signal<Tspecial_address_t>   **  in_SPR_READ_NUM_REG             ;
+  sc_signal<Tspecial_data_t   >   ** out_SPR_READ_DATA                ;
+  sc_signal<Tcontrol_t        >   ** out_SPR_READ_DATA_VAL            ;
+
+    // ~~~~~[ Interface "spr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  sc_signal<Tcontrol_t        >   **  in_SPR_WRITE_VAL                ;
+  sc_signal<Tcontrol_t        >   ** out_SPR_WRITE_ACK                ;
+  sc_signal<Tcontext_t        >   **  in_SPR_WRITE_OOO_ENGINE_ID      ;
+  sc_signal<Tspecial_address_t>   **  in_SPR_WRITE_NUM_REG            ;
+  sc_signal<Tspecial_data_t   >   **  in_SPR_WRITE_DATA               ;
+    
+    // ~~~~~[ Interface "insert_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  sc_signal<Tcontrol_t        >  ***  in_INSERT_ROB_VAL               ;
+  sc_signal<Tcontrol_t        >  *** out_INSERT_ROB_ACK               ;
+  sc_signal<Tcontrol_t        >  ***  in_INSERT_ROB_RD_USE            ;
+  sc_signal<Tgeneral_address_t>  ***  in_INSERT_ROB_RD_NUM_REG        ; // use=1 : status[num_reg]<- 0
+  sc_signal<Tcontrol_t        >  ***  in_INSERT_ROB_RE_USE            ;
+  sc_signal<Tspecial_address_t>  ***  in_INSERT_ROB_RE_NUM_REG        ;
+
+    // ~~~~~[ Interface "retire_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  sc_signal<Tcontrol_t        >  ***  in_RETIRE_ROB_VAL               ;
+  sc_signal<Tcontrol_t        >  *** out_RETIRE_ROB_ACK               ;
+  sc_signal<Tcontrol_t        >  ***  in_RETIRE_ROB_RD_OLD_USE        ; 
+  sc_signal<Tgeneral_address_t>  ***  in_RETIRE_ROB_RD_OLD_NUM_REG    ; // old_use=1 : status[old_num_reg]<- 0
+  sc_signal<Tcontrol_t        >  ***  in_RETIRE_ROB_RD_NEW_USE        ;
+  sc_signal<Tgeneral_address_t>  ***  in_RETIRE_ROB_RD_NEW_NUM_REG    ; // new_use=1 : status[new_num_reg]<- 1
+  sc_signal<Tcontrol_t        >  ***  in_RETIRE_ROB_RE_OLD_USE        ; 
+  sc_signal<Tspecial_address_t>  ***  in_RETIRE_ROB_RE_OLD_NUM_REG    ;
+  sc_signal<Tcontrol_t        >  ***  in_RETIRE_ROB_RE_NEW_USE        ;
+  sc_signal<Tspecial_address_t>  ***  in_RETIRE_ROB_RE_NEW_NUM_REG    ;
+
+  string rename;
+
+  in_CLOCK                                = new sc_clock ("clock", 1.0, 0.5);
+  in_NRESET                               = new sc_signal<Tcontrol_t> ("NRESET");
+
+
+    // ~~~~~[ Interface "gpr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      in_GPR_READ_VAL                 = new sc_signal<Tcontrol_t        > * [_param->_nb_gpr_read];
+     out_GPR_READ_ACK                 = new sc_signal<Tcontrol_t        > * [_param->_nb_gpr_read];
+      in_GPR_READ_OOO_ENGINE_ID       = new sc_signal<Tcontext_t        > * [_param->_nb_gpr_read];
+      in_GPR_READ_NUM_REG             = new sc_signal<Tgeneral_address_t> * [_param->_nb_gpr_read];
+     out_GPR_READ_DATA                = new sc_signal<Tgeneral_data_t   > * [_param->_nb_gpr_read];
+     out_GPR_READ_DATA_VAL            = new sc_signal<Tcontrol_t        > * [_param->_nb_gpr_read];
+     
+     for (uint32_t i=0; i<_param->_nb_gpr_read; i++)
+       {
+	  in_GPR_READ_VAL           [i]= new sc_signal<Tcontrol_t        > (rename.c_str());
+	 out_GPR_READ_ACK           [i]= new sc_signal<Tcontrol_t        > (rename.c_str());
+	  in_GPR_READ_OOO_ENGINE_ID [i]= new sc_signal<Tcontext_t        > (rename.c_str());
+	  in_GPR_READ_NUM_REG       [i]= new sc_signal<Tgeneral_address_t> (rename.c_str());
+	 out_GPR_READ_DATA          [i]= new sc_signal<Tgeneral_data_t   > (rename.c_str());
+	 out_GPR_READ_DATA_VAL      [i]= new sc_signal<Tcontrol_t        > (rename.c_str());
+       }
+
+    // ~~~~~[ Interface "gpr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      in_GPR_WRITE_VAL                 = new sc_signal<Tcontrol_t        > * [_param->_nb_gpr_write];
+     out_GPR_WRITE_ACK                 = new sc_signal<Tcontrol_t        > * [_param->_nb_gpr_write];
+      in_GPR_WRITE_OOO_ENGINE_ID       = new sc_signal<Tcontext_t        > * [_param->_nb_gpr_write];
+      in_GPR_WRITE_NUM_REG             = new sc_signal<Tgeneral_address_t> * [_param->_nb_gpr_write];
+      in_GPR_WRITE_DATA                = new sc_signal<Tgeneral_data_t   > * [_param->_nb_gpr_write];
+     
+     for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
+       {
+	  in_GPR_WRITE_VAL           [i]= new sc_signal<Tcontrol_t        > (rename.c_str());
+	 out_GPR_WRITE_ACK           [i]= new sc_signal<Tcontrol_t        > (rename.c_str());
+	  in_GPR_WRITE_OOO_ENGINE_ID [i]= new sc_signal<Tcontext_t        > (rename.c_str());
+	  in_GPR_WRITE_NUM_REG       [i]= new sc_signal<Tgeneral_address_t> (rename.c_str());
+	  in_GPR_WRITE_DATA          [i]= new sc_signal<Tgeneral_data_t   > (rename.c_str());
+       }
+
+    // ~~~~~[ Interface "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      in_SPR_READ_VAL                 = new sc_signal<Tcontrol_t        > * [_param->_nb_spr_read];
+     out_SPR_READ_ACK                 = new sc_signal<Tcontrol_t        > * [_param->_nb_spr_read];
+      in_SPR_READ_OOO_ENGINE_ID       = new sc_signal<Tcontext_t        > * [_param->_nb_spr_read];
+      in_SPR_READ_NUM_REG             = new sc_signal<Tspecial_address_t> * [_param->_nb_spr_read];
+     out_SPR_READ_DATA                = new sc_signal<Tspecial_data_t   > * [_param->_nb_spr_read];
+     out_SPR_READ_DATA_VAL            = new sc_signal<Tcontrol_t        > * [_param->_nb_spr_read];
+     
+     for (uint32_t i=0; i<_param->_nb_spr_read; i++)
+       {
+          in_SPR_READ_VAL           [i]= new sc_signal<Tcontrol_t        > (rename.c_str());
+	 out_SPR_READ_ACK           [i]= new sc_signal<Tcontrol_t        > (rename.c_str());
+	  in_SPR_READ_OOO_ENGINE_ID [i]= new sc_signal<Tcontext_t        > (rename.c_str());
+	  in_SPR_READ_NUM_REG       [i]= new sc_signal<Tspecial_address_t> (rename.c_str());
+	 out_SPR_READ_DATA          [i]= new sc_signal<Tspecial_data_t   > (rename.c_str());
+	 out_SPR_READ_DATA_VAL      [i]= new sc_signal<Tcontrol_t        > (rename.c_str());
+       }
+
+    // ~~~~~[ Interface "spr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      in_SPR_WRITE_VAL                 = new sc_signal<Tcontrol_t        > * [_param->_nb_spr_write];
+     out_SPR_WRITE_ACK                 = new sc_signal<Tcontrol_t        > * [_param->_nb_spr_write];
+      in_SPR_WRITE_OOO_ENGINE_ID       = new sc_signal<Tcontext_t        > * [_param->_nb_spr_write];
+      in_SPR_WRITE_NUM_REG             = new sc_signal<Tspecial_address_t> * [_param->_nb_spr_write];
+      in_SPR_WRITE_DATA                = new sc_signal<Tspecial_data_t   > * [_param->_nb_spr_write];
+     
+     for (uint32_t i=0; i<_param->_nb_spr_write; i++)
+       {
+          in_SPR_WRITE_VAL           [i]= new sc_signal<Tcontrol_t        > (rename.c_str());
+         out_SPR_WRITE_ACK           [i]= new sc_signal<Tcontrol_t        > (rename.c_str());
+	  in_SPR_WRITE_OOO_ENGINE_ID [i]= new sc_signal<Tcontext_t        > (rename.c_str());
+	  in_SPR_WRITE_NUM_REG       [i]= new sc_signal<Tspecial_address_t> (rename.c_str());
+	  in_SPR_WRITE_DATA          [i]= new sc_signal<Tspecial_data_t   > (rename.c_str());
+       }
+
+    // ~~~~~[ Interface "insert_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      in_INSERT_ROB_VAL        = new sc_signal<Tcontrol_t        > ** [_param->_nb_ooo_engine];
+     out_INSERT_ROB_ACK        = new sc_signal<Tcontrol_t        > ** [_param->_nb_ooo_engine];
+      in_INSERT_ROB_RD_USE     = new sc_signal<Tcontrol_t        > ** [_param->_nb_ooo_engine];
+      in_INSERT_ROB_RD_NUM_REG = new sc_signal<Tgeneral_address_t> ** [_param->_nb_ooo_engine];
+      in_INSERT_ROB_RE_USE     = new sc_signal<Tcontrol_t        > ** [_param->_nb_ooo_engine];
+      in_INSERT_ROB_RE_NUM_REG = new sc_signal<Tspecial_address_t> ** [_param->_nb_ooo_engine];
+
+     for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+       {
+	 uint32_t x=_param->_nb_inst_insert_rob [i];
+
+	  in_INSERT_ROB_VAL        [i] = new sc_signal<Tcontrol_t        > * [x];
+	 out_INSERT_ROB_ACK        [i] = new sc_signal<Tcontrol_t        > * [x];
+	  in_INSERT_ROB_RD_USE     [i] = new sc_signal<Tcontrol_t        > * [x];
+	  in_INSERT_ROB_RD_NUM_REG [i] = new sc_signal<Tgeneral_address_t> * [x];
+	  in_INSERT_ROB_RE_USE     [i] = new sc_signal<Tcontrol_t        > * [x];
+	  in_INSERT_ROB_RE_NUM_REG [i] = new sc_signal<Tspecial_address_t> * [x];
+
+	 for (uint32_t j=0; j<x; j++)
+	   {
+	      in_INSERT_ROB_VAL        [i][j] = new sc_signal<Tcontrol_t        > (rename.c_str());
+	     out_INSERT_ROB_ACK        [i][j] = new sc_signal<Tcontrol_t        > (rename.c_str());
+	      in_INSERT_ROB_RD_USE     [i][j] = new sc_signal<Tcontrol_t        > (rename.c_str());
+	      in_INSERT_ROB_RD_NUM_REG [i][j] = new sc_signal<Tgeneral_address_t> (rename.c_str());
+	      in_INSERT_ROB_RE_USE     [i][j] = new sc_signal<Tcontrol_t        > (rename.c_str());
+	      in_INSERT_ROB_RE_NUM_REG [i][j] = new sc_signal<Tspecial_address_t> (rename.c_str());
+	     
+	   }
+       }
+
+    // ~~~~~[ Interface "retire_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+      in_RETIRE_ROB_VAL            = new sc_signal<Tcontrol_t        > ** [_param->_nb_ooo_engine];
+     out_RETIRE_ROB_ACK            = new sc_signal<Tcontrol_t        > ** [_param->_nb_ooo_engine];
+      in_RETIRE_ROB_RD_OLD_USE     = new sc_signal<Tcontrol_t        > ** [_param->_nb_ooo_engine];
+      in_RETIRE_ROB_RD_OLD_NUM_REG = new sc_signal<Tgeneral_address_t> ** [_param->_nb_ooo_engine];
+      in_RETIRE_ROB_RE_OLD_USE     = new sc_signal<Tcontrol_t        > ** [_param->_nb_ooo_engine];
+      in_RETIRE_ROB_RE_OLD_NUM_REG = new sc_signal<Tspecial_address_t> ** [_param->_nb_ooo_engine];
+      in_RETIRE_ROB_RD_NEW_USE     = new sc_signal<Tcontrol_t        > ** [_param->_nb_ooo_engine];
+      in_RETIRE_ROB_RD_NEW_NUM_REG = new sc_signal<Tgeneral_address_t> ** [_param->_nb_ooo_engine];
+      in_RETIRE_ROB_RE_NEW_USE     = new sc_signal<Tcontrol_t        > ** [_param->_nb_ooo_engine];
+      in_RETIRE_ROB_RE_NEW_NUM_REG = new sc_signal<Tspecial_address_t> ** [_param->_nb_ooo_engine];
+
+     for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+       {
+	 uint32_t x=_param->_nb_inst_retire_rob [i];
+
+	  in_RETIRE_ROB_VAL            [i] = new sc_signal<Tcontrol_t        > * [x];
+	 out_RETIRE_ROB_ACK            [i] = new sc_signal<Tcontrol_t        > * [x];
+	  in_RETIRE_ROB_RD_OLD_USE     [i] = new sc_signal<Tcontrol_t        > * [x];
+	  in_RETIRE_ROB_RD_OLD_NUM_REG [i] = new sc_signal<Tgeneral_address_t> * [x];
+	  in_RETIRE_ROB_RE_OLD_USE     [i] = new sc_signal<Tcontrol_t        > * [x];
+	  in_RETIRE_ROB_RE_OLD_NUM_REG [i] = new sc_signal<Tspecial_address_t> * [x];
+	  in_RETIRE_ROB_RD_NEW_USE     [i] = new sc_signal<Tcontrol_t        > * [x];
+	  in_RETIRE_ROB_RD_NEW_NUM_REG [i] = new sc_signal<Tgeneral_address_t> * [x];
+	  in_RETIRE_ROB_RE_NEW_USE     [i] = new sc_signal<Tcontrol_t        > * [x];
+	  in_RETIRE_ROB_RE_NEW_NUM_REG [i] = new sc_signal<Tspecial_address_t> * [x];
+
+	 for (uint32_t j=0; j<x; j++)
+	   {
+	      in_RETIRE_ROB_VAL            [i][j] = new sc_signal<Tcontrol_t        > (rename.c_str());
+	     out_RETIRE_ROB_ACK            [i][j] = new sc_signal<Tcontrol_t        > (rename.c_str());
+	      in_RETIRE_ROB_RD_OLD_USE     [i][j] = new sc_signal<Tcontrol_t        > (rename.c_str());
+	      in_RETIRE_ROB_RD_OLD_NUM_REG [i][j] = new sc_signal<Tgeneral_address_t> (rename.c_str());
+	      in_RETIRE_ROB_RE_OLD_USE     [i][j] = new sc_signal<Tcontrol_t        > (rename.c_str());
+	      in_RETIRE_ROB_RE_OLD_NUM_REG [i][j] = new sc_signal<Tspecial_address_t> (rename.c_str());
+	      in_RETIRE_ROB_RD_NEW_USE     [i][j] = new sc_signal<Tcontrol_t        > (rename.c_str());
+	      in_RETIRE_ROB_RD_NEW_NUM_REG [i][j] = new sc_signal<Tgeneral_address_t> (rename.c_str());
+	      in_RETIRE_ROB_RE_NEW_USE     [i][j] = new sc_signal<Tcontrol_t        > (rename.c_str());
+	      in_RETIRE_ROB_RE_NEW_NUM_REG [i][j] = new sc_signal<Tspecial_address_t> (rename.c_str());
+	   }
+       }
+
+  
+  /********************************************************
+   * Instanciation
+   ********************************************************/
+  
+  cout << "<" << name << "> Instanciation of _Register_unit" << endl;
+  
+  (*(_Register_unit->in_CLOCK))        (*(in_CLOCK));
+  (*(_Register_unit->in_NRESET))       (*(in_NRESET));
+  
+  for (uint32_t i=0; i<_param->_nb_gpr_read; i++)
+    {
+      (*(_Register_unit-> in_GPR_READ_VAL           [i]))(*( in_GPR_READ_VAL           [i]));
+      (*(_Register_unit->out_GPR_READ_ACK           [i]))(*(out_GPR_READ_ACK           [i]));
+      if (_param->_have_port_ooo_engine_id == true)
+	(*(_Register_unit-> in_GPR_READ_OOO_ENGINE_ID [i]))(*( in_GPR_READ_OOO_ENGINE_ID [i]));
+      (*(_Register_unit-> in_GPR_READ_NUM_REG       [i]))(*( in_GPR_READ_NUM_REG       [i]));
+      (*(_Register_unit->out_GPR_READ_DATA          [i]))(*(out_GPR_READ_DATA          [i]));
+      (*(_Register_unit->out_GPR_READ_DATA_VAL      [i]))(*(out_GPR_READ_DATA_VAL      [i]));
+    }
+  for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
+    {
+      (*(_Register_unit-> in_GPR_WRITE_VAL           [i]))(*( in_GPR_WRITE_VAL           [i]));
+      (*(_Register_unit->out_GPR_WRITE_ACK           [i]))(*(out_GPR_WRITE_ACK           [i]));
+      if (_param->_have_port_ooo_engine_id == true)
+	(*(_Register_unit-> in_GPR_WRITE_OOO_ENGINE_ID [i]))(*( in_GPR_WRITE_OOO_ENGINE_ID [i]));
+      (*(_Register_unit-> in_GPR_WRITE_NUM_REG       [i]))(*( in_GPR_WRITE_NUM_REG       [i]));
+      (*(_Register_unit-> in_GPR_WRITE_DATA          [i]))(*( in_GPR_WRITE_DATA          [i]));
+    }
+  for (uint32_t i=0; i<_param->_nb_spr_read; i++)
+    {
+      (*(_Register_unit-> in_SPR_READ_VAL           [i]))(*( in_SPR_READ_VAL           [i]));
+      (*(_Register_unit->out_SPR_READ_ACK           [i]))(*(out_SPR_READ_ACK           [i]));
+      if (_param->_have_port_ooo_engine_id == true)
+	(*(_Register_unit-> in_SPR_READ_OOO_ENGINE_ID [i]))(*( in_SPR_READ_OOO_ENGINE_ID [i]));
+      (*(_Register_unit-> in_SPR_READ_NUM_REG       [i]))(*( in_SPR_READ_NUM_REG       [i]));
+      (*(_Register_unit->out_SPR_READ_DATA          [i]))(*(out_SPR_READ_DATA          [i]));
+      (*(_Register_unit->out_SPR_READ_DATA_VAL      [i]))(*(out_SPR_READ_DATA_VAL      [i]));
+    }
+  for (uint32_t i=0; i<_param->_nb_spr_write; i++)
+    {
+      (*(_Register_unit-> in_SPR_WRITE_VAL           [i]))(*( in_SPR_WRITE_VAL           [i]));
+      (*(_Register_unit->out_SPR_WRITE_ACK           [i]))(*(out_SPR_WRITE_ACK           [i]));
+      if (_param->_have_port_ooo_engine_id == true)
+	(*(_Register_unit-> in_SPR_WRITE_OOO_ENGINE_ID [i]))(*( in_SPR_WRITE_OOO_ENGINE_ID [i]));
+      (*(_Register_unit-> in_SPR_WRITE_NUM_REG       [i]))(*( in_SPR_WRITE_NUM_REG       [i]));
+      (*(_Register_unit-> in_SPR_WRITE_DATA          [i]))(*( in_SPR_WRITE_DATA          [i]));
+    }
+  for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+    for (uint32_t j=0; j<_param->_nb_inst_insert_rob [i]; j++)
+      {
+	(*(_Register_unit-> in_INSERT_ROB_VAL        [i][j]))(*( in_INSERT_ROB_VAL        [i][j]));
+	(*(_Register_unit->out_INSERT_ROB_ACK        [i][j]))(*(out_INSERT_ROB_ACK        [i][j]));
+	(*(_Register_unit-> in_INSERT_ROB_RD_USE     [i][j]))(*( in_INSERT_ROB_RD_USE     [i][j]));
+	(*(_Register_unit-> in_INSERT_ROB_RD_NUM_REG [i][j]))(*( in_INSERT_ROB_RD_NUM_REG [i][j]));
+	(*(_Register_unit-> in_INSERT_ROB_RE_USE     [i][j]))(*( in_INSERT_ROB_RE_USE     [i][j]));
+	(*(_Register_unit-> in_INSERT_ROB_RE_NUM_REG [i][j]))(*( in_INSERT_ROB_RE_NUM_REG [i][j]));
+      }
+  for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+    for (uint32_t j=0; j<_param->_nb_inst_retire_rob [i]; j++)
+      {
+	(*(_Register_unit-> in_RETIRE_ROB_VAL            [i][j]))(*( in_RETIRE_ROB_VAL            [i][j]));
+	(*(_Register_unit->out_RETIRE_ROB_ACK            [i][j]))(*(out_RETIRE_ROB_ACK            [i][j]));
+	(*(_Register_unit-> in_RETIRE_ROB_RD_OLD_USE     [i][j]))(*( in_RETIRE_ROB_RD_OLD_USE     [i][j]));
+	(*(_Register_unit-> in_RETIRE_ROB_RD_OLD_NUM_REG [i][j]))(*( in_RETIRE_ROB_RD_OLD_NUM_REG [i][j]));
+	(*(_Register_unit-> in_RETIRE_ROB_RE_OLD_USE     [i][j]))(*( in_RETIRE_ROB_RE_OLD_USE     [i][j]));
+	(*(_Register_unit-> in_RETIRE_ROB_RE_OLD_NUM_REG [i][j]))(*( in_RETIRE_ROB_RE_OLD_NUM_REG [i][j]));
+	(*(_Register_unit-> in_RETIRE_ROB_RD_NEW_USE     [i][j]))(*( in_RETIRE_ROB_RD_NEW_USE     [i][j]));
+	(*(_Register_unit-> in_RETIRE_ROB_RD_NEW_NUM_REG [i][j]))(*( in_RETIRE_ROB_RD_NEW_NUM_REG [i][j]));
+	(*(_Register_unit-> in_RETIRE_ROB_RE_NEW_USE     [i][j]))(*( in_RETIRE_ROB_RE_NEW_USE     [i][j]));
+	(*(_Register_unit-> in_RETIRE_ROB_RE_NEW_NUM_REG [i][j]))(*( in_RETIRE_ROB_RE_NEW_NUM_REG [i][j]));
+      }
+  
+  cout << "<" << name << "> Start Simulation ............" << endl;
+  Time * _time = new Time();
+
+  /********************************************************
+   * Simulation - Begin
+   ********************************************************/
+
+  // Initialisation
+
+  const uint32_t seed = 0;
+//const uint32_t seed = static_cast<uint32_t>(time(NULL));
+
+  srand(seed);
+
+  SC_START(0);
+
+  LABEL("Initialisation");
+
+  LABEL("Loop of Test");
+
+  for (uint32_t iteration=0; iteration<NB_ITERATION; iteration ++)
+    {
+      LABEL("Iteration "+toString(iteration));
+
+      SC_START(1);
+    }
+
+  /********************************************************
+   * Simulation - End
+   ********************************************************/
+
+  TEST_OK ("End of Simulation");
+  delete _time;
+  cout << "<" << name << "> ............ Stop Simulation" << endl;
+
+  delete in_CLOCK;
+  delete in_NRESET;
+
+  delete []  in_GPR_READ_VAL                 ;
+  delete [] out_GPR_READ_ACK                 ;
+  delete []  in_GPR_READ_OOO_ENGINE_ID       ;
+  delete []  in_GPR_READ_NUM_REG             ;
+  delete [] out_GPR_READ_DATA                ;
+  delete [] out_GPR_READ_DATA_VAL            ;
+  delete []  in_GPR_WRITE_VAL                ;
+  delete [] out_GPR_WRITE_ACK                ;
+  delete []  in_GPR_WRITE_OOO_ENGINE_ID      ;
+  delete []  in_GPR_WRITE_NUM_REG            ;
+  delete []  in_GPR_WRITE_DATA               ;
+  delete []  in_SPR_READ_VAL                 ;
+  delete [] out_SPR_READ_ACK                 ;
+  delete []  in_SPR_READ_OOO_ENGINE_ID       ;
+  delete []  in_SPR_READ_NUM_REG             ;
+  delete [] out_SPR_READ_DATA                ;
+  delete [] out_SPR_READ_DATA_VAL            ;
+  delete []  in_SPR_WRITE_VAL                ;
+  delete [] out_SPR_WRITE_ACK                ;
+  delete []  in_SPR_WRITE_OOO_ENGINE_ID      ;
+  delete []  in_SPR_WRITE_NUM_REG            ;
+  delete []  in_SPR_WRITE_DATA               ;
+  delete []  in_INSERT_ROB_VAL               ;
+  delete [] out_INSERT_ROB_ACK               ;
+  delete []  in_INSERT_ROB_RD_USE            ;
+  delete []  in_INSERT_ROB_RD_NUM_REG        ;
+  delete []  in_INSERT_ROB_RE_USE            ;
+  delete []  in_INSERT_ROB_RE_NUM_REG        ;
+  delete []  in_RETIRE_ROB_VAL               ;
+  delete [] out_RETIRE_ROB_ACK               ;
+  delete []  in_RETIRE_ROB_RD_OLD_USE        ;
+  delete []  in_RETIRE_ROB_RD_OLD_NUM_REG    ;
+  delete []  in_RETIRE_ROB_RD_NEW_USE        ;
+  delete []  in_RETIRE_ROB_RD_NEW_NUM_REG    ;
+  delete []  in_RETIRE_ROB_RE_OLD_USE        ; 
+  delete []  in_RETIRE_ROB_RE_OLD_NUM_REG    ;
+  delete []  in_RETIRE_ROB_RE_NEW_USE        ;
+  delete []  in_RETIRE_ROB_RE_NEW_NUM_REG    ;
+#endif
+
+  delete _Register_unit;
+#ifdef STATISTICS
+  delete _parameters_statistics;
+#endif
+}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/VERSION
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/VERSION	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/VERSION	(revision 60)
@@ -0,0 +1,4 @@
+v0.6
+
+0.5 modif vhdl_port et vhdl_testbench_port -> ajout d'une macro
+0.6 ajout de la documentation
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/Makefile
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/Makefile	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/Makefile	(revision 60)
@@ -0,0 +1,19 @@
+# 
+# $Id$
+# 
+# [ Description ]
+# 
+# Makefile
+# 
+
+#-----[ Directory ]----------------------------------------
+DIR_COMPONENT			= ../
+include				$(DIR_COMPONENT)/Makefile.defs
+
+#-----[ include ]------------------------------------------
+
+all				:
+				$(MAKE) all_documentation
+
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Common
+include				$(DIR_MORPHEO)/Behavioural/Makefile.Documentation
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/Register_unit.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/Register_unit.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/Register_unit.tex	(revision 60)
@@ -0,0 +1,38 @@
+\documentclass[10pt,a4paper,twocolumn]{article}
+
+\def\dirdoc{tex}
+\def\dirschema{eps}
+
+% Package de variables d'environnement : Titre, command etc ...
+\usepackage{../../../../../../Behavioural/doc/sty/doc-style}
+\usepackage{sty/header}
+
+
+%------------------------------------------------------------------------------
+% Début document
+%------------------------------------------------------------------------------
+
+\pagestyle{empty}
+
+\begin{document}
+
+% Créez une page de titre
+\maketitle
+\thispagestyle{empty}
+
+%Table des matières et des figures
+%\tableofcontents
+%\newpage
+%\listoffigures
+
+%------------------------------------------------------------------------------
+% Ajout du corps du documents
+%------------------------------------------------------------------------------
+
+\input{tex/root}
+
+%------------------------------------------------------------------------------
+% Fin d'ajout du corps du document
+%------------------------------------------------------------------------------
+
+\end{document}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/sty/header.sty
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/sty/header.sty	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/sty/header.sty	(revision 60)
@@ -0,0 +1,12 @@
+\def\review{YYYY/MM/DD}
+%\def\review{\number\day/\number\month/\number\year\xspace}
+
+\title{Register_unit}
+ 
+\author{}
+
+\affiliation{}
+
+\email{}
+
+\date{\review}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/01_introduction.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/01_introduction.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/01_introduction.tex	(revision 60)
@@ -0,0 +1,1 @@
+\Section{Introduction}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/02_features.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/02_features.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/02_features.tex	(revision 60)
@@ -0,0 +1,1 @@
+\Section{Features}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/03_description.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/03_description.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/03_description.tex	(revision 60)
@@ -0,0 +1,1 @@
+\Section{Functional Description}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/04_pinout.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/04_pinout.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/04_pinout.tex	(revision 60)
@@ -0,0 +1,1 @@
+\Section{Pin out}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/05_parameters.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/05_parameters.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/05_parameters.tex	(revision 60)
@@ -0,0 +1,1 @@
+\Section{Parameters}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/06_performance.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/06_performance.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/06_performance.tex	(revision 60)
@@ -0,0 +1,1 @@
+\Section{Performance}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/07_details.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/07_details.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/07_details.tex	(revision 60)
@@ -0,0 +1,1 @@
+\Section{Details}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/08_history.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/08_history.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/08_history.tex	(revision 60)
@@ -0,0 +1,10 @@
+\Section{Revision History}
+
+\begin{tabular}{|c|c|c|}
+\hline
+Revision Date & By  & Modifications\\
+\hline
+\hline
+yyyy/mm/dd    & xxx & Initial document \\
+\hline
+\end{tabular}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/root.tex
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/root.tex	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/doc/tex/root.tex	(revision 60)
@@ -0,0 +1,8 @@
+\input{\dirdoc/01_introduction}
+\input{\dirdoc/02_features}
+\input{\dirdoc/03_description}
+\input{\dirdoc/04_pinout}
+\input{\dirdoc/05_parameters}
+\input{\dirdoc/06_performance}
+\input{\dirdoc/07_details}
+\input{\dirdoc/08_history}
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Parameters.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Parameters.h	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Parameters.h	(revision 60)
@@ -0,0 +1,96 @@
+#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_register_unit_Parameters_h
+#define morpheo_behavioural_core_multi_execute_loop_execute_loop_register_unit_Parameters_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Common/include/Debug.h"
+#include "Behavioural/include/Parameters.h"
+#include "Behavioural/Generic/RegisterFile/include/Parameters.h"
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Parameters.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+  class Parameters : public morpheo::behavioural::Parameters
+  {
+    //-----[ fields ]------------------------------------------------------------
+  public : const uint32_t    _nb_ooo_engine            ;
+  public : const uint32_t    _size_general_data        ;
+  public : const uint32_t    _size_special_data        ;
+  public : const uint32_t    _nb_gpr_read              ;
+  public : const uint32_t    _nb_gpr_write             ;
+  public : const uint32_t    _nb_gpr_bank              ;
+  public : const uint32_t    _nb_gpr_port_read_by_bank ;
+  public : const uint32_t    _nb_gpr_port_write_by_bank;
+  public : const uint32_t    _nb_spr_read              ;
+  public : const uint32_t    _nb_spr_write             ;
+  public : const uint32_t    _nb_spr_bank              ;
+  public : const uint32_t    _nb_spr_port_read_by_bank ;
+  public : const uint32_t    _nb_spr_port_write_by_bank;
+  public : const uint32_t  * _nb_general_register      ;
+  public : const uint32_t  * _nb_special_register      ;
+  public : const uint32_t  * _nb_inst_insert_rob       ;
+  public : const uint32_t  * _nb_inst_retire_rob       ;
+
+  public : const bool        _have_port_ooo_engine_id  ;
+  public :       uint32_t    _size_gpr_address         ;
+  public :       uint32_t    _size_spr_address         ;
+
+  public : morpheo::behavioural::generic::registerfile::Parameters                                                     ** _param_gpr        ;
+  public : morpheo::behavioural::generic::registerfile::Parameters                                                     ** _param_gpr_status ;
+  public : morpheo::behavioural::generic::registerfile::Parameters                                                     ** _param_spr        ;
+  public : morpheo::behavioural::generic::registerfile::Parameters                                                     ** _param_spr_status ;
+  public : morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters                          ** __param_gpr       ;
+  public : morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters                          ** __param_gpr_status;
+  public : morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters                          ** __param_spr       ;
+  public : morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters                          ** __param_spr_status;
+  public : morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Parameters  * _param_glue       ;
+
+    //-----[ methods ]-----------------------------------------------------------
+  public : Parameters  (uint32_t    nb_ooo_engine            ,
+			uint32_t    size_general_data        ,
+			uint32_t    size_special_data        ,
+			uint32_t    nb_gpr_read              ,
+			uint32_t    nb_gpr_write             ,
+			uint32_t    nb_gpr_bank              ,
+			uint32_t    nb_gpr_port_read_by_bank ,
+			uint32_t    nb_gpr_port_write_by_bank,
+			uint32_t    nb_spr_read              ,
+			uint32_t    nb_spr_write             ,
+			uint32_t    nb_spr_bank              ,
+			uint32_t    nb_spr_port_read_by_bank ,
+			uint32_t    nb_spr_port_write_by_bank,
+			uint32_t  * nb_general_register      ,
+			uint32_t  * nb_special_register      ,
+			uint32_t  * nb_inst_insert_rob       ,
+			uint32_t  * nb_inst_retire_rob       );
+
+  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::core::multi_execute_loop::execute_loop::register_unit::Parameters & x);
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h	(revision 60)
@@ -0,0 +1,186 @@
+#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_register_unit_Register_unit_h
+#define morpheo_behavioural_core_multi_execute_loop_execute_loop_register_unit_Register_unit_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#ifdef SYSTEMC
+#include "systemc.h"
+#endif
+
+#include <iostream>
+#include "Common/include/ToString.h"
+#include "Common/include/Debug.h"
+#include "Behavioural/include/Types.h"
+
+// Internal Component 
+#include "Behavioural/Generic/RegisterFile/include/RegisterFile.h"
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/Register_unit_Glue/include/Register_unit_Glue.h"
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Parameters.h"
+#ifdef STATISTICS
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Statistics.h"
+#endif
+#include "Behavioural/include/Component.h"
+#ifdef VHDL
+#include "Behavioural/include/Vhdl.h"
+#endif
+#include "Behavioural/include/Usage.h"
+
+using namespace std;
+
+namespace morpheo {
+namespace behavioural {
+
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+  class Register_unit 
+#if SYSTEMC
+    : public sc_module
+#endif
+  {
+    // -----[ fields ]----------------------------------------------------
+    // Parameters
+  protected : const string       _name;
+  protected : const Parameters * _param;
+  private   : const Tusage_t     _usage;
+
+#ifdef STATISTICS
+  protected : morpheo::behavioural::Parameters_Statistics * _param_statistics;
+#endif
+
+#ifdef STATISTICS
+  private   : Statistics                     * _stat;
+#endif
+
+  public    : Component                      * _component;
+  private   : Interfaces                     * _interfaces;
+
+#ifdef SYSTEMC
+    // ~~~~~[ Interface ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    // Interface
+  public    : SC_CLOCK                      *  in_CLOCK        ;
+  public    : SC_IN (Tcontrol_t)            *  in_NRESET       ;
+
+    // ~~~~~[ Interface "gpr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t        )   **  in_GPR_READ_VAL                 ;
+  public    : SC_OUT(Tcontrol_t        )   ** out_GPR_READ_ACK                 ;
+  public    : SC_IN (Tcontext_t        )   **  in_GPR_READ_OOO_ENGINE_ID       ;
+  public    : SC_IN (Tgeneral_address_t)   **  in_GPR_READ_NUM_REG             ;
+  public    : SC_OUT(Tgeneral_data_t   )   ** out_GPR_READ_DATA                ;
+  public    : SC_OUT(Tcontrol_t        )   ** out_GPR_READ_DATA_VAL            ;
+
+    // ~~~~~[ Interface "gpr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t        )   **  in_GPR_WRITE_VAL                ;
+  public    : SC_OUT(Tcontrol_t        )   ** out_GPR_WRITE_ACK                ;
+  public    : SC_IN (Tcontext_t        )   **  in_GPR_WRITE_OOO_ENGINE_ID      ;
+  public    : SC_IN (Tgeneral_address_t)   **  in_GPR_WRITE_NUM_REG            ;
+  public    : SC_IN (Tgeneral_data_t   )   **  in_GPR_WRITE_DATA               ;
+
+    // ~~~~~[ Interface "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t        )   **  in_SPR_READ_VAL                 ;
+  public    : SC_OUT(Tcontrol_t        )   ** out_SPR_READ_ACK                 ;
+  public    : SC_IN (Tcontext_t        )   **  in_SPR_READ_OOO_ENGINE_ID       ;
+  public    : SC_IN (Tspecial_address_t)   **  in_SPR_READ_NUM_REG             ;
+  public    : SC_OUT(Tspecial_data_t   )   ** out_SPR_READ_DATA                ;
+  public    : SC_OUT(Tcontrol_t        )   ** out_SPR_READ_DATA_VAL            ;
+
+    // ~~~~~[ Interface "spr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t        )   **  in_SPR_WRITE_VAL                ;
+  public    : SC_OUT(Tcontrol_t        )   ** out_SPR_WRITE_ACK                ;
+  public    : SC_IN (Tcontext_t        )   **  in_SPR_WRITE_OOO_ENGINE_ID      ;
+  public    : SC_IN (Tspecial_address_t)   **  in_SPR_WRITE_NUM_REG            ;
+  public    : SC_IN (Tspecial_data_t   )   **  in_SPR_WRITE_DATA               ;
+    
+    // ~~~~~[ Interface "insert_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_VAL               ;
+  public    : SC_OUT(Tcontrol_t        )  *** out_INSERT_ROB_ACK               ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_RD_USE            ;
+  public    : SC_IN (Tgeneral_address_t)  ***  in_INSERT_ROB_RD_NUM_REG        ; // use=1 : status[num_reg]<- 0
+  public    : SC_IN (Tcontrol_t        )  ***  in_INSERT_ROB_RE_USE            ;
+  public    : SC_IN (Tspecial_address_t)  ***  in_INSERT_ROB_RE_NUM_REG        ;
+
+    // ~~~~~[ Interface "retire_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_VAL               ;
+  public    : SC_OUT(Tcontrol_t        )  *** out_RETIRE_ROB_ACK               ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RD_OLD_USE        ; 
+  public    : SC_IN (Tgeneral_address_t)  ***  in_RETIRE_ROB_RD_OLD_NUM_REG    ; // old_use=1 : status[old_num_reg]<- 0
+  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RD_NEW_USE        ;
+  public    : SC_IN (Tgeneral_address_t)  ***  in_RETIRE_ROB_RD_NEW_NUM_REG    ; // new_use=1 : status[new_num_reg]<- 1
+  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RE_OLD_USE        ; 
+  public    : SC_IN (Tspecial_address_t)  ***  in_RETIRE_ROB_RE_OLD_NUM_REG    ;
+  public    : SC_IN (Tcontrol_t        )  ***  in_RETIRE_ROB_RE_NEW_USE        ;
+  public    : SC_IN (Tspecial_address_t)  ***  in_RETIRE_ROB_RE_NEW_NUM_REG    ;
+
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+  protected : morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile ** component_gpr       ;
+  protected : morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile ** component_gpr_status;
+  protected : morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile ** component_spr       ;
+  protected : morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile ** component_spr_status;
+  protected : morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Register_unit_Glue::Register_unit_Glue      * component_glue      ;
+
+    // ~~~~~[ Register ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    // ~~~~~[ Internal ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#endif
+
+    // -----[ methods ]---------------------------------------------------
+
+#ifdef SYSTEMC
+    SC_HAS_PROCESS (Register_unit);
+#endif
+  public  :          Register_unit              
+  (
+#ifdef SYSTEMC
+   sc_module_name                                name,
+#else					       
+   string                                        name,
+#endif					       
+#ifdef STATISTICS
+   morpheo::behavioural::Parameters_Statistics * param_statistics,
+#endif
+   Parameters                                  * param,
+   morpheo::behavioural::Tusage_t                usage=USE_ALL
+   );
+  public  :          ~Register_unit             (void);
+					       
+  private : void     allocation                (void);
+  private : void     deallocation              (void);
+					       
+#ifdef SYSTEMC				       
+//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+  public  : void     transition                (void);
+//#endif
+#endif					       
+#ifdef STATISTICS
+  public  : string   statistics                (uint32_t depth);
+#endif
+					       
+#if VHDL				       
+  public  : void     vhdl                      (void);
+  private : void     vhdl_declaration          (Vhdl * & vhdl);
+  private : void     vhdl_body                 (Vhdl * & vhdl);
+#endif					       
+					       
+#ifdef VHDL_TESTBENCH			       
+  private : void     vhdl_testbench_transition (void);
+#endif
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Statistics.h
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Statistics.h	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Statistics.h	(revision 60)
@@ -0,0 +1,59 @@
+#ifdef STATISTICS
+#ifndef morpheo_behavioural_core_multi_execute_loop_execute_loop_register_unit_Statistics_h
+#define morpheo_behavioural_core_multi_execute_loop_execute_loop_register_unit_Statistics_h
+
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Common/include/Debug.h"
+#include "Behavioural/include/Statistics.h"
+#include "Behavioural/include/Parameters_Statistics.h"
+//#include "Behavioural/Generic/Group/include/Statistics.h"
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Parameters.h"
+
+//using namespace morpheo::behavioural::generic::group;
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+  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 register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo
+
+#endif
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Parameters.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Parameters.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Parameters.cpp	(revision 60)
@@ -0,0 +1,208 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Parameters.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::Parameters"
+  Parameters::Parameters (uint32_t    nb_ooo_engine            ,
+			  uint32_t    size_general_data        ,
+			  uint32_t    size_special_data        ,
+			  uint32_t    nb_gpr_read              ,
+			  uint32_t    nb_gpr_write             ,
+			  uint32_t    nb_gpr_bank              ,
+			  uint32_t    nb_gpr_port_read_by_bank ,
+			  uint32_t    nb_gpr_port_write_by_bank,
+			  uint32_t    nb_spr_read              ,
+			  uint32_t    nb_spr_write             ,
+			  uint32_t    nb_spr_bank              ,
+			  uint32_t    nb_spr_port_read_by_bank ,
+			  uint32_t    nb_spr_port_write_by_bank,
+			  uint32_t  * nb_general_register      ,
+			  uint32_t  * nb_special_register      ,
+			  uint32_t  * nb_inst_insert_rob       ,
+			  uint32_t  * nb_inst_retire_rob       ):
+    _nb_ooo_engine             (nb_ooo_engine            ),
+    _size_general_data         (size_general_data        ),
+    _size_special_data         (size_special_data        ),
+    _nb_gpr_read               (nb_gpr_read              ),
+    _nb_gpr_write              (nb_gpr_write             ),
+    _nb_gpr_bank               (nb_gpr_bank              ),
+    _nb_gpr_port_read_by_bank  (nb_gpr_port_read_by_bank ),
+    _nb_gpr_port_write_by_bank (nb_gpr_port_write_by_bank),
+    _nb_spr_read               (nb_spr_read              ),
+    _nb_spr_write              (nb_spr_write             ),
+    _nb_spr_bank               (nb_spr_bank              ),
+    _nb_spr_port_read_by_bank  (nb_spr_port_read_by_bank ),
+    _nb_spr_port_write_by_bank (nb_spr_port_write_by_bank),
+    _nb_general_register       (nb_general_register      ),
+    _nb_special_register       (nb_special_register      ),
+    _nb_inst_insert_rob        (nb_inst_insert_rob       ),
+    _nb_inst_retire_rob        (nb_inst_retire_rob       ),
+    _have_port_ooo_engine_id   (nb_ooo_engine>1          )
+    
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+    _size_gpr_address = log2(nb_general_register [0]);
+    
+    for (uint32_t i=1; i<nb_ooo_engine; i++)
+      if (log2(nb_general_register [i]) > _size_gpr_address)
+	_size_gpr_address = log2(nb_general_register [i]);
+
+    _size_spr_address = log2(nb_special_register [0]);
+    
+    for (uint32_t i=1; i<nb_ooo_engine; i++)
+      if (log2(nb_special_register [i]) > _size_spr_address)
+	_size_spr_address = log2(nb_special_register [i]);
+
+    _param_gpr         = new morpheo::behavioural::generic::registerfile::Parameters * [_nb_ooo_engine];
+    _param_gpr_status  = new morpheo::behavioural::generic::registerfile::Parameters * [_nb_ooo_engine];
+    _param_spr         = new morpheo::behavioural::generic::registerfile::Parameters * [_nb_ooo_engine];
+    _param_spr_status  = new morpheo::behavioural::generic::registerfile::Parameters * [_nb_ooo_engine];
+    
+    __param_gpr        = new morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters * [_nb_ooo_engine];
+    __param_gpr_status = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters * [_nb_ooo_engine];
+    __param_spr        = new morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters * [_nb_ooo_engine];
+    __param_spr_status = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters * [_nb_ooo_engine];
+    
+   for (uint32_t i=0; i<_nb_ooo_engine; i++)
+     {
+       Tcrossbar_t crossbar = PARTIAL_CROSSBAR;
+ 
+       __param_gpr        [i] = new morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters 
+	 (_nb_gpr_read              ,
+	  _nb_gpr_write             ,
+	  _nb_general_register[i]   ,
+	  _size_general_data        ,
+	  _nb_gpr_bank              ,
+	  _nb_gpr_port_read_by_bank ,
+	  _nb_gpr_port_write_by_bank,
+	  crossbar                  );
+
+       __param_gpr_status [i] = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters 
+	 (_nb_gpr_read ,
+	  _nb_gpr_write+_nb_inst_insert_rob[i]+2*_nb_inst_retire_rob[i],
+	  0,
+	  nb_general_register[i],
+	  1);
+
+       __param_spr        [i] = new morpheo::behavioural::generic::registerfile::registerfile_multi_banked::Parameters 
+	 (_nb_spr_read              ,
+	  _nb_spr_write             ,
+	  _nb_special_register[i]   ,
+	  _size_special_data        ,
+	  _nb_spr_bank              ,
+	  _nb_spr_port_read_by_bank ,
+	  _nb_spr_port_write_by_bank,
+	  crossbar                  );
+
+       __param_spr_status [i] = new morpheo::behavioural::generic::registerfile::registerfile_monolithic  ::Parameters 
+	 (_nb_spr_read ,
+	  _nb_spr_write+_nb_inst_insert_rob[i]+2*_nb_inst_retire_rob[i],
+	  0,
+	  nb_special_register[i],
+	  1);	 
+
+       _param_gpr        [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_gpr        [i]);
+       _param_gpr_status [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_gpr_status [i]);
+       _param_spr        [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_spr        [i]);
+       _param_spr_status [i] = new morpheo::behavioural::generic::registerfile::Parameters (__param_spr_status [i]);
+     }
+
+   _param_glue       = new morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Parameters  (_nb_ooo_engine        ,
+																	 _size_general_data    ,
+																	 _size_special_data    ,
+																	 _nb_gpr_read          ,
+																	 _nb_spr_read          ,    
+																	 _nb_gpr_write         ,
+																	 _nb_spr_write         ,
+																	 _nb_inst_insert_rob   ,
+																	 _nb_inst_retire_rob   );
+     
+   
+
+
+    test();
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+  
+#undef  FUNCTION
+#define FUNCTION "Register_unit::Parameters (copy)"
+  Parameters::Parameters (Parameters & param):
+    _nb_ooo_engine             (param._nb_ooo_engine            ),
+    _size_general_data         (param._size_general_data        ),
+    _size_special_data         (param._size_special_data        ),
+    _nb_gpr_read               (param._nb_gpr_read              ),
+    _nb_gpr_write              (param._nb_gpr_write             ),
+    _nb_gpr_bank               (param._nb_gpr_bank              ),
+    _nb_gpr_port_read_by_bank  (param._nb_gpr_port_read_by_bank ),
+    _nb_gpr_port_write_by_bank (param._nb_gpr_port_write_by_bank),
+    _nb_spr_read               (param._nb_spr_read              ),
+    _nb_spr_write              (param._nb_spr_write             ),
+    _nb_spr_bank               (param._nb_spr_bank              ),
+    _nb_spr_port_read_by_bank  (param._nb_spr_port_read_by_bank ),
+    _nb_spr_port_write_by_bank (param._nb_spr_port_write_by_bank),
+    _nb_general_register       (param._nb_general_register      ),
+    _nb_special_register       (param._nb_special_register      ),
+    _nb_inst_insert_rob        (param._nb_inst_insert_rob       ),
+    _nb_inst_retire_rob        (param._nb_inst_retire_rob       ),
+    _have_port_ooo_engine_id   (param._have_port_ooo_engine_id  )
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+    _size_gpr_address = param._size_gpr_address;
+    _size_spr_address = param._size_spr_address;
+
+    __param_gpr        = param.__param_gpr       ;
+    __param_gpr_status = param.__param_gpr_status;
+    __param_spr        = param.__param_spr       ;
+    __param_spr_status = param.__param_spr_status;
+    _param_gpr         = param._param_gpr       ;
+    _param_gpr_status  = param._param_gpr_status;
+    _param_spr         = param._param_spr       ;
+    _param_spr_status  = param._param_spr_status;
+    _param_glue        = param._param_glue      ;
+
+    test();
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::~Parameters"
+  Parameters::~Parameters () 
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+    delete [] _param_gpr       ;
+    delete [] _param_gpr_status;
+    delete [] _param_spr       ;
+    delete [] _param_spr_status;
+    delete [] __param_gpr       ;
+    delete [] __param_gpr_status;
+    delete [] __param_spr       ;
+    delete [] __param_spr_status;
+    delete    _param_glue;
+    
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Parameters_msg_error.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Parameters_msg_error.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Parameters_msg_error.cpp	(revision 60)
@@ -0,0 +1,40 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/include/Types.h"
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Parameters.h"
+#include <sstream>
+using namespace std;
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::msg_error"
+  string Parameters::msg_error(void)
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+    string msg = "";
+
+    return msg;
+
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Parameters_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Parameters_print.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Parameters_print.cpp	(revision 60)
@@ -0,0 +1,93 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Parameters.h"
+#include "Behavioural/include/XML.h"
+using namespace std;
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::print"
+  string Parameters::print (uint32_t depth)
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+    XML xml ("register_unit");
+
+    xml.balise_open("register_unit");
+    xml. singleton_begin("nb_ooo_engine            "); xml.attribut("value",toString(_nb_ooo_engine            )); xml.singleton_end();
+    xml. singleton_begin("size_general_data        "); xml.attribut("value",toString(_size_general_data        )); xml.singleton_end();
+    xml. singleton_begin("size_special_data        "); xml.attribut("value",toString(_size_special_data        )); xml.singleton_end();
+    xml. singleton_begin("nb_gpr_read              "); xml.attribut("value",toString(_nb_gpr_read              )); xml.singleton_end();
+    xml. singleton_begin("nb_gpr_write             "); xml.attribut("value",toString(_nb_gpr_write             )); xml.singleton_end();
+    xml. singleton_begin("nb_gpr_bank              "); xml.attribut("value",toString(_nb_gpr_bank              )); xml.singleton_end();
+    xml. singleton_begin("nb_gpr_port_read_by_bank "); xml.attribut("value",toString(_nb_gpr_port_read_by_bank )); xml.singleton_end();
+    xml. singleton_begin("nb_gpr_port_write_by_bank"); xml.attribut("value",toString(_nb_gpr_port_write_by_bank)); xml.singleton_end();
+    xml. singleton_begin("nb_spr_read              "); xml.attribut("value",toString(_nb_spr_read              )); xml.singleton_end();
+    xml. singleton_begin("nb_spr_write             "); xml.attribut("value",toString(_nb_spr_write             )); xml.singleton_end();
+    xml. singleton_begin("nb_spr_bank              "); xml.attribut("value",toString(_nb_spr_bank              )); xml.singleton_end();
+    xml. singleton_begin("nb_spr_port_read_by_bank "); xml.attribut("value",toString(_nb_spr_port_read_by_bank )); xml.singleton_end();
+    xml. singleton_begin("nb_spr_port_write_by_bank"); xml.attribut("value",toString(_nb_spr_port_write_by_bank)); xml.singleton_end();
+    
+    xml. balise_open("multi_ooo_engine");
+    for (uint32_t i=0; i<_nb_ooo_engine; i++)
+      {
+	xml.  balise_open_begin("ooo_engine");
+	xml.   attribut("id", toString(i));
+	xml.  balise_open_end();
+	xml.   singleton_begin("nb_general_register"); xml.attribut("value",toString(_nb_general_register [i])); xml.singleton_end();
+	xml.   singleton_begin("nb_special_register"); xml.attribut("value",toString(_nb_special_register [i])); xml.singleton_end();
+	xml.   singleton_begin("nb_inst_insert_rob "); xml.attribut("value",toString(_nb_inst_insert_rob  [i])); xml.singleton_end();
+	xml.   singleton_begin("nb_inst_retire_rob "); xml.attribut("value",toString(_nb_inst_retire_rob  [i])); xml.singleton_end();
+	xml.  balise_close();
+      }
+    xml. balise_close();
+
+//     xml. text (_param_glue->print(depth+1));
+//     for (uint32_t i=0; i<_nb_ooo_engine; i++)
+//      {
+//        xml. text (_param_gpr        [i]->print(depth+1));
+//        xml. text (_param_gpr_status [i]->print(depth+1));
+//        xml. text (_param_spr        [i]->print(depth+1));
+//        xml. text (_param_spr_status [i]->print(depth+1));
+//      }
+    
+    xml.balise_close();
+
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+    
+    return xml.get_body(depth);
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::operator<<"
+  ostream& operator<< (ostream& output_stream ,
+		       morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::Parameters & x)
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+    output_stream << x.print(0);
+    
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+
+    return output_stream;
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit.cpp	(revision 60)
@@ -0,0 +1,103 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::Register_unit"
+  Register_unit::Register_unit 
+  (
+#ifdef SYSTEMC
+   sc_module_name name,
+#else
+   string name,
+#endif
+#ifdef STATISTICS
+   morpheo::behavioural::Parameters_Statistics * param_statistics,
+#endif
+   morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::Parameters * param,
+   morpheo::behavioural::Tusage_t usage
+   ):
+    _name              (name)
+    ,_param            (param)
+    ,_usage            (usage)
+#ifdef STATISTICS
+    ,_param_statistics (param_statistics)
+#endif
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+    log_printf(INFO,Register_unit,FUNCTION,"Allocation");
+    allocation ();
+
+#ifdef STATISTICS
+    log_printf(INFO,Register_unit,FUNCTION,"Allocation of statistics");
+
+    // Allocation of statistics
+    _stat = new Statistics (static_cast<string>(_name),
+			    param_statistics          ,
+			    param);
+#endif
+
+#ifdef VHDL
+    // generate the vhdl
+    log_printf(INFO,Register_unit,FUNCTION,"Generate the vhdl");
+
+    vhdl();
+#endif
+
+#ifdef SYSTEMC
+//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+    log_printf(INFO,Register_unit,FUNCTION,"Method - transition");
+
+    SC_METHOD (transition);
+    dont_initialize ();
+    sensitive_pos << *(in_CLOCK);
+//#endif
+
+#ifdef SYSTEMCASS_SPECIFIC
+    // List dependency information
+#endif    
+
+#endif
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+  
+#undef  FUNCTION
+#define FUNCTION "Register_unit::~Register_unit"
+  Register_unit::~Register_unit (void)
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+#ifdef STATISTICS
+    log_printf(INFO,Register_unit,FUNCTION,"Generate Statistics file");
+
+    _stat->generate_file(statistics(0));
+    delete _stat;
+#endif
+
+    log_printf(INFO,Register_unit,FUNCTION,"Deallocation");
+    deallocation ();
+
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_allocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_allocation.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_allocation.cpp	(revision 60)
@@ -0,0 +1,1045 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::allocation"
+  void Register_unit::allocation (void)
+  {
+    string rename, name_component;
+
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+    _component   = new Component ();
+
+    Entity * entity = _component->set_entity (_name       
+					      ,"Register_unit"
+#ifdef POSITION
+					      ,COMBINATORY 
+#endif
+					      );
+
+    _interfaces = entity->set_interfaces();
+
+    // ~~~~~[ Interface : "" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    Interface * interface = _interfaces->set_interface(""
+#ifdef POSITION
+						       ,IN
+						       ,SOUTH,
+						       "Generalist interface"
+#endif
+						       );
+
+    in_CLOCK        = interface->set_signal_clk              ("clock" ,1, CLOCK_VHDL_YES);
+    in_NRESET       = interface->set_signal_in  <Tcontrol_t> ("nreset",1, RESET_VHDL_YES);
+
+    // ~~~~~[ Interface "gpr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    in_GPR_READ_VAL                 = new SC_IN (Tcontrol_t        )   * [_param->_nb_gpr_read];
+    out_GPR_READ_ACK                 = new SC_OUT(Tcontrol_t        )   * [_param->_nb_gpr_read];
+    if (_param->_have_port_ooo_engine_id == true)
+      in_GPR_READ_OOO_ENGINE_ID       = new SC_IN (Tcontext_t        )   * [_param->_nb_gpr_read];
+    in_GPR_READ_NUM_REG             = new SC_IN (Tgeneral_address_t)   * [_param->_nb_gpr_read];
+    out_GPR_READ_DATA                = new SC_OUT(Tgeneral_data_t   )   * [_param->_nb_gpr_read];
+    out_GPR_READ_DATA_VAL            = new SC_OUT(Tcontrol_t        )   * [_param->_nb_gpr_read];
+     
+    for (uint32_t i=0; i<_param->_nb_gpr_read; i++)
+      {
+	Interface_fifo * interface = _interfaces->set_interface("gpr_read_"+toString(i)
+#ifdef POSITION
+								,IN
+								,NORTH
+								,"Interface to read the register file"
+#endif
+								);
+	 
+	in_GPR_READ_VAL           [i]= interface->set_signal_valack_in  (VAL);
+	out_GPR_READ_ACK           [i]= interface->set_signal_valack_out (ACK);
+	if (_param->_have_port_ooo_engine_id == true)
+	  in_GPR_READ_OOO_ENGINE_ID [i]= interface->set_signal_in <Tcontext_t        > ("ooo_engine_id" , log2(_param->_nb_ooo_engine));
+	in_GPR_READ_NUM_REG       [i]= interface->set_signal_in <Tgeneral_address_t> ("num_reg"       , log2(_param->_size_gpr_address));
+	out_GPR_READ_DATA          [i]= interface->set_signal_out<Tgeneral_data_t   > ("data"          , _param->_size_general_data);
+	out_GPR_READ_DATA_VAL      [i]= interface->set_signal_out<Tcontrol_t        > ("data_val"      , 1);
+      }
+
+    // ~~~~~[ Interface "gpr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    in_GPR_WRITE_VAL                 = new SC_IN (Tcontrol_t        )   * [_param->_nb_gpr_write];
+    out_GPR_WRITE_ACK                 = new SC_OUT(Tcontrol_t        )   * [_param->_nb_gpr_write];
+    if (_param->_have_port_ooo_engine_id == true)
+      in_GPR_WRITE_OOO_ENGINE_ID       = new SC_IN (Tcontext_t        )   * [_param->_nb_gpr_write];
+    in_GPR_WRITE_NUM_REG             = new SC_IN (Tgeneral_address_t)   * [_param->_nb_gpr_write];
+    in_GPR_WRITE_DATA                = new SC_IN (Tgeneral_data_t   )   * [_param->_nb_gpr_write];
+     
+    for (uint32_t i=0; i<_param->_nb_gpr_write; i++)
+      {
+	Interface_fifo * interface = _interfaces->set_interface("gpr_write_"+toString(i)
+#ifdef POSITION
+								,IN
+								,NORTH,
+								"Interface to write the register file"
+#endif
+								);
+	 
+	in_GPR_WRITE_VAL           [i]= interface->set_signal_valack_in  (VAL);
+	out_GPR_WRITE_ACK           [i]= interface->set_signal_valack_out (ACK);
+	if (_param->_have_port_ooo_engine_id == true)
+	  in_GPR_WRITE_OOO_ENGINE_ID [i]= interface->set_signal_in <Tcontext_t        > ("ooo_engine_id" , log2(_param->_nb_ooo_engine));
+	in_GPR_WRITE_NUM_REG       [i]= interface->set_signal_in <Tgeneral_address_t> ("num_reg"       , log2(_param->_size_gpr_address));
+	in_GPR_WRITE_DATA          [i]= interface->set_signal_in <Tgeneral_data_t   > ("data"          , _param->_size_general_data);
+      }
+
+    // ~~~~~[ Interface "spr_read" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    in_SPR_READ_VAL                 = new SC_IN (Tcontrol_t        )   * [_param->_nb_spr_read];
+    out_SPR_READ_ACK                 = new SC_OUT(Tcontrol_t        )   * [_param->_nb_spr_read];
+    if (_param->_have_port_ooo_engine_id == true)
+      in_SPR_READ_OOO_ENGINE_ID       = new SC_IN (Tcontext_t        )   * [_param->_nb_spr_read];
+    in_SPR_READ_NUM_REG             = new SC_IN (Tspecial_address_t)   * [_param->_nb_spr_read];
+    out_SPR_READ_DATA                = new SC_OUT(Tspecial_data_t   )   * [_param->_nb_spr_read];
+    out_SPR_READ_DATA_VAL            = new SC_OUT(Tcontrol_t        )   * [_param->_nb_spr_read];
+     
+    for (uint32_t i=0; i<_param->_nb_spr_read; i++)
+      {
+	Interface_fifo * interface = _interfaces->set_interface("spr_read_"+toString(i)
+#ifdef POSITION
+								,IN
+								,NORTH,
+								"Interface to read the register file"
+#endif
+								);
+	 
+	in_SPR_READ_VAL           [i]= interface->set_signal_valack_in  (VAL);
+	out_SPR_READ_ACK           [i]= interface->set_signal_valack_out (ACK);
+	if (_param->_have_port_ooo_engine_id == true)
+	  in_SPR_READ_OOO_ENGINE_ID [i]= interface->set_signal_in <Tcontext_t        > ("ooo_engine_id" , log2(_param->_nb_ooo_engine));
+	in_SPR_READ_NUM_REG       [i]= interface->set_signal_in <Tspecial_address_t> ("num_reg"       , log2(_param->_size_spr_address));
+	out_SPR_READ_DATA          [i]= interface->set_signal_out<Tspecial_data_t   > ("data"          , _param->_size_special_data);
+	out_SPR_READ_DATA_VAL      [i]= interface->set_signal_out<Tcontrol_t        > ("data_val"      , 1);
+      }
+
+    // ~~~~~[ Interface "spr_write" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    in_SPR_WRITE_VAL                 = new SC_IN (Tcontrol_t        )   * [_param->_nb_spr_write];
+    out_SPR_WRITE_ACK                 = new SC_OUT(Tcontrol_t        )   * [_param->_nb_spr_write];
+    if (_param->_have_port_ooo_engine_id == true)
+      in_SPR_WRITE_OOO_ENGINE_ID       = new SC_IN (Tcontext_t        )   * [_param->_nb_spr_write];
+    in_SPR_WRITE_NUM_REG             = new SC_IN (Tspecial_address_t)   * [_param->_nb_spr_write];
+    in_SPR_WRITE_DATA                = new SC_IN (Tspecial_data_t   )   * [_param->_nb_spr_write];
+     
+    for (uint32_t i=0; i<_param->_nb_spr_write; i++)
+      {
+	Interface_fifo * interface = _interfaces->set_interface("spr_write_"+toString(i)
+#ifdef POSITION
+								,IN
+								,NORTH,
+								"Interface to write the register file"
+#endif
+								);
+	 
+	in_SPR_WRITE_VAL           [i]= interface->set_signal_valack_in  (VAL);
+	out_SPR_WRITE_ACK           [i]= interface->set_signal_valack_out (ACK);
+	if (_param->_have_port_ooo_engine_id == true)
+	  in_SPR_WRITE_OOO_ENGINE_ID [i]= interface->set_signal_in <Tcontext_t        > ("ooo_engine_id" , log2(_param->_nb_ooo_engine));
+	in_SPR_WRITE_NUM_REG       [i]= interface->set_signal_in <Tspecial_address_t> ("num_reg"       , log2(_param->_size_spr_address));
+	in_SPR_WRITE_DATA          [i]= interface->set_signal_in <Tspecial_data_t   > ("data"          , _param->_size_special_data);
+      }
+
+    // ~~~~~[ Interface "insert_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    in_INSERT_ROB_VAL        = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+    out_INSERT_ROB_ACK        = new SC_OUT(Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+    in_INSERT_ROB_RD_USE     = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+    in_INSERT_ROB_RD_NUM_REG = new SC_IN (Tgeneral_address_t)  ** [_param->_nb_ooo_engine];
+    in_INSERT_ROB_RE_USE     = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+    in_INSERT_ROB_RE_NUM_REG = new SC_IN (Tspecial_address_t)  ** [_param->_nb_ooo_engine];
+
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_insert_rob [i];
+
+	in_INSERT_ROB_VAL        [i] = new SC_IN (Tcontrol_t        )  * [x];
+	out_INSERT_ROB_ACK        [i] = new SC_OUT(Tcontrol_t        )  * [x];
+	in_INSERT_ROB_RD_USE     [i] = new SC_IN (Tcontrol_t        )  * [x];
+	in_INSERT_ROB_RD_NUM_REG [i] = new SC_IN (Tgeneral_address_t)  * [x];
+	in_INSERT_ROB_RE_USE     [i] = new SC_IN (Tcontrol_t        )  * [x];
+	in_INSERT_ROB_RE_NUM_REG [i] = new SC_IN (Tspecial_address_t)  * [x];
+
+	for (uint32_t j=0; j<x; j++)
+	  {
+	    Interface_fifo * interface = _interfaces->set_interface("insert_rob_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								    ,IN
+								    ,WEST
+								    ,"Interface to update status (insert)"
+#endif
+								    );
+
+
+	    in_INSERT_ROB_VAL        [i][j] = interface->set_signal_valack_in  (VAL);
+	    out_INSERT_ROB_ACK        [i][j] = interface->set_signal_valack_out (ACK);
+	    in_INSERT_ROB_RD_USE     [i][j] = interface->set_signal_in <Tcontrol_t        > ("rd_use"    , 1);
+	    in_INSERT_ROB_RD_NUM_REG [i][j] = interface->set_signal_in <Tgeneral_address_t> ("rd_num_reg", log2(_param->_size_gpr_address));
+	    in_INSERT_ROB_RE_USE     [i][j] = interface->set_signal_in <Tcontrol_t        > ("re_use"    , 1);
+	    in_INSERT_ROB_RE_NUM_REG [i][j] = interface->set_signal_in <Tspecial_address_t> ("re_num_reg", log2(_param->_size_spr_address));
+	     
+	  }
+      }
+
+    // ~~~~~[ Interface "retire_rob" ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    in_RETIRE_ROB_VAL            = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+    out_RETIRE_ROB_ACK            = new SC_OUT(Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RD_OLD_USE     = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RD_OLD_NUM_REG = new SC_IN (Tgeneral_address_t)  ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RE_OLD_USE     = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RE_OLD_NUM_REG = new SC_IN (Tspecial_address_t)  ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RD_NEW_USE     = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RD_NEW_NUM_REG = new SC_IN (Tgeneral_address_t)  ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RE_NEW_USE     = new SC_IN (Tcontrol_t        )  ** [_param->_nb_ooo_engine];
+    in_RETIRE_ROB_RE_NEW_NUM_REG = new SC_IN (Tspecial_address_t)  ** [_param->_nb_ooo_engine];
+
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	uint32_t x=_param->_nb_inst_retire_rob [i];
+
+	in_RETIRE_ROB_VAL            [i] = new SC_IN (Tcontrol_t        )  * [x];
+	out_RETIRE_ROB_ACK            [i] = new SC_OUT(Tcontrol_t        )  * [x];
+	in_RETIRE_ROB_RD_OLD_USE     [i] = new SC_IN (Tcontrol_t        )  * [x];
+	in_RETIRE_ROB_RD_OLD_NUM_REG [i] = new SC_IN (Tgeneral_address_t)  * [x];
+	in_RETIRE_ROB_RE_OLD_USE     [i] = new SC_IN (Tcontrol_t        )  * [x];
+	in_RETIRE_ROB_RE_OLD_NUM_REG [i] = new SC_IN (Tspecial_address_t)  * [x];
+	in_RETIRE_ROB_RD_NEW_USE     [i] = new SC_IN (Tcontrol_t        )  * [x];
+	in_RETIRE_ROB_RD_NEW_NUM_REG [i] = new SC_IN (Tgeneral_address_t)  * [x];
+	in_RETIRE_ROB_RE_NEW_USE     [i] = new SC_IN (Tcontrol_t        )  * [x];
+	in_RETIRE_ROB_RE_NEW_NUM_REG [i] = new SC_IN (Tspecial_address_t)  * [x];
+
+	for (uint32_t j=0; j<x; j++)
+	  {
+	    Interface_fifo * interface = _interfaces->set_interface("retire_rob_"+toString(i)+"_"+toString(j)
+#ifdef POSITION
+								    ,IN
+								    ,WEST
+								    ,"Interface to update status (retire)"
+#endif
+								    );
+
+
+	    in_RETIRE_ROB_VAL            [i][j] = interface->set_signal_valack_in  (VAL);
+	    out_RETIRE_ROB_ACK            [i][j] = interface->set_signal_valack_out (ACK);
+	    in_RETIRE_ROB_RD_OLD_USE     [i][j] = interface->set_signal_in <Tcontrol_t        > ("rd_old_use"    , 1);
+	    in_RETIRE_ROB_RD_OLD_NUM_REG [i][j] = interface->set_signal_in <Tgeneral_address_t> ("rd_old_num_reg", log2(_param->_size_gpr_address));
+	    in_RETIRE_ROB_RE_OLD_USE     [i][j] = interface->set_signal_in <Tcontrol_t        > ("re_old_use"    , 1);
+	    in_RETIRE_ROB_RE_OLD_NUM_REG [i][j] = interface->set_signal_in <Tspecial_address_t> ("re_old_num_reg", log2(_param->_size_spr_address));
+	    in_RETIRE_ROB_RD_NEW_USE     [i][j] = interface->set_signal_in <Tcontrol_t        > ("rd_new_use"    , 1);
+	    in_RETIRE_ROB_RD_NEW_NUM_REG [i][j] = interface->set_signal_in <Tgeneral_address_t> ("rd_new_num_reg", log2(_param->_size_gpr_address));
+	    in_RETIRE_ROB_RE_NEW_USE     [i][j] = interface->set_signal_in <Tcontrol_t        > ("re_new_use"    , 1);
+	    in_RETIRE_ROB_RE_NEW_NUM_REG [i][j] = interface->set_signal_in <Tspecial_address_t> ("re_new_num_reg", log2(_param->_size_spr_address));
+	  }
+      }
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    string name;
+     
+    component_gpr        = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile * [_param->_nb_ooo_engine];
+    component_gpr_status = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile * [_param->_nb_ooo_engine];
+    component_spr        = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile * [_param->_nb_ooo_engine];
+    component_spr_status = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile * [_param->_nb_ooo_engine];
+     
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	name = _name+"_gpr_"+toString(i);
+
+	component_gpr        [i] = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile 
+	  (name.c_str()
+#ifdef STATISTICS
+	   ,_param_statistics
+#endif
+	   ,_param->_param_gpr [i]
+	   );
+	 
+	_component->set_component (component_gpr[i]->_component
+#ifdef POSITION
+				   , 50
+				   , 50
+				   , 10
+				   , 10
+#endif
+				   );
+
+
+	name = _name+"_gpr_status_"+toString(i);
+
+	component_gpr_status [i] = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile
+	  (name.c_str()
+#ifdef STATISTICS
+	   ,_param_statistics
+#endif
+	   ,_param->_param_gpr_status [i]
+	   );
+
+	_component->set_component (component_gpr_status[i]->_component
+#ifdef POSITION
+				   , 50
+				   , 50
+				   , 10
+				   , 10
+#endif
+				   );
+
+
+	name = _name+"_spr_"+toString(i);
+	 
+	component_spr        [i] = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile 
+	  (name.c_str()
+#ifdef STATISTICS
+	   ,_param_statistics
+#endif
+	   ,_param->_param_spr [i]
+	   );
+
+	_component->set_component (component_spr[i]->_component
+#ifdef POSITION
+				   , 50
+				   , 50
+				   , 10
+				   , 10
+#endif
+				   );
+
+	name = _name+"_spr_status_"+toString(i);
+
+	component_spr_status [i] = new morpheo::behavioural::generic::registerfile::RegisterFile::RegisterFile
+	  (name.c_str()
+#ifdef STATISTICS
+	   ,_param_statistics
+#endif
+	   ,_param->_param_spr_status [i]
+	   );
+
+	_component->set_component (component_spr_status[i]->_component
+#ifdef POSITION
+				   , 50
+				   , 50
+				   , 10
+				   , 10
+#endif
+				   );
+      }
+
+
+    name = _name+"_glue";
+     
+    component_glue       = new morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::register_unit_glue::Register_unit_Glue::Register_unit_Glue     
+      (name.c_str()
+#ifdef STATISTICS
+       ,_param_statistics
+#endif
+       ,_param->_param_glue
+       );
+
+    _component->set_component (component_glue->_component
+#ifdef POSITION
+			       , 50
+			       , 50
+			       , 10
+			       , 10
+#endif
+			       );
+     
+    // ~~~~~[ Instanciation ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	name_component = _name+"_gpr_"+toString(i);
+	
+	cout << "Instance : " << name_component << endl;
+	
+#ifdef POSITION
+	_component->interface_map (name_component,"",
+				   _name         ,"");
+#endif
+	
+	_component->port_map(name_component,"in_CLOCK" , _name, "in_CLOCK");
+	_component->port_map(name_component,"in_NRESET", _name, "in_NRESET");
+
+	for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+	  {
+	    _component->port_map(name_component,
+				 "in_READ_"+toString(j)+"_VAL",
+				 _name+"_glue",
+				 "out_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL");
+	    _component->port_map(name_component,
+				 "out_READ_"+toString(j)+"_ACK",
+				 _name+"_glue",
+				 "in_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK");
+	    _component->port_map(name_component,
+				 "out_READ_"+toString(j)+"_DATA",
+				 _name+"_glue",
+				 "in_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_DATA");
+	    _component->port_map(name_component,
+				 "in_READ_"+toString(j)+"_ADDRESS",
+				 _name,
+				 "in_GPR_READ_"+toString(j)+"_NUM_REG");
+	  }
+	for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+	  {
+	    _component->port_map(name_component,
+				 "in_WRITE_"+toString(j)+"_VAL",
+				 _name+"_glue",
+				 "out_GPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL");
+	    _component->port_map(name_component,
+				 "out_WRITE_"+toString(j)+"_ACK",
+				 _name+"_glue",
+				 "in_GPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK");
+	    _component->port_map(name_component,
+				 "in_WRITE_"+toString(j)+"_ADDRESS",
+				 _name,
+				 "in_GPR_WRITE_"+toString(j)+"_NUM_REG"
+				 );
+	    _component->port_map(name_component,
+				 "in_WRITE_"+toString(j)+"_DATA",
+				 _name,
+				 "in_GPR_WRITE_"+toString(j)+"_DATA");
+	  }
+
+      }// gpr
+    
+    {
+      for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	{
+	  name_component = _name+"_gpr_status_"+toString(i);
+	  
+	  cout << "Instance : " << name_component << endl;
+	  
+#ifdef POSITION
+	  _component->interface_map (name_component,"",
+				     _name         ,"");
+#endif
+	  
+	  _component->port_map(name_component,"in_CLOCK" , _name, "in_CLOCK");
+	  _component->port_map(name_component,"in_NRESET", _name, "in_NRESET");
+	  
+	  for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+	    {
+	      _component->port_map(name_component,
+				   "in_READ_"+toString(j)+"_VAL" ,
+				   _name+"_glue",
+				   "out_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_VAL"        );
+	      _component->port_map(name_component,
+				   "out_READ_"+toString(j)+"_ACK",
+				   _name+"_glue",
+				   "in_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" );
+	      _component->port_map(name_component,
+				   "out_READ_"+toString(j)+"_DATA",
+				   _name+"_glue",
+				   "in_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_DATA_VAL"   );
+	      _component->port_map(name_component,
+				   "in_READ_"+toString(j)+"_ADDRESS",
+				   _name,
+				   "in_GPR_READ_"+toString(j)+"_NUM_REG");
+	    }
+
+	  uint32_t x=0;
+	  for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+	    {
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_VAL" ,
+				   _name+"_glue",
+				   "out_GPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_VAL");
+	      _component->port_map(name_component,
+				   "out_WRITE_"+toString(x)+"_ACK",
+				   _name+"_glue",
+				   "in_GPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" );
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_DATA" ,
+				   _name+"_glue",
+				   "out_CONST_1");
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x++)+"_ADDRESS",
+				   _name,
+				   "in_GPR_WRITE_"+toString(j)+"_NUM_REG");
+	    }
+	  
+	  for (uint32_t j=0; j<_param->_nb_inst_insert_rob [i]; j++)
+	    {
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_VAL" ,
+				   _name+"_glue",
+				   "out_INSERT_ROB_GPR_STATUS_"+toString(i)+"_"+toString(j)+"_VAL");
+	      _component->port_map(name_component,
+				   "out_WRITE_"+toString(x)+"_ACK",
+				   _name+"_glue",
+				   "in_INSERT_ROB_GPR_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" );
+
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_DATA",
+				    _name+"_glue",
+				   "out_CONST_0"
+				   );
+
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x++)+"_ADDRESS",
+				   _name,
+				   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_RD_NUM_REG");
+
+	    }
+
+	  for (uint32_t j=0; j<_param->_nb_inst_retire_rob [i]; j++)
+	    {
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_VAL" ,
+				   _name+"_glue",
+				   "out_RETIRE_ROB_GPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_VAL");
+	      _component->port_map(name_component,
+				   "out_WRITE_"+toString(x)+"_ACK",
+				   _name+"_glue",
+				   "in_RETIRE_ROB_GPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK" );
+
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_DATA" ,
+				   _name+"_glue",
+				   "out_CONST_0");
+
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x++)+"_ADDRESS",
+				   _name,
+				   "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RD_OLD_NUM_REG");
+	      
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_VAL" ,
+				   _name+"_glue",
+				   "out_RETIRE_ROB_GPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_VAL");
+	      _component->port_map(name_component,
+				   "out_WRITE_"+toString(x)+"_ACK",
+				   _name+"_glue",
+				   "in_RETIRE_ROB_GPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK" );
+
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_DATA" ,
+				   _name+"_glue",
+				   "out_CONST_1"
+				   );
+
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x++)+"_ADDRESS",
+				   _name,
+				   "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RD_NEW_NUM_REG");
+	    }
+
+	}
+    }// gpr_status
+
+    for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+      {
+	name_component = _name+"_spr_"+toString(i);
+	
+	cout << "Instance : " << name_component << endl;
+	
+#ifdef POSITION
+	_component->interface_map (name_component,"",
+				   _name         ,"");
+#endif
+	
+	_component->port_map(name_component,"in_CLOCK" , _name, "in_CLOCK");
+	_component->port_map(name_component,"in_NRESET", _name, "in_NRESET");
+
+	for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+	  {
+	    _component->port_map(name_component,
+				 "in_READ_"+toString(j)+"_VAL",
+				 _name+"_glue",
+				 "out_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL");
+	    _component->port_map(name_component,
+				 "out_READ_"+toString(j)+"_ACK",
+				 _name+"_glue",
+				 "in_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK");
+	    _component->port_map(name_component,
+				 "out_READ_"+toString(j)+"_DATA",
+				 _name+"_glue",
+				 "in_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_DATA");
+	    _component->port_map(name_component,
+				 "in_READ_"+toString(j)+"_ADDRESS",
+				 _name,
+				 "in_SPR_READ_"+toString(j)+"_NUM_REG");
+	  }
+	for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+	  {
+	    _component->port_map(name_component,
+				 "in_WRITE_"+toString(j)+"_VAL",
+				 _name+"_glue",
+				 "out_SPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL");
+	    _component->port_map(name_component,
+				 "out_WRITE_"+toString(j)+"_ACK",
+				 _name+"_glue",
+				 "in_SPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK");
+	    _component->port_map(name_component,
+				 "in_WRITE_"+toString(j)+"_ADDRESS",
+				 _name,
+				 "in_SPR_WRITE_"+toString(j)+"_NUM_REG"
+				 );
+	    _component->port_map(name_component,
+				 "in_WRITE_"+toString(j)+"_DATA",
+				 _name,
+				 "in_SPR_WRITE_"+toString(j)+"_DATA");
+	  }
+
+      }// spr
+    
+    {
+      for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	{
+	  name_component = _name+"_spr_status_"+toString(i);
+	  
+	  cout << "Instance : " << name_component << endl;
+	  
+#ifdef POSITION
+	  _component->interface_map (name_component,"",
+				     _name         ,"");
+#endif
+	  
+	  _component->port_map(name_component,"in_CLOCK" , _name, "in_CLOCK");
+	  _component->port_map(name_component,"in_NRESET", _name, "in_NRESET");
+	  
+	  for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+	    {
+	      _component->port_map(name_component,
+				   "in_READ_"+toString(j)+"_VAL" ,
+				   _name+"_glue",
+				   "out_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_VAL"        );
+	      _component->port_map(name_component,
+				   "out_READ_"+toString(j)+"_ACK",
+				   _name+"_glue",
+				   "in_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" );
+	      _component->port_map(name_component,
+				   "out_READ_"+toString(j)+"_DATA",
+				   _name+"_glue",
+				   "in_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_DATA_VAL"   );
+	      _component->port_map(name_component,
+				   "in_READ_"+toString(j)+"_ADDRESS",
+				   _name,
+				   "in_SPR_READ_"+toString(j)+"_NUM_REG");
+	    }
+
+	  uint32_t x=0;
+	  for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+	    {
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_VAL" ,
+				   _name+"_glue",
+				   "out_SPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_VAL");
+	      _component->port_map(name_component,
+				   "out_WRITE_"+toString(x)+"_ACK",
+				   _name+"_glue",
+				   "in_SPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" );
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_DATA" ,
+				   _name+"_glue",
+				   "out_CONST_1");
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x++)+"_ADDRESS",
+				   _name,
+				   "in_SPR_WRITE_"+toString(j)+"_NUM_REG");
+	    }
+	  
+	  for (uint32_t j=0; j<_param->_nb_inst_insert_rob [i]; j++)
+	    {
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_VAL" ,
+				   _name+"_glue",
+				   "out_INSERT_ROB_SPR_STATUS_"+toString(i)+"_"+toString(j)+"_VAL");
+	      _component->port_map(name_component,
+				   "out_WRITE_"+toString(x)+"_ACK",
+				   _name+"_glue",
+				   "in_INSERT_ROB_SPR_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" );
+
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_DATA",
+				    _name+"_glue",
+				   "out_CONST_0"
+				   );
+
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x++)+"_ADDRESS",
+				   _name,
+				   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_RE_NUM_REG");
+
+	    }
+
+	  for (uint32_t j=0; j<_param->_nb_inst_retire_rob [i]; j++)
+	    {
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_VAL" ,
+				   _name+"_glue",
+				   "out_RETIRE_ROB_SPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_VAL");
+	      _component->port_map(name_component,
+				   "out_WRITE_"+toString(x)+"_ACK",
+				   _name+"_glue",
+				   "in_RETIRE_ROB_SPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK" );
+
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_DATA" ,
+				   _name+"_glue",
+				   "out_CONST_0");
+
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x++)+"_ADDRESS",
+				   _name,
+				   "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RE_OLD_NUM_REG");
+	      
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_VAL" ,
+				   _name+"_glue",
+				   "out_RETIRE_ROB_SPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_VAL");
+	      _component->port_map(name_component,
+				   "out_WRITE_"+toString(x)+"_ACK",
+				   _name+"_glue",
+				   "in_RETIRE_ROB_SPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK" );
+
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x)+"_DATA" ,
+				   _name+"_glue",
+				   "out_CONST_1"
+				   );
+
+	      _component->port_map(name_component,
+				   "in_WRITE_"+toString(x++)+"_ADDRESS",
+				   _name,
+				   "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RE_NEW_NUM_REG");
+	    }
+
+	}
+    }// spr_status
+
+    {
+      name_component = _name+"_glue";
+     
+      cout << "Instance : " << name_component << endl;
+     
+#ifdef POSITION
+      _component->interface_map (name_component,"",
+				 _name         ,"");
+#endif
+    
+      _component->port_map(name_component,"in_CLOCK" , _name, "in_CLOCK" );
+      _component->port_map(name_component,"in_NRESET", _name, "in_NRESET");
+    
+      for (uint32_t j=0; j<_param->_nb_gpr_read; j++)
+	{
+	  _component->port_map(name_component,
+			       "in_GPR_READ_"+toString(j)+"_VAL",
+			       _name, 
+			       "in_GPR_READ_"+toString(j)+"_VAL");
+	  _component->port_map(name_component,
+			       "out_GPR_READ_"+toString(j)+"_ACK",
+			       _name,
+			       "out_GPR_READ_"+toString(j)+"_ACK"           );
+	  if (_param->_have_port_ooo_engine_id == true)
+	    _component->port_map(name_component,
+				 "in_GPR_READ_"+toString(j)+"_OOO_ENGINE_ID" , 
+				 _name,
+				 "in_GPR_READ_"+toString(j)+"_OOO_ENGINE_ID");
+	  _component->port_map(name_component,
+			       "out_GPR_READ_"+toString(j)+"_DATA"          , 
+			       _name,
+			       "out_GPR_READ_"+toString(j)+"_DATA");
+	  _component->port_map(name_component,
+			       "out_GPR_READ_"+toString(j)+"_DATA_VAL"      , 
+			       _name,
+			       "out_GPR_READ_"+toString(j)+"_DATA_VAL");
+
+	  for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	    {
+	      _component->port_map(name_component ,
+				   "out_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL",
+				   _name+"_gpr_"+toString(i),
+				   "in_READ_"+toString(j)+"_VAL"  );
+	      _component->port_map(name_component,
+				   "in_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK"  ,
+				   _name+"_gpr_"+toString(i),
+				   "out_READ_"+toString(j)+"_ACK" );
+	      _component->port_map(name_component,
+				   "in_GPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_DATA" ,
+				   _name+"_gpr_"+toString(i),
+				   "out_READ_"+toString(j)+"_DATA");
+	      _component->port_map(name_component,
+				   "out_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_VAL"        ,
+				   _name+"_gpr_status_"+toString(i),
+				   "in_READ_"+toString(j)+"_VAL" );
+	      _component->port_map(name_component,
+				   "in_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" ,
+				   _name+"_gpr_status_"+toString(i),
+				   "out_READ_"+toString(j)+"_ACK");
+	      _component->port_map(name_component,
+				   "in_GPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_DATA_VAL"   ,
+				   _name+"_gpr_status_"+toString(i),
+				   "out_READ_"+toString(j)+"_DATA");
+	    }
+	}
+
+      for (uint32_t j=0; j<_param->_nb_gpr_write; j++)
+	{
+	  _component->port_map(name_component,
+			       "in_GPR_WRITE_"+toString(j)+"_VAL",
+			       _name, 
+			       "in_GPR_WRITE_"+toString(j)+"_VAL"           );
+	  _component->port_map(name_component,
+			       "out_GPR_WRITE_"+toString(j)+"_ACK", 
+			       _name,
+			       "out_GPR_WRITE_"+toString(j)+"_ACK"           );
+	  if (_param->_have_port_ooo_engine_id == true)
+	    _component->port_map(name_component,
+				 "in_GPR_WRITE_"+toString(j)+"_OOO_ENGINE_ID", 
+				 _name,
+				 "in_GPR_WRITE_"+toString(j)+"_OOO_ENGINE_ID" );
+	  
+	  for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	    {
+	      _component->port_map(name_component,
+				   "out_GPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL"  ,
+				   _name+"_gpr_"+toString(i),
+				   "in_WRITE_"+toString(j)+"_VAL" );
+	      _component->port_map(name_component,
+				   "in_GPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK"  ,
+				   _name+"_gpr_"+toString(i),
+				   "out_WRITE_"+toString(j)+"_ACK" );
+	      _component->port_map(name_component,
+				   "out_GPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_VAL"        ,
+				   _name+"_gpr_status_"+toString(i),
+				   "in_WRITE_"+toString(j)+"_VAL" );
+	      _component->port_map(name_component,
+				   "in_GPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_ACK"        ,
+				   _name+"_gpr_status_"+toString(i),
+				   "out_WRITE_"+toString(j)+"_ACK" );
+	    }
+	}
+      
+      for (uint32_t j=0; j<_param->_nb_spr_read; j++)
+	{
+	  _component->port_map(name_component,
+			       "in_SPR_READ_"+toString(j)+"_VAL",
+			       _name, 
+			       "in_SPR_READ_"+toString(j)+"_VAL");
+	  _component->port_map(name_component,
+			       "out_SPR_READ_"+toString(j)+"_ACK",
+			       _name,
+			       "out_SPR_READ_"+toString(j)+"_ACK"           );
+	  if (_param->_have_port_ooo_engine_id == true)
+	    _component->port_map(name_component,
+				 "in_SPR_READ_"+toString(j)+"_OOO_ENGINE_ID" , 
+				 _name,
+				 "in_SPR_READ_"+toString(j)+"_OOO_ENGINE_ID");
+	  _component->port_map(name_component,
+			       "out_SPR_READ_"+toString(j)+"_DATA"          , 
+			       _name,
+			       "out_SPR_READ_"+toString(j)+"_DATA");
+	  _component->port_map(name_component,
+			       "out_SPR_READ_"+toString(j)+"_DATA_VAL"      , 
+			       _name,
+			       "out_SPR_READ_"+toString(j)+"_DATA_VAL");
+
+	  for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	    {
+	      _component->port_map(name_component ,
+				   "out_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL",
+				   _name+"_spr_"+toString(i),
+				   "in_READ_"+toString(j)+"_VAL"  );
+	      _component->port_map(name_component,
+				   "in_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK"  ,
+				   _name+"_spr_"+toString(i),
+				   "out_READ_"+toString(j)+"_ACK" );
+	      _component->port_map(name_component,
+				   "in_SPR_READ_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_DATA" ,
+				   _name+"_spr_"+toString(i),
+				   "out_READ_"+toString(j)+"_DATA");
+	      _component->port_map(name_component,
+				   "out_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_VAL"        ,
+				   _name+"_spr_status_"+toString(i),
+				   "in_READ_"+toString(j)+"_VAL" );
+	      _component->port_map(name_component,
+				   "in_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_ACK" ,
+				   _name+"_spr_status_"+toString(i),
+				   "out_READ_"+toString(j)+"_ACK");
+	      _component->port_map(name_component,
+				   "in_SPR_READ_STATUS_"+toString(i)+"_"+toString(j)+"_DATA_VAL"   ,
+				   _name+"_spr_status_"+toString(i),
+				   "out_READ_"+toString(j)+"_DATA");
+	    }
+	}
+
+      for (uint32_t j=0; j<_param->_nb_spr_write; j++)
+	{
+	  _component->port_map(name_component,
+			       "in_SPR_WRITE_"+toString(j)+"_VAL",
+			       _name, 
+			       "in_SPR_WRITE_"+toString(j)+"_VAL"           );
+	  _component->port_map(name_component,
+			       "out_SPR_WRITE_"+toString(j)+"_ACK", 
+			       _name,
+			       "out_SPR_WRITE_"+toString(j)+"_ACK"           );
+	  if (_param->_have_port_ooo_engine_id == true)
+	    _component->port_map(name_component,
+				 "in_SPR_WRITE_"+toString(j)+"_OOO_ENGINE_ID", 
+				 _name,
+				 "in_SPR_WRITE_"+toString(j)+"_OOO_ENGINE_ID" );
+	  
+	  for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	    {
+	      _component->port_map(name_component,
+				   "out_SPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_VAL"  ,
+				   _name+"_spr_"+toString(i),
+				   "in_WRITE_"+toString(j)+"_VAL" );
+	      _component->port_map(name_component,
+				   "in_SPR_WRITE_REGISTERFILE_"+toString(i)+"_"+toString(j)+"_ACK"  ,
+				   _name+"_spr_"+toString(i),
+				   "out_WRITE_"+toString(j)+"_ACK" );
+	      _component->port_map(name_component,
+				   "out_SPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_VAL"        ,
+				   _name+"_spr_status_"+toString(i),
+				   "in_WRITE_"+toString(j)+"_VAL" );
+	      _component->port_map(name_component,
+				   "in_SPR_WRITE_STATUS_"+toString(i)+"_"+toString(j)+"_ACK"        ,
+				   _name+"_spr_status_"+toString(i),
+				   "out_WRITE_"+toString(j)+"_ACK" );
+	    }
+	}
+
+      for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	{
+	  uint32_t x     =_param->_nb_inst_insert_rob [i];
+	  uint32_t gpr_j = _param->_nb_gpr_write;
+	  uint32_t spr_j = _param->_nb_spr_write;
+
+	  for (uint32_t j=0; j<x; j++)
+	    {
+	      _component->port_map(name_component,
+				   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_VAL",
+				   _name,
+				   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_VAL");
+	      _component->port_map(name_component,
+				   "out_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_ACK",
+				   _name,
+				   "out_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_ACK");
+	      _component->port_map(name_component,
+				   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_RD_USE",
+				   _name,
+				   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_RD_USE");
+	      _component->port_map(name_component,
+				   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_RE_USE",
+				   _name,
+				   "in_INSERT_ROB_"+toString(i)+"_"+toString(j)+"_RE_USE");
+	      _component->port_map(name_component,
+				   "out_INSERT_ROB_GPR_STATUS_"+toString(i)+"_"+toString(j)+"_VAL",
+				   _name+"_gpr_status_"+toString(i),
+				   "in_WRITE_"+toString(gpr_j)+"_VAL");
+	      _component->port_map(name_component,
+				   "in_INSERT_ROB_GPR_STATUS_"+toString(i)+"_"+toString(j)+"_ACK",
+				   _name+"_gpr_status_"+toString(i),
+				   "out_WRITE_"+toString(gpr_j++)+"_ACK");
+	      _component->port_map(name_component,
+				   "out_INSERT_ROB_SPR_STATUS_"+toString(i)+"_"+toString(j)+"_VAL",
+				   _name+"_spr_status_"+toString(i),
+				   "in_WRITE_"+toString(spr_j)+"_VAL");
+	      _component->port_map(name_component,
+				   "in_INSERT_ROB_SPR_STATUS_"+toString(i)+"_"+toString(j)+"_ACK",
+				   _name+"_spr_status_"+toString(i),
+				   "out_WRITE_"+toString(spr_j++)+"_ACK");
+	    }
+	}
+
+      for (uint32_t i=0; i<_param->_nb_ooo_engine; i++)
+	{
+	  uint32_t x     =_param->_nb_inst_retire_rob [i];
+	  uint32_t gpr_j = _param->_nb_gpr_write + _param->_nb_inst_insert_rob [i];
+	  uint32_t spr_j = _param->_nb_spr_write + _param->_nb_inst_insert_rob [i];
+
+	  for (uint32_t j=0; j<x; j++)
+	    {
+	      _component->port_map(name_component,
+				   "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_VAL",
+				   _name,
+				   "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_VAL");
+	      _component->port_map(name_component,
+				   "out_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_ACK",
+				   _name,
+				   "out_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_ACK");
+	      _component->port_map(name_component,
+				   "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RD_OLD_USE",
+				   _name,
+				   "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RD_OLD_USE");
+	      _component->port_map(name_component,
+				   "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RD_NEW_USE",
+				   _name,
+				   "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RD_NEW_USE");
+	      _component->port_map(name_component,
+				   "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RE_OLD_USE",
+				   _name, 
+				   "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RE_OLD_USE");
+	      _component->port_map(name_component,
+				   "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RE_NEW_USE",
+				   _name,
+				   "in_RETIRE_ROB_"+toString(i)+"_"+toString(j)+"_RE_NEW_USE");
+	    
+	      _component->port_map(name_component,
+				   "out_RETIRE_ROB_GPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_VAL",
+				   _name+"_gpr_status_"+toString(i),
+				   "in_WRITE_"+toString(gpr_j)+"_VAL");
+	      _component->port_map(name_component,
+				   "in_RETIRE_ROB_GPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK",
+				   _name+"_gpr_status_"+toString(i),
+				   "out_WRITE_"+toString(gpr_j++)+"_ACK");
+	      _component->port_map(name_component,
+				   "out_RETIRE_ROB_GPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_VAL",
+				   _name+"_gpr_status_"+toString(i),
+				   "in_WRITE_"+toString(gpr_j)+"_VAL");
+	      _component->port_map(name_component,
+				   "in_RETIRE_ROB_GPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK",
+				   _name+"_gpr_status_"+toString(i),
+				   "out_WRITE_"+toString(gpr_j++)+"_ACK");
+	      _component->port_map(name_component,
+				   "out_RETIRE_ROB_SPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_VAL",
+				   _name+"_spr_status_"+toString(i),
+				   "in_WRITE_"+toString(spr_j)+"_VAL");
+	      _component->port_map(name_component,
+				   "in_RETIRE_ROB_SPR_STATUS_OLD_"+toString(i)+"_"+toString(j)+"_ACK",
+				   _name+"_spr_status_"+toString(i),
+				   "out_WRITE_"+toString(spr_j++)+"_ACK");
+	      _component->port_map(name_component,
+				   "out_RETIRE_ROB_SPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_VAL",
+				   _name+"_spr_status_"+toString(i),
+				   "in_WRITE_"+toString(spr_j)+"_VAL");
+	      _component->port_map(name_component,
+				   "in_RETIRE_ROB_SPR_STATUS_NEW_"+toString(i)+"_"+toString(j)+"_ACK",
+				   _name+"_spr_status_"+toString(i),
+				   "out_WRITE_"+toString(spr_j++)+"_ACK");
+	    }
+	}
+    }// glue
+
+//     _component->test_map ();
+
+#ifdef POSITION
+    _component->generate_file();
+#endif
+
+//     cout << *_component << endl;
+
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_deallocation.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_deallocation.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_deallocation.cpp	(revision 60)
@@ -0,0 +1,91 @@
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::deallocation"
+  void Register_unit::deallocation (void)
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+    delete     in_CLOCK ;
+//#endif
+    delete     in_NRESET;
+
+    delete []  in_GPR_READ_VAL                 ;
+    delete [] out_GPR_READ_ACK                 ;
+    if (_param->_have_port_ooo_engine_id == true)
+      delete []  in_GPR_READ_OOO_ENGINE_ID       ;
+    delete []  in_GPR_READ_NUM_REG             ;
+    delete [] out_GPR_READ_DATA                ;
+    delete [] out_GPR_READ_DATA_VAL            ;
+    delete []  in_GPR_WRITE_VAL                ;
+    delete [] out_GPR_WRITE_ACK                ;
+    if (_param->_have_port_ooo_engine_id == true)
+      delete []  in_GPR_WRITE_OOO_ENGINE_ID      ;
+    delete []  in_GPR_WRITE_NUM_REG            ;
+    delete []  in_GPR_WRITE_DATA               ;
+    delete []  in_SPR_READ_VAL                 ;
+    delete [] out_SPR_READ_ACK                 ;
+    if (_param->_have_port_ooo_engine_id == true)
+      delete []  in_SPR_READ_OOO_ENGINE_ID       ;
+    delete []  in_SPR_READ_NUM_REG             ;
+    delete [] out_SPR_READ_DATA                ;
+    delete [] out_SPR_READ_DATA_VAL            ;
+    delete []  in_SPR_WRITE_VAL                ;
+    delete [] out_SPR_WRITE_ACK                ;
+    if (_param->_have_port_ooo_engine_id == true)
+      delete []  in_SPR_WRITE_OOO_ENGINE_ID      ;
+    delete []  in_SPR_WRITE_NUM_REG            ;
+    delete []  in_SPR_WRITE_DATA               ;
+    delete []  in_INSERT_ROB_VAL               ;
+    delete [] out_INSERT_ROB_ACK               ;
+    delete []  in_INSERT_ROB_RD_USE            ;
+    delete []  in_INSERT_ROB_RD_NUM_REG        ;
+    delete []  in_INSERT_ROB_RE_USE            ;
+    delete []  in_INSERT_ROB_RE_NUM_REG        ;
+    delete []  in_RETIRE_ROB_VAL               ;
+    delete [] out_RETIRE_ROB_ACK               ;
+    delete []  in_RETIRE_ROB_RD_OLD_USE        ;
+    delete []  in_RETIRE_ROB_RD_OLD_NUM_REG    ;
+    delete []  in_RETIRE_ROB_RD_NEW_USE        ;
+    delete []  in_RETIRE_ROB_RD_NEW_NUM_REG    ;
+    delete []  in_RETIRE_ROB_RE_OLD_USE        ; 
+    delete []  in_RETIRE_ROB_RE_OLD_NUM_REG    ;
+    delete []  in_RETIRE_ROB_RE_NEW_USE        ;
+    delete []  in_RETIRE_ROB_RE_NEW_NUM_REG    ;
+
+    // ~~~~~[ Component ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
+
+    delete [] component_gpr       ;
+    delete [] component_gpr_status;
+    delete [] component_spr       ;
+    delete [] component_spr_status;
+    delete    component_glue      ; 
+
+    delete _component;
+
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_statistics.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_statistics.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_statistics.cpp	(revision 60)
@@ -0,0 +1,39 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::statistics"
+  string Register_unit::statistics (uint32_t depth)
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+    string txt = _stat->print(depth);
+    
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+
+    return txt;
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_transition.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_transition.cpp	(revision 60)
@@ -0,0 +1,45 @@
+#ifdef SYSTEMC
+//#if defined(STATISTICS) or defined(VHDL_TESTBENCH)
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::transition"
+  void Register_unit::transition (void)
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+#ifdef STATISTICS
+    _stat->add();
+#endif    
+
+#ifdef VHDL_TESTBENCH
+    vhdl_testbench_transition ();
+#endif
+
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
+//#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_vhdl.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_vhdl.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_vhdl.cpp	(revision 60)
@@ -0,0 +1,48 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h"
+#include "Behavioural/include/Vhdl.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::vhdl"
+  void Register_unit::vhdl (void)
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+    Vhdl * vhdl = new Vhdl (_name);
+
+    _interfaces->set_port(vhdl);
+    _component->vhdl_instance(vhdl);
+
+    vhdl_declaration (vhdl);
+    vhdl_body        (vhdl);
+
+    vhdl->generate_file();
+
+    delete vhdl;
+
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_vhdl_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_vhdl_body.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_vhdl_body.cpp	(revision 60)
@@ -0,0 +1,35 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::vhdl_body"
+  void Register_unit::vhdl_body (Vhdl * & vhdl)
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+    vhdl->set_body ("");
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_vhdl_declaration.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_vhdl_declaration.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_vhdl_declaration.cpp	(revision 60)
@@ -0,0 +1,34 @@
+#ifdef VHDL
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h"
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::vhdl_declaration"
+  void Register_unit::vhdl_declaration (Vhdl * & vhdl)
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_vhdl_testbench_transition.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_vhdl_testbench_transition.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Register_unit_vhdl_testbench_transition.cpp	(revision 60)
@@ -0,0 +1,40 @@
+#ifdef VHDL_TESTBENCH
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Register_unit.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::vhdl_testbench_transition"
+  void Register_unit::vhdl_testbench_transition ()
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+    // Evaluation before read the ouput signal
+//     sc_start(0);
+
+    _interfaces->testbench();
+
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Statistics.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Statistics.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Statistics.cpp	(revision 60)
@@ -0,0 +1,48 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Statistics.h"
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::Statistics"
+  Statistics::Statistics (string                                        name                       ,
+			  morpheo::behavioural::Parameters_Statistics * parameters_statistics      ,
+			  Parameters                                  * parameters
+			  ) :
+    morpheo::behavioural::Statistics(name                  ,
+				     parameters_statistics ),
+    _parameters(parameters)
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+  
+#undef  FUNCTION
+#define FUNCTION "Register_unit::~Statistics"
+  Statistics::~Statistics () 
+  { 
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Statistics_add.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Statistics_add.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Statistics_add.cpp	(revision 60)
@@ -0,0 +1,37 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Statistics.h"
+
+#include <sstream>
+using namespace std;
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::add"
+  void Statistics::add ()
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Statistics_print.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Statistics_print.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Statistics_print.cpp	(revision 60)
@@ -0,0 +1,61 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Statistics.h"
+
+#include <sstream>
+using namespace std;
+
+namespace morpheo {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::print"
+  string Statistics::print (uint32_t depth)
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+    string        tab = string(depth,'\t');
+    ostringstream msg;
+
+    msg << tab << "<register_unit name=\"" << _name << "\" >" << endl
+        << print_body(depth+1) << endl
+	<< tab << "</register_unit>" << endl;
+    
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+
+    return msg.str();
+  };
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::operator<<"
+  ostream& operator<< (ostream& output_stream ,
+		       morpheo::behavioural::core::multi_execute_loop::execute_loop::register_unit::Statistics & x)
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+    output_stream << x.print(0);
+
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+
+    return output_stream;
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
Index: trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Statistics_print_body.cpp
===================================================================
--- trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Statistics_print_body.cpp	(revision 60)
+++ trunk/IPs/systemC/processor/Morpheo/Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/src/Statistics_print_body.cpp	(revision 60)
@@ -0,0 +1,45 @@
+#ifdef STATISTICS
+/*
+ * $Id$
+ *
+ * [ Description ]
+ * 
+ */
+
+#include "Behavioural/Core/Multi_Execute_loop/Execute_loop/Register_unit/include/Statistics.h"
+
+#include <sstream>
+using namespace std;
+
+namespace morpheo                    {
+namespace behavioural {
+namespace core {
+namespace multi_execute_loop {
+namespace execute_loop {
+namespace register_unit {
+
+
+#undef  FUNCTION
+#define FUNCTION "Register_unit::print_body"
+  string Statistics::print_body (uint32_t depth)
+  {
+    log_printf(FUNC,Register_unit,FUNCTION,"Begin");
+
+    string        tab = string(depth,'\t');
+    ostringstream msg;
+
+    msg << tab << "";
+    
+    log_printf(FUNC,Register_unit,FUNCTION,"End");
+
+    return msg.str();
+  };
+
+}; // end namespace register_unit
+}; // end namespace execute_loop
+}; // end namespace multi_execute_loop
+}; // end namespace core
+
+}; // end namespace behavioural
+}; // end namespace morpheo              
+#endif
